Example #1
0
 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);
 }
Example #2
0
 /**
  * コンストラクタ
  */
 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());
 }
Example #3
0
 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);
     }
 }
Example #4
0
function get_script_absuri()
{
    return Router::get_script_absuri();
}
Example #5
0
 /**
  * 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;
 }
Example #6
0
 /**
  * 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;
 }
Example #7
0
 /**
  * 差分から追加されたリンクと削除されたリンクを取得し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;
 }
Example #8
0
// 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
Example #9
0
 /**
  * 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;
 }