diff --git a/Plugin.php b/Plugin.php index e8fbd0e..3064315 100644 --- a/Plugin.php +++ b/Plugin.php @@ -2,16 +2,16 @@ if (!defined('__TYPECHO_ROOT_DIR__')) exit; /** * 文章部分加密 - * + * * @package PartiallyPassword * @author wuxianucw - * @version 3.0.0 + * @version 3.1.0 * @link https://ucw.moe */ class PartiallyPassword_Plugin implements Typecho_Plugin_Interface { /** * 激活插件 - * + * * @access public * @return void * @throws Typecho_Plugin_Exception @@ -23,20 +23,20 @@ public static function activate() { Typecho_Plugin::factory('Widget_Archive')->header = array('PartiallyPassword_Plugin', 'header'); Typecho_Plugin::factory('Widget_Archive')->footer = array('PartiallyPassword_Plugin', 'footer'); } - + /** * 禁用插件 - * + * * @static * @access public * @return void * @throws Typecho_Plugin_Exception */ public static function deactivate() {} - + /** * 获取插件配置面板 - * + * * @access public * @param Typecho_Widget_Helper_Form $form 配置面板 * @return void @@ -51,6 +51,17 @@ public static function config(Typecho_Widget_Helper_Form $form) { '若开启,将对每个密码请求进行 Referer 检查。' )); + /** 额外 Markdown 标记 */ + $form->addInput(new Typecho_Widget_Helper_Form_Element_Select( + 'extraMdToken', + array(0 => '开启', 1 => '关闭'), + 0, + _t('额外 Markdown 标记'), + '若开启,对于 Markdown 格式的文章,将在每个加密块首尾插入 !!! 标记。本配置为兼容性配置,' . + '对于 Typecho 1.1 默认的 HyperDown 解析器,需要保持开启以确保 HTML 生效。如果您在使用过程中发现加密块' . + '前后有多余的 !!! 标记,请尝试将本配置项设置为关闭。' + )); + /** 自定义页头 HTML */ $default = << @@ -100,19 +111,19 @@ public static function config(Typecho_Widget_Helper_Form $form) { TEXT; $form->addInput(new Typecho_Widget_Helper_Form_Element_Textarea('placeholder', NULL, $default, _t('密码区域 HTML'), $tips)); } - + /** * 个人用户的配置面板 - * + * * @access public * @param Typecho_Widget_Helper_Form $form * @return void */ public static function personalConfig(Typecho_Widget_Helper_Form $form) {} - + /** * 自定义输出header - * + * * @access public * @param string $header * @param Widget_Archive $archive @@ -125,7 +136,7 @@ public static function header($header,Widget_Archive $archive) { /** * 自定义输出footer - * + * * @access public * @param Widget_Archive $archive * @return void @@ -137,7 +148,7 @@ public static function footer(Widget_Archive $archive) { /** * 取得请求发送的密码 - * + * * @access private * @param mixed $cid * @param mixed $pid @@ -155,10 +166,10 @@ private static function getRequestPassword($cid, $pid, $currentCid = -1) { } return Typecho_Cookie::get("partiallyPassword_{$cid}_{$pid}", ''); } - + /** * 插件实现方法 - * + * * @access public * @param array $value * @param Widget_Abstract_Contents $contents @@ -182,13 +193,15 @@ public static function render($value, Widget_Abstract_Contents $contents) { @$pwds = json_decode($fields->pp_passwords, true); if (!is_array($pwds)) $pwds = array(); array_map('strval', $pwds); - @$placeholder = Helper::options()->plugin('PartiallyPassword')->placeholder; + $options = Helper::options()->plugin('PartiallyPassword'); + $placeholder = isset($options->placeholder) ? $options->placeholder : ''; + $extraMdToken = isset($options->extraMdToken) ? $options->extraMdToken : 0; if (!$placeholder) $placeholder = '
请配置密码区域 HTML!
'; - if ($value['isMarkdown']) $placeholder = "\n!!!\n{$placeholder}\n!!!\n"; + if ($value['isMarkdown'] && $extraMdToken === 0) $placeholder = "\n!!!\n{$placeholder}\n!!!\n"; $hasher = new PasswordHash(8, true); $value['text'] = preg_replace_callback( '/' . self::getShortcodeRegex(array('ppblock', 'ppswitch')) . '/', - function($matches) use ($contents, $value, $pwds, $placeholder, $hasher) { + function($matches) use ($contents, $value, $pwds, $placeholder, $extraMdToken, $hasher) { static $id = -1; if ($matches[1] == '[' && $matches[6] == ']') return substr($matches[0], 1, -1); // 不解析类似 [[ppblock]] 双重括号的代码 $id++; @@ -238,7 +251,7 @@ function($matches) use ($pwds, $input, $hasher, &$succ) { if (isset($pwds['fallback'])) $pwd_idx = 'fallback'; else { $err = "
错误:id = {$id} 的加密块未设置密码!
"; - if ($value['isMarkdown']) $err = "\n!!!\n{$err}\n!!!\n"; + if ($value['isMarkdown'] && $extraMdToken === 0) $err = "\n!!!\n{$err}\n!!!\n"; return $err; } } @@ -260,7 +273,7 @@ function($matches) use ($pwds, $input, $hasher, &$succ) { /** * 插件自定义字段 - * + * * @access public * @param mixed $layout * @return void @@ -284,7 +297,7 @@ public static function pluginFields($layout) { /** * 处理密码提交 - * + * * @access public * @param Widget_Archive $archive * @param Typecho_Db_Query $select @@ -306,7 +319,7 @@ public static function handleSubmit(Widget_Archive $archive, Typecho_Db_Query $s /** * 获取匹配短代码的正则表达式 - * + * * @access protected * @param string $tagnames * @return string @@ -351,7 +364,7 @@ protected static function getShortcodeRegex($tagnames) { /** * 获取短代码属性数组 - * + * * @access protected * @param $text * @return array|string @@ -393,7 +406,7 @@ protected static function shortcodeParseAtts($text) { /** * 获取短代码属性正则表达式 - * + * * @access private * @return string * @link https://github.com/WordPress/WordPress/blob/master/wp-includes/shortcodes.php