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>'; }
/** * 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; }
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 . ' '; } $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="#">サムネイルを指定する >></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">>>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; }
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; }
/** * 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) . '">次の記事 →</a></li>' : ''; // $foot .= '<li><a href="'. h($pagelink) .'">パーマリンク</a></li>';//TODO: 自分自身へのリンクは消される $foot .= $prev ? '<li class="previous"><a href="' . h($prevlink) . '">← 前の記事</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; }
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; }