Esempio n. 1
0
 /**
  * 引用处理函数
  *
  * @access private
  * @return void
  */
 private function trackback()
 {
     /** 如果不是POST方法 */
     if (!$this->request->isPost() || $this->request->getReferer()) {
         $this->response->redirect($this->_content->permalink);
     }
     /** 如果库中已经存在当前ip为spam的trackback则直接拒绝 */
     if ($this->size($this->select()->where('status = ? AND ip = ?', 'spam', $this->request->getIp())) > 0) {
         /** 使用404告诉机器人 */
         throw new Typecho_Widget_Exception(_t('找不到内容'), 404);
     }
     $trackback = array('cid' => $this->_content->cid, 'created' => $this->options->gmtTime, 'agent' => $this->request->getAgent(), 'ip' => $this->request->getIp(), 'ownerId' => $this->_content->author->uid, 'type' => 'trackback', 'status' => $this->options->commentsRequireModeration ? 'waiting' : 'approved');
     $trackback['author'] = $this->request->filter('trim')->blog_name;
     $trackback['url'] = $this->request->filter('trim')->url;
     $trackback['text'] = $this->request->excerpt;
     //检验格式
     $validator = new Typecho_Validate();
     $validator->addRule('url', 'required', 'We require all Trackbacks to provide an url.')->addRule('url', 'url', 'Your url is not valid.')->addRule('url', 'maxLength', 'Your url is not valid.', 200)->addRule('text', 'required', 'We require all Trackbacks to provide an excerption.')->addRule('author', 'required', 'We require all Trackbacks to provide an blog name.')->addRule('author', 'xssCheck', 'Your blog name is not valid.')->addRule('author', 'maxLength', 'Your blog name is not valid.', 200);
     $validator->setBreak();
     if ($error = $validator->run($trackback)) {
         $message = array('success' => 1, 'message' => current($error));
         $this->response->throwXml($message);
     }
     /** 截取长度 */
     $trackback['text'] = Typecho_Common::subStr($trackback['text'], 0, 100, '[...]');
     /** 如果库中已经存在重复url则直接拒绝 */
     if ($this->size($this->select()->where('cid = ? AND url = ? AND type <> ?', $this->_content->cid, $trackback['url'], 'comment')) > 0) {
         /** 使用403告诉机器人 */
         throw new Typecho_Widget_Exception(_t('禁止重复提交'), 403);
     }
     /** 生成过滤器 */
     $trackback = $this->pluginHandle()->trackback($trackback, $this->_content);
     /** 添加引用 */
     $this->insert($trackback);
     /** 评论完成接口 */
     $this->pluginHandle()->finishTrackback($this);
     /** 返回正确 */
     $this->response->throwXml(array('success' => 0, 'message' => 'Trackback has registered.'));
 }