option = array(__CLASS__, 'setTemplate'); Typecho_Plugin::factory('Widget_Contents_Post_Edit')->finishPublish = array(__CLASS__, "updateTemplate"); Typecho_Plugin::factory('Widget_Archive')->select = array(__CLASS__, 'selectHandle'); return _t($info); } /** * 把文章类型设置设置装入文章编辑页 * * @access public * @return void */ public static function setTemplate($post) { $db = Typecho_Db::get(); $row = $db->fetchRow($db->select('template')->from('table.contents')->where('cid = ?', $post->cid)); $template = isset($row['template']) ? $row['template'] : ''; $typeFields = Typecho_Widget::widget('Widget_Options')->plugin(str_replace("_Plugin","",__CLASS__))->typeFields; $typeList = explode("\r\n",$typeFields); if (!in_array("standard",$typeList)) { $typeList[] = "standard"; } if ($template == "" || !in_array($template,$typeList)) { $template = "standard"; } $html = ''; foreach($typeList as $type) { if ($type == $template) { $html = $html .''; } else { $html = $html .''; } } $html = '

'; _e($html); } /** * 禁用插件方法,如果禁用失败,直接抛出异常 * * @static * @access public * @return void * @throws Typecho_Plugin_Exception */ public static function deactivate(){ $delFields = Typecho_Widget::widget('Widget_Options')->plugin(str_replace("_Plugin","",__CLASS__))->delFields; if($delFields){ $db = Typecho_Db::get(); $prefix = $db->getPrefix(); $db->query('UPDATE `' . $prefix . 'contents` SET `template` = NULL WHERE `type` = "post";'); } } /** * 获取插件配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form 配置面板 * @return void */ public static function config(Typecho_Widget_Helper_Form $form){ $typeFields = new Typecho_Widget_Helper_Form_Element_Textarea('typeFields', NULL, _t('standard'), _t('文章类型'), _t('在这里设置可用的文章类型')); $form->addInput($typeFields); $delFields = new Typecho_Widget_Helper_Form_Element_Radio('delFields', array(0=>_t('保留数据'),1=>_t('删除数据'),), '0', _t('卸载设置'),_t('卸载插件后数据是否保留')); $form->addInput($delFields); } /** * 数据库初始化 * * @access private * @return void */ public static function sqlInstall(){ $db = Typecho_Db::get(); $type = explode('_', $db->getAdapterName()); $type = array_pop($type); $prefix = $db->getPrefix(); try { $select = $db->select('table.contents.template')->from('table.contents'); $db->query($select, Typecho_Db::READ); return '检测到模板字段(template),插件启用成功'; } catch (Typecho_Db_Exception $e) { $code = $e->getCode(); if(('Mysql' == $type && (1054 == $code || '42S22' == $code)) || ('SQLite' == $type && ('HY000' == $code || 1 == $code))) { try { if ('Mysql' == $type) { $db->query("ALTER TABLE `".$prefix."contents` ADD `template` VARCHAR(32) NOT NULL DEFAULT NULL;"); } else if ('SQLite' == $type) { $db->query("ALTER TABLE `".$prefix."contents` ADD `template` VARCHAR(255) NOT NULL DEFAULT NULL"); } else { throw new Typecho_Plugin_Exception('不支持的数据库类型:'.$type); } return '成功建立模板字段(template),插件启用成功'; } catch (Typecho_Db_Exception $e) { $code = $e->getCode(); if(('Mysql' == $type && 1060 == $code) ) { return '模板字段(template)已经存在,插件启用成功'; } throw new Typecho_Plugin_Exception('插件启用失败。错误号:'.$code); } } throw new Typecho_Plugin_Exception('数据表检测失败,插件启用失败。错误号:'.$code); } } /** * 个人用户的配置面板 * * @access public * @param Typecho_Widget_Helper_Form $form * @return void */ public static function personalConfig(Typecho_Widget_Helper_Form $form){} /** * 发布文章同时更新文章类型 * * @access public * @return void */ public static function updateTemplate($contents, $post){ $template = $post->request->get('template', NULL); if ($template == "standard") { $template = NULL; } $db = Typecho_Db::get(); $sql = $db->update('table.contents')->rows(array('template' => $template))->where('cid = ?', $post->cid); $db->query($sql); } /** * 把增加的字段添加到查询中,以便在模版中直接调用 * * @access public * @return void */ public static function selectHandle($archive){ $user = Typecho_Widget::widget('Widget_User'); if ('post' == $archive->parameter->type || 'page' == $archive->parameter->type) { if ($user->hasLogin()) { $select = $archive->select()->where('table.contents.status = ? OR table.contents.status = ? OR (table.contents.status = ? AND table.contents.authorId = ?)', 'publish', 'hidden', 'private', $user->uid); } else { $select = $archive->select()->where('table.contents.status = ? OR table.contents.status = ?', 'publish', 'hidden'); } } else { if ($user->hasLogin()) { $select = $archive->select()->where('table.contents.status = ? OR (table.contents.status = ? AND table.contents.authorId = ?)', 'publish', 'private', $user->uid); } else { $select = $archive->select()->where('table.contents.status = ?', 'publish'); } } $select->where('table.contents.created < ?', Typecho_Date::gmtTime()); $select->cleanAttribute('fields'); return $select; } }