mirror of
https://github.com/typecho/plugins.git
synced 2024-12-21 20:40:08 +08:00
186 lines
5.1 KiB
PHP
186 lines
5.1 KiB
PHP
<?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;
|
||
}
|
||
}
|