plugins/PostToQzone/Plugin.php
2013-12-06 09:22:36 +08:00

186 lines
5.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* 将文章同时发布到您的Qzone
*
* @package PostToQzone
* @version 1.0 beta
* @author blankyao
* @link http://www.blankyao.cn
*/
include "phpmailer.php";
include "smtp.php";
class PostToQzone_Plugin implements Typecho_Plugin_Interface
{
/**
* activate
*
* @static
* @access public
* @return void
*/
public static function activate()
{
Typecho_Plugin::factory('Widget_Contents_Post_Edit')->insert =
array('PostToQzone_Plugin', 'publish');
if(!extension_loaded("sockets")){
throw new Typecho_Plugin_Exception(_t('对不起, 您的主机不支持socket扩展, 无法正常使用此功能'));
}
return _t('请配置您的qq号码以及密码以便发布文章到Qzone');
}
/**
* deactivate
*
* @static
* @access public
* @return void
*/
public static function deactivate()
{
}
/**
* 插件配置面板
*
* @param Typecho_Widget_Helper_Form $form
* @static
* @access public
* @return void
*/
public static function config(Typecho_Widget_Helper_Form $form)
{
$qq = new Typecho_Widget_Helper_Form_Element_Text('qq', NULL, NULL,
_t('qq号码'), _t('请填写您的qq号码'));
$qq->addRule('isInteger', _t('qq号码必须是纯数字'));
$form->addInput($qq->addRule('required', _t('必须填写一个qq号码')));
$psw = new Typecho_Widget_Helper_Form_Element_Password('psw', NULL, NULL,
_t('qq邮箱密码'), _t('请填写您的qq邮箱密码'));
$form->addInput($psw->addRule('required', _t('必须填写一个qq邮箱密码')));
$title = new Typecho_Widget_Helper_Form_Element_Text('title', NULL, '{post_title}',
_t('标题模板'), _t('请填写您的标题模板'));
$form->addInput($title->addRule('required', _t('必须填写一个标题模板')));
$content = new Typecho_Widget_Helper_Form_Element_Textarea('content', NULL, '{post_content}',
_t('内容模板'), _t('请填写您的内容模板'));
$form->addInput($content->addRule('required', _t('必须填写一个内容模板')));
}
/**
* 个人用户的配置面板
*
* @access public
* @param Typecho_Widget_Helper_Form $form
* @return void
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form){}
/**
* 发送文章到qzone
*
* @param mixed $contents 文章结构体
* @access public
* @return mixed $contents 处理后的文章结构体
*/
public function publish($contents)
{
//todo:增加一个选项如果选择发送的qzone的话再发到qzone
$options = Typecho_Widget::widget('Widget_Options');
$config = $options->plugin('PostToQzone');
$config = postToQzoneDefault($config);
if($config->qq > 1000 && !empty($contents['title']) && !empty($contents['text'])){
$post_content = str_replace('{post_content}', $contents['text'], $config->content);
$post_content = str_replace('{post_title}', $contents['title'], $post_content);
$post_title = str_replace('{post_title}', $contents['title'], $config->title);
$m=new Mailer($config->qq,$config->psw);
$m->Halo($post_title,$post_content);
}
return $contents;
}
}
function postToQzoneDefault($config){
if(strpos($config->title,'{post_title}') === false){
$config->title = '{post_title}';
}
if(strpos($config->content,'{post_content}') === false){
$config->content = '{post_content}';
}
return $config;
}
class Mailer extends PHPMailer
{
var $qq=null;
function Mailer($qq,$psw) {
$this->qq=$qq;
$this->From = "{$qq}@qq.com";
$this->FromName = $qq;
$this->Host = "smtp.qq.com";
$this->Mailer = "smtp";
$this->WordWrap = 75;
$this->CharSet = Typecho_Widget::widget('Widget_Options')->charset;
$this->Encoding = 'base64';
$this->SMTPAuth = true;
$this->IsHTML(true);
$this->Username = $qq;
$this->Password = $psw;
}
function Halo($subject,$body){
$this->AddAddress("{$this->qq}@qzone.qq.com", "{$this->qq}@qzone.qq.com");
$this->Subject = $subject;
$this->Body = $body;
return $this->Send();
}
}
class Crypter
{
var $key;
function Crypter($clave){
$this->key = $clave;
}
function keyED($txt) {
$encrypt_key = md5($this->key);
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++) {
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1);
$ctr++;
}
return $tmp;
}
function encrypt($txt){
srand((double)microtime()*1000000);
$encrypt_key = md5(rand(0,32000));
$ctr=0;
$tmp = "";
for ($i=0;$i<strlen($txt);$i++){
if ($ctr==strlen($encrypt_key)) $ctr=0;
$tmp.= substr($encrypt_key,$ctr,1) .
(substr($txt,$i,1) ^ substr($encrypt_key,$ctr,1));
$ctr++;
}
return base64_encode($this->keyED($tmp));
}
function decrypt($txt) {
$txt = $this->keyED(base64_decode($txt));
$tmp = "";
for ($i=0;$i<strlen($txt);$i++){
$md5 = substr($txt,$i,1);
$i++;
$tmp.= (substr($txt,$i,1) ^ $md5);
}
return $tmp;
}
}