options->generator == $this->request->getAgent()) { echo 'OK'; } } /** * 获取最新版本 * * @throws Typecho_Widget_Exception */ public function checkVersion() { $this->user->pass('editor'); $client = Typecho_Http_Client::get(); if ($client) { $client->setHeader('User-Agent', $this->options->generator) ->setTimeout(10) ->send('https://github.com/typecho/typecho/releases.atom'); /** 匹配内容体 */ $response = $client->getResponseBody(); preg_match_all("/]+href=\"([^>]*)\"\s*\/>/is", $response, $matches); $result = array('available' => 0); list($soft, $version) = explode(' ', $this->options->generator); $current = explode('/', $version); if ($matches) { foreach ($matches[0] as $key => $val) { $title = trim($matches[1][$key]); if (preg_match("/v([0-9\.]+)\-([0-9\.]+)\-release$/is", $title, $out)) { if (version_compare($out[1], $current[0], '>=') && version_compare($out[2], $current[1], '>')) { $result = array( 'available' => 1, 'latest' => $out[1] . '-' . $out[2], 'current' => $current[0] . '-' . $current[1], 'link' => 'https://github.com' . $matches[1][$key] ); break; } } } } $this->response->throwJson($result); return; } throw new Typecho_Widget_Exception(_t('禁止访问'), 403); } /** * 远程请求代理 * * @throws Typecho_Widget_Exception */ public function feed() { $this->user->pass('subscriber'); $client = Typecho_Http_Client::get(); if ($client) { $client->setHeader('User-Agent', $this->options->generator) ->setTimeout(10) ->send('http://typecho.org/feed/'); /** 匹配内容体 */ $response = $client->getResponseBody(); preg_match_all("/\s*([^>]*)<\/title>\s*<link>([^>]*)<\/link>\s*<guid>[^>]*<\/guid>\s*<pubDate>([^>]*)<\/pubDate>/is", $response, $matches); $data = array(); if ($matches) { foreach ($matches[0] as $key => $val) { $data[] = array( 'title' => $matches[1][$key], 'link' => $matches[2][$key], 'date' => date('n.j', strtotime($matches[3][$key])) ); if ($key > 8) { break; } } } $this->response->throwJson($data); return; } throw new Typecho_Widget_Exception(_t('禁止访问'), 403); } /** * 自定义编辑器大小 * * @access public * @return void */ public function editorResize() { $this->user->pass('contributor'); if ($this->db->fetchObject($this->db->select(array('COUNT(*)' => 'num')) ->from('table.options')->where('name = ? AND user = ?', 'editorSize', $this->user->uid))->num > 0) { $this->widget('Widget_Abstract_Options') ->update(array('value' => $this->request->size), $this->db->sql()->where('name = ? AND user = ?', 'editorSize', $this->user->uid)); } else { $this->widget('Widget_Abstract_Options')->insert(array( 'name' => 'editorSize', 'value' => $this->request->size, 'user' => $this->user->uid )); } } /** * 异步请求入口 * * @access public * @return void */ public function action() { if (!$this->request->isAjax()) { $this->response->goBack(); } $this->on($this->request->is('do=remoteCallback'))->remoteCallback(); $this->on($this->request->is('do=feed'))->feed(); $this->on($this->request->is('do=checkVersion'))->checkVersion(); $this->on($this->request->is('do=editorResize'))->editorResize(); } }