public static function setLanguage() { global $language_considering_setting_level; global $language; global $public_holiday_guest_view; $language = self::getLanguage($language_considering_setting_level); // LANG - Internal content encoding ('en', 'ja', or ...) define('LANG', $language); // Set COOKIE['lang'] $parsed_url = parse_url(Router::get_script_absuri()); $path = $parsed_url['path']; if (($pos = strrpos($path, '/')) !== FALSE) { $path = substr($path, 0, $pos + 1); } setcookie('lang', $language, 0, $path); $_COOKIE['lang'] = $language; // PUBLIC HOLIDAY // Installation person's calendar is adopted. $_c = explode('_', $public_holiday_guest_view ? $language : DEFAULT_LANG); define('COUNTRY', $_c[1]); unset($_c); // I18N if (extension_loaded('intl')) { Locale::setDefault($language); } // LOCALE Name specified by GETTEXT(). define('DOMAIN', 'pukiwiki'); // LOCALE Name specified by SETLOCALE(). defined('PO_LANG') or define('PO_LANG', $language); // 'en_US', 'ja_JP' // PHP mbstring process. self::setMbstring($language); }
/** * コンストラクタ */ public function __construct() { global $adminpass, $vars; // if (!isset($this->auth_name)) throw new Exception('$this->auth_name has not set.'); // コールバック先のページ $page = isset($vars['page']) ? $vars['page'] : null; // 管理人のパスワードのハッシュを暗号/復号のキーとする list(, $salt) = Auth::passwd_parse($adminpass); // 暗号化/復号化用 $this->bc = BlockCipher::factory('mcrypt', array('algo' => 'des', 'mode' => 'cfb', 'hash' => 'sha512', 'salt' => $salt)); // コールバック先のURL。通常プラグインのコールバックアドレスが返される $this->callbackUrl = isset($this->auth_name) ? Router::get_resolve_uri($this->auth_name, $vars['page'], 'full') : null; // セッション名 $this->session_name = self::SESSION_PREFIX . md5(Router::get_script_absuri() . session_id()); }
public static function check($postdata) { global $akismet_api_key; $akismet = new ZendService\Akismet($akismet_api_key, Router::get_script_absuri()); if ($akismet->verifyKey($akismet_api_key)) { // 送信するデーターをセット $akismet_post = array('user_ip' => Utility::getRemoteIp(), 'user_agent' => isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null, 'comment_type' => 'comment', 'comment_author' => isset($vars['name']) ? $vars['name'] : self::DEFAULT_USER_NAME); if ($use_spam_check['akismet'] === 2) { $akismet_post['comment_content'] = $postdata; } else { // 差分のみをAkismetに渡す $akismet_post['comment_content'] = $addedata; } if ($akismet->isSpam($akismet_post)) { Utility::dieMessage('Writing was limited by Akismet (Blocking SPAM).', $_title['prohibit'], 400); } } else { Utility::dieMessage('Akismet API key does not valied.', 500); } }
function get_script_absuri() { return Router::get_script_absuri(); }
/** * Atom/rssを出力 * string $page ページ名(ページ名が入っている場合はキャッシュは無効) * string $type rssかatomか。 * boolean $force キャッシュ生成しない * return void */ public static function getFeed($page = '', $type = 'rss', $force = false) { global $vars, $site_name, $site_logo, $modifier, $modifierlink, $_string, $cache; static $feed; // rss, atom以外はエラー if (!($type === 'rss' || $type === 'atom')) { throw new Exception('Recent::getFeed(): Unknown feed type.'); } $content_type = $type === 'rss' ? 'application/rss+xml' : 'application/atom+xml'; $body = ''; if (empty($page)) { // recentキャッシュの更新チェック if ($cache['wiki']->getMetadata(self::RECENT_CACHE_NAME)['mtime'] > $cache['wiki']->getMetadata(self::FEED_CACHE_NAME)['mtime']) { $force = true; } if ($force) { // キャッシュ再生成 unset($feed); $cache['wiki']->removeItem(self::FEED_CACHE_NAME); } else { if (!empty($feed)) { // メモリにキャッシュがある場合 } else { if ($cache['wiki']->hasItem(self::FEED_CACHE_NAME)) { // キャッシュから最終更新を読み込む $feed = $cache['wiki']->getItem(self::FEED_CACHE_NAME); } } } } if (empty($feed)) { // Feedを作る $feed = new Feed(); // Wiki名 $feed->setTitle($site_name); // Wikiのアドレス $feed->setLink(Router::get_script_absuri()); // サイトのロゴ //$feed->setImage(array( // 'title'=>$site_name, // 'uri'=>$site_logo, // 'link'=>Router::get_script_absuri() //)); // Feedの解説 $feed->setDescription(sprintf($_string['feed_description'], $site_name)); // Feedの発行者など $feed->addAuthor(array('name' => $modifier, 'uri' => $modifierlink)); // feedの更新日時(生成された時間なので、この実装で問題ない) $feed->setDateModified(time()); $feed->setDateCreated(time()); // Feedの生成 $feed->setGenerator(S_APPNAME, S_VERSION, 'http://pukiwiki.logue.be/'); if (empty($page)) { // feedのアドレス // ※Zend\Feedの仕様上、&が自動的に&に変更されてしまう $feed->setFeedLink(Router::get_cmd_uri('feed') . '&type=atom', 'atom'); $feed->setFeedLink(Router::get_cmd_uri('feed'), 'rss'); // PubSubHubbubの送信 foreach (Ping::$pubsubhubbub_server as $uri) { $feed->addHub($uri); } } else { $r_page = rawurlencode($page); $feed->setFeedLink(Router::get_cmd_uri('feed') . '&type=atom&refer=' . $r_page, 'atom'); $feed->setFeedLink(Router::get_cmd_uri('feed') . '&refer=' . $r_page, 'rss'); } $i = 0; // エントリを取得 foreach (self::get() as $_page => $time) { // ページ名が指定されていた場合、そのページより下位の更新履歴のみ出力 if (!empty($page) && strpos($_page, $page . '/') === false) { continue; } $wiki = Factory::Wiki($_page); if ($wiki->isHidden()) { continue; } $entry = $feed->createEntry(); // ページのタイトル $entry->setTitle($wiki->title()); // ページのアドレス $entry->setLink($wiki->uri()); // ページの更新日時 $entry->setDateModified($wiki->time()); // ページの要約 $entry->setDescription($wiki->description(self::FEED_ENTRY_DESCRIPTION_LENGTH)); // 項目を追加 $feed->addEntry($entry); $i++; if ($i >= self::RECENT_MAX_SHOW_PAGES) { break; } } if (empty($page)) { // キャッシュに保存 $cache['wiki']->setItem(self::FEED_CACHE_NAME, $feed); } } flush(); $headers = Header::getHeaders($content_type); Header::writeResponse($headers, 200, $feed->export($type)); //header('Content-Type: ' . $content_type); //echo $body; exit; }
/** * WeblogUpdatesPingの送信 */ protected function sendWeblogUpdatesPing() { global $site_name; $err = array(); // XMLRpcリクエストオブジェクトを生成 $request = new XmlRpcRequest(); // weblogUpdates.pingをセット $request->setMethod('weblogUpdates.ping'); // 送るパラメータ $request->setParams(array($site_name, Router::get_script_absuri(), $this->wiki->uri())); // 送信 foreach ($this->weblog_updates_ping_server as $uri) { try { // Pingサーバーに接続 $client = new XmlRpcClient($uri); // Pingの送信 $client->doRequest($request); } catch (\Zend\XmlRpc\Client\Exception\FaultException $e) { $err[] = $e; } unset($client); } return $err; }
/** * 差分から追加されたリンクと削除されたリンクを取得しURIBLチェック * @param object $diff * @return type */ private function checkUriBl($diff) { // 変数の初期化 $links = $added = $removed = array(); // 差分から追加行と削除行を取得 foreach ($diff->getSes() as $key => $line) { if ($key === $diff::SES_ADD) { $added[] = $line; } else { if ($key === $diff::SES_DELETE) { $removed[] = $line; } } } // それぞれのリンクの差分を取得 $links = array_diff(self::getLinkList($added), self::getLinkList($removed)); unset($added, $removed); // 自分自身へのリンクを除外 $links = preg_grep('/^(?!' . preg_quote(Router::get_script_absuri(), '/') . '\\?)./', $links); // ホストのみ取得 foreach ($links as $temp_uri) { $temp_uri_info = parse_url($temp_uri); if (empty($temp_uri_info['host'])) { continue; } $uri_filter = new UriFilter($temp_uri_info['host']); if ($uri_filter->checkHost()) { return 'uribl'; } if ($uri_filter->isListedNSBL()) { return 'nsbl'; } } return false; }
// absoluteURI // $script の値に、相対URIを指定した場合に効果があります。 // // 0: It depends on the value of $script. // 1: The value of absoluteURI is always returned. // ---- // 0: $script の値に準ずる // 1: 常に、絶対URIを戻す $absolute_uri = 1; // Specify PukiWiki Plus! absoluteURI (Only when you set $script to relativeURI) // $script に相対URIを指定した際に、必要であれば、絶対URIを指定して下さい。 //$script_abs = ''; // Site admin's name (CHANGE THIS) $modifier = 'anonymous'; // Site admin's Web page (CHANGE THIS) $modifierlink = Router::get_script_absuri(); // Default page name $defaultpage = 'FrontPage'; // Top / Default page $whatsnew = 'RecentChanges'; // Modified page list $whatsdeleted = 'RecentDeleted'; // Removeed page list $interwiki = 'InterWikiName'; // Set InterWiki definition here $aliaspage = 'AutoAliasName'; // Set AutoAlias definition here $menubar = 'MenuBar'; // Menu $sidebar = 'SideBar'; // Side
/** * JavaScriptタグを出力 * @return string */ private function getJs() { global $vars, $js_tags, $js_blocks, $google_analytics; // JS用初期設定 $js_init = array('DEBUG' => constant('DEBUG'), 'DEFAULT_LANG' => constant('DEFAULT_LANG'), 'IMAGE_URI' => constant('IMAGE_URI'), 'JS_URI' => constant('JS_URI'), 'LANG' => constant('LANG'), 'SCRIPT' => Router::get_script_absuri(), 'THEME_NAME' => constant('THEME_NAME'), 'COMMON_URI' => self::USE_CDN ? false : constant('COMMON_URI')); // JavaScriptタグの組み立て if (isset($vars['page'])) { $js_init['PAGE'] = str_replace('%2F', '/', rawurlencode($vars['page'])); $js_init['MODIFIED'] = $this->wiki->time(); } if (isset($google_analytics)) { $js_init['GOOGLE_ANALYTICS'] = $google_analytics; } if (!IS_MOBILE) { $jsfiles = self::$default_js; } else { // jquery mobileは、mobile.jsで非同期読み込み。 $js_init['JQUERY_MOBILE_VER'] = self::JQUERY_MOBILE_VER; $jsfiles = self::$mobile_js; } if (DEBUG === true) { $pkwk_head_js[] = array('type' => 'text/javascript', 'src' => '//' . self::JQUERY_CDN . '/jquery-migrate-git.js', 'defer' => 'defer'); // 読み込むsrcディレクトリ内のJavaScript foreach ($jsfiles as $script_file) { $pkwk_head_js[] = array('type' => 'text/javascript', 'src' => JS_URI . (!IS_MOBILE ? 'src/' : 'mobile/') . $script_file . '.js', 'defer' => 'defer'); } $pkwk_head_js[] = array('type' => 'text/javascript', 'src' => JS_URI . (!IS_MOBILE ? 'src/' . self::DEFAULT_JS : 'mobile/' . self::MOBILE_JS), 'defer' => 'defer'); } else { $pkwk_head_js[] = array('type' => 'text/javascript', 'src' => JS_URI . (IS_MOBILE ? self::MOBILE_JS_COMPRESSED : self::DEFAULT_JS_COMPRESSED), 'defer' => 'defer'); } $pkwk_head_js[] = array('type' => 'text/javascript', 'src' => JS_URI . 'locale.js', 'defer' => 'defer'); $pkwk_head_js[] = array('type' => 'text/javascript', 'src' => '/assets/js/app.js', 'defer' => 'defer'); // $js_vars[] = 'var pukiwiki = {};'; foreach ($js_init as $key => $val) { $js_vars[] = 'var ' . $key . ' = ' . (!empty($val) ? '"' . $val . '"' : 'false') . ';'; } array_unshift($pkwk_head_js, array('type' => 'text/javascript', 'content' => join($js_vars, "\n"))); unset($js_var, $key, $val); $script_tags = self::tag_helper('script', $pkwk_head_js) . self::tag_helper('script', $js_tags); $script_tags .= !empty($js_blocks) ? self::tag_helper('script', array(array('type' => 'text/javascript', 'content' => join("\n", $js_blocks)))) : ''; if (defined('BB2_CWD')) { global $bb2_javascript; // Bad-behavior $script_tags .= $bb2_javascript; } return $script_tags; }