diff --git a/server/cn/home/www/IoTgod-www/usr/plugins/CommentApprove/Plugin.php b/server/cn/home/www/IoTgod-www/usr/plugins/CommentApprove/Plugin.php
deleted file mode 100644
index 51530f4..0000000
--- a/server/cn/home/www/IoTgod-www/usr/plugins/CommentApprove/Plugin.php
+++ /dev/null
@@ -1,153 +0,0 @@
- '使用自带样式',
- '2' => '使用自填样式'),
- '1', _t('角色样式选择'), _t('如选择自填样式,则在角色名称那边带入样式') );
- $form->addInput($type);
- //角色1
- $name_1 = new Typecho_Widget_Helper_Form_Element_Text('name_1',
- NULL,'博主',_t('角色1'),_t('填入角色1的名称'));
- $form->addInput($name_1);
- $color_1 = new Typecho_Widget_Helper_Form_Element_Text('color_1',
- NULL,'#1ba1e2',_t('角色1样式颜色'),_t('填入颜色代码,只有使用自带样式时才生效'));
- $form->addInput($color_1);
- $email_1 = new Typecho_Widget_Helper_Form_Element_Textarea('email_1',
- NULL,'',_t('邮箱地址列表1'),_t('每个邮箱地址之间以英文半角逗号隔开'));
- $form->addInput($email_1);
-
- //角色2
- $name_2 = new Typecho_Widget_Helper_Form_Element_Text('name_2',
- NULL,'好友',_t('角色2'),_t('填入角色2的名称'));
- $form->addInput($name_2);
- $color_2 = new Typecho_Widget_Helper_Form_Element_Text('color_2',
- NULL,'#1ba1e2',_t('角色2样式颜色'),_t('填入颜色代码,只有使用自带样式时才生效'));
- $form->addInput($color_2);
- $email_2 = new Typecho_Widget_Helper_Form_Element_Textarea('email_2',
- NULL,'',_t('邮箱地址列表2'),_t('每个邮箱地址之间以英文半角逗号隔开'));
- $form->addInput($email_2);
-
- //角色3
- $name_3 = new Typecho_Widget_Helper_Form_Element_Text('name_3',
- NULL,'',_t('角色3'),_t('填入角色3的名称'));
- $form->addInput($name_3);
- $color_3 = new Typecho_Widget_Helper_Form_Element_Text('color_3',
- NULL,'#1ba1e2',_t('角色3样式颜色'),_t('填入颜色代码,只有使用自带样式时才生效'));
- $form->addInput($color_3);
- $email_3 = new Typecho_Widget_Helper_Form_Element_Textarea('email_3',
- NULL,'',_t('邮箱地址列表3'),_t('每个邮箱地址之间以英文半角逗号隔开'));
- $form->addInput($email_3);
- }
-
- /**
- * 个人用户的配置面板
- *
- * @access public
- * @param Typecho_Widget_Helper_Form $form
- * @return void
- */
- public static function personalConfig(Typecho_Widget_Helper_Form $form){}
-
- /**
- * 插件实现方法
- *
- * @access public
- * @param str $email 评论者邮箱地址
- * @return void
- */
- public static function identify($email = NULL)
- {
- if (empty($email)){
- return;
- }
- $status = 0;
- $type = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->type;
- //判断角色1
- $email_1 = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->email_1;
- if (!empty($email_1)){
- $email_1 = explode(',',$email_1);
- if (in_array($email, $email_1)) {
- $status = 1;
- }
- }
- //判断角色2
- $email_2 = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->email_2;
- if (!empty($email_2)){
- $email_2 = explode(',',$email_2);
- if (in_array($email, $email_2)) {
- $status = 2;
- }
- }
- //判断角色3
- $email_3 = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->email_3;
- if (!empty($email_3)){
- $email_2 = explode(',',$email_3);
- if (in_array($email, $email_3)) {
- $status = 3;
- }
- }
- //角色名
- switch ($status){
- case 0: $name="";break;
- case 1: $name = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->name_1;break;
- case 2: $name = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->name_2;break;
- case 3: $name = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->name_3;break;
- }
- if (!empty($name)){
- if ($type == 1){
- switch ($status){
- case 0: $color = "";break;
- case 1: $color = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->color_1;break;
- case 2: $color = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->color_2;break;
- case 3: $color = Typecho_Widget::widget('Widget_Options')->plugin('CommentApprove')->color_3;break;
- }
- $str = '';
- echo $str;
- }else{
- echo $name;
- }
- }else{
- return;
- }
- }
-}
\ No newline at end of file
diff --git a/server/cn/home/www/IoTgod-www/usr/plugins/GravatarCache.php b/server/cn/home/www/IoTgod-www/usr/plugins/GravatarCache.php
new file mode 100644
index 0000000..a138e9d
--- /dev/null
+++ b/server/cn/home/www/IoTgod-www/usr/plugins/GravatarCache.php
@@ -0,0 +1,198 @@
+gravatar = array('GravatarCache', 'getGravatar');
+ }
+ /**
+ * 禁用插件方法,如果禁用失败,直接抛出异常
+ *
+ * @static
+ * @access public
+ * @return void
+ * @throws Typecho_Plugin_Exception
+ */
+ public static function deactivate()
+ {
+ self::deleteFile();
+ }
+ /**
+ * 获取插件配置面板
+ *
+ * @access public
+ * @param Typecho_Widget_Helper_Form $form 配置面板
+ * @return void
+ */
+ public static function config(Typecho_Widget_Helper_Form $form)
+ {
+ $timeCache = new Typecho_Widget_Helper_Form_Element_Text('timeCache', NULL, '1209600', _t('缓存时间'),_t('缓存时间,默认 14天 = 1209600 秒'));
+ $timeCache->input->setAttribute('class', 'mini');
+ $form->addInput($timeCache->addRule('required', _t('必须填写缓存时间'))->addRule('isInteger', _t('缓存时间必须是整数')));
+ $dir = new Typecho_Widget_Helper_Form_Element_Text('dir', null, '/usr/uploads/avatarCache/', _t('存放路径'), _t('缓存头像存放的路径,请确保第一个目录可写!'));
+ $form->addInput($dir->addRule('required', _t('必须填写缓存目录')));
+ $delCache= new Typecho_Widget_Helper_Form_Element_Radio( 'delCache', array( 'delY' => '是', 'delN' => '否' ), 'delY', '删除缓存',_t('禁用插件时是否删除缓存头像和目录') );
+ $form->addInput($delCache);
+ return _t('请到插件配置里设置相应选项');
+ }
+ /**
+ * 个人用户的配置面板
+ *
+ * @access public
+ * @param Typecho_Widget_Helper_Form $form
+ * @return void
+ */
+ public static function personalConfig(Typecho_Widget_Helper_Form $form){}
+ /**
+ * 插件实现方法
+ *
+ * @param $size
+ * @param $rating
+ * @param $default
+ * @param $comments
+ */
+ public static function getGravatar($size, $rating, $default, $comments)
+ {
+ $imgUrl = self::getGravatarCache($comments->mail, $comments->request->isSecure(), $size, $rating, $default);
+ echo '';
+ }
+ /**
+ * 外部调用方法
+ *
+ * @param $mail
+ * @param bool $isSecure
+ * @param int $size
+ * @param string $rating
+ * @param string $default
+ * @return string
+ * @throws exception
+ */
+ public static function getGravatarCache($mail, $isSecure = false, $size = 32, $rating = 'G', $default = 'mm')
+ {
+ $option = Typecho_Widget::widget('Widget_Options')->plugin('GravatarCache');
+ $siteUrl = Helper::options()->siteUrl;
+ $dir = __TYPECHO_ROOT_DIR__ . DIRECTORY_SEPARATOR;
+ $referer = "http://www.gravatar.com";
+ $path = $option->dir;
+ $path = substr($path, 0, 1) == '/' ? substr($path, 1) : $path;
+ $path = substr($path, -1, 1) != '/' ? $path.'/' : $path;
+ $file = $dir.$path.'default.jpg';
+ $default = empty($default) ? 'mm' : $default;
+ $default = $default == 'mm' ? $default : urlencode($default);
+ if(!self::mkdirs(dirname($file))){
+ throw new exception('GravatarCache 目录创建失败,请检查指定的根目录是否可写' );
+ }
+ /** 如果默认的 default.jpg不存在,则下载 gravatar 默认的头像到本地*/
+ if(!file_exists($file)){
+ $avatar = 'http://www.gravatar.com/avatar/00000000000000000000000000000000?d='.$default.'&s='.$size.'&r='.$rating;
+ if(!self::download($avatar, $referer, $file)) copy($avatar, $file);
+ }
+ $timeCache = $option->timeCache;
+ $defaultMail = empty($mail) ? 'default' : md5( strtolower( $mail ) );
+ $imgUrl = $siteUrl.$path.$defaultMail.'.jpg';
+ $baseFile = $dir.$path.$defaultMail.'.jpg';
+ if(!file_exists($baseFile) || (time() - filemtime($baseFile)) > $timeCache){
+ $host = $isSecure ? 'https://secure.gravatar.com' : 'http://www.gravatar.com';
+ $avatar = $host.'/avatar/'.$defaultMail.'?d='.$default.'&s='.$size.'&r='.$rating;
+ if(!self::download($avatar, $referer, $baseFile)) copy($avatar, $baseFile);
+ if(filesize($baseFile) == 911 && filesize($file) != 911) copy($file, $baseFile);
+ }
+ return $imgUrl;
+ }
+ /**
+ * 生成多级目录
+ *
+ * @param $dir
+ * @return bool
+ */
+ public static function mkdirs($dir)
+ {
+ return is_dir($dir) or (self::mkdirs(dirname($dir)) and mkdir($dir, 0777));
+ }
+ /**
+ * 禁用插件时同时删除缓存头像
+ *
+ * @access public
+ * @return void
+ */
+ public static function deleteFile()
+ {
+ $option = Typecho_Widget::widget('Widget_Options')->plugin('GravatarCache');
+ $path = __TYPECHO_ROOT_DIR__ . DIRECTORY_SEPARATOR. $option->dir;
+ if (substr($path,-1)!='/') {$path.='/';}
+ if( $option->delCache == 'delY' ){
+ foreach (glob( $path. '*.jpg') as $filename) {
+ unlink($filename);
+ }
+ $sysDir = array( 'usr', 'uploads', 'themes', 'plugins' );
+ $dirArray = explode("/", $path);
+ array_pop($dirArray);
+ $currentDir = array_pop($dirArray);
+ if(!in_array( $currentDir, $sysDir)) { rmdir($path); }
+ }
+ }
+ /**
+ * 下载头像到本地
+ *
+ * @param $url
+ * @param $referer
+ * @param $imagePath
+ * @return bool
+ */
+ public static function download( $url, $referer, $imagePath )
+ {
+ $fpLocal = @fopen( $imagePath, 'w' );
+ if( !$fpLocal ) {
+ return false;
+ }
+ if( is_callable('curl_init') ) {
+ $ch = curl_init();
+ curl_setopt( $ch, CURLOPT_URL, $url );
+ curl_setopt( $ch, CURLOPT_REFERER, $referer );
+ curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 10 );
+ curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, 1 );
+ curl_setopt( $ch, CURLOPT_HEADER, 0 );
+ curl_setopt( $ch, CURLOPT_FILE, $fpLocal );
+ if( !curl_exec($ch) ) {
+ fclose( $fpLocal );
+ curl_close( $ch );
+ return false;
+ }
+ curl_close( $ch );
+ }else {
+ $opts = array(
+ 'http' => array(
+ 'method' => "GET",
+ 'header' => "Referer: $referer\r\n"
+ )
+ );
+ $context = stream_context_create( $opts );
+ $fpRemote = @fopen( $url, 'r', false, $context );
+ if( !$fpRemote ) {
+ fclose( $fpLocal );
+ return false;
+ }
+ while( !feof( $fpRemote ) ) {
+ fwrite( $fpLocal, fread($fpRemote, 8192) );
+ }
+ fclose( $fpRemote );
+ }
+ fclose( $fpLocal );
+ return true;
+ }
+}
\ No newline at end of file