Example #1
0
function plugin_qblog_list_convert()
{
    global $vars, $qblog_date_format, $show_passage;
    global $qblog_page_prefix, $qblog_defaultpage, $qblog_page_format, $qblog_close;
    global $style_name;
    //閉鎖中は何も表示しない
    if ($qblog_close && !ss_admin_check()) {
        return '';
    }
    static $exec_count = 1;
    $qm = get_qm();
    $qt = get_qt();
    $qt->setv('jquery_include', TRUE);
    $list_type = PLUGIN_QBLOG_LIST_TYPE;
    $recent_posts = PLUGIN_QBLOG_LIST_DEFAULT_POSTS;
    if (func_num_args()) {
        $args = func_get_args();
        if (count($args) > 2) {
            return '#qblog_list([line or table], [number])';
        }
        foreach ($args as $arg) {
            if (is_numeric($arg)) {
                $recent_posts = (int) $arg;
            }
            if ($arg == 'line') {
                $list_type = $arg;
            }
        }
    }
    //表示モード
    //recent, archives, category
    $mode = isset($vars['mode']) ? $vars['mode'] : 'recent';
    //表示ページ:ページネーション
    //表示ページは必ず 1以上の整数
    $page_num = isset($vars['p']) ? (int) $vars['p'] : 1;
    $page_num = $page_num <= 0 ? 1 : $page_num;
    // !前処理
    if (!is_bootstrap_skin()) {
        $include_bs = '
<link rel="stylesheet" href="skin/bootstrap/css/bootstrap-custom.min.css" />
<script type="text/javascript" src="skin/bootstrap/js/bootstrap.min.js"></script>';
        $qt->appendv_once('include_bootstrap_pub', 'beforescript', $include_bs);
    }
    //qblog.css を読み込む
    $head = '
<link rel="stylesheet" href="plugin/qblog/qblog.css" />';
    $qt->appendv_once('qblog_beforescript', 'beforescript', $head);
    //---- キャッシュのための処理を登録 -----
    $qt->enable_cache = FALSE;
    //------------------------------------
    if (!file_exists(PLUGIN_QBLOG_LIST_CACHE)) {
        return $qm->m['plg_recent']['err_file_notfound'] . '<br />';
    }
    $script = get_script_uri();
    $date = $items = '';
    //h2.title 前に挿入するHTML
    $pre_title_html = '';
    // !新規記事追加リンクを表示
    // デフォルトブログページが編集できるユーザー
    $editable = FALSE;
    if (check_editable($qblog_defaultpage, FALSE, FALSE) === TRUE) {
        $editable = TRUE;
        $search_replace = array('YYYY' => date('Y'), 'MM' => date('m'), 'DD' => date('d'));
        $newpage = str_replace(array_keys($search_replace), array_values($search_replace), $qblog_page_format);
        $number_holder_pos = strpos($newpage, '#');
        if ($number_holder_pos !== FALSE) {
            $filename_prefix = encode(substr($newpage, 0, $number_holder_pos));
            $files = glob(DATA_DIR . $filename_prefix . '*');
            $pattern = '/^(' . str_replace('#', '(\\d+)', preg_quote($newpage)) . ')$/';
            $max = 1;
            foreach ($files as $file) {
                $pagename = decode(basename($file, '.txt'));
                if (preg_match($pattern, $pagename, $mts)) {
                    $max = max($mts[2], $max);
                }
            }
            $newpage = str_replace('#', $max + 1, $newpage);
        }
        $addpostlink = $script . '?cmd=qblog&mode=addpost';
        $pre_title_html .= '<a href="' . h($addpostlink) . '" class="badge badge-info" style="color:#fff"><i class="icon-white icon-edit" style="vertical-align:text-bottom;"></i> 記事の追加</a> ';
    }
    // !モードによって、読み込むキャッシュを替える
    $pages = array();
    $start = ($page_num - 1) * $recent_posts;
    $addquery = '';
    switch ($mode) {
        case 'archives':
            $date = $vars['date'];
            $addquery = '&mode=archives&date=' . rawurlencode($date);
            if (preg_match('/^(\\d{4})(\\d{2})$/', $date, $mts)) {
                $year = $mts[1];
                $month = $mts[2];
            } else {
                $year = date('Y');
                $month = date('m');
            }
            $date = $year . $month;
            $files = glob(DATA_DIR . encode($qblog_page_prefix . $date) . '*');
            foreach ($files as $file) {
                $pages[] = decode(basename($file, '.txt'));
            }
            $count_pages = count($pages);
            natsort($pages);
            $pages = array_reverse($pages);
            $pages = array_slice($pages, $start, $recent_posts);
            $subtitle = "{$year}年{$month}月";
            $pre_title_html .= '<span class="badge">' . h($subtitle) . '</span> ';
            break;
        case 'category':
            $cat = isset($vars['catname']) ? $vars['catname'] : $qblog_default_cat;
            $addquery = '&mode=category&catname=' . rawurlencode($cat);
            $pages = explode("\n", trim(file_get_contents(CACHEQBLOG_DIR . encode($cat) . '.qbc.dat')));
            $count_pages = count($pages);
            $pages = array_slice($pages, $start, $recent_posts);
            $pre_title_html .= '<span class="badge">カテゴリ:' . h($cat) . '</span> ';
            break;
        default:
            //recent mode
            // Get latest N changes
            $count_pages = (int) array_pop(file_head(PLUGIN_QBLOG_LIST_CACHE, 1));
            $lines = file_slice(PLUGIN_QBLOG_LIST_CACHE, $start + 1, $recent_posts);
            foreach ($lines as $line) {
                $pages[] = rtrim($line);
            }
    }
    //! 記事毎のデータをまとめる
    $posts = array();
    foreach ($pages as $i => $page) {
        //キャッシュファイルを読み込む
        $data = get_qblog_post_data($page);
        if ($data === FALSE) {
            continue;
        }
        $r_page = rawurlencode($page);
        if (is_file(SWFU_IMAGE_DIR . $data['image'])) {
            $data['image'] = SWFU_IMAGE_DIR . $data['image'];
        }
        if (trim($data['image']) === '') {
            $data['image'] = PLUGIN_DIR . 'qblog/qblog_thumbnail.png';
        }
        if (trim($data['image']) === '') {
            $data['image'] = PLUGIN_DIR . 'qblog/qblog_thumbnail.png';
        }
        $posts[$i] = array('page' => $page, 'title' => $data['title'], 'abstract' => $data['abstract'], 'image' => $data['image'], 'category' => $data['category'], 'url' => $script . '?' . $r_page . $addquery, 'date' => get_qblog_date($qblog_date_format, $page));
    }
    // !ページネーションリンクを足す
    $paginates = array();
    if ($count_pages > $recent_posts) {
        if ($page_num > 1) {
            $paginates[PLUGIN_QBLOG_LIST_PAGINATE_LAST_NAV] = $script . '?' . $qblog_defaultpage . '&p=1' . $addquery;
        }
        $paginate_length = ceil($count_pages / $recent_posts);
        if (PLUGIN_QBLOG_LIST_PAGINATE_NUM < $paginate_length) {
        }
        $range = (int) floor(PLUGIN_QBLOG_LIST_PAGINATE_NUM / 2);
        $start = (int) max(1, $page_num - $range);
        $end = (int) min($paginate_length + 1, $start + PLUGIN_QBLOG_LIST_PAGINATE_NUM);
        // 最初<<< 1 | 2 | 3 | 4 | 5 >>>最後
        // 最初<<< 5 | 6 | 7 | 8 | 9 >>>最後
        for ($i = $start; $i < $end; $i++) {
            $paginates[$i] = $script . '?' . $qblog_defaultpage . '&p=' . $i . $addquery;
            if ($page_num == $i) {
                $paginates[$i] = '';
            }
        }
        if ($page_num < $paginate_length) {
            $paginates[PLUGIN_QBLOG_LIST_PAGINATE_FIRST_NAV] = $script . '?' . $qblog_defaultpage . '&p=' . $paginate_length . $addquery;
        }
    }
    $template_name = 'qblog_list_template.html';
    if (file_exists(SKIN_DIR . $style_name . '/' . $template_name)) {
        $template_path = SKIN_DIR . $style_name . '/' . $template_name;
    } else {
        $template_path = PLUGIN_DIR . 'qblog/list_template.html';
    }
    //! テンプレートを読み込む
    ob_start();
    include $template_path;
    $items .= ob_get_clean();
    //! h2.title にbadge を挿入
    if ($list_type === 'table') {
        $qt->prependv('this_right_title', $pre_title_html);
    }
    return '<div id="qblog">' . $items . '</div>';
}
Example #2
0
/**
 *   QBlog display post-head plugin
 *   -------------------------------------------
 *   ./plugin/qblog_head.inc.php
 *   
 *   Copyright (c) 2012 hokuken
 *   http://hokuken.com/
 *   
 *   created  : 12/07/30
 *   modified :
 *   
 *   Description
 *   
 *   Usage :
 *   
 */
function plugin_qblog_head_convert()
{
    global $vars, $script, $defaultpage;
    global $qblog_date_format, $qblog_page_re, $qblog_defaultpage, $qblog_close, $qblog_default_cat;
    if (!is_qblog()) {
        return '';
    }
    $closed_msg = '';
    if ($qblog_close) {
        if (ss_admin_check()) {
            $closed_msg = '
<div class="alert" style="margin-top: 15px ;margin-bottom: 15px ;">
	<button class="close" data-dismiss="alert">×</button>
	<p>
		ブログは閉鎖されています。<br />
		管理者以外のアクセスはトップページへ転送されます。
	</p>
	<p>
		※ブログメニュー上のリストも管理者以外には表示されません。
	</p>
</div>
';
        } else {
            redirect($defaultpage);
        }
    }
    $qt = get_qt();
    //RSSフィードを出力
    if (exist_plugin('rss')) {
        $rssurl = $script . '?cmd=rss&qblog_rss=1';
        $qt->setv_once('rss_link', $rssurl);
    }
    if (!is_bootstrap_skin()) {
        $include_bs = '
<link rel="stylesheet" href="skin/bootstrap/css/bootstrap-custom.min.css" />
<script type="text/javascript" src="skin/bootstrap/js/bootstrap.min.js"></script>';
        $qt->appendv_once('include_bootstrap_pub', 'beforescript', $include_bs);
    }
    //qblog.css を読み込む
    $head = '
<link rel="stylesheet" href="plugin/qblog/qblog.css' . '" />';
    $qt->appendv_once('qblog_beforescript', 'beforescript', $head);
    $page = $vars['page'];
    // ブログトップは<head>内の調整のみ
    if ($page === $qblog_defaultpage) {
        return $closed_msg;
    }
    //日付を取得
    $date = get_qblog_date($qblog_date_format, $page);
    $data = get_qblog_post_data($page);
    if ($vars['cmd'] == 'edit') {
        //新規ページ
        if (!$data) {
            $data['title'] = $page;
            $data['category'] = $qblog_default_cat;
        }
        $data['title'] = isset($vars['title']) && $vars['title'] ? $vars['title'] : $data['title'];
        $data['category'] = isset($vars['category']) && $vars['category'] ? $vars['category'] : $data['category'];
        if (isset($vars['qblog_date'])) {
            $date = $vars['qblog_date'];
            list($y, $m, $d) = array_pad(explode('-', $vars['qblog_date']), 3, '');
            if (checkdate($m, $d, $y)) {
                $time = mktime(0, 0, 0, $m, $d, $y);
                $date = date($qblog_date_format, $time);
            }
        }
    }
    $category_url = $script . '?' . $qblog_defaultpage . '&mode=category&catname=' . rawurlencode($data['category']);
    $addpostlink_html = '';
    if (ss_admin_check()) {
        $editpostlink = $script . '?cmd=edit&page=' . $page;
        $addpostlink = $script . '?cmd=qblog&mode=addpost';
        $addpostlink_html = '
<a href="' . h($editpostlink) . '" class="badge badge-important" style="color:#fff"><i class="icon-white icon-edit" style="vertical-align:text-bottom"></i> この記事を編集</a>
<a href="' . h($addpostlink) . '" class="badge badge-info" style="color:#fff"><i class="icon-white icon-plus" style="vertical-align:text-bottom"></i> 記事の追加</a>
';
    }
    $head = '
<style type="text/css">
#content h2.title{display:none;}
</style>
' . $closed_msg . '
<div class="title">
<span class="qblog_post_date">' . h($date) . '</span>
' . $addpostlink_html . '
<a href="' . h($category_url) . '" class="qblog_category badge">カテゴリ:' . h($data['category']) . '</a>
</div>
<h2>' . h($data['title']) . '</h2>
';
    if (trim($data['image']) !== '') {
        if (is_file(SWFU_IMAGE_DIR . $data['image'])) {
            $data['image'] = SWFU_IMAGE_DIR . $data['image'];
        }
        $head .= <<<EOH
EOH;
    }
    return $head;
}
Example #3
0
File: html.php Project: big2men/qhm
function edit_form($page, $postdata, $digest = FALSE, $b_template = TRUE)
{
    global $script, $vars, $rows, $cols, $hr, $function_freeze;
    global $_btn_preview, $_btn_repreview, $_btn_update, $_btn_cancel, $_msg_help;
    global $whatsnew, $_btn_template, $_btn_load, $load_template_func;
    global $notimeupdate;
    global $qhm_access_key;
    global $qblog_defaultpage, $style_name, $date_format, $qblog_default_cat;
    $qt = get_qt();
    //accesskey setting
    $accesskey = array();
    foreach (array('r', 'p', 's', 'c') as $v) {
        $accesskey[$v] = $qhm_access_key ? 'accesskey="' . $v . '"' : '';
    }
    // Newly generate $digest or not
    if ($digest === FALSE) {
        $digest = md5(join('', get_source($page)));
    }
    $refer = $template = $headertitle = '';
    // Add plugin
    $addtag = $add_top = '';
    if (isset($vars['add'])) {
        global $_btn_addtop;
        $addtag = '<input type="hidden" name="add"    value="true" />';
        $add_top = isset($vars['add_top']) ? ' checked="checked"' : '';
        $add_top = '<input type="checkbox" name="add_top" ' . 'id="_edit_form_add_top" value="true"' . $add_top . ' />' . "\n" . '  <label for="_edit_form_add_top" class="checkbox">' . '<span class="small">' . $_btn_addtop . '</span>' . '</label>';
    }
    if ($load_template_func && $b_template) {
        $pages = array();
        foreach (get_existpages() as $_page) {
            if ($_page == $whatsnew || check_non_list($_page)) {
                continue;
            }
            $s_page = htmlspecialchars($_page);
            $pages[$_page] = '   <option value="' . $s_page . '">' . $s_page . '</option>';
        }
        ksort($pages);
        $s_pages = join("\n", $pages);
        $template = <<<EOD
  <select name="template_page">
   <option value="">-- {$_btn_template} --</option>
{$s_pages}
  </select>
  <input type="submit" name="template" value="{$_btn_load}" {$accesskey['r']} />
  <br />
EOD;
    }
    //新規作成の場合、ページ名を大見出しとして挿入する
    if (isset($vars['refer']) && $vars['refer'] != '') {
        $headertitle = "\n\n" . '* ' . strip_bracket($page) . "\n\n";
    }
    $r_page = rawurlencode($page);
    $s_page = htmlspecialchars($page);
    $s_digest = htmlspecialchars($digest);
    $s_postdata = htmlspecialchars($refer . $headertitle . $postdata);
    $s_original = isset($vars['original']) ? htmlspecialchars($vars['original']) : $s_postdata;
    $b_preview = isset($vars['preview']);
    // TRUE when preview
    $btn_preview = $b_preview ? $_btn_repreview : $_btn_preview;
    // Checkbox 'do not change timestamp'
    $add_notimestamp = '';
    if ($notimeupdate != 0) {
        global $_btn_notchangetimestamp;
        $checked_time = isset($vars['notimestamp']) ? ' checked="checked"' : '';
        // Only for administrator
        if ($notimeupdate == 2) {
            $add_notimestamp = '   ' . '<input type="password" name="pass" size="12" />' . "\n";
        }
        $add_notimestamp = '<label for="_edit_form_notimestamp" class="checkbox"><input type="checkbox" name="notimestamp" ' . 'id="_edit_form_notimestamp" value="true"' . $checked_time . ' tabindex="9" />' . "\n" . '   ' . '<span class="small">' . $_btn_notchangetimestamp . '</span></label>' . "\n" . $add_notimestamp . '&nbsp;';
    }
    $buttons_align = 'left';
    $blog_cancel_button = 'right';
    if (is_bootstrap_skin()) {
        $buttons_align = 'right';
        $blog_cancel_button = 'left';
    } else {
        //Bootstrap の読み込み
        $include_bs = '
<link rel="stylesheet" href="skin/bootstrap/css/bootstrap-custom.min.css" />
<script type="text/javascript" src="skin/bootstrap/js/bootstrap.min.js"></script>';
        $qt->appendv_once('include_bootstrap_pub', 'beforescript', $include_bs);
    }
    // !ブログ用編集フォーム
    if ($page !== $qblog_defaultpage && is_qblog()) {
        //メタデータを取得
        $data = get_qblog_post_data($page);
        $data['title'] = isset($vars['title']) ? $vars['title'] : $data['title'];
        $data['category'] = isset($vars['category']) ? $vars['category'] : $data['category'];
        $data['image'] = isset($vars['image']) ? $vars['image'] : $data['image'];
        $date = get_qblog_date($date_format, $page);
        if (isset($vars['qblog_date']) && $date !== trim($vars['qblog_date'])) {
            $dates = array_pad(explode('-', $vars['qblog_date'], 3), 3, 0);
            $valid = checkdate($dates[1], $dates[2], $dates[0]);
            $date = $valid ? trim($vars['qblog_date']) : $date;
        }
        $category = isset($data['category']) && strlen(trim($data['category'])) > 0 ? $data['category'] : '';
        $qblog_categories = array_keys(get_qblog_categories());
        $qblog_cat_json = json_encode($qblog_categories);
        $h_qblog_cat_json = h(json_encode($qblog_categories));
        $qblog_cat_list = '<ul id="qblog_categories_selector" class="qblog_categories collapse">';
        foreach ($qblog_categories as $cat) {
            $qblog_cat_list .= '<li>' . h($cat) . '</li>';
        }
        $qblog_cat_list .= '</ul>';
        $h2title = '新規投稿';
        if (is_page($page)) {
            $h2title = $data['title'] . 'の編集';
        }
        $s_h2title = h($h2title);
        $s_blog_title = h($data['title']);
        $body = <<<EOD
<link rel="stylesheet" href="js/datepicker/css/datepicker.css" />
<link rel="stylesheet" href="plugin/qblog/qblog.css" />
<script src="js/datepicker/js/bootstrap-datepicker.js"></script>
<script tyle="text/javascript">
\$(function(){
\t\$('#qblog_datepicker').datepicker({
\t\tlanguage: "japanese"
//\t\tformat: "yyyy/mm/dd"
\t});
\tif (\$("input[name=category]").val().length == 0) {
\t\t\$('#qblog_cat_trigger').click();
\t}

\tif (\$('h2.title').length == 0) {
\t\t\$("#edit_form_main").before('<h2 class="title">{$s_h2title}</h2>');
\t}
\t\$('h2.title').text('{$s_h2title}');

\t\$('a.show-thumbnail').click(function(){
\t\tif (\$(this).next().is(':visible')) {
\t\t\t\$(this).next().hide();
\t\t}
\t\telse {
\t\t\t\$(this).next().show();
\t\t}
\t\treturn false;
\t});

});
</script>

<div class="qblog_edit_form">
<form action="{$script}" method="post" class="form-horizontal" id="edit_form_main">
{$template}
  {$addtag}
  <input type="hidden" name="cmd"    value="edit" />
  <input type="hidden" name="page"   value="{$s_page}" />
  <input type="hidden" name="digest" value="{$s_digest}" />
  <fieldset>
    <div class="form-group">
      <label class="control-label col-sm-2">日付</label>
      <div class="controls col-sm-10"><input type="text" name="qblog_date" id="qblog_datepicker" tabindex="1" class="datepicker form-control" size="16" value="{$date}"  data-date="{$date}"  data-date-format="yyyy-mm-dd" class="form-control" /></div>
    </div>
    <div class="form-group">
      <label class="control-label col-sm-2">タイトル</label>
      <div class="controls col-sm-10"><input type="text" name="title" value="{$s_blog_title}" tabindex="2" class="form-control" /></div>
  \t</div>
    <div class="form-group">
      <label class="control-label col-sm-2">カテゴリ</label>
      <div class="controls col-sm-10">
        <div class="input-group">
          <input type="text" name="category" value="{$category}" placeholder="{$qblog_default_cat}" tabindex="3" class="form-control" data-provide="typeahead" data-source="{$h_qblog_cat_json}" autocomplete="off" />
          <span class="input-group-btn">
            <button type="button" id="qblog_cat_trigger" class="btn btn-default qhm-btn-default" data-toggle="collapse" data-target="#qblog_categories_selector" style="color:#333">
              カテゴリ
              <span class="caret"></span>
            </button>
          </span>
        </div>
        {$qblog_cat_list}
      </div>
    </div>
      <div class="form-group">
          <label class="control-label col-sm-2">記事の内容</label>
          <div class="controls col-sm-10">
              <textarea name="msg" id="msg" tabindex="4" rows="20" class="form-control">{$s_postdata}</textarea>
  \t\t</div>
  \t</div>
      <div class="form-group">
          <div class="controls col-sm-10 col-sm-offset-2">
\t  \t\t<a class="show-thumbnail" href="#">サムネイルを指定する &gt;&gt;</a>
  \t\t\t<div class="set-thumbnail">
  \t\t\t\t<small>自動で本文の画像が使われます。<br />特別に指定したい場合、画像を画像名またはURLで指定してください。</small>
                  <p style="color:#333;">画像名またはURL:<input type="text" name="image" value="{$data['image']}" tabindex="5" class="form-control" /></p>
  \t\t\t\t<p><small><span class="swfu"><a href="swfu/index_child.php">&gt;&gt;QHMのファイル管理(SWFU)を使って画像をアップする</a></span></small></p>
  \t\t\t</div>
<!--  \t\t\t<span class="swfu"><a href="swfu/index_child.php"><i class="icon-picture"></i>SWFU</a><span>
\t\t\t<p class="help-block">SWFUの画像を使う場合、画像詳細画面の<b>URL</b>をコピペしてください。</p>
-->
  \t\t</div>
  \t</div>
      <div class="form-group">
        <div class="col-sm-10 col-sm-offset-2">
          <div style="float:{$buttons_align};">
            <input type="submit" name="preview" value="{$btn_preview}" tabindex="6" class="qhm-btn-default"/>
            <input type="submit" name="write"   value="{$_btn_update}" tabindex="7" class="qhm-btn-primary"/>
        \t\t{$add_notimestamp}
            {$add_top}
        \t\t<textarea name="original" rows="1" cols="1" style="display:none">{$s_original}</textarea>
          </div>
          <div style="float:{$buttons_align};">
            <input type="submit" name="cancel" value="{$_btn_cancel}" tabindex="8" class="btn-link"/>
          </div>
      </div>
  \t</div>
  </fieldset>
</form>
</div>

EOD;
    } else {
        $body = <<<EOD

<div class="edit_form">
 <form action="{$script}" method="post" style="margin-bottom:0px;" id="edit_form_main">
{$template}
  {$addtag}
  <input type="hidden" name="cmd"    value="edit" />
  <input type="hidden" name="page"   value="{$s_page}" />
  <input type="hidden" name="digest" value="{$s_digest}" />
  <div class="form-group">
    <textarea name="msg" id="msg" rows="{$rows}" cols="{$cols}" tabindex="2" class="form-control">{$s_postdata}</textarea>
  </div>
  <div style="float:{$buttons_align};">
   <input type="submit" name="preview" value="{$btn_preview}" tabindex="4" class="qhm-btn-default"/>
   <input type="submit" name="write"   value="{$_btn_update}" tabindex="5" class="qhm-btn-primary"/>
   {$add_top}
   {$add_notimestamp}
  </div>
  <textarea name="original" rows="1" cols="1" style="display:none">{$s_original}</textarea>
 </form>
 <form action="{$script}" method="post" style="margin-top:0px;margin-left:5px;float:{$buttons_align};" id="edit_form_cancel">
  <input type="hidden" name="cmd"    value="edit" />
  <input type="hidden" name="page"   value="{$s_page}" />
  <input type="submit" name="cancel" value="{$_btn_cancel}" tabindex="6" class="btn-link"/>
 </form>
 <div style="clear:both;"></div>
</div>
EOD;
    }
    $addscript = <<<EOD
<script data-qhm-plugin="edit">
\$(function(){

  if (\$("h2.title").length == 0) {
    \$(".edit_form").before('<h2 class="title">{$s_page} の編集</h2>');
  }
  \$("h2.title").css({fontSize: "14px", marginBottom: '15px'});

  \$("#editboxlink").on("click", function(){
    if (\$(".qblog_edit_form").length) {
      QHM.scroll(".qblog_edit_form", 300);
    }
    else {
      QHM.scroll("h2.title", 300);
    }
    \$("#msg").focus();
    return false;
  });

  if (\$("#preview_body").length) {
  }
  else {
    \$(".qhm-eyecatch").hide();

    setTimeout(function(){
      \$("html, body").animate({scrollTop: \$("h2.title").offset().top}, 300);
      \$("#msg").focus();
    }, 25);
  }
});
</script>
EOD;
    $qt->appendv_once("plugin_edit_form_script", 'lastscript', $addscript);
    // List of attached files to the page by hokuken.com
    $attaches = exist_plugin_action('attach') ? attach_filelist(true) : '';
    if ($attaches !== '') {
        $body .= <<<EOD
<script type="text/javascript" src="js/yahoo.js"></script>
<script type="text/javascript" src="js/event.js"></script>
<script type="text/javascript" src="js/dom.js"></script>

<style type="text/css">
.yui-tt {
\tposition: absolute;
\tpadding: 5px;
\tbackground-color:#eee;
\tborder:1px solid #aaa;
}
</style>
<script type="text/javascript" src="js/container.js"></script>
<script type="text/javascript">
    function init() {
        var el = document.getElementById('attachlist');
        if(el != null){

\t        var list = el.getElementsByTagName('a');
\t        for( var i=0; i<list.length; i++ ) {
\t            if( list[i].getAttribute("rel") == "attachhref" ){
\t\t\t\t\tvar el = 'tooltip'+i;
\t\t\t\t\tvar url = list[i].href;
\t\t\t\t\tvar title = '<img src="'+list[i].href+'">';
\t\t\t\t\tif ( list[i].title ) title += '<br>'+list[i].innerHTML;
\t\t\t\t\tvar tp = new YAHOO.widget.Tooltip( el, { context:list[i], text: title, autodismissdelay: 7500 } );
\t\t\t\t}
\t        }

        }

        var el = document.getElementById('swfulist');
        if(el != null){
        \tvar list = el.getElementsByTagName('a');

\t        for( var i=0; i<list.length; i++ ) {
\t            if( list[i].getAttribute("rel") == "attachhref" ){
\t\t\t\t\tvar el = 'tooltip'+i;
\t\t\t\t\tvar url = list[i].getAttribute("url");
\t\t\t\t\tvar title = '<img src="'+url+'">';
\t\t\t\t\tif ( list[i].title ) title += '<br>'+list[i].innerHTML;
\t\t\t\t\tvar tp = new YAHOO.widget.Tooltip( el, { context:list[i], text: title, autodismissdelay: 7500 } );
\t\t\t\t}
\t        }
\t\t}
  }
  YAHOO.util.Event.addListener(window, "load", init);
</script>
EOD;
        $body .= '<br /><div id="attachlist" style="border: 2px dashed #666;padding:5px 10px;background-color:#eee">' . $attaches . '</div>';
    }
    $qm = get_qm();
    $helpstr = $qm->m['html']['view_help_message'];
    //list up swfu files
    if (has_swfu()) {
        require_once SWFU_TEXTSQL_PATH;
        $db = new CTextDB(SWFU_IMAGEDB_PATH);
        $imgtitle = $qm->m['html']['img_title'];
        $imgtitle2 = $qm->m['html']['img_title2'];
        $attcstr = $qm->m['html']['attach_message'];
        //! swfuの画像データを取得して表示をする
        $rs = $db->select('$page_name=="' . $page . '"', 'created desc');
        if (count($rs) > 0) {
            $body .= '<div id="swfulist" style="border:1px #aaa dashed;margin-top:10px;padding:10px;font-size:12px">';
            $body .= '<b><a href="./swfu/index_child.php?page=FrontPage&KeepThis=true&TB_iframe=true&height=450&width=650" class="thickbox">' . $attcstr . '(SWFU)</a> : </b>';
            foreach ($rs as $k => $v) {
                $path = SWFU_IMAGE_DIR . $v['name'];
                $prop = SWFU_DIR . 'view.php?id=' . $v['id'] . '&page=FrontPage&KeepThis=true&TB_iframe=true&height=450&width=650';
                $body .= '<span style="padding:2px;margin-right:5px">';
                $atitle1 = $qm->replace("html.insert_title", $v['name']);
                $atitle2 = $qm->replace("html.ar_insert_title", $v['name']);
                if (preg_match('/\\.(png|jpeg|jpg|gif)$/i', $v['name'])) {
                    $title = h($v['name']);
                    $body .= '<a href="' . $prop . '" url="' . $path . '" rel="attachhref" class="thickbox" title="' . $title . '"><img src="image/file.png" width="20" height="20" alt="file" style="border-width:0" />' . $v['name'] . '</a>';
                    $body .= <<<EOD
<a href="#" title="{$atitle1}" onclick="javascript:jQuery.clickpad.cpInsert('&show({$v['name']},,{$v['description']});'); return false;"><img src="image/ins-img.png" alt="{$imgtitle}"/></a><a href="#" title="{$atitle2}" onclick="javascript:jQuery.clickpad.cpInsert('\\n#show({$v['name']},aroundl,{$v['description']})\\n'); return false;"><img src="image/ins-img2.png" alt="{$imgtitle2}" /></a>
EOD;
                } else {
                    $body .= '<a href="' . $path . '"><img src="image/file.png" width="20" height="20" alt="file" style="border-width:0" />' . $v['name'] . '</a>';
                    $body .= <<<EOD
<a href="#" title="{$v['name']}" onclick="javascript:insert('&dlbutton({$path});'); return false;"><img src="image/ins-btn.png" alt="{$imgtitle}"/></a>
EOD;
                }
                $body .= '</span>';
            }
            $body .= '</div>';
        }
    }
    return $body;
}
Example #4
0
function plugin_edit_write()
{
    global $vars, $trackback, $layout_pages;
    global $notimeupdate, $do_update_diff_table;
    global $qblog_defaultpage, $date_format, $qblog_menubar;
    $qm = get_qm();
    $page = isset($vars['page']) ? $vars['page'] : '';
    $add = isset($vars['add']) ? $vars['add'] : '';
    $digest = isset($vars['digest']) ? $vars['digest'] : '';
    $vars['msg'] = preg_replace(PLUGIN_EDIT_FREEZE_REGEX, '', $vars['msg']);
    $msg =& $vars['msg'];
    // Reference
    $retvars = array();
    // Collision Detection
    $oldpagesrc = join('', get_source($page));
    $oldpagemd5 = md5($oldpagesrc);
    if ($digest != $oldpagemd5) {
        $vars['digest'] = $oldpagemd5;
        // Reset
        $original = isset($vars['original']) ? $vars['original'] : '';
        list($postdata_input, $auto) = do_update_diff($oldpagesrc, $msg, $original);
        $retvars['msg'] = $qm->m['fmt_title_collided'];
        $retvars['body'] = ($auto ? $qm->m['fmt_msg_collided_auto'] : $qm->m['fmt_msg_collided']) . "\n";
        $retvars['body'] .= $do_update_diff_table;
        $retvars['body'] .= edit_form($page, $postdata_input, $oldpagemd5, FALSE);
        return $retvars;
    }
    // Action?
    if ($add) {
        // Add
        if (isset($vars['add_top']) && $vars['add_top']) {
            $postdata = $msg . "\n\n" . @join('', get_source($page));
        } else {
            $postdata = @join('', get_source($page)) . "\n\n" . $msg;
        }
    } else {
        // Edit or Remove
        $postdata =& $msg;
        // Reference
    }
    //ブログの時は、タイトルを足す
    if ($page !== $qblog_defaultpage && is_qblog()) {
        global $qblog_default_cat;
        $title = trim($vars['title']);
        $image = trim($vars['image']);
        $cat = trim($vars['category']);
        $cat = $cat === '' ? $qblog_default_cat : $cat;
        if ($postdata !== '') {
            $postdata = 'TITLE:' . $title . "\n" . $postdata;
        }
    }
    // NULL POSTING, OR removing existing page
    if ($postdata == '') {
        page_write($page, $postdata);
        $retvars['msg'] = $qm->m['fmt_title_deleted'];
        $retvars['body'] = str_replace('$1', htmlspecialchars($page), $qm->m['fmt_title_deleted']);
        if ($trackback) {
            tb_delete($page);
        }
        return $retvars;
    }
    // $notimeupdate: Checkbox 'Do not change timestamp'
    $notimestamp = isset($vars['notimestamp']) && $vars['notimestamp'] != '';
    if ($notimeupdate > 1 && $notimestamp && !pkwk_login($vars['pass'])) {
        // Enable only administrator & password error
        $retvars['body'] = '<p><strong>' . $qm->m['fmt_msg_invalidpass'] . '</strong></p>' . "\n";
        $retvars['body'] .= edit_form($page, $msg, $digest, FALSE);
        return $retvars;
    }
    page_write($page, $postdata, $notimeupdate != 0 && $notimestamp);
    //ブログの場合
    if ($page !== $qblog_defaultpage && is_qblog()) {
        // 日付の変更があったら、ページ名の変更
        $page_date = get_qblog_date($date_format, $page);
        if ($page_date and $vars['qblog_date'] != $page_date) {
            // ページ名の変更
            if (exist_plugin('rename')) {
                // ! renameのために $vasの値を変更
                $vars['page'] = $newpage = qblog_get_newpage($vars['qblog_date']);
                $vars['refer'] = $refer = $page;
                $vars['exist'] = 1;
                $pages = array();
                $pages[encode($refer)] = encode($newpage);
                $files = plugin_rename_get_files($pages);
                $exists = array();
                foreach ($files as $_page => $arr) {
                    foreach ($arr as $old => $new) {
                        if (file_exists($new)) {
                            $exists[$_page][$old] = $new;
                        }
                    }
                }
                plugin_rename_proceed($pages, $files, $exists, FALSE);
                //保留コメントリスト内のページ名を変更
                $datafile = CACHEQBLOG_DIR . 'qblog_pending_comments.dat';
                $pending_comments = unserialize(file_get_contents($datafile));
                foreach ($pending_comments as $i => $comment) {
                    if ($comment['page'] == $page) {
                        $pending_comments[$i]['page'] = $newpage;
                    }
                }
                file_put_contents($datafile, serialize($pending_comments), LOCK_EX);
                //最新コメントリスト内のページ名を変更
                $datafile = CACHEQBLOG_DIR . 'qblog_recent_comments.dat';
                file_put_contents($datafile, str_replace($page, $newpage, file_get_contents($datafile)), LOCK_EX);
                //変数を格納し直す
                $page = $newpage;
            }
        }
        //ブログの時は、ポストキャッシュを書き換える
        $option = array('category' => $cat, 'image' => $image);
        qblog_update_post($force, $page, $option);
        //Ping送信を行う
        if (!$notimestamp) {
            send_qblog_ping();
        }
    }
    pkwk_headers_sent();
    //ブログメニューの場合、ブログトップへ移動する
    if ($page === $qblog_menubar) {
        header('Location: ' . get_script_uri() . '?' . $qblog_defaultpage);
    } else {
        if (array_key_exists($page, $layout_pages)) {
            header('Location: ' . get_script_uri());
        } else {
            header('Location: ' . get_script_uri() . '?' . rawurlencode($page));
        }
    }
    exit;
}
Example #5
0
/**
 *   QBlog Footer Plugin
 *   -------------------------------------------
 *   ./plugin/qblog_foot.inc.php
 *
 *   Copyright (c) 2012 hokuken
 *   http://hokuken.com/
 *
 *   created  : 12/08/01
 *   modified :
 *
 */
function plugin_qblog_foot_convert()
{
    global $vars, $script, $qblog_page_re, $qblog_defaultpage;
    global $qblog_include_page, $qblog_social_widget, $qblog_social_html, $qblog_social_wiki;
    $qt = get_qt();
    $page = $vars['page'];
    if ($page === $qblog_defaultpage or !is_qblog()) {
        return '';
    }
    $addquery = '';
    $datafile = CACHEQBLOG_DIR . 'qblog_recent.dat';
    if (isset($vars['mode'])) {
        $mode = trim($vars['mode']);
        if ($mode === 'category') {
            //カテゴリーから来た時はキャッシュ無効
            $qt->enable_cache = FALSE;
            $cat = trim($vars['catname']);
            $datafile = CACHEQBLOG_DIR . encode($cat) . '.qbc.dat';
            $addquery = '&mode=category&catname=' . rawurlencode($cat);
        } else {
            if ($mode === 'archives') {
                //月別アーカイブから来た時はキャッシュ無効
                $qt->enable_cache = FALSE;
                $date = $vars['date'];
                $addquery = '&mode=archives&date=' . rawurlencode($date);
            }
        }
    }
    //前後の記事を qblog_recent.dat から持ってくる。
    $fp = fopen($datafile, 'r');
    $prev = $next = $most_recent = '';
    $notfound = TRUE;
    if ($fp) {
        if ($mode !== 'category') {
            //件数の行を飛ばす
            fgets($fp, 64);
        }
        while (!feof($fp)) {
            $line = trim(fgets($fp, 64));
            if ($most_recent === '') {
                $most_recent = $line;
            }
            if ($page === $line) {
                $notfound = FALSE;
                if (!feof($fp)) {
                    $prev = trim(fgets($fp, 64));
                }
                break;
            }
            $next = $line;
        }
        fclose($fp);
    }
    //新規記事追加後で、リストに自分のページ名がない場合
    if ($notfound && $most_recent !== '') {
        $prev = $most_recent;
        $next = '';
    }
    //日付アーカイブからのアクセスでは、同月のみ表示
    if ($mode === 'archives') {
        $prev = $prev && $date == get_qblog_date('Ym', $prev) ? $prev : FALSE;
        $next = $next && $date == get_qblog_date('Ym', $next) ? $next : FALSE;
    }
    $prevlink = $script . '?' . rawurlencode($prev) . $addquery;
    $nextlink = $script . '?' . rawurlencode($next) . $addquery;
    $pagelink = $script . '?' . rawurlencode($page);
    $foot = '<ul class="pager">';
    $foot .= $next ? '<li class="next"><a href="' . h($nextlink) . '">次の記事 &rarr;</a></li>' : '';
    //	$foot .= '<li><a href="'. h($pagelink) .'">パーマリンク</a></li>';//TODO: 自分自身へのリンクは消される
    $foot .= $prev ? '<li class="previous"><a href="' . h($prevlink) . '">&larr; 前の記事</a></li>' : '';
    $foot .= '</ul>';
    //<link> を出力する
    $head = '<link rel="contents" href="' . h($script . '?' . $qblog_defaultpage) . '" />';
    $head .= $prev ? '<link rel="prev" href="' . h($prevlink) . '" />' : '';
    $head .= $next ? '<link rel="next" href="' . h($nextlink) . '" />' : '';
    $qt->appendv_once('qblog_foot', 'beforescript', $head);
    // ! ソーシャルボタンなど、共通部品を出力する
    if ($qblog_social_widget === 'default') {
        $foot = convert_html("#social_buttons") . $foot;
    } else {
        if ($qblog_social_widget === 'wiki') {
            $foot = convert_html($qblog_social_wiki) . $foot;
        } else {
            if ($qblog_social_widget === 'html') {
                $foot = $qblog_social_html . $foot;
            }
        }
    }
    return $foot;
}
Example #6
0
function plugin_rss_action()
{
    global $vars, $rss_max, $page_title, $whatsnew, $trackback;
    global $qblog_defaultpage, $qblog_title, $qblog_close;
    $qm = get_qm();
    $qt = get_qt();
    $version = isset($vars['ver']) ? $vars['ver'] : '';
    switch ($version) {
        case '':
            $version = '2.0';
            break;
            // Default
        // Default
        case '1':
            $version = '1.0';
            break;
            // Sugar
        // Sugar
        case '2':
            $version = '2.0';
            break;
            // Sugar
        // Sugar
        case '0.91':
            /* FALLTHROUGH */
        /* FALLTHROUGH */
        case '1.0':
            /* FALLTHROUGH */
        /* FALLTHROUGH */
        case '2.0':
            break;
        default:
            die($qm->m['plg_rss']['err_version']);
    }
    $lang = LANG;
    $qblog_mode = FALSE;
    //blogモード
    if (isset($vars['blog_rss']) && $vars['blog_rss'] != '') {
        $blog_mode = $vars['blog_rss'];
        //ブログページ名
        $qt->setv('blog_rss_mode', true);
        $page_title_utf8 = $page_title . ' - ' . $blog_mode;
    } else {
        if (isset($vars['qblog_rss'])) {
            //閉鎖中はRSS出力しない
            if ($qblog_close) {
                exit;
            }
            $qblog_mode = TRUE;
            $blog_mode = FALSE;
            $page_title_utf8 = mb_convert_encoding($qblog_title, 'UTF-8', SOURCE_ENCODING);
        } else {
            $blog_mode = false;
            $page_title_utf8 = mb_convert_encoding($page_title, 'UTF-8', SOURCE_ENCODING);
        }
    }
    $self = get_script_uri();
    // Creating <item>
    global $ignore_plugin, $strip_plugin, $strip_plugin_inline;
    $items = $rdf_li = '';
    if ($qblog_mode) {
        $qblog_recent = CACHEQBLOG_DIR . 'qblog_recent.dat';
        if (!file_exists($qblog_recent)) {
            die($qm->m['plg_rss']['err_nodata']);
        }
        // ページネーション用のヘッダー行を飛ばす
        $lines = file_head($qblog_recent, $rss_max + 1);
        array_shift($lines);
    } else {
        $recent = CACHE_DIR . 'recent.dat';
        if (!file_exists($recent)) {
            die($qm->m['plg_rss']['err_nodata']);
        }
        $lines = file_head($recent, $rss_max);
    }
    foreach ($lines as $line) {
        $skip_list = FALSE;
        if ($qblog_mode) {
            $page = trim($line);
            $time = strtotime(get_qblog_date('Y-m-d 00:00:00', $page));
        } else {
            list($time, $page) = explode("\t", rtrim($line));
        }
        //blogモードで、$blog_name/Hogehogeでないなら(つまり、ブログページでないなら、何もしない
        if ($blog_mode && !preg_match('/^' . $blog_mode . '\\/.*/', $page)) {
            continue;
        }
        $r_page = rawurlencode($page);
        $title = get_page_title($page);
        $source = get_source($page);
        foreach ($source as $k => $l) {
            if (preg_match($ignore_plugin, $l)) {
                // リストから省く
                $skip_list = TRUE;
                break;
            }
            if (preg_match($strip_plugin, $l)) {
                // 説明から省く
                unset($source[$k]);
            }
        }
        if ($skip_list) {
            continue;
        }
        //html(noskinを避ける)
        if (count($source) > 0) {
            $source = str_replace('#html(noskin)', '#html()', $source);
            $source = preg_replace($strip_plugin_inline, '', $source);
            // 行内のプラグインを説明から省く
        }
        $contents = mb_strimwidth(strip_htmltag(convert_html($source)), 0, RSS_DESP_LENGTH, '...');
        $contents = preg_replace_callback('/(&[^;]+;)/', 'plugin_rss_html_entity_decode', $contents);
        $contents = plugin_rss_utf8_for_xml($contents);
        switch ($version) {
            case '0.91':
                /* FALLTHROUGH */
            /* FALLTHROUGH */
            case '2.0':
                $date = get_date('D, d M Y H:i:s T', $time);
                $date = $version == '0.91' ? ' <description>' . $date . ' -- ' . $contents . '</description>' : ' <pubDate>' . $date . '</pubDate>' . ' <description>' . $contents . '</description>';
                $items .= <<<EOD
<item>
 <title>{$title}</title>
 <link>{$self}?{$r_page}</link>
{$date}
</item>

EOD;
                break;
            case '1.0':
                // Add <item> into <items>
                $rdf_li .= '    <rdf:li rdf:resource="' . $self . '?' . $r_page . '" />' . "\n";
                $date = substr_replace(get_date('Y-m-d\\TH:i:sO', $time), ':', -2, 0);
                $trackback_ping = '';
                if ($trackback) {
                    $tb_id = md5($r_page);
                    $trackback_ping = ' <trackback:ping>' . $self . '?tb_id=' . $tb_id . '</trackback:ping>';
                }
                $items .= <<<EOD
<item rdf:about="{$self}?{$r_page}">
 <title>{$title}</title>
 <link>{$self}?{$r_page}</link>
 <description><![CDATA[{$contents}]]></description>
 <dc:date>{$date}</dc:date>
 <dc:identifier>{$self}?{$r_page}</dc:identifier>
{$trackback_ping}
</item>

EOD;
                break;
        }
    }
    // Feeding start
    pkwk_common_headers();
    header('Content-type: application/xml; charset=utf-8');
    print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
    $r_whatsnew = rawurlencode($blog_mode ? $blog_mode : $whatsnew);
    $pagename = $qblog_mode ? $qblog_defaultpage : $r_whatsnew;
    $description = $qblog_mode ? 'QBlog Recent Changes' : $qm->m['plg_rss']['description'];
    $page_title_utf8 = h(plugin_rss_utf8_for_xml($page_title_utf8));
    $description = h(plugin_rss_utf8_for_xml($description));
    switch ($version) {
        case '0.91':
            print '<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN"' . ' "http://my.netscape.com/publish/formats/rss-0.91.dtd">' . "\n";
            /* FALLTHROUGH */
        /* FALLTHROUGH */
        case '2.0':
            print <<<EOD
<rss version="{$version}">
 <channel>
  <title>{$page_title_utf8}</title>
  <link>{$self}?{$pagename}</link>
  <description>{$description}</description>
  <language>{$lang}</language>

{$items}
 </channel>
</rss>
EOD;
            break;
        case '1.0':
            $xmlns_trackback = $trackback ? '  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : '';
            print <<<EOD
<rdf:RDF
  xmlns:dc="http://purl.org/dc/elements/1.1/"
{$xmlns_trackback}
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xml:lang="{$lang}">
 <channel rdf:about="{$self}?{$pagename}">
  <title>{$page_title_utf8}</title>
  <link>{$self}?{$pagename}</link>
  <description>{$description}</description>
  <items>
   <rdf:Seq>
{$rdf_li}
   </rdf:Seq>
  </items>
 </channel>

{$items}
</rdf:RDF>
EOD;
            break;
    }
    exit;
}