function gravatar_url($mail, $size, $echo = true) { $rating = Helper::options()->commentsAvatarRating; $Request = new Typecho_Request(); $default = null; $url = Typecho_Common::gravatarUrl($mail, $size, $rating, $default, $Request->isSecure()); if ($echo) { echo $url; } else { return $url; } }
public function __construct() { $this->db = Typecho_Db::get(); $this->prefix = $this->db->getPrefix(); $this->table = $this->prefix . 'access'; $this->config = Typecho_Widget::widget('Widget_Options')->plugin('Access'); $this->request = Typecho_Request::getInstance(); $this->pageSize = $this->config->pageSize; $this->isDrop = $this->config->isDrop; if ($this->pageSize == null || $this->isDrop == null) { throw new Typecho_Plugin_Exception('请先设置插件!'); } switch ($this->request->get('action')) { case 'logs': default: $this->action = 'logs'; $this->title = '访问日志'; $this->parseLogs(); break; case 'overview': $this->action = 'overview'; $this->title = '访问概览'; $this->parseOverview(); break; } }
private static function checkIP() { $flag = false; $request = new Typecho_Request(); $ip = trim($request->getIp()); $iptable = BlockIP_Plugin::getAllBlockIP(); if ($iptable) { foreach ($iptable as $value) { if (preg_match("{$value}", $ip)) { $flag = true; break; } } } return $flag; }
public static function start() { $config = Typecho_Widget::widget('Widget_Options')->plugin('Access'); $request = new Typecho_Request(); $ip = $request->getIp(); $url = $_SERVER['REQUEST_URI']; if ($ip == null) { $ip = 'UnKnow'; } $options = Typecho_Widget::widget('Widget_Options'); $timeStamp = $options->gmtTime; $offset = $options->timezone - $options->serverTimezone; $gtime = $timeStamp + $offset; $db = Typecho_Db::get(); $rows = array('ua' => $_SERVER['HTTP_USER_AGENT'], 'url' => $url, 'ip' => $ip, 'date' => $gtime); $db->query($db->insert('table.access')->rows($rows)); }
/** * 获取插件配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form 配置面板 * @return void */ public static function config(Typecho_Widget_Helper_Form $form) { $config_file = dirname(__FILE__) . '/config.xml'; //config.xml的绝对地址 $xml = simplexml_load_file($config_file); $tables = new Typecho_Widget_Helper_Form_Element_Text('tables', null, (string) $xml->tables, _t('需要备份的表'), _t('键入表名,用“,”隔开')); $form->addInput($tables); $circle = new Typecho_Widget_Helper_Form_Element_Text('circle', null, (string) $xml->circle, _t('更新周期(天)')); $form->addInput($circle->addRule('isInteger', _t('更新周期必须是纯数字'))); $ToMail = new Typecho_Widget_Helper_Form_Element_Checkbox('tomail', array('tomail' => _t('发送备份文件至邮箱')), $xml->tomail ? explode(',', (string) $xml->tomail) : null, null, _t('<strong>重要:如果选择此项,请认真填写以下表单</strong>')); $form->addInput($ToMail); $subject = new Typecho_Widget_Helper_Form_Element_Text('subject', null, (string) $xml->subject, _t('自定义邮件标题'), _t('格式:20100902-XXX-数据库备份文件(不填则XXX默认为博客标题)')); $form->addInput($subject); $mode = new Typecho_Widget_Helper_Form_Element_Radio('mode', array('smtp' => 'smtp', 'mail' => 'mail()', 'sendmail' => 'sendmail()'), (string) $xml->mode, '发信方式'); $form->addInput($mode); $host = new Typecho_Widget_Helper_Form_Element_Text('host', NULL, (string) $xml->host, _t('SMTP地址'), _t('请填写 SMTP 服务器地址')); $form->addInput($host); $port = new Typecho_Widget_Helper_Form_Element_Text('port', NULL, (string) $xml->port, _t('SMTP端口'), _t('SMTP服务端口,一般为25;gmail和qq的465。')); $port->input->setAttribute('class', 'mini'); $form->addInput($port->addRule('isInteger', _t('端口号必须是纯数字'))); $user = new Typecho_Widget_Helper_Form_Element_Text('user', NULL, (string) $xml->user, _t('SMTP用户'), _t('SMTP服务验证用户名,一般为邮箱名如:youname@domain.com')); $form->addInput($user); $pass = new Typecho_Widget_Helper_Form_Element_Password('pass', NULL, NULL, _t('SMTP密码')); $form->addInput($pass); $validate = new Typecho_Widget_Helper_Form_Element_Checkbox('validate', array('validate' => '服务器需要验证', 'ssl' => 'ssl加密'), $xml->validate ? explode(',', (string) $xml->validate) : null, 'SMTP验证'); $form->addInput($validate); $mail = new Typecho_Widget_Helper_Form_Element_Text('mail', NULL, (string) $xml->mail, _t('接收邮箱'), _t('接收邮件用的信箱,如为空则使用博客创建者个人设置中的邮箱!')); $form->addInput($mail->addRule('email', _t('请填写正确的邮箱!'))); $request = Typecho_Request::getInstance(); if ($request->isPost()) { /** * 更新配置文件 */ $xml->tables = $request->get('tables'); $xml->circle = $request->get('circle'); if (is_array($request->get('tomail'))) { $xml->tomail = implode(',', $request->get('tomail')); } $xml->subject = $request->get('subject'); $xml->mode = $request->get('mode'); $xml->host = $request->get('host'); $xml->port = $request->get('port'); $xml->user = $request->get('user'); if (is_array($request->get('validate'))) { $xml->validate = implode(',', $request->get('validate')); } $xml->mail = $request->get('mail'); $xml = $xml->asXML(); $fp = fopen($config_file, 'wb'); fwrite($fp, $xml); fclose($fp); } }
public static function setCache() { $request = new Typecho_Request(); $file_name = md5($request->getPathinfo()); // $file_path = self::getPath($request->getPathinfo()); // 写入xcache 默认10分钟 if (!xcache_isset($file_name)) { xcache_set('Typecho_cache_' . $file_name, ob_get_contents(), 600); } // var_dump($request->getPathinfo()); // if (!file_exists($file_path)) { // $handle = @fopen($file_path, 'wb'); // if (@flock($handle, LOCK_EX | LOCK_NB)) { // // xcache_set('tmp', ob_get_contents()); // fwrite($handle, ob_get_contents() . "<!-- This Is A Cache File Created At " . date("Y-m-d H:i:s", time() + 28800) . " Power By http://www.shionco.com -->"); // flock($handle, LOCK_UN); // } // fclose($handle); // } }
/** * 评论过滤器 * * @access public * @param array $comment 评论结构 * @param Typecho_Widget $post 被评论的文章 * @param array $result 返回的结果上下文 * @param string $api api地址 * @return void */ public static function filter($comment, $post, $result, $api = 'comment-check') { $comment = empty($result) ? $comment : $result; $options = Typecho_Widget::widget('Widget_Options'); $hosts = $options->plugin('BlockComment')->hosts; $data = array('blog' => $options->siteUrl, 'user_ip' => $comment['ip'], 'user_agent' => $comment['agent'], 'referrer' => Typecho_Request::getInstance()->getReferer(), 'permalink' => $post->permalink, 'comment_type' => $comment['type'], 'comment_author' => $comment['author'], 'comment_author_email' => $comment['mail'], 'comment_author_url' => $comment['url'], 'comment_content' => $comment['text']); foreach (split("\n", $hosts) as $key => $value) { $value = trim($value); if (strlen($value)) { $regex = sprintf("/^%s/i", preg_quote($value)); // 如果提交者符合指定的 IP,则扔进垃圾评论中 if (preg_match($regex, $data['user_ip'])) { $comment['status'] = 'spam'; break; } } } return $comment; }
<?php header('Content-Type: text/html; charset=UTF-8'); $rootDir = strstr(dirname(__FILE__), 'usr', TRUE); require_once $rootDir . 'config.inc.php'; require_once $rootDir . 'var/Typecho/Common.php'; require_once $rootDir . 'var/Typecho/Request.php'; require_once $rootDir . 'var/Widget/Upload.php'; $fileInfo = Widget_Upload::uploadHandle($_FILES['upload']); if (false === $fileInfo) { echo '上传失败!'; } else { echo sprintf("<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction(1, '%s', '');</script>", Typecho_Request::getInstance()->getUrlPrefix() . $fileInfo['path']); }
/** * 获取单例句柄 * * @access public * @return Typecho_Request */ public static function getInstance() { if (NULL === self::$_instance) { self::$_instance = new Typecho_Request(); } return self::$_instance; }
public function __construct() { $this->response = Typecho_Response::getInstance(); $this->request = Typecho_Request::getInstance(); }
/** * 构建相册表单 * * @access public * @param string $action,$render * @return Typecho_Widget_Helper_Form */ public static function form($action = NULL, $render = '1') { $options = Helper::options(); $settings = $options->plugin('HighSlide'); //图片编辑表单 $form1 = new Typecho_Widget_Helper_Form(Typecho_Common::url('/action/gallery-edit', $options->index), Typecho_Widget_Helper_Form::POST_METHOD); $image = new Typecho_Widget_Helper_Form_Element_Text('image', NULL, "http://", _t('原图地址*')); $form1->addInput($image); $thumb = new Typecho_Widget_Helper_Form_Element_Text('thumb', NULL, "http://", _t('缩略图地址*')); $form1->addInput($thumb); $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('图片名称')); $name->input->setAttribute('class', 'mini'); $form1->addInput($name); $description = new Typecho_Widget_Helper_Form_Element_Textarea('description', NULL, NULL, _t('图片描述'), _t('推荐填写, 用于展示相册中图片的文字说明效果')); $form1->addInput($description); $sort = new Typecho_Widget_Helper_Form_Element_Text('sort', NULL, "1", _t('相册组*'), _t('输入数字, 对应写入[GALLERY-数字]在页面调用')); $sort->input->setAttribute('class', 'w-10'); $form1->addInput($sort); $do = new Typecho_Widget_Helper_Form_Element_Hidden('do'); $form1->addInput($do); $gid = new Typecho_Widget_Helper_Form_Element_Hidden('gid'); $form1->addInput($gid); $submit = new Typecho_Widget_Helper_Form_Element_Submit(); $submit->input->setAttribute('class', 'btn'); $form1->addItem($submit); //相册设置表单 $form2 = new Typecho_Widget_Helper_Form(Typecho_Common::url('/action/gallery-edit?do=sync', $options->index), Typecho_Widget_Helper_Form::POST_METHOD); $gallery = new Typecho_Widget_Helper_Form_Element_Select('gallery', array('gallery-horizontal-strip' => _t('连环画册'), 'gallery-thumbstrip-above' => _t('黑色影夹'), 'gallery-vertical-strip' => _t('时光胶带'), 'gallery-in-box' => _t('纯白记忆'), 'gallery-floating-thumbs' => _t('往事片段'), 'gallery-floating-caption' => _t('沉默注脚'), 'gallery-controls-in-heading' => _t('岁月名片'), 'gallery-in-page' => _t('幻影橱窗(单相册)')), $settings->gallery, _t('相册风格'), _t('套装效果, 不受插件通用设置影响')); $form2->addInput($gallery); $thumboptions = array('fixedwidth' => _t('固定宽度 %s', ' <input type="text" class="w-10 text-s mono" name="fixedwidth" value="' . $settings->fixedwidth . '" />'), 'fixedheight' => _t('固定高度 %s', ' <input type="text" class="w-10 text-s mono" name="fixedheight" value="' . $settings->fixedheight . '" />'), 'fixedratio' => _t('固定比例 %s', ' <input type="text" class="w-10 text-s mono" name="fixedratio" value="' . $settings->fixedratio . '" />')); $thumbfix = new Typecho_Widget_Helper_Form_Element_Radio('thumbfix', $thumboptions, $settings->thumbfix, _t('缩略图规格'), _t('宽高单位px(无需填写), 比例注意使用半角冒号')); $form2->addInput($thumbfix->multiMode()); $storage = new Typecho_Widget_Helper_Form_Element_Radio('storage', array('local' => _t('本地'), 'qiniu' => _t('七牛'), 'upyun' => _t('又拍云'), 'bcs' => _t('百度BCS')), $settings->storage, _t('储存位置')); $form2->addInput($storage); $local = new Typecho_Widget_Helper_Form_Element_Text('local', NULL, $settings->local, _t('本地路径'), _t('确保首层目录可写, 结尾带/号')); $form2->addInput($local); $qiniubucket = new Typecho_Widget_Helper_Form_Element_Text('qiniubucket', NULL, $settings->qiniubucket, _t('空间名称')); $form2->addInput($qiniubucket); $qiniudomain = new Typecho_Widget_Helper_Form_Element_Text('qiniudomain', NULL, $settings->qiniudomain, _t('空间域名')); $form2->addInput($qiniudomain); $qiniuaccesskey = new Typecho_Widget_Helper_Form_Element_Text('qiniuaccesskey', NULL, $settings->qiniuaccesskey, _t('AccessKey')); $form2->addInput($qiniuaccesskey); $qiniusecretkey = new Typecho_Widget_Helper_Form_Element_Text('qiniusecretkey', NULL, $settings->qiniusecretkey, _t('SecretKey')); $form2->addInput($qiniusecretkey); $qiniuprefix = new Typecho_Widget_Helper_Form_Element_Text('qiniuprefix', NULL, $settings->qiniuprefix, _t('路径前缀'), _t('注意开头不要加/号')); $form2->addInput($qiniuprefix); $upyunbucket = new Typecho_Widget_Helper_Form_Element_Text('upyunbucket', NULL, $settings->upyunbucket, _t('空间名称')); $form2->addInput($upyunbucket); $upyundomain = new Typecho_Widget_Helper_Form_Element_Text('upyundomain', NULL, $settings->upyundomain, _t('绑定域名')); $form2->addInput($upyundomain); $upyunuser = new Typecho_Widget_Helper_Form_Element_Text('upyunuser', NULL, $settings->upyunuser, _t('操作员')); $form2->addInput($upyunuser); $upyunpwd = new Typecho_Widget_Helper_Form_Element_Text('upyunpwd', NULL, $settings->upyunpwd, _t('密码')); $form2->addInput($upyunpwd); $upyunkey = new Typecho_Widget_Helper_Form_Element_Text('upyunkey', NULL, $settings->upyunkey, _t('密匙')); $form2->addInput($upyunkey); $upyunprefix = new Typecho_Widget_Helper_Form_Element_Text('upyunprefix', NULL, $settings->upyunprefix, _t('路径前缀')); $form2->addInput($upyunprefix); $bcsbucket = new Typecho_Widget_Helper_Form_Element_Text('bcsbucket', NULL, $settings->bcsbucket, _t('空间名称')); $form2->addInput($bcsbucket); $bcsapikey = new Typecho_Widget_Helper_Form_Element_Text('bcsapikey', NULL, $settings->bcsapikey, _t('APIKey')); $form2->addInput($bcsapikey); $bcssecretkey = new Typecho_Widget_Helper_Form_Element_Text('bcssecretkey', NULL, $settings->bcssecretkey, _t('SecretKey')); $form2->addInput($bcssecretkey); $bcsprefix = new Typecho_Widget_Helper_Form_Element_Text('bcsprefix', NULL, $settings->bcsprefix, _t('路径前缀')); $form2->addInput($bcsprefix); $form2->addItem($submit); //隐藏模式 switch ($settings->storage) { case 'local': $qiniubucket->setAttribute('style', 'display:none;'); $qiniudomain->setAttribute('style', 'display:none;'); $qiniuaccesskey->setAttribute('style', 'display:none;'); $qiniusecretkey->setAttribute('style', 'display:none;'); $qiniuprefix->setAttribute('style', 'display:none;'); $upyunbucket->setAttribute('style', 'display:none;'); $upyundomain->setAttribute('style', 'display:none;'); $upyunuser->setAttribute('style', 'display:none;'); $upyunpwd->setAttribute('style', 'display:none;'); $upyunkey->setAttribute('style', 'display:none;'); $upyunprefix->setAttribute('style', 'display:none;'); $bcsbucket->setAttribute('style', 'display:none;'); $bcsapikey->setAttribute('style', 'display:none;'); $bcssecretkey->setAttribute('style', 'display:none;'); $bcsprefix->setAttribute('style', 'display:none;'); break; case 'qiniu': $local->setAttribute('style', 'display:none;'); $upyunbucket->setAttribute('style', 'display:none;'); $upyundomain->setAttribute('style', 'display:none;'); $upyunuser->setAttribute('style', 'display:none;'); $upyunpwd->setAttribute('style', 'display:none;'); $upyunkey->setAttribute('style', 'display:none;'); $upyunprefix->setAttribute('style', 'display:none;'); $bcsbucket->setAttribute('style', 'display:none;'); $bcsapikey->setAttribute('style', 'display:none;'); $bcssecretkey->setAttribute('style', 'display:none;'); $bcsprefix->setAttribute('style', 'display:none;'); break; case 'upyun': $local->setAttribute('style', 'display:none;'); $qiniubucket->setAttribute('style', 'display:none;'); $qiniudomain->setAttribute('style', 'display:none;'); $qiniuaccesskey->setAttribute('style', 'display:none;'); $qiniusecretkey->setAttribute('style', 'display:none;'); $qiniuprefix->setAttribute('style', 'display:none;'); $bcsbucket->setAttribute('style', 'display:none;'); $bcsapikey->setAttribute('style', 'display:none;'); $bcssecretkey->setAttribute('style', 'display:none;'); $bcsprefix->setAttribute('style', 'display:none;'); break; case 'bcs': $local->setAttribute('style', 'display:none;'); $qiniubucket->setAttribute('style', 'display:none;'); $qiniudomain->setAttribute('style', 'display:none;'); $qiniuaccesskey->setAttribute('style', 'display:none;'); $qiniusecretkey->setAttribute('style', 'display:none;'); $qiniuprefix->setAttribute('style', 'display:none;'); $upyunbucket->setAttribute('style', 'display:none;'); $upyundomain->setAttribute('style', 'display:none;'); $upyunuser->setAttribute('style', 'display:none;'); $upyunpwd->setAttribute('style', 'display:none;'); $upyunkey->setAttribute('style', 'display:none;'); $upyunprefix->setAttribute('style', 'display:none;'); break; } //更新模式 $request = Typecho_Request::getInstance(); if (isset($request->gid) && $action !== 'insert') { $db = Typecho_Db::get(); $prefix = $db->getPrefix(); $gallery = $db->fetchRow($db->select()->from($prefix . 'gallery')->where('gid=?', $request->gid)); if (!$gallery) { throw new Typecho_Widget_Exception(_t('图片不存在'), 404); } $thumb->value($gallery['thumb']); $image->value($gallery['image']); $sort->value($gallery['sort']); $name->value($gallery['name']); $description->value($gallery['description']); $do->value('update'); $gid->value($gallery['gid']); $submit->value(_t('修改图片')); $_action = 'update'; } elseif ($action == 'sync' && $render == '2') { $submit->value(_t('保存设置')); $_action = 'sync'; } else { $do->value('insert'); $submit->value(_t('添加图片')); $_action = 'insert'; } if (empty($action)) { $action = $_action; } //验证规则 if ($action == 'insert' || $action == 'update') { $thumb->addRule('required', _t('缩略图地址不能为空')); $image->addRule('required', _t('原图地址不能为空')); $sort->addRule('required', _t('相册组不能为空')); $thumb->addRule('url', _t('请输入合法的图片地址')); $image->addRule('url', _t('请输入合法的图片地址')); $sort->addRule('isInteger', _t('请输入一个整数数字')); } if ($action == 'update') { $gid->addRule('required', _t('图片主键不存在')); $gid->addRule(array(new HighSlide_Plugin(), 'galleryexists'), _t('图片不存在')); } $form = $render == '1' ? $form1 : $form2; return $form; }
} else { $this.show().parent().find('.uninstall').hide(); if( result.error != '' ){ $.sticky(errorStr + ',' + result.error, setting); } } }); }); $('.plugin .uninstall').on('click', function(){ var $this = $(this); var deactivateUrl = $this.data('url'); $.ajax({ url: '<?php echo str_replace('/market', '/uninstall', Typecho_Request::getInstance()->getRequestUrl()); ?> ', dataType: 'json', data: { plugin: $this.parents('.plugin').data('name') } }).done(function(result) { if (result.status) { $this.hide().parent().find('.install').show(); $.sticky('卸载成功...', setting); }else { $.ajax({ url: deactivateUrl }).done(function(){ $this.click();
<?php if (!defined('__TYPECHO_ROOT_DIR__')) { exit; } $settings = Helper::options()->plugin('Announcement'); if ($settings->showArea == '2') { $request = new Typecho_Request(); $currentUrl = $request->getRequestUrl(); $blogUrl = Helper::options()->stack[0]['siteUrl']; if ($currentUrl != $blogUrl || $currentUrl == $blogUrl . 'index.php') { return; } } $jqUrl = Helper::options()->pluginUrl . '/Announcement/js/jquery.min.js'; $styleSheetUrl = Helper::options()->pluginUrl . '/Announcement/css/style.css'; $jqueryScriptUrl = Helper::options()->pluginUrl . '/Announcement/js/script.js'; if ($settings->jquery) { echo '<script src="' . $jqUrl . '"></script>'; } echo '<link href="' . $styleSheetUrl . '" type="text/css" rel="stylesheet" />'; echo '<script src="' . $jqueryScriptUrl . '" type="text/javascript"></script>'; echo '<span id="announcement_plug" data-type="' . $settings->annMode . '" data-content="' . $settings->content . '"></span>';
/** * 获取url前缀 * * @access public * @return string */ public static function getUrlPrefix() { if (empty(self::$_urlPrefix)) { self::$_urlPrefix = (self::isSecure() ? 'https' : 'http') . '://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'] . (in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT'])); } return self::$_urlPrefix; }
public function show() { $str = ""; if ($this->current_page > 1) { $firstPageUrl = $this->buildUrl(1); $prevPageUrl = $this->buildUrl($this->current_page - 1); $str .= '<li><a href="' . $prevPageUrl . '">«</a></li>'; } else { $str .= ''; } $a = $this->construct_num_Page(); for ($i = 0; $i < count($a); $i++) { $s = $a[$i]; if ($s == $this->current_page) { $url = Typecho_Request::getInstance()->getRequestUrl(); $str .= '<li class="current"><a href="' . $url . '">' . $s . '</a></li>'; } else { $url = $this->buildUrl($s); $str .= '<li><a href="' . $url . '">' . $s . '</a></li>'; } } if ($this->current_page < $this->pageNums) { $lastPageUrl = $this->buildUrl($this->pageNums); $nextPageUrl = $this->buildUrl($this->current_page + 1); $str .= '<li><a href="' . $nextPageUrl . '">»</a></li>'; } else { $str .= ''; } return $str; }
?> ')) { return false; } } else { if (! confirm('<?php echo _t('该插件该版本已经存在了!\\n确定继续安装吗?'); ?> ')) { return false; } } } $.ajax({ url: '<?php echo str_replace('/market', '/install', Typecho_Request::getInstance()->makeUriByRequest()); ?> ', dataType: 'json', data: { version: $version.val(), require: $version.data('require'), plugin: $card.data('name') }, beforeSend: function() { $this.attr('disabled', true).text('正在安装, 请稍后...'); } }).always(function() { $this.attr('disabled', false).text('安装'); }).fail(function() { alert('安装失败');
public static function isbot($rule = NULL) { $config = Typecho_Widget::widget('Widget_Options')->plugin('Robots'); $bot = NULL; $botlist = $config->botlist; if (sizeof($botlist) > 0) { $useragent = strtolower($_SERVER['HTTP_USER_AGENT']); foreach ($botlist as $value) { if (strpos($useragent, $value) !== false) { $bot = $value; } } if ($bot !== NULL) { $request = new Typecho_Request(); $ip = $request->getIp(); $url = $_SERVER['REQUEST_URI']; if ($ip == NULL) { $ip = 'UnKnow'; } $options = Typecho_Widget::widget('Widget_Options'); $timeStamp = $options->gmtTime; $offset = $options->timezone - $options->serverTimezone; $gtime = $timeStamp + $offset; $db = Typecho_Db::get(); $rows = array('bot' => $bot, 'url' => $url, 'ip' => $ip, 'ltime' => $gtime); $db->query($db->insert('table.logs')->rows($rows)); } } }
public static function setCache() { global $noCache; if (!$noCache) { return; } $request = new Typecho_Request(); $requestHash = $request->getPathinfo(); #尝试存入缓存 $cache = ob_get_contents(); self::set($requestHash, $cache); $config = Helper::options()->plugin(self::$pluginName); if ($config->cacheTester) { echo '<small style="font-size:10px;color:#bbb;">生成缓存内容:' . round(strlen($cache) / 1024, 2) . 'K 将会缓存:' . $config->cacheTime . '天 期间如有新文章发布、新评论产生将自动刷新缓存</small>'; } return; }
public static function form($action = NULL) { /** 构建表格 */ $options = Typecho_Widget::widget('Widget_Options'); $form = new Typecho_Widget_Helper_Form(Typecho_Common::url('/action/huifeng-members-edit', $options->index), Typecho_Widget_Helper_Form::POST_METHOD); $form->setAttribute('enctype', 'multipart/form-data'); // 表示可以上传数据 /* 添加隐藏域限制上传大小 */ $maxfilesize = new Typecho_Widget_Helper_Form_Element_Hidden('MAX_FILE_SIZE', NULL, '1000000', NULL, NULL); $form->addInput($maxfilesize); // 限制大小的隐藏域应在上传标签之前 /** 头像 */ $image_upload = new Typecho_Widget_Helper_Form_Element_Text('image_upload', NULL, NULL, _t('上传头像'), NULL); // 用于头像图片上传 $image_upload->input->setAttribute('type', 'file'); $image = new Typecho_Widget_Helper_Form_Element_Text('image', NULL, NULL, _t('头像'), NULL); // 获取数据库里的头像地址 $img_show = new Typecho_Widget_Helper_Layout('img', NULL); $img_src = '/usr/plugins/HuifengMembers/nopic.jpg'; if ($image->getAttribute('src' != '')) { $img_src = $image->getAttribute('src'); } $img_show->setAttribute('src', $img_src); $img_show->setAttribute('height', '180'); $img_show->setAttribute('style', 'margin-top: 4em;max-width: 180px;max-height: 180px;'); $form->addItem($img_show); $form->addInput($image_upload); $form->addInput($image); /** 会员名称 */ // Typecho_Widget_Helper_Form_Element_Text ($name=NULL, array $options=NULL, $value=NULL, $label=NULL, $categories=NULL) $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('会员名称*'), _t('请填写真实姓名')); $form->addInput($name); /** 所在部门 */ $position = new Typecho_Widget_Helper_Form_Element_Text('position', NULL, NULL, _t('所在部门*'), _t('请正确填写所在部门科室')); $form->addInput($position); /** 联系电话 */ $tel = new Typecho_Widget_Helper_Form_Element_Text('tel', NULL, NULL, _t('联系电话'), NULL); $form->addInput($tel); /** 分类 */ $categories = new Typecho_Widget_Helper_Form_Element_Text('categories', NULL, NULL, _t('分类')); $form->addInput($categories); /** 是否值班 */ $is_onduty = new Typecho_Widget_Helper_Form_Element_Radio('is_onduty', array('否' => _t('否'), '是' => _t('是')), '否', _t('是否值班')); $form->addInput($is_onduty); /** 自定义数据 */ $field = new Typecho_Widget_Helper_Form_Element_Text('field', NULL, NULL, _t('自定义数据'), _t('该项用于用户自定义数据扩展')); $form->addInput($field); /** 会员动作 */ $do = new Typecho_Widget_Helper_Form_Element_Hidden('do'); $form->addInput($do); /** 会员主键 */ $mid = new Typecho_Widget_Helper_Form_Element_Hidden('mid'); $form->addInput($mid); /** 提交按钮 */ $submit = new Typecho_Widget_Helper_Form_Element_Submit(); $submit->input->setAttribute('class', 'btn primary'); $form->addItem($submit); $request = Typecho_Request::getInstance(); if (isset($request->mid) && 'insert' != $action) { /** 更新模式 */ $db = Typecho_Db::get(); $prefix = $db->getPrefix(); $member = $db->fetchRow($db->select()->from($prefix . 'hf_members')->where('mid = ?', $request->mid)); if (!$member) { throw new Typecho_Widget_Exception(_t('会员不存在'), 404); } $name->value($member['name']); $position->value($member['position']); $tel->value($member['tel']); $image->value($member['image']); $categories->value($member['categories']); $is_onduty->value($member['is_onduty']); $field->value($member['field']); $do->value('update'); $mid->value($member['mid']); $submit->value(_t('编辑会员')); $_action = 'update'; } else { $do->value('insert'); $submit->value(_t('增加会员')); $_action = 'insert'; } if (empty($action)) { $action = $_action; } /** 给表单增加规则 */ if ('insert' == $action || 'update' == $action) { $name->addRule('required', _t('必须填写会员名称')); $name->addRule('xssCheck', _t('请勿在会员名称栏输入特殊字符')); $position->addRule('required', _t('必须填写所在部门')); $position->addRule('xssCheck', _t('请勿在所在部门栏输入特殊字符')); // $position->addRule('url', _t('不是一个合法的url')); // $image->addRule('image', _t('不是一个合法的图片地址')); $tel->addRule('required', _t('必须填写联系电话')); $tel->addRule('isInteger', _t('电话号码必须是无符号整数')); $tel->addRule('minLength', _t('电话号码不得小于6位'), 6); $tel->addRule('maxLength', _t('电话号码不得大于11位'), 12); // $image->addRule('required', _t('必须上传头像图片')); } if ('update' == $action) { $mid->addRule('required', _t('会员主键不存在')); $mid->addRule(array(new HuifengMembers_Plugin(), 'HuifengMembersExists'), _t('会员不存在')); } return $form; }
public static function start() { if (self::hasLogin()) { return; } $config = Typecho_Widget::widget('Widget_Options')->plugin('Access'); $request = Typecho_Request::getInstance(); $ip = $request->getIp(); $url = $_SERVER['REQUEST_URI']; if ($ip == null) { $ip = 'UnKnow'; } $options = Typecho_Widget::widget('Widget_Options'); $timeStamp = $options->gmtTime; $offset = $options->timezone - $options->serverTimezone; $gtime = $timeStamp + $offset; $db = Typecho_Db::get(); $rows = array('ua' => $request->getAgent(), 'url' => $url, 'ip' => $ip, 'referer' => $request->getReferer(), 'referer_domain' => parse_url($request->getReferer(), PHP_URL_HOST), 'date' => $gtime); $db->query($db->insert('table.access')->rows($rows)); }
/** * 评论过滤器 * * @access public * @param array $comment 评论结构 * @param Typecho_Widget $post 被评论的文章 * @param array $result 返回的结果上下文 * @param string $api api地址 * @return void */ public static function filter($comment, $post, $result) { $captchaCode = Typecho_Request::getInstance()->captcha_code; if (empty($captchaCode)) { throw new Typecho_Widget_Exception(_t('请输入验证码')); } require_once 'Captcha/securimage/securimage.php'; $img = new securimage(); if (!$img->check($captchaCode)) { throw new Typecho_Widget_Exception(_t('验证码错误, 请重新输入')); } return $comment; }
/** * 工厂方法,将类静态化放置到列表中 * * @access public * @param string $alias 组件别名 * @param mixed $params 传递的参数 * @param mixed $request 前端参数 * @param boolean $enableResponse 是否允许http回执 * @return object * @throws Typecho_Exception */ public static function widget($alias, $params = NULL, $request = NULL, $enableResponse = true) { $parts = explode('@', $alias); $className = $parts[0]; $alias = empty($parts[1]) ? $className : $parts[1]; if (isset(self::$_widgetAlias[$className])) { $className = self::$_widgetAlias[$className]; } if (!isset(self::$_widgetPool[$alias])) { /** 如果类不存在 */ if (!class_exists($className)) { throw new Typecho_Widget_Exception($className); } /** 初始化request */ if (!empty($request)) { $requestObject = new Typecho_Request(); $requestObject->setParams($request); } else { $requestObject = Typecho_Request::getInstance(); } /** 初始化response */ $responseObject = $enableResponse ? Typecho_Response::getInstance() : Typecho_Widget_Helper_Empty::getInstance(); /** 初始化组件 */ $widget = new $className($requestObject, $responseObject, $params); $widget->execute(); self::$_widgetPool[$alias] = $widget; } return self::$_widgetPool[$alias]; }
/** * 获取url地址 * * @return string */ function _u() { $url = Typecho_Request::getUrlPrefix() . $_SERVER['REQUEST_URI']; if (isset($_SERVER['QUERY_STRING'])) { $url = str_replace('?' . $_SERVER['QUERY_STRING'], '', $url); } return dirname($url); }
/** * 获取url前缀 * * @access public * @return string */ public static function getUrlPrefix() { if (empty(self::$_urlPrefix)) { if (defined('__TYPECHO_URL_PREFIX__')) { self::$_urlPrefix == __TYPECHO_URL_PREFIX__; } else { self::$_urlPrefix = (self::isSecure() ? 'https' : 'http') . '://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME'] . (empty($_SERVER['SERVER_PORT']) || in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT'])); } } return self::$_urlPrefix; }
/** * 获取url前缀 * * @access public * @return string */ public static function getUrlPrefix() { if (empty(self::$_urlPrefix)) { $isSecure = !empty($_SERVER['HTTPS']) && 'off' != strtolower($_SERVER['HTTPS']) || !empty($_SERVER['SERVER_PORT']) && 443 == $_SERVER['SERVER_PORT']; self::$_urlPrefix = ($isSecure ? 'https' : 'http') . '://' . (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']) . (in_array($_SERVER['SERVER_PORT'], array(80, 443)) ? '' : ':' . $_SERVER['SERVER_PORT']); } return self::$_urlPrefix; }
/** * 评论更新 * * @access public * @param array $comment 评论结构 * @param Typecho_Widget $post 被评论的文章 * @param array $result 返回的结果上下文 * @param string $api api地址 * @return void */ public static function comment_update($comment) { $req = new Typecho_Request(); self::delete(str_replace($req->getRequestRoot(), '', $req->getReferer())); }
/** * 工厂方法,将类静态化放置到列表中 * * @access public * @param string $alias 组件别名 * @param mixed $params 传递的参数 * @param mixed $request 前端参数 * @param boolean $enableResponse 是否允许http回执 * @return object * @throws Typecho_Exception */ public static function widget($alias, $params = NULL, $request = NULL, $enableResponse = true) { list($className) = explode('@', $alias); if (!isset(self::$_widgetPool[$alias])) { $fileName = str_replace('_', '/', $className) . '.php'; require_once $fileName; /** 如果类不存在 */ if (!class_exists($className)) { /** Typecho_Exception */ require_once 'Typecho/Widget/Exception.php'; throw new Typecho_Widget_Exception($className); } /** 初始化request */ if (!empty($request)) { $requestObject = new Typecho_Request(); $requestObject->setParams($request); } else { $requestObject = Typecho_Request::getInstance(); } /** 初始化response */ $responseObject = $enableResponse ? Typecho_Response::getInstance() : Typecho_Widget_Helper_Empty::getInstance(); /** 初始化组件 */ $widget = new $className($requestObject, $responseObject, $params); $widget->execute(); self::$_widgetPool[$alias] = $widget; } return self::$_widgetPool[$alias]; }
<?php $fileInfo = Widget_Upload::uploadHandle($_FILES['upfile']); $retInfo = array("state" => "SUCCESS", "url" => Typecho_Request::getInstance()->getUrlPrefix() . $fileInfo['path'], "title" => $fileInfo['path'], "original" => $fileInfo['name'], "type" => $fileInfo['type'], "size" => $fileInfo['size']); return json_encode($retInfo);
public static function form($action = NULL) { /** 构建表格 */ $options = Typecho_Widget::widget('Widget_Options'); $form = new Typecho_Widget_Helper_Form(Typecho_Common::url('/action/links-edit', $options->index), Typecho_Widget_Helper_Form::POST_METHOD); /** 链接名称 */ $name = new Typecho_Widget_Helper_Form_Element_Text('name', NULL, NULL, _t('链接名称*')); $form->addInput($name); /** 链接地址 */ $url = new Typecho_Widget_Helper_Form_Element_Text('url', NULL, "http://", _t('链接地址*')); $form->addInput($url); /** 链接分类 */ $sort = new Typecho_Widget_Helper_Form_Element_Text('sort', NULL, NULL, _t('链接分类'), _t('建议以英文字母开头,只包含字母与数字')); $form->addInput($sort); /** 链接图片 */ $image = new Typecho_Widget_Helper_Form_Element_Text('image', NULL, NULL, _t('链接图片'), _t('需要以http://开头,留空表示没有链接图片')); $form->addInput($image); /** 链接描述 */ $description = new Typecho_Widget_Helper_Form_Element_Textarea('description', NULL, NULL, _t('链接描述')); $form->addInput($description); /** 自定义数据 */ $user = new Typecho_Widget_Helper_Form_Element_Text('user', NULL, NULL, _t('自定义数据'), _t('该项用于用户自定义数据扩展')); $form->addInput($user); /** 链接动作 */ $do = new Typecho_Widget_Helper_Form_Element_Hidden('do'); $form->addInput($do); /** 链接主键 */ $lid = new Typecho_Widget_Helper_Form_Element_Hidden('lid'); $form->addInput($lid); /** 提交按钮 */ $submit = new Typecho_Widget_Helper_Form_Element_Submit(); $form->addItem($submit); $request = Typecho_Request::getInstance(); if (isset($request->lid) && 'insert' != $action) { /** 更新模式 */ $db = Typecho_Db::get(); $prefix = $db->getPrefix(); $link = $db->fetchRow($db->select()->from($prefix . 'links')->where('lid = ?', $request->lid)); if (!$link) { throw new Typecho_Widget_Exception(_t('链接不存在'), 404); } $name->value($link['name']); $url->value($link['url']); $sort->value($link['sort']); $image->value($link['image']); $description->value($link['description']); $user->value($link['user']); $do->value('update'); $lid->value($link['lid']); $submit->value(_t('编辑链接')); $_action = 'update'; } else { $do->value('insert'); $submit->value(_t('增加链接')); $_action = 'insert'; } if (empty($action)) { $action = $_action; } /** 给表单增加规则 */ if ('insert' == $action || 'update' == $action) { $name->addRule('required', _t('必须填写链接名称')); $url->addRule('required', _t('必须填写链接地址')); $url->addRule('url', _t('不是一个合法的链接地址')); $image->addRule('url', _t('不是一个合法的图片地址')); } if ('update' == $action) { $lid->addRule('required', _t('链接主键不存在')); $lid->addRule(array(new Links_Plugin(), 'LinkExists'), _t('链接不存在')); } return $form; }
/** * 验证Upyun签名 * * @access public * * @return boolean */ public static function validate() { $host = Typecho_Request::getInstance()->upyunhost; $user = Typecho_Request::getInstance()->upyunuser; $pwd = Typecho_Request::getInstance()->upyunpwd; $hostUsage = 0; try { require_once 'SDK/upyun.class.php'; $upyun = new UpYun($host, $user, $pwd); $hostUsage = (int) $upyun->getFolderUsage('/'); } catch (Exception $e) { $hostUsage = -1; } return $hostUsage >= 0; }