Exemple #1
0
 public function avatar()
 {
     $uid = $this->request->get('uid');
     $size = $this->request->get('s');
     if (!is_numeric($uid)) {
         Typecho_Common::error(404);
         exit;
     }
     $path = __TYPECHO_ROOT_DIR__ . Widget_Common::getAvatarPath($uid);
     $path .= $uid . '.jpg';
     if (!is_file($path)) {
         $path = __TYPECHO_ROOT_DIR__ . '/usr/avatar/default.jpg';
     }
     require_once __TYPECHO_ROOT_DIR__ . '/var/Util/Image.php';
     $image = new Image();
     $image->open($path);
     $type = $image->type();
     if (is_numeric($size)) {
         $image->thumb($size, $size);
     }
     header('Content-Type:image/' . $type . ';');
     //输出图像
     if ('jpeg' == $type || 'jpg' == $type) {
         // 采用jpeg方式输出
         imagejpeg($image->showImg());
     } elseif ('gif' == $type) {
         imagegif($image->showImg());
     } else {
         $fun = 'image' . $type;
         $fun($image->showImg());
     }
 }
Exemple #2
0
 public function action()
 {
     // protect
     $this->security->protect();
     /** 如果已经登录 */
     if ($this->user->hasLogin()) {
         /** 直接返回 */
         $this->response->redirect($this->options->index);
     }
     /** 初始化验证类 */
     $validator = new Typecho_Validate();
     $validator->addRule('name', 'required', _t('请输入用户名'));
     $validator->addRule('password', 'required', _t('请输入密码'));
     /** 截获验证异常 */
     if ($error = $validator->run($this->request->from('name', 'password'))) {
         Typecho_Cookie::set('__typecho_remember_name', $this->request->name);
         /** 设置提示信息 */
         $this->widget('Widget_Notice')->set($error);
         $this->response->goBack();
     }
     /** 开始验证用户 **/
     $valid = $this->user->login($this->request->name, $this->request->password, false, 1 == $this->request->remember ? $this->options->gmtTime + $this->options->timezone + 30 * 24 * 3600 : 0);
     /** 比对密码 */
     if (!$valid) {
         /** 防止穷举,休眠3秒 */
         sleep(3);
         Typecho_Cookie::set('__typecho_remember_name', $this->request->name);
         $this->widget('Widget_Notice')->set(_t('用户名或密码无效'), 'error');
         $this->response->goBack('?referer=' . urlencode($this->request->referer));
     }
     $this->widget('Widget_Notice')->set('已成功登录!', 'notice');
     //登录积分
     Widget_Common::credits('login');
     /** 跳转验证后地址 */
     $this->response->redirect($this->request->get('redir', $this->options->index));
 }
Exemple #3
0
 public function sendForgotVerify()
 {
     $captcha = $this->request->get('captcha');
     if (empty($captcha) || !$this->widget('Util_Captcha')->check($captcha)) {
         $this->widget('Widget_Notice')->set('验证码错误!', 'error');
         $this->response->goBack();
     }
     $name = $this->request->get('name');
     $mail = $this->request->get('mail');
     if (empty($name) || empty($mail)) {
         $this->widget('Widget_Notice')->set('用户名或邮箱不能为空!', 'error');
         $this->response->goBack();
     }
     $user = $this->db->fetchRow($this->db->select()->from('table.users')->where('name = ?', $name)->where('mail = ?', $mail)->limit(1));
     if (empty($user)) {
         $this->widget('Widget_Notice')->set('用户不存在!', 'error');
         $this->response->goBack();
     }
     $params = array('uid' => $user['uid'], 'confirm' => $user['mail'], 'name' => $user['screenName'], 'type' => 'reset');
     //发送验证码
     Widget_Common::sendVerify($params);
     $this->widget('Widget_Notice')->set('验证邮件已发送,请注意查收!', 'success');
     $this->response->goBack();
 }
Exemple #4
0
    <div class="cell">
        <form action="<?php 
$this->options->someAction('setting');
?>
" method="POST" enctype="multipart/form-data">
        <div class="field">
	          <label>当前头像</label>
	          <p class="m0">
					<?php 
Widget_Common::avatar($this->user->uid, 96, null, 'avatar vab mr10');
?>
					<?php 
Widget_Common::avatar($this->user->uid, 48, null, 'avatar vab mr10');
?>
					<?php 
Widget_Common::avatar($this->user->uid, 24, null, 'avatar vab mr10');
?>
                </p>
	      </div>
	      <div class="field">
	          <label>选择一个图片文件</label>
	          <input class="field-ipt" type="file" name="avatar">
	      </div>
	      <div class="field">
	          <label>&nbsp;</label>
	          <p class="fade field-ipt">支持 2MB 以内的 PNG / JPG / GIF 文件</p>
	      </div>
	      <div class="field">
	          <label>&nbsp;</label>
	          <button class="btn field-ipt" name="do" value="avatar"><?php 
_e('开始上传');
Exemple #5
0
 /**
  * 上传头像
  * @param array $file
  * @return boolean|multitype:string unknown number Ambigous <string, unknown> Ambigous <Ambigous, string, mixed>
  */
 private function uploadAvatar($file)
 {
     if (empty($file['name'])) {
         return false;
     }
     $ext = $this->getSafeName($file['name']);
     if (!Widget_Upload::checkFileType(strtolower($ext)) || Typecho_Common::isAppEngine()) {
         return false;
     }
     $options = Typecho_Widget::widget('Widget_Options');
     $path = Widget_Common::getAvatarPath($this->user->uid);
     $realPath = Typecho_Common::url($path, defined('__TYPECHO_UPLOAD_ROOT_DIR__') ? __TYPECHO_UPLOAD_ROOT_DIR__ : __TYPECHO_ROOT_DIR__);
     //创建上传目录
     if (!is_dir($realPath)) {
         if (!$this->makeAvatarDir($realPath)) {
             return false;
         }
     }
     //获取文件名
     $fileName = $this->user->uid . '.tmp.' . $ext;
     $realPath = $realPath . '/' . $fileName;
     if (isset($file['tmp_name'])) {
         //移动上传文件
         if (!@move_uploaded_file($file['tmp_name'], $realPath)) {
             return false;
         }
     } else {
         if (isset($file['bytes'])) {
             //直接写入文件
             if (!file_put_contents($realPath, $file['bytes'])) {
                 return false;
             }
         } else {
             return false;
         }
     }
     if (!isset($file['size'])) {
         $file['size'] = filesize($realPath);
     }
     //返回相对存储路径
     return array('name' => $file['name'], 'path' => $path, 'file' => $path . $fileName, 'size' => $file['size'], 'type' => $ext, 'mime' => Typecho_Common::mimeContentType($realPath));
 }
Exemple #6
0
} else {
    ?>
<!-- 页面为其他页时 -->
    			<?php 
    $this->archiveTitle(' &raquo; ', '', '');
    ?>
    		<?php 
}
?>
        </div>
    </div>
    <article class="cell post page" itemscope itemtype="http://schema.org/BlogPosting">
        <h1 class="post-title"><?php 
$this->title();
?>
</h1>
        <div class="post-content">
            <?php 
$this->content();
?>
        </div>
    </article>
    <div class="inner"><?php 
_e('最后更新:');
echo Widget_Common::formatTime($this->modified, 'Y-m-d H:i:s');
?>
</div>
    </div>
</div><!-- end #main-->
<?php 
$this->need('footer.php');
Exemple #7
0
    <link rel="stylesheet" href="<?php 
$this->options->themeUrl('css/style.css');
?>
">

    <!--[if lt IE 9]>
    <script src="//cdn.staticfile.org/html5shiv/r29/html5.min.js"></script>
    <script src="//cdn.staticfile.org/respond.js/1.3.0/respond.min.js"></script>
    <![endif]-->
    <!-- 通过自有函数输出HTML头部信息 -->
    <?php 
$this->header();
?>
    <script>
    window.notice = <?php 
Widget_Common::getNotice();
?>
;
	window.siteUrl = '<?php 
$this->options->siteUrl();
?>
';
    </script>
</head>
<body>
<!--[if lt IE 8]>
    <div class="browsehappy" role="dialog"><?php 
_e('当前网页 <strong>不支持</strong> 你正在使用的浏览器. 为了正常的访问, 请 <a href="http://browsehappy.com/">升级你的浏览器</a>');
?>
.</div>
<![endif]-->
Exemple #8
0
 public function action()
 {
     // protect
     $this->security->protect();
     /** 如果已经登录 */
     if ($this->user->hasLogin()) {
         /** 直接返回 */
         $this->response->redirect($this->options->index);
     }
     /** 如果未开启注册 */
     if (!$this->options->allowRegister) {
         /** 直接返回 */
         $this->widget('Widget_Notice')->set('未开启注册!', 'error');
         $this->response->redirect($this->options->index);
     }
     /** 初始化验证类 */
     $validator = new Typecho_Validate();
     $validator->addRule('captcha', 'required', _t('必须填写验证码'));
     $validator->addRule('captcha', array($this, 'checkCaptcha'), _t('验证码错误'));
     $validator->addRule('name', 'required', _t('必须填写用户名称'));
     $validator->addRule('name', 'minLength', _t('用户名至少包含2个字符'), 2);
     $validator->addRule('name', 'maxLength', _t('用户名最多包含32个字符'), 32);
     $validator->addRule('name', 'xssCheck', _t('请不要在用户名中使用特殊字符'));
     $validator->addRule('name', array($this, 'nameExists'), _t('用户名已经存在'));
     $validator->addRule('mail', 'required', _t('必须填写电子邮箱'));
     $validator->addRule('mail', array($this, 'mailExists'), _t('电子邮箱地址已经存在'));
     $validator->addRule('mail', 'email', _t('电子邮箱格式错误'));
     $validator->addRule('mail', 'maxLength', _t('电子邮箱最多包含200个字符'), 200);
     /** 如果请求中有password */
     $validator->addRule('password', 'required', _t('必须填写密码'));
     $validator->addRule('password', 'minLength', _t('为了保证账户安全, 请输入至少六位的密码'), 6);
     $validator->addRule('password', 'maxLength', _t('为了便于记忆, 密码长度请不要超过十八位'), 18);
     $validator->addRule('confirm', 'confirm', _t('两次输入的密码不一致'), 'password');
     /** 截获验证异常 */
     if ($error = $validator->run($this->request->from('captcha', 'name', 'password', 'mail', 'confirm'))) {
         Typecho_Cookie::set('__typecho_remember_name', $this->request->name);
         Typecho_Cookie::set('__typecho_remember_mail', $this->request->mail);
         /** 设置提示信息 */
         $this->widget('Widget_Notice')->set($error, 'error');
         $this->response->goBack();
     }
     $hasher = new PasswordHash(8, true);
     //$generatedPassword = Typecho_Common::randString(7);
     $extend = array();
     $inviter = Typecho_Cookie::get('__typecho_inviter');
     if (!empty($inviter)) {
         $inviter = $this->widget('Widget_Users_Query@name_' . $inviter, 'name=' . $inviter);
         if ($inviter->have()) {
             $extend['inviter'] = $inviter->name;
         }
         Typecho_Cookie::delete('__typecho_inviter');
     }
     $dataStruct = array('name' => $this->request->name, 'mail' => $this->request->mail, 'screenName' => $this->request->name, 'password' => $hasher->HashPassword($this->request->password), 'created' => $this->options->gmtTime, 'group' => 'subscriber', 'extend' => empty($extend) ? '' : serialize($extend));
     $insertId = $this->insert($dataStruct);
     $this->db->fetchRow($this->select()->where('uid = ?', $insertId)->limit(1), array($this, 'push'));
     $this->user->login($this->request->name, $this->request->password);
     $params = array('uid' => $this->user->uid, 'confirm' => $this->user->mail, 'name' => $this->user->screenName, 'type' => 'register');
     //发送验证信息
     Widget_Common::sendVerify($params);
     //注册积分
     Widget_Common::credits('register');
     $this->widget('Widget_Notice')->set(_t('用户 <strong>%s</strong> 已经成功注册,请及时验证邮件', $this->screenName), 'success');
     $this->response->redirect($this->options->index);
 }
Exemple #9
0
 /**
  * 通用过滤器
  *
  * @access public
  * @param array $value 需要过滤的行数据
  * @return array
  */
 public function filter(array $value)
 {
     //生成静态链接
     $routeExists = NULL != Typecho_Router::get('author');
     $value['permalink'] = $routeExists ? Typecho_Router::url('author', $value, $this->options->index) : '#';
     /** 生成聚合链接 */
     /** RSS 2.0 */
     $value['feedUrl'] = $routeExists ? Typecho_Router::url('author', $value, $this->options->feedUrl) : '#';
     /** RSS 1.0 */
     $value['feedRssUrl'] = $routeExists ? Typecho_Router::url('author', $value, $this->options->feedRssUrl) : '#';
     /** ATOM 1.0 */
     $value['feedAtomUrl'] = $routeExists ? Typecho_Router::url('author', $value, $this->options->feedAtomUrl) : '#';
     // modified_by_jiangmuzi 2015.09.22
     if (!empty($value['extend'])) {
         $value['extend'] = unserialize($value['extend']);
     }
     $avatar = Widget_Common::parseUserAvatar($value['uid']);
     $value = array_merge($value, $avatar);
     $value['ucenter'] = $this->options->someUrl('ucenter', array('u' => $value['name']), false);
     // end modified
     $value = $this->pluginHandle(__CLASS__)->filter($value, $this);
     return $value;
 }
Exemple #10
0
<?php

if (!defined('__TYPECHO_ROOT_DIR__')) {
    exit;
}
if ($this->user->hasLogin()) {
    ?>
<div class="user-widget box">
    <div class="head clearfix">
        <a class="fl" href="<?php 
    $this->options->index('u/' . $this->user->name);
    ?>
"><?php 
    Widget_Common::avatar($this->user->uid, 48, $this->user->screenName);
    ?>
</a>
        <a class="user-nickname" href="<?php 
    $this->options->index('u/' . $this->user->name);
    ?>
"><?php 
    $this->user->name();
    ?>
</a>
    </div>
    <?php 
    $stat = $this->widget('Widget_Stat');
    ?>
    <div class="cell user-stat aligncenter">
        <a class="stat-item" href="<?php 
    $this->options->someUrl('favorite_nodes');
    ?>
Exemple #11
0
 /**
  * 评论处理函数
  *
  * @throws Typecho_Widget_Exception
  * @throws Exception
  * @throws Typecho_Exception
  */
 private function comment()
 {
     // modified_by_jiangmuzi 2015.09.23
     // 必须登录后才可以回复
     if (!$this->user->hasLogin()) {
         $this->widget('Widget_Notice')->set(_t('请先<a href="%s">登录</a>', $this->options->someUrl('login', null, false) . '?redir=' . $this->request->getRequestUrl()), NULL, 'success');
         $this->response->goBack();
     }
     // end modified
     // 使用安全模块保护
     $this->security->protect();
     $comment = array('cid' => $this->_content->cid, 'created' => $this->options->gmtTime, 'agent' => $this->request->getAgent(), 'ip' => $this->request->getIp(), 'ownerId' => $this->_content->author->uid, 'type' => 'comment', 'status' => !$this->_content->allow('edit') && $this->options->commentsRequireModeration ? 'waiting' : 'approved');
     //检验格式
     $validator = new Typecho_Validate();
     $validator->addRule('text', 'required', _t('必须填写评论内容'));
     $comment['text'] = $this->request->text;
     /** 记录登录用户的id */
     $comment['authorId'] = $this->user->uid;
     if ($error = $validator->run($comment)) {
         /** 记录文字 */
         Typecho_Cookie::set('__some_remember_text', $comment['text']);
         throw new Typecho_Widget_Exception(implode("\n", $error));
     }
     /** 生成过滤器 */
     try {
         $comment = $this->pluginHandle()->comment($comment, $this->_content);
     } catch (Typecho_Exception $e) {
         Typecho_Cookie::set('__some_remember_text', $comment['text']);
         throw $e;
     }
     // modified_by_jiangmuzi 2015.09.23
     // 解析@数据
     $atArr = $this->searchAt($comment);
     // end modified
     /** 添加评论 */
     $commentId = $this->insert($comment);
     Typecho_Cookie::delete('__some_remember_text');
     $this->db->fetchRow($this->select()->where('coid = ?', $commentId)->limit(1), array($this, 'push'));
     //更新最后评论人及时间
     $this->db->query($this->db->update('table.contents')->rows(array('lastUid' => $this->authorId, 'lastComment' => $this->created))->where('cid = ?', $this->cid));
     //提醒主题作者
     if ($comment['authorId'] != $comment['ownerId']) {
         $atArr[] = array('uid' => $comment['ownerId'], 'type' => 'comment');
     }
     if (!empty($atArr)) {
         foreach ($atArr as $v) {
             $this->widget('Widget_Users_Messages')->addMessage($v['uid'], $commentId, $v['type']);
         }
     }
     //触发评论积分规则
     Widget_Common::credits('reply', null, $commentId);
     /** 评论完成接口 */
     $this->pluginHandle()->finishComment($this);
     $this->response->goBack('#' . $this->theId);
 }
Exemple #12
0
 /**
  * 评论处理函数
  *
  * @throws Typecho_Widget_Exception
  * @throws Exception
  * @throws Typecho_Exception
  */
 private function comment()
 {
     // modified_by_jiangmuzi 2015.09.23
     // 必须登录后才可以回复
     if (!$this->user->hasLogin()) {
         $this->widget('Widget_Notice')->set(_t('请先<a href="%s">登录</a>', $this->options->someUrl('login', null, false) . '?redir=' . $this->request->getRequestUrl()), NULL, 'success');
         $this->response->goBack();
     }
     // end modified
     // 使用安全模块保护
     $this->security->protect();
     $comment = array('cid' => $this->_content->cid, 'created' => $this->options->gmtTime, 'agent' => $this->request->getAgent(), 'ip' => $this->request->getIp(), 'ownerId' => $this->_content->author->uid, 'type' => 'comment', 'status' => !$this->_content->allow('edit') && $this->options->commentsRequireModeration ? 'waiting' : 'approved');
     /** 判断父节点 */
     /*
             if ($parentId = $this->request->filter('int')->get('parent')) {
                 if ($this->options->commentsThreaded && ($parent = $this->db->fetchRow($this->db->select('coid', 'cid')->from('table.comments')
                 ->where('coid = ?', $parentId))) && $this->_content->cid == $parent['cid']) {
                     $comment['parent'] = $parentId;
                 } else {
                     throw new Typecho_Widget_Exception(_t('父级评论不存在'));
                 }
             }*/
     //检验格式
     $validator = new Typecho_Validate();
     $validator->addRule('text', 'required', _t('必须填写评论内容'));
     $comment['text'] = $this->request->text;
     /** 记录登录用户的id */
     $comment['authorId'] = $this->user->uid;
     if ($error = $validator->run($comment)) {
         /** 记录文字 */
         Typecho_Cookie::set('__some_remember_text', $comment['text']);
         throw new Typecho_Widget_Exception(implode("\n", $error));
     }
     /** 生成过滤器 */
     try {
         $comment = $this->pluginHandle()->comment($comment, $this->_content);
     } catch (Typecho_Exception $e) {
         Typecho_Cookie::set('__some_remember_text', $comment['text']);
         throw $e;
     }
     // modified_by_jiangmuzi 2015.09.23
     // 解析@数据
     $search = $replace = $atMsg = array();
     $pattern = "/@([^@^\\s^:]{1,})([\\s\\:\\,\\;]{0,1})/";
     preg_match_all($pattern, $comment['text'], $matches);
     if (!empty($matches[1])) {
         $matches[1] = array_unique($matches[1]);
         foreach ($matches[1] as $name) {
             if (empty($name)) {
                 continue;
             }
             $atUser = $this->widget('Widget_Users_Query@name_' . $name, array('name' => $name));
             if (!$atUser->have()) {
                 continue;
             }
             $search[] = '@' . $name;
             $replace[] = '<a href="' . $atUser->ucenter . '" target="_blank">@' . $name . '</a>';
             //提醒at用户
             if ($comment['authorId'] != $atUser->uid && $atUser->uid != $comment['ownerId']) {
                 $atMsg[] = array('uid' => $atUser->uid, 'type' => 'at');
             }
         }
         if (!empty($search)) {
             $comment['text'] = str_replace(@$search, @$replace, $comment['text']);
         }
     }
     // end modified
     /** 添加评论 */
     $commentId = $this->insert($comment);
     Typecho_Cookie::delete('__some_remember_text');
     $this->db->fetchRow($this->select()->where('coid = ?', $commentId)->limit(1), array($this, 'push'));
     //更新最后评论人及时间
     $this->db->query($this->db->update('table.contents')->rows(array('lastUid' => $this->authorId, 'lastComment' => $this->created))->where('cid = ?', $this->cid));
     //提醒主题作者
     if ($comment['authorId'] != $comment['ownerId']) {
         $atMsg[] = array('uid' => $comment['ownerId'], 'type' => 'comment');
     }
     if (!empty($atMsg)) {
         foreach ($atMsg as $v) {
             $this->widget('Widget_Users_Messages')->addMessage($v['uid'], $commentId, $v['type']);
         }
     }
     //触发评论积分规则
     Widget_Common::credits('reply');
     /** 评论完成接口 */
     $this->pluginHandle()->finishComment($this);
     $this->response->goBack('#' . $this->theId);
 }
Exemple #13
0
    public function footer()
    {
        $nodetags = Widget_Common::allNodeTags();
        $topicNode = isset($this->currentTag['parent']) ? $this->currentTag['parent'] != 0 ? $this->currentTag['parent'] : $this->currentTag['mid'] : 0;
        $preview_url = Typecho_Common::url('action/publish', $this->options->index);
        $html = <<<EOT
<script src="{$this->options->themeUrl('codemirror/codemirror.js', 'default')}"></script>
<script src="{$this->options->themeUrl('codemirror/markdown.js', 'default')}"></script>
<script src="{$this->options->themeUrl('js/jquery.tagsinput.min.js', 'default')}"></script>
<script>
//编辑器
var pubEditor = CodeMirror.fromTextArea(document.getElementById("topic_content"), {
    lineNumbers: true,
    mode: "markdown",
    theme: "neo",
    indentUnit: 4,
    lineWrapping: true
});
//实时统计并控制内容字数
pubEditor.on('change', function(cm, change) {
    var text = cm.getValue();
    var max = 20000;
    var remaining = max - text.length;
    var r = \$("#content_remaining");
    r.html(remaining);
});
//实时统计并控制标题字数
\$("#topic_title").keyup(function(e) {
    var s = \$("#topic_title");
    var text = s.val()
    var max = 120;
    var remaining = max - text.length;
    var r = \$("#title_remaining");
    r.html(remaining);
});
//切换标签
\$('#topic-node').on('change',function(){
\tvar that = \$(this); mid = that.data('mid'),select = that.val();
\tif(select == mid){
\t    return false;
\t}
\tthat.data('mid',select);
\tsetRecTags(select);
});
function setRecTags(mid){
\tvar nodes = {$nodetags},html='<strong>推荐标签:</strong>';
\tif(nodes[mid]!==undefined){
\t\t\$.each(nodes[mid] ,function(id,tags){
\t\t    html += '<a class="tag" href="#'+tags.slug+'">'+tags.name+'</a>';
\t\t});
\t}else{
\t\t//html='<strong>暂无推荐</strong>'
\t}
\t\$('#topic-hot-tags').html(html);
}
//设置默认
\$('#topic-node').val({$topicNode});
setRecTags({$topicNode});

//标签
\$('#tagsInput').tagsInput({
\twidth:'auto',
\theight:'auto',
\tdefaultText : '请输入标签名'
});
\$(document).on('click','#topic-hot-tags a',function(){
\tvar tag = \$(this).text();
    \$('#tagsInput').addTag(tag);
    return false;
});

function prevTopic(){
\tvar box = \$("#topic_preview_box");
\tvar preview = \$("#topic_preview");
\tif (preview.length == 0) {
        box.append('<div class="inner" id="topic_preview"></div>');
        preview = \$("#topic_preview");
    }
\tvar md = pubEditor.getValue();
\tif(md=='') return false;
\t\$.post("{$preview_url}", { 'do':'preview','text' : md }, function( data ) {
        preview.html('<div class="post-content">' + data + '</div>');
    });
}
</script>
EOT;
        echo $html;
    }
Exemple #14
0
 public function writePost()
 {
     $this->security->protect();
     $contents = $this->request->from('title', 'text', 'category', 'tags');
     if (!empty($contents['text'])) {
         $contents['text'] = '<!--markdown-->' . $contents['text'];
     }
     if (!empty($contents['category'])) {
         $contents['category'] = array($contents['category']);
     }
     $contents['slug'] = NULL;
     $contents['created'] = $this->getCreated();
     $contents['type'] = 'post';
     $contents['allowComment'] = 1;
     $contents['allowPing'] = 1;
     $contents['allowFeed'] = 1;
     /** 发布内容, 检查是否具有直接发布的权限 */
     if ($this->user->pass('editor', true)) {
         if (empty($contents['visibility'])) {
             $contents['status'] = 'publish';
         } else {
             if ('password' == $contents['visibility'] || !in_array($contents['visibility'], array('private', 'waiting', 'publish', 'hidden'))) {
                 if (empty($contents['password']) || 'password' != $contents['visibility']) {
                     $contents['password'] = '';
                 }
                 $contents['status'] = 'publish';
             } else {
                 $contents['status'] = $contents['visibility'];
                 $contents['password'] = '';
             }
         }
     } else {
         $contents['status'] = 'publish';
         $contents['password'] = '';
     }
     /** 真实的内容id */
     $realId = 0;
     /** 是否是从草稿状态发布 */
     $isDraftToPublish = 'post_draft' == $this->type;
     $isBeforePublish = 'publish' == $this->status;
     $isAfterPublish = 'publish' == $contents['status'];
     /** 重新发布现有内容 */
     if ($this->have()) {
         /** 如果它本身不是草稿, 需要删除其草稿 */
         if (!$isDraftToPublish && $this->draft) {
             $this->deleteDraft($this->draft['cid']);
             $this->deleteFields($this->draft['cid']);
         }
         /** 直接将草稿状态更改 */
         if ($this->update($contents, $this->db->sql()->where('cid = ?', $this->cid))) {
             $realId = $this->cid;
         }
     } else {
         /** 发布一个新内容 */
         $realId = $this->insert($contents);
         if ($realId > 0) {
             Widget_Common::credits('publish');
         }
     }
     if ($realId > 0) {
         /** 插入分类 */
         if (array_key_exists('category', $contents)) {
             $this->setCategories($realId, !empty($contents['category']) && is_array($contents['category']) ? $contents['category'] : array($this->options->defaultCategory), !$isDraftToPublish && $isBeforePublish, $isAfterPublish);
         }
         /** 插入标签 */
         if (array_key_exists('tags', $contents)) {
             $this->setTags($realId, $contents['tags'], !$isDraftToPublish && $isBeforePublish, $isAfterPublish);
         }
         /** 同步附件 */
         //$this->attach($realId);
         /** 保存自定义字段 */
         //$this->applyFields($this->getFields(), $realId);
         $this->db->fetchRow($this->select()->where('table.contents.cid = ?', $realId)->limit(1), array($this, 'push'));
     }
     /** 设置提示信息 */
     $this->widget('Widget_Notice')->set('post' == $this->type ? _t('文章 "<a href="%s">%s</a>" 已经发布', $this->permalink, $this->title) : _t('文章 "%s" 等待审核', $this->title), 'success');
     if ($this->have()) {
         $this->response->redirect($this->permalink);
     } else {
         $this->response->goBack();
     }
 }
Exemple #15
0
 private function activateHandle(Typecho_Db_Query $select, &$hasPushed)
 {
     $hasPushed = true;
     $this->setArchiveType($this->parameter->type);
     $this->setMetaTitle('激活帐号');
     $token = $this->request->token;
     if (empty($token)) {
         throw new Typecho_Widget_Exception(_t('请求的地址不存在'), 404);
     }
     $verify = $this->widget('Util_Verify')->setParams('type=register')->check($token);
     if (!empty($verify) && $verify['status'] != 1) {
         $row['group'] = 'contributor';
         $this->db->query($this->db->update('table.users')->rows($row)->where('uid = ?', $verify['uid']));
         $this->widget('Util_Verify')->setParams('type=register')->delete($token);
         Widget_Common::credits('invite', $verify['uid']);
     }
     $this->setThemeFile('user/activate.php');
 }
Exemple #16
0
$this->options->someAction('setting');
?>
" method="POST" enctype="multipart/form-data">
        <div class="field">
	          <label>当前头像</label>
	          <p class="m0">
					<img class="avatar vab mr10" width="96" src="<?php 
echo Widget_Common::avatar($this->user->uid, 96);
?>
" align="default">
					<img class="avatar vab mr10" width="48" src="<?php 
echo Widget_Common::avatar($this->user->uid, 48);
?>
" align="default">
					<img class="avatar vab mr10" width="24" src="<?php 
echo Widget_Common::avatar($this->user->uid, 24);
?>
" align="default">
                </p>
	      </div>
	      <div class="field">
	          <label>选择一个图片文件</label>
	          <input class="field-ipt" type="file" name="avatar">
	      </div>
	      <div class="field">
	          <label>&nbsp;</label>
	          <p class="fade field-ipt">支持 2MB 以内的 PNG / JPG / GIF 文件</p>
	      </div>
	      <div class="field">
	          <label>&nbsp;</label>
	          <button class="btn field-ipt" name="do" value="avatar"><?php 
Exemple #17
0
<div class="main">
    <div class="body container">
        <?php 
include 'page-title.php';
?>
        <div class="row typecho-page-main">
            <div class="col-mb-12 col-tb-3">
                <p><a href="<?php 
echo Typecho_Common::url('/setting/avatar', $options->index);
?>
" title="<?php 
_e('修改头像');
?>
"><?php 
Widget_Common::avatar($user->uid);
?>
</a></p>
                <h2><?php 
$user->screenName();
?>
</h2>
                <p><?php 
$user->name();
?>
</p>
                <p><?php 
_e('目前有 <em>%s</em> 篇日志, 并有 <em>%s</em> 条关于你的评论在 <em>%s</em> 个分类中.', $stat->myPublishedPostsNum, $stat->myPublishedCommentsNum, $stat->categoriesNum);
?>
</p>
                <p><?php 
Exemple #18
0
						<li><?php 
            $archives->tags(',');
            ?>
&nbsp;•&nbsp;</li>
					<?php 
        }
        ?>
                <li><a href="<?php 
        $archives->author->ucenter();
        ?>
"><?php 
        $archives->author->name();
        ?>
</a>&nbsp;•&nbsp;</li>
				<li><span><?php 
        echo Widget_Common::formatTime($archives->created, 'Y-m-d H:i:s');
        ?>
</span></li>
				<?php 
        if ($archives->lastUid) {
            ?>
				<li>&nbsp;•&nbsp;最后回复来自:<strong><a href="<?php 
            $archives->lastAuthor->ucenter();
            ?>
"><?php 
            $archives->lastAuthor->name();
            ?>
</a></strong></li>
				<?php 
        }
        ?>
Exemple #19
0
 /**
  * 输出用户头像
  *
  * @access public
  * @param integer $size 头像尺寸
  * @param string $rating 头像评级
  * @param string $default 默认输出头像
  * @param string $class 默认css class
  * @return void
  */
 public function avatar($size = 48, $class = null)
 {
     echo Widget_Common::avatar($this->uid, $size, $this->screenName, $class, false);
 }