Example #1
0
 /**
  * あいまい検索用正規表現の集合体を取得する。
  *
  * @param string    もとになるキーワード
  * @return    array(string)    あいまい検索用正規表現を集めた配列
  */
 static function makefuzzyexplist($key)
 {
     //仮名は全角カタカナに、英数字・空白文字は半角に、 濁点付きの文字を一文字に、記号は全角に。
     $_key = mb_strtolower(mb_convert_kana($key, 'KVCas'));
     foreach (self::$han2zen_mark_table as $han => $zen) {
         $_key = mb_ereg_replace(mb_ereg_quote($han), $zen, $_key);
     }
     //2文字以上での表現を1文字にする
     foreach (self::$two2one as $from => $to) {
         $_key = mb_ereg_replace($from, $to, $_key);
     }
     //文字により削除(表記ゆれまたはごみ)
     $_key = mb_ereg_replace('[ッー・゛゜、。]', '', $_key);
     //異体文字に対応する。
     $char = array();
     $len = mb_strlen($_key);
     for ($i = 0; $i < $len; $i++) {
         $c = mb_substr($_key, $i, 1);
         $char[] = isset($GLOBALS['itaimojitable'][$c]) ? $GLOBALS['itaimojitable'][$c] : mb_ereg_quote($c);
     }
     //ちょっと違う単語を許すようにする
     $list = self::makeagrepexplist($char);
     //表記ゆれになる文字を挟み込む
     $ret = array();
     foreach ($list as $a) {
         $ret[] = join('[・ーー]?', $a);
     }
     return $ret;
 }
Example #2
0
 public function do_url()
 {
     if (!isset(Vars::$get['blogname']) || trim(Vars::$get['blogname']) == '') {
         throw new PluginException('パラメータが足りません。', $this);
     }
     $blogname = trim(Vars::$get['blogname']);
     $num = isset(Vars::$get['recent']) && Vars::$get['recent'] > 0 ? (int) Vars::$get['recent'] : 15;
     $db = DataBase::getinstance();
     $_exp = $db->escape('^' . mb_ereg_quote($blogname) . '/\\d{4}-\\d{2}-\\d{2}/');
     $query = "SELECT pagename,timestamp FROM page";
     $query .= " WHERE php('mb_ereg', '{$_exp}', pagename)";
     $query .= " ORDER BY timestamp DESC, pagename ASC LIMIT {$num}";
     $result = $db->query($query);
     $list = array();
     $prefixsize = mb_strlen($blogname . '/9999-99-99/');
     while ($row = $db->fetch($result)) {
         $item['timestamp'] = $row['timestamp'];
         $item['pagename'] = mb_substr($row['pagename'], $prefixsize);
         $item['url'] = getURL(Page::getinstance($row['pagename']));
         $list[] = $item;
     }
     $smarty = $this->getSmarty();
     $smarty->assign('rssurl', SCRIPTURL . '?' . htmlspecialchars($_SERVER['QUERY_STRING']));
     $smarty->assign('sitename', SITENAME);
     $smarty->assign('blogurl', getURL(Page::getinstance($blogname)));
     $smarty->assign('blogname', $blogname);
     $smarty->assign('list', $list);
     header('Content-Type: application/xml; charset=UTF-8');
     header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $item['timestamp'][0]) . ' GMT');
     $smarty->display('blogrss10.tpl.htm');
     exit;
 }
Example #3
0
 function do_url()
 {
     if (!keys_exists(Vars::$post, 'base', 'config')) {
         throw new PluginException('パラメータが足りません', $this);
     }
     $source = Page::getinstance(':config/plugin/tracker/' . Vars::$post['config'] . '/page')->getsource();
     foreach (Vars::$post as $key => $data) {
         if (mb_strpos($key, 'param_') === 0) {
             $name = '[' . mb_substr($key, 6) . ']';
             $_data = trim($data);
             $_data = mb_ereg_replace('\\[', '&#x5b;', $_data, 'm');
             $_data = mb_ereg_replace('\\]', '&#x5d;', $_data, 'm');
             $replace[$name] = $_data;
         }
     }
     $replace['[_date]'] = date('Y-m-d H:i:s');
     $replace['[_base]'] = Vars::$post['base'];
     foreach ($replace as $name => $data) {
         $source = mb_ereg_replace(mb_ereg_quote($name), $data, $source, 'm');
     }
     $db = DataBase::getinstance();
     self::$sqlite_pattern = '^' . mb_ereg_quote(Vars::$post['base']) . '/(\\d+)';
     $db->create_aggregate('plugin_tracker_maxnum', array('Plugin_tracker', 'sqlite_maxnum'), array('Plugin_tracker', 'sqlite_maxnum_finalize'), 1);
     $row = $db->fetch($db->query("SELECT plugin_tracker_maxnum(pagename) FROM page"));
     $num = $row[0] + 1;
     $title = isset(Vars::$post['param_title']) && trim(Vars::$post['param_title']) != '' ? '/' . trim(Vars::$post['param_title']) : '';
     $page = Page::getinstance(Vars::$post['base'] . '/' . $num . $title);
     $page->write($source);
     redirect($page);
 }
Example #4
0
 function do_block($page, $param1, $param2)
 {
     $prefix = trim($param1);
     $pattern = '^' . mb_ereg_quote($prefix) . '/(\\d{1,4})-(\\d{2})';
     if (mb_ereg($pattern, $page->getpagename(), $m)) {
         $year = $m[1];
         $month = $m[2];
     } else {
         if (isset(Vars::$get['year']) && isset(Vars::$get['month'])) {
             $year = Vars::$get['year'];
             $month = Vars::$get['month'];
         } else {
             $year = date('Y');
             $month = date('n');
         }
     }
     $smarty = $this->getSmarty();
     $day = 1;
     $last = date('t', mktime(0, 0, 0, $month, 1, $year));
     while ($day <= $last) {
         $line = array_fill(0, 7, '&nbsp;');
         $d = date('w', mktime(0, 0, 0, $month, $day, $year));
         for (; $d < 7 && $day <= $last; $d++, $day++) {
             $p = Page::getinstance(sprintf('%s/%04d-%02d-%02d', $prefix, $year, $month, $day));
             $line[$d] = $p->isexist() ? makelink($p, $day) : $day;
         }
         $table[] = $line;
     }
     $smarty->assign('table', $table);
     $smarty->assign('year', $year);
     $smarty->assign('month', $month);
     $smarty->assign('prefix', $prefix);
     $smarty->assign('page', $page->getpagename());
     return $smarty->fetch('blogcalendar.tpl.htm');
 }
Example #5
0
 protected function includepage($pagename, $source, $home)
 {
     mb_ereg('^' . mb_ereg_quote($home) . '/\\d+/(.+)$', $pagename, $m);
     $smarty = $this->getsmarty();
     $smarty->assign('title', $pagename);
     $smarty->assign('alias', $m[1]);
     $smarty->assign('body', convert_block($source, $pagename));
     return $smarty->fetch('include.tpl.htm');
 }
Example #6
0
 function do_block($page, $param1, $param2)
 {
     $arg = array_map('trim', explode(',', $param1));
     $base = isset($arg[0]) && $arg[0] != '' ? $arg[0] : $page->getpagename();
     $config = isset($arg[1]) && $arg[1] != '' ? $arg[1] : 'default';
     $this->sortkey = isset($arg[2]) ? array_slice($arg, 2) : array();
     $configpagename = ':config/plugin/tracker/' . $config;
     $configdata = Plugin_tracker::Page2data(Page::getinstance($configpagename));
     $this->type2name = array();
     foreach ($configdata['form'] as $name => $line) {
         if (mb_ereg('\\[(.+?)\\]', $line[0], $m)) {
             $this->type2name[$m[1]] = $name;
         }
     }
     $this->selectorder = $this->getselectorderlist($configdata);
     $bgcolorlist = $this->getbgcolorlist($configdata);
     $list = array();
     $db = DataBase::getinstance();
     $query = 'SELECT pagename, source FROM page';
     $query .= ' WHERE pagename like \'' . $db->escape($base) . '%\'';
     $query .= ' ORDER BY timestamp DESC';
     $result = $db->query($query);
     while ($row = $db->fetch($result)) {
         if (!mb_ereg('^' . mb_ereg_quote($base) . '/(\\d+)/(.+)$', $row[0], $m)) {
             continue;
         }
         $item = array();
         $item['var']['_page'] = $row[0];
         $item['var']['_num'] = $m[1];
         $item['var']['_title'] = $m[2];
         foreach (explode("\n", $row[1]) as $line) {
             if (mb_ereg('^[-ー・](.+?)[\\t  ]*[::][\\t  ]*(.+?)[\\t  ]*$', $line, $m)) {
                 if (!isset($item[$m[1]])) {
                     $item['var'][$m[1]] = $m[2];
                     $item['bgcolor'][$m[1]] = isset($bgcolorlist[$m[1]][$m[2]]) ? $bgcolorlist[$m[1]][$m[2]] : null;
                 }
             }
         }
         $list[] = $item;
     }
     usort($list, array($this, 'cmp'));
     $smarty = $this->getSmarty();
     $smarty->assign('list', $list);
     if (trim($param2) == '') {
         return '<p class="warning">表示項目を指定してください</p>';
     }
     $smarty->assign('varname', array_map('trim', explode(',', $param2)));
     return $smarty->fetch('trackerlist.tpl.htm');
 }
Example #7
0
 protected function record()
 {
     if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] != '') {
         if (!mb_ereg('^' . mb_ereg_quote(SCRIPTDIR), $_SERVER['HTTP_REFERER']) && !mb_ereg('^(?:ftp|https?)://[^.]+?/', $_SERVER['HTTP_REFERER'])) {
             $db = DataBase::getinstance();
             $_url = $db->escape($_SERVER['HTTP_REFERER']);
             $_pagename = $db->escape($this->getcurrentPage()->getpagename());
             $db->begin();
             $db->query("UPDATE plugin_referrer SET count = count + 1 WHERE pagename = '{$_pagename}' AND url = '{$_url}'");
             if ($db->changes() == 0) {
                 $db->query("INSERT INTO plugin_referrer VALUES('{$_pagename}', '{$_url}', 1)");
             }
             $db->commit();
         }
     }
 }
Example #8
0
 function do_url()
 {
     if (!isset(Vars::$post['bbsname']) || Vars::$post['bbsname'] == '') {
         throw new PluginException('パラメータが足りません。', $this);
     }
     if (!isset(Vars::$post['text']) || Vars::$post['text'] == '') {
         redirect(Page::getinstance(isset(Vars::$post['pagename']) ? Vars::$post['pagename'] : ''));
     }
     $db = DataBase::getinstance();
     self::$sqlite_pattern = '^' . mb_ereg_quote(Vars::$post['bbsname']) . '/(\\d+)/.+$';
     $db->create_aggregate('maxbbsnum', array('Plugin_bbs', 'sqlite_maxbbsnum'), array('Plugin_bbs', 'sqlite_maxbbsnum_finalize'), 1);
     $row = $db->fetch($db->query("SELECT maxbbsnum(pagename) FROM page"));
     $num = $row[0] + 1;
     $subject = isset(Vars::$post['subject']) && trim(Vars::$post['subject']) != '' ? trim(Vars::$post['subject']) : '(無題)';
     $page = Page::getinstance(Vars::$post['bbsname'] . "/{$num}/{$subject}");
     $smarty = $this->getSmarty();
     $smarty->assign('timestamp', time());
     $name = isset(Vars::$post['name']) ? trim(Vars::$post['name']) : '';
     $smarty->assign('name', $name);
     $smarty->assign('text', Vars::$post['text']);
     $page->write($smarty->fetch('bbs.tpl'));
     setcookie('name', $name, time() + 60 * 60 * 24 * 30);
     redirect($page);
 }
Example #9
0
 protected function _markword_normal($w)
 {
     return mb_ereg_quote($w);
 }
Example #10
0
 /**
  * 投稿記事の保存。
  */
 protected function write()
 {
     if (mb_ereg('^' . mb_ereg_quote($this->blogname) . '/.+?/(.+)$', $this->continuefrom, $m)) {
         $continuefrom = "[[{$m[1]}>{$this->continuefrom}]]";
     } else {
         $continuefrom = '';
     }
     $catlist = '';
     foreach ($this->categories as $c) {
         $catlist .= "&#x5b;[[{$c}>{$this->categorypagename}/{$c}]]&#x5d;";
     }
     $smarty = $this->getSmarty();
     $smarty->assign('subject', $this->subject);
     $smarty->assign('text', $this->text);
     $smarty->assign('categorylist', $catlist);
     $smarty->assign('timestamp', time());
     $smarty->assign('continuefrom', $continuefrom);
     $smarty->assign('pagename', $this->pagename);
     $source = $smarty->fetch('blog.tpl');
     //autolsプラグインと衝突しないように、書き込み順に注意。
     DataBase::getinstance()->begin();
     $this->_write_datepage();
     Page::getinstance($this->pagename)->write($source);
     $this->_write_category();
     $this->_write_continue();
     DataBase::getinstance()->commit();
 }
Example #11
0
function do_search_fuzzy($word, $type = 'AND', $non_format = FALSE, $non_fuzzy = FALSE)
{
    global $whatsnew, $non_list, $search_non_list;
    global $search_auth, $search_fuzzy;
    static $fuzzypattern = array('ヴァ' => 'バ', 'ヴィ' => 'ビ', 'ヴェ' => 'ベ', 'ヴォ' => 'ボ', 'ヴ' => 'ブ', 'ヰ' => 'イ', 'ヱ' => 'エ', 'ヵ' => 'カ', 'ァ' => 'ア', 'ィ' => 'イ', 'ゥ' => 'ウ', 'ェ' => 'エ', 'ォ' => 'オ', 'ャ' => 'ヤ', 'ュ' => 'ユ', 'ョ' => 'ヨ');
    $retval = array();
    $b_type = $type == 'AND';
    // AND:TRUE OR:FALSE
    $keys = get_search_words(preg_split('/\\s+/', $word, -1, PREG_SPLIT_NO_EMPTY));
    $_pages = get_existpages();
    $pages = array();
    $non_list_pattern = '/' . $non_list . '/';
    foreach ($_pages as $page) {
        if ($page == $whatsnew || !$search_non_list && preg_match($non_list_pattern, $page)) {
            continue;
        }
        // 検索対象ページの制限をかけるかどうか (ページ名は制限外)
        if ($search_auth && !check_readable($page, false, false)) {
            $source = get_source();
            // 検索対象ページ内容を空に。
        } else {
            $source = get_source($page);
        }
        if (!$non_format) {
            array_unshift($source, $page);
        }
        // ページ名も検索対象に
        $b_match = FALSE;
        //miko modified
        if (!$search_fuzzy || $non_fuzzy) {
            foreach ($keys as $key) {
                $tmp = preg_grep('/' . $key . '/', $source);
                $b_match = !empty($tmp);
                if ($b_match xor $b_type) {
                    break;
                }
            }
            if ($b_match) {
                $pages[$page] = get_filetime($page);
            }
        } else {
            $fuzzy_from = array_keys($fuzzypattern);
            $fuzzy_to = array_values($fuzzypattern);
            $words = preg_split('/\\s+/', $word, -1, PREG_SPLIT_NO_EMPTY);
            $_source = mb_strtolower(mb_convert_kana(join("\n", $source), 'KVCas'));
            for ($i = 0; $i < count($fuzzy_from); $i++) {
                $_source = mb_ereg_replace($fuzzy_from[$i], $fuzzy_to[$i], $_source);
            }
            $_source = mb_ereg_replace('[ッー・゛゜、。]', '', $_source);
            foreach ($keys as $key) {
                $_keyword = mb_strtolower(mb_convert_kana($word, 'KVCas'));
                for ($i = 0; $i < count($fuzzy_from); $i++) {
                    $_keyword = mb_ereg_replace($fuzzy_from[$i], $fuzzy_to[$i], $_keyword);
                }
                $_keyword = mb_ereg_replace('[ッー・゛゜、。]', '', $_keyword);
                $b_match = mb_ereg(mb_ereg_quote($_keyword), $_source);
            }
            if ($b_match) {
                $pages[$page] = get_filetime($page);
            }
        }
        //miko modified
    }
    if ($non_format) {
        return array_keys($pages);
    }
    $r_word = rawurlencode($word);
    $s_word = htmlspecialchars($word);
    if (empty($pages)) {
        return str_replace('$1', $s_word, $_string['notfoundresult']);
    }
    ksort($pages);
    $retval = '<ul>' . "\n";
    foreach ($pages as $page => $time) {
        $s_page = htmlspecialchars($page);
        $passage = get_passage($time);
        $retval .= ' <li><a href="' . get_page_uri($page, '', 'word=' . $r_word) . '">' . $s_page . '</a>' . $passage . '</li>' . "\n";
    }
    $retval .= '</ul>' . "\n";
    $retval .= str_replace('$1', $s_word, str_replace('$2', count($pages), str_replace('$3', count($_pages), $b_type ? $_string['andresult'] : $_string['orresult'])));
    return $retval;
}
Example #12
0
 protected function __construct($datepagelist)
 {
     $this->datepagelist = $datepagelist;
     $this->pattern = '^(' . mb_ereg_quote($datepagelist->gethome()) . '/\\d{4}-\\d{2}-\\d{2})/.+$';
 }
Example #13
0
/**
 * 配列要素にヒットする正規表現を生成する。
 * 
 * @param	array(string)	&$pagelist	この関数の実行後、$pagelistの中身は保証されない。
 * @return	string	正規表現
 */
function makelinkexp(&$pagelist)
{
    if (count($pagelist) <= 1) {
        return count($pagelist) == 0 ? '' : mb_ereg_quote($pagelist[0]);
    }
    $emptyflag = false;
    $bin = array();
    while ($pagelist != array()) {
        $pagename = array_pop($pagelist);
        if ($pagename != '') {
            $bin[mb_substr($pagename, 0, 1)][] = mb_substr($pagename, 1);
        } else {
            $emptyflag = true;
        }
    }
    $key = array_keys($bin);
    foreach ($key as $k) {
        $ret[] = mb_ereg_quote($k) . makelinkexp($bin[$k]);
    }
    if (count($ret) == 1) {
        return $emptyflag ? '(?:' . $ret[0] . ')?' : $ret[0];
    } else {
        return '(?:' . join('|', $ret) . ')' . ($emptyflag ? '?' : '');
    }
}