Exemple #1
0
 function get_a_tag()
 {
     if (defined('HYP_K_TAI_RENDER') && HYP_K_TAI_RENDER && HypCommonFunc::get_version() >= '20080620') {
         HypCommonFunc::loadClass('HypKTaiRender');
         $r = new HypKTaiRender();
         $r->set_myRoot(XOOPS_URL);
         $msg['easylogin'] = $this->root->k_tai_conf['msg']['easylogin'] ? $this->root->k_tai_conf['msg']['easylogin'] : '******';
         $msg['logout'] = $this->root->k_tai_conf['msg']['logout'] ? $this->root->k_tai_conf['msg']['logout'] : 'Logout';
         if (!empty($r->vars['ua']['isKTai'])) {
             if (!$this->root->userinfo['uid']) {
                 $add = '_EASYLOGIN';
                 if ($r->vars['ua']['carrier'] === 'docomo') {
                     $add .= '&guid=ON';
                 }
                 $url = $r->myRoot . $r->removeSID($_SERVER['REQUEST_URI']);
                 $url .= (strpos($url, '?') === FALSE ? '?' : '&') . $add;
                 $url = str_replace('&', '&', $url);
                 return '<a href="' . $url . '">' . $msg['easylogin'] . '</a>';
             } else {
                 $guid = $r->vars['ua']['carrier'] === 'docomo' ? '&amp;guid=ON' : '';
                 return '<a href="' . XOOPS_URL . '/userinfo.php?uid=' . $this->root->userinfo['uid'] . $guid . '">' . $this->root->userinfo['uname_s'] . '</a> <a href="' . XOOPS_URL . '/user.php?op=logout">' . $msg['logout'] . '</a>';
             }
         }
     }
     return '';
 }
Exemple #2
0
 function plugin_rws_convert()
 {
     if (HypCommonFunc::get_version() < 20120528) {
         return '#rws require "HypCommonFunc" >= Ver. 20120528';
     }
     if (!empty($this->root->vars['page']) && preg_match('/template/i', $this->root->vars['page'])) {
         return FALSE;
     }
     $this->root->rtf['disable_render_cache'] = true;
     $this->load_language();
     if (!$this->options_default) {
         $this->options_default = array('hits' => false, 'page' => false, 'minPrice' => false, 'maxPrice' => false, 'field' => false, 'orFlag' => false);
     } else {
         // for compat
         if (!isset($this->options_default['pages'])) {
             $this->options_default['pages'] = 1;
         }
         if (!isset($this->options_default['start'])) {
             $this->options_default['start'] = 1;
         }
     }
     $this->options = $this->options_default;
     $args = array_pad(func_get_args(), 6, '');
     $f = trim(array_shift($args));
     $m = trim(array_shift($args));
     // shopCode
     $k = trim(array_shift($args));
     // keyword
     $b = intval(array_shift($args));
     // genreId
     $s = trim(array_shift($args));
     // sort
     $header = trim(array_shift($args));
     if ($header === '') {
         $header = 1;
     }
     if (!$m && !$k && !$b) {
         return FALSE;
     }
     $this->fetch_options($this->options, $args);
     list($more_link, $ret) = $this->plugin_rws_get($f, $m, $k, $b, $s);
     $style = ' style="word-break:break-all;"';
     $more = '';
     if ($more_link) {
         $header = intval($header);
         if ($header > 2 && $header < 6) {
             $more = '<h' . $header . '>' . $more_link . '</h' . $header . '>';
         } else {
             $more = $header ? '<h4>' . $more_link . '</h4>' : '';
         }
     }
     return $this->gc(true) . $more . '<div' . $style . '>' . $ret . '</div>';
 }
Exemple #3
0
 function plugin_aws_convert()
 {
     if (HypCommonFunc::get_version() < 20120615) {
         return '#aws require "HypCommonFunc" >= Ver. 20120615';
     }
     if (!empty($this->root->vars['page']) && preg_match('/template/i', $this->root->vars['page'])) {
         return FALSE;
     }
     $this->root->rtf['disable_render_cache'] = true;
     $this->load_language();
     if (!$this->options_default) {
         $this->options_default = array('search' => 'keywords', 'timestamp' => FALSE, 'makepage' => FALSE, 'maxdepth' => 5, 'pages' => 1, 'start' => 1);
     } else {
         // for compat
         if (!isset($this->options_default['pages'])) {
             $this->options_default['pages'] = 1;
         }
         if (!isset($this->options_default['start'])) {
             $this->options_default['start'] = 1;
         }
     }
     $this->options = $this->options_default;
     $args = array_pad(func_get_args(), 6, '');
     $f = array_shift($args);
     $m = array_shift($args);
     $k = array_shift($args);
     $b = preg_replace('/[^0-9,]+/', '', array_shift($args));
     $s = array_shift($args);
     $header = array_shift($args);
     if ($header === '') {
         $header = 1;
     }
     if (!$k && !$b) {
         return FALSE;
     }
     $this->fetch_options($this->options, $args);
     list($more_link, $ret) = $this->plugin_aws_get($f, $m, $k, $b, $s);
     $style = ' style="word-break:break-all;"';
     $more = '';
     if ($more_link) {
         $header = intval($header);
         if ($header > 2 && $header < 6) {
             $more = '<h' . $header . '>' . $more_link . '</h' . $header . '>';
         } else {
             $more = $header ? '<h4>' . $more_link . '</h4>' : '';
         }
     }
     return $this->gc(true) . $more . '<div' . $style . '>' . $ret . '</div>';
 }
Exemple #4
0
 function do_upload($page, $fname, $tmpname, $copyright = FALSE, $pass = NULL, $notouch = FALSE, $options = NULL)
 {
     // ページが無ければ空ページを作成(他のプラグインから呼ばれた時のため)
     if (!$this->func->is_page($page)) {
         $this->func->make_empty_page($page, false);
     }
     $overwrite = !empty($options['overwrite']);
     $changelog = isset($options['changelog']) ? $options['changelog'] : '';
     $add_mes = array();
     $has_json_msg = false;
     // ファイル名の正規化
     $fname = str_replace("", '', $fname);
     $fname = $this->func->basename(str_replace("\\", "/", $fname));
     $_action = 'insert';
     // style.css
     if ($fname === 'style.css' && $this->func->is_owner($page)) {
         if (is_file($tmpname)) {
             $_pagecss_file = $this->cont['CACHE_DIR'] . $this->func->get_pgid_by_name($page) . ".css";
             if (is_file($_pagecss_file)) {
                 unlink($_pagecss_file);
             }
             if (is_uploaded_file($tmpname) && move_uploaded_file($tmpname, $_pagecss_file) || @rename($tmpname, $_pagecss_file)) {
                 $this->attach_chmod($_pagecss_file);
                 // 空のファイルの場合はファイル削除
                 if (!trim(file_get_contents($_pagecss_file))) {
                     unlink($_pagecss_file);
                     return array('result' => TRUE, 'msg' => $this->root->_attach_messages['msg_unset_css'], 'has_json_msg' => TRUE);
                 } else {
                     $_data = file_get_contents($_pagecss_file);
                     // 管理者以外は外部ファイルの参照を禁止するなどの書き換え
                     if (!$this->root->userinfo['admin']) {
                         $_data = preg_replace('#(?:url\\s*\\(\\s*[\'"]?(?:(?:ht|f)tps?:)?//[^\\)]+?\\)|@import[^;\\r\\n]*?;|@import|(?:ht|f)tps?://)#i', '', $_data);
                     }
                     if (file_put_contents($_pagecss_file, $_data)) {
                         $add_mes[] = $this->root->_attach_messages['msg_set_css'];
                         $has_json_msg = true;
                     }
                     // 元ファイルを添付ファイルとして保存
                     if ($tmpname = tempnam($this->cont['CACHE_DIR'], 'atf')) {
                         file_put_contents($tmpname, $_data);
                         $overwrite = true;
                     }
                     clearstatcache();
                 }
             } else {
                 @unlink($tmpname);
                 return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_exists']);
             }
         }
     }
     // ページオーナー権限がない場合は拡張子をチェック
     $allow_extensions = $this->get_allow_extensions();
     if (empty($options['asSystem']) && !$overwrite && $allow_extensions && !$this->func->is_owner($page) && !preg_match("/\\.(" . join("|", $allow_extensions) . ")\$/i", $fname)) {
         return array('result' => FALSE, 'msg' => str_replace('$1', $this->func->htmlspecialchars(preg_replace('/.*\\.([^.]*)$/', "\$1", $fname)), $this->root->_attach_messages['err_extension']));
     }
     $_size = @getimagesize($tmpname);
     // イメージファイルの内容をチェック
     if ($_size) {
         $checkStr = $this->func->file_get_contents($tmpname, FALSE, NULL, 0, 10240);
         if (preg_match('/<(?:script|\\?php)/i', $checkStr)) {
             return array('result' => FALSE, 'msg' => 'It isn\'t a image file.');
         }
         // Flashファイルの検査
         if ($this->cont['ATTACH_UPLOAD_FLASH_ADMIN_ONLY']) {
             if (!$this->root->userinfo['admin'] && ($_size[2] === 4 || $_size[2] === 13)) {
                 return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_isflash']);
             }
         }
     }
     // オリジナルファイル名
     $org_fname = $fname;
     // 格納ファイル名指定あり
     if (!empty($this->root->vars['filename'])) {
         $fname = $this->root->vars['filename'];
     }
     // 格納ファイル名文字数チェック(SQL varchar(255) - strlen('_\d\d\d'))
     $fname = function_exists('mb_strcut') ? mb_strcut($fname, 0, 251) : substr($fname, 0, 251);
     // ファイル名 文字数のチェック
     $fname = $this->regularize_fname($fname, $page);
     if (!$overwrite) {
         // ファイル名が存在する場合は、数字を付け加える
         if (preg_match("/^(.+)(\\.[^.]*)\$/", $fname, $match)) {
             $_fname = $match[1];
             $_ext = $match[2];
         } else {
             $_fname = $fname;
             $_ext = '';
         }
         $fi = 0;
         do {
             $obj = new XpWikiAttachFile($this->xpwiki, $page, $fname);
             $fname = $_fname . '_' . $fi++ . $_ext;
         } while ($obj->exist);
     } else {
         $obj = new XpWikiAttachFile($this->xpwiki, $page, $fname);
         if (is_file($obj->filename)) {
             unlink($obj->filename);
             $_action = "update";
         }
     }
     if (is_uploaded_file($tmpname)) {
         if (move_uploaded_file($tmpname, $obj->filename)) {
             $this->attach_chmod($obj->filename);
         } else {
             return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_noexist']);
         }
     } else {
         if (!is_file($tmpname) || !filesize($tmpname)) {
             if (is_file($tmpname)) {
                 unlink($tmpname);
             }
             return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_noexist']);
         }
         if (rename($tmpname, $obj->filename)) {
             $this->attach_chmod($obj->filename);
         } else {
             unlink($tmpname);
             return array('result' => FALSE, 'msg' => $this->root->_attach_messages['err_noexist']);
         }
     }
     if ($this->func->is_page($page)) {
         if (!$notouch) {
             if (!$changelog) {
                 $changelog = 'Attached file: ' . $this->func->htmlspecialchars($obj->file);
             }
             $this->root->rtf['page_touch'][$page][] = $changelog;
         }
         $this->func->clear_page_cache($page);
     }
     if (!empty($options['asSystem'])) {
         $_uid = 0;
         $_ucd = 'SYSTEM';
         $_uname = 'System';
         $_admins = 0;
     } else {
         $_uid = $this->root->userinfo['uid'];
         $_ucd = $this->root->userinfo['ucd'];
         $_uname = $this->root->userinfo['uname'];
         $_admins = (int) $this->func->check_admin($this->root->userinfo['uid']);
     }
     if ($_size && version_compare(HypCommonFunc::get_version(), '20150515', '>=')) {
         // 自動回転を試みる
         HypCommonFunc::rotateImage($obj->filename, 0, 95, $_size);
         if (!empty($this->root->vars['rmgps'])) {
             HypCommonFunc::removeExifGps($obj->filename, $_size);
         }
     }
     $obj->getstatus();
     $obj->status['age'] = 0;
     $obj->status['pass'] = ($pass !== TRUE and $pass !== NULL) ? $pass : '';
     $obj->status['copyright'] = $copyright;
     $obj->status['owner'] = $_uid;
     $obj->status['ucd'] = $_ucd;
     $obj->status['uname'] = $_uname;
     $obj->status['md5'] = md5_file($obj->filename);
     $obj->status['admins'] = $_admins;
     $obj->status['org_fname'] = $org_fname;
     $obj->status['imagesize'] = $obj->getimagesize($obj->filename);
     $obj->status['mime'] = $this->attach_mime_content_type($obj->filename, $obj->status);
     $obj->action = $_action;
     $obj->putstatus();
     if (!empty($this->root->vars['refid'])) {
         $this->ref_replace($page, $this->root->vars['refid'], $obj->file, $obj->status['imagesize']);
     }
     return array('result' => TRUE, 'msg' => $add_mes ? join("\n", $add_mes) : $this->root->_attach_messages['msg_uploaded'], 'name' => $obj->file, 'has_json_msg' => $has_json_msg);
 }
Exemple #5
0
    function show_form()
    {
        $user_pref = $this->func->get_user_pref($this->uid);
        $disabled = array();
        if ($this->root->twitter_consumer_key && $this->root->twitter_consumer_secret && function_exists('curl_init') && version_compare(PHP_VERSION, '5.0.0', '>') && HypCommonFunc::get_version() >= '20100108') {
            HypCommonFunc::loadClass('TwitterOAuth');
            $state = isset($_SESSION['oauth_state']) ? $_SESSION['oauth_state'] : '';
            if (!empty($user_pref['twitter_access_token']) && !empty($user_pref['twitter_access_token_secret'])) {
                $to = new TwitterOAuth($this->root->twitter_consumer_key, $this->root->twitter_consumer_secret, $user_pref['twitter_access_token'], $user_pref['twitter_access_token_secret']);
                $content = $to->OAuthRequest('https://twitter.com/account/verify_credentials.xml', 'GET', array());
                if (strpos($content, '<error>') === FALSE) {
                    $state = 'ok';
                } else {
                    $user_pref['twitter_access_token'] = '';
                    $user_pref['twitter_access_token_secret'] = '';
                }
            }
            if (!empty($this->root->get['oauth_token']) && $state === 'start') {
                $state = 'returned';
                unset($_SESSION['oauth_state']);
            }
            if (isset($this->root->get['denied'])) {
                $state = 'denied';
                unset($_SESSION['oauth_state']);
            }
            switch ($state) {
                case 'returned':
                    $to = new TwitterOAuth($this->root->twitter_consumer_key, $this->root->twitter_consumer_secret, $_SESSION['oauth_request_token'], $_SESSION['oauth_request_token_secret']);
                    $tok = $to->getAccessToken($this->root->get['oauth_verifier']);
                    $user_pref['twitter_access_token'] = $tok['oauth_token'];
                    $user_pref['twitter_access_token_secret'] = $tok['oauth_token_secret'];
                    $this->msg['twitter_access_token_secret']['description'] = '';
                    break;
                case 'denied':
                    $user_pref['twitter_access_token'] = '';
                    $user_pref['twitter_access_token_secret'] = '';
                    $this->msg['twitter_access_token_secret']['description'] = '';
                    break;
                case 'ok':
                    $this->msg['twitter_access_token_secret']['description'] = '';
                    break;
                default:
                    $to = new TwitterOAuth($this->root->twitter_consumer_key, $this->root->twitter_consumer_secret);
                    $tok = $to->getRequestToken($this->root->script . '?cmd=user_pref');
                    if (!empty($tok['oauth_token'])) {
                        $_SESSION['oauth_request_token'] = $token = $tok['oauth_token'];
                        $_SESSION['oauth_request_token_secret'] = $tok['oauth_token_secret'];
                        $_SESSION['oauth_state'] = "start";
                        $this->root->twitter_request_link = $to->getAuthorizeURL($token);
                    } else {
                        $disabled['twitter'] = true;
                    }
                    break;
            }
        } else {
            $disabled['twitter'] = true;
        }
        if (!empty($disabled['twitter'])) {
            unset($this->user_pref['twitter_access_token'], $this->user_pref['twitter_access_token_secret']);
        }
        // moblog
        if (!$this->root->use_moblog_user_pref) {
            unset($this->user_pref['moblog_mail_address'], $this->user_pref['moblog_base_page'], $this->user_pref['moblog_user_mail'], $this->user_pref['moblog_to_twitter'], $this->user_pref['moblog_auth_code']);
        } else {
            if (strpos($this->root->moblog_pop_mail, '*') === false) {
                unset($this->user_pref['moblog_user_mail']);
            } else {
                unset($this->user_pref['moblog_mail_address']);
                if (empty($user_pref['moblog_user_mail'])) {
                    $user_tag = strtolower($this->make_user_tag());
                    $user_pref['moblog_user_mail'] = str_replace('*', $user_tag, $this->root->moblog_pop_mail);
                }
                $this->root->moblog_user_mail = htmlspecialchars($user_pref['moblog_user_mail']);
                $this->root->moblog_user_mail_rawurlenc = rawurlencode($user_pref['moblog_user_mail']);
            }
            if (!$user_pref['twitter_access_token']) {
                unset($this->user_pref['moblog_to_twitter']);
            }
        }
        // XML-RPC
        if (!$this->root->use_xmlrpc) {
            unset($this->user_pref['xmlrpc_pages'], $this->user_pref['xmlrpc_auth_key'], $this->user_pref['xmlrpc_to_twitter']);
        } else {
            if (empty($user_pref['xmlrpc_pages'])) {
                // Read user config
                $pages = array();
                $config = new XpWikiConfig($this->xpwiki, $this->cont['PKWK_CONFIG_USER'] . '/' . $this->root->userinfo['uname']);
                $table = $config->read() ? $config->get('XML-RPC') : array();
                foreach ($table as $row) {
                    if (isset($row[1]) && strtolower(trim($row[0])) === 'myblog') {
                        $page = $this->func->strip_bracket(trim($row[1]));
                        $pages[] = htmlspecialchars($page);
                    }
                }
                $user_pref['xmlrpc_pages'] = join("\n", $pages);
            }
            if (empty($user_pref['xmlrpc_auth_key'])) {
                $user_pref['xmlrpc_auth_key'] = substr($this->make_user_tag(), 0, 8);
            }
            if (!$user_pref['twitter_access_token']) {
                unset($this->user_pref['xmlrpc_to_twitter']);
            }
        }
        $script = $this->func->get_script_uri();
        if ($this->user_pref) {
            $body = <<<EOD
<div>
<h2>{$this->msg['title_description']}</h2>
{$this->msg['msg_description']}
</div>
<hr />
<div class="user_pref">
<form action="{$script}" method="post">
<table>
EOD;
            //var_dump($user_pref);
            //exit;
            foreach ($this->user_pref as $key => $conf) {
                $caption = !empty($conf['caption']) ? $conf['caption'] : (!empty($this->msg[$key]['caption']) ? $this->msg[$key]['caption'] : $key);
                $description = !empty($conf['description']) ? $conf['description'] : (!empty($this->msg[$key]['description']) ? $this->msg[$key]['description'] : '');
                $description = preg_replace('/\\{\\$root->(.+?)\\}/e', '$this->root->$1', $description);
                $value = isset($user_pref[$key]) ? $user_pref[$key] : '';
                $value4disp = htmlspecialchars($value);
                $name4disp = htmlspecialchars($key);
                $real = '';
                $extention = !empty($this->msg[$key]['extention']) ? $this->msg[$key]['extention'] : '';
                list($form, $attr) = array_pad(explode(',', $conf['form'], 2), 2, '');
                switch ($form) {
                    case 'select':
                        $forms = array();
                        if (!isset($conf['list']['group'])) {
                            $conf['list']['group'][0] = $conf['list'];
                        }
                        foreach ($conf['list']['group'] as $label => $optgroup) {
                            if (is_string($label)) {
                                $forms[] = '<optgroup label="' . $label . '">';
                            }
                            foreach ($optgroup as $list_cap => $list_val) {
                                if ($value == $list_val) {
                                    $selected = ' selected="selected"';
                                } else {
                                    $selected = '';
                                }
                                $forms[] = '<option value="' . $list_val . '"' . $selected . '>' . $list_cap . '</option>';
                            }
                            if (is_string($label)) {
                                $forms[] = '</optgroup>';
                            }
                        }
                        $form = '<select name="' . $name4disp . '" ' . $attr . '>' . join('', $forms) . '</select>';
                        break;
                    case 'yesno':
                        $conf['list'] = array($this->msg['Yes'] => 1, $this->msg['No'] => 0);
                    case 'radio':
                        $forms = array();
                        $i = 0;
                        foreach ($conf['list'] as $list_cap => $list_val) {
                            if ($value == $list_val) {
                                $checked = ' checked="checked"';
                            } else {
                                $checked = '';
                            }
                            $forms[] = '<span class="nowrap"><input id="' . $name4disp . '_' . $i . '" type="radio" name="' . $name4disp . '" value="' . $list_val . '"' . $checked . ' /><label for="' . $name4disp . '_' . $i . '">' . $list_cap . '</label></span>';
                            $i++;
                        }
                        $form = join(' | ', $forms);
                        break;
                    case 'textarea':
                        $form = '<textarea name="' . $name4disp . '" ' . $attr . ' rel="nowikihelper">' . $value4disp . '</textarea>';
                        break;
                    case 'hidden':
                        $form = '<input type="hidden" name="' . $name4disp . '" value="' . $value4disp . '" />' . $value4disp;
                        break;
                    case 'text':
                    default:
                        $style = '';
                        if ($conf['type'] === 'integer' || $conf['type'] === 'integer!0') {
                            $style = ' style="text-align:right;"';
                        }
                        $form = '<input type="text" name="' . $name4disp . '" value="' . $value4disp . '" ' . $attr . $style . ' />';
                }
                $body .= <<<EOD
<tr>
 <td style="font-weight:bold;padding-top:0.5em" id="{$key}">{$caption}</td>
 <td style="padding-top:0.5em">{$form}{$extention}</td>
</tr>
<tr style="border-bottom:1px dotted gray;">
 <td colspan="2" style="padding-bottom:0.5em"><p>{$description}</p></td>
</tr>
EOD;
            }
            $body .= <<<EOD
<tr>
 <td>&nbsp;</td>
 <td><input type="submit" name="submit" value="{$this->msg['btn_submit']}" /></td>
</tr>
</table>
<input type="hidden" name="plugin" value="user_pref" />
<input type="hidden" name="pmode"\t value="post" />
</form>
</div>
EOD;
        } else {
            $body = 'There is no item.';
        }
        return array('msg' => $this->msg['title_form'], 'body' => $body);
    }
Exemple #6
0
include_once "{$mytrustdirpath}/include.php";
$xpwiki = new XpWiki($mydirname);
// initialize
$xpwiki->init();
// XCL >= 2.2 Use "Legacy_Utils::formatPagetitle"
if (defined('LEGACY_MODULE_VERSION') && version_compare(LEGACY_MODULE_VERSION, '2.2', '>=')) {
    $xpwiki->root->html_head_title = trim(str_replace('$module_title', '', $xpwiki->root->html_head_title), ' -');
}
// execute
$xpwiki->execute();
// gethtml
$xpwiki->catbody();
// Add error message
if ($xpwiki->root->userinfo['admin']) {
    $hyp_common_methods = get_class_methods('HypCommonFunc');
    if (is_null($hyp_common_methods) || !in_array('get_version', $hyp_common_methods) || HypCommonFunc::get_version() < 20100725) {
        $xpwiki->admin_messages[] = '[Warning] Please install or update <a href="http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/hypweb/XOOPS_TRUST/class/hyp_common.tar.gz?view=tar" title="Download">a newest HypCommonFunc</a> into "XOOPS_TRUST_PATH/class/".';
    }
    if ($xpwiki->admin_messages) {
        $xpwiki->html = '<p style="color:red;font-weight:bold;">' . join('<br />', $xpwiki->admin_messages) . '</p><hr />' . $xpwiki->html;
    }
}
if ($xpwiki->runmode === 'xoops') {
    // For XCL >= 2.2.1.1 (clear cache of modinfo)
    // Is it XCL's bug? need check next
    // http://xoopscube.svn.sourceforge.net/viewvc/xoopscube/Package_Legacy/trunk/html/kernel/module.php?view=log
    if (defined('LEGACY_BASE_VERSION') && version_compare(LEGACY_BASE_VERSION, '2.2.1.1', '>=')) {
        $module_handler =& xoops_gethandler('module');
        $thisModule =& $module_handler->getByDirname($xpwiki->root->mydirname);
        $thisModule->modinfo = null;
    }
Exemple #7
0
    function plugin_rss_action()
    {
        $version = isset($this->root->vars['ver']) ? strtolower($this->root->vars['ver']) : '';
        $base = isset($this->root->vars['p']) ? $this->root->vars['p'] : '';
        $s_base = $base ? '/' . $base : '';
        $uid = !empty($this->root->vars['u']) ? strval(intval($this->root->vars['u'])) : '';
        $cache_clear = isset($this->root->vars['cc']);
        switch ($version) {
            case '':
                $version = '1.0';
                break;
                // Default
            // Default
            case '1':
                $version = '1.0';
                break;
                // Sugar
            // Sugar
            case '2':
                $version = '2.0';
                break;
                // Sugar
            // Sugar
            case 'atom':
                /* FALLTHROUGH */
            /* FALLTHROUGH */
            case '0.91':
                /* FALLTHROUGH */
            /* FALLTHROUGH */
            case '1.0':
                /* FALLTHROUGH */
            /* FALLTHROUGH */
            case '2.0':
                break;
            default:
                die('Invalid RSS version!!');
        }
        $count = empty($this->root->vars['count']) ? $this->root->rss_max : (int) $this->root->vars['count'];
        $count = max($count, 1);
        $count = min($count, $this->maxcount);
        // キャッシュファイル名
        $c_file = $this->cont['CACHE_DIR'] . 'plugin/' . md5($version . $base . $count . $uid . $this->cont['ROOT_URL']) . $this->cont['UI_LANG'] . '.rss';
        if (!$cache_clear && is_file($c_file)) {
            $filetime = filemtime($c_file);
            $etag = md5($c_file . $filetime);
            if ($etag === @$_SERVER["HTTP_IF_NONE_MATCH"] && $this->cont['UA_PROFILE'] !== 'keitai') {
                // バッファをクリア
                $this->func->clear_output_buffer();
                header("HTTP/1.1 304 Not Modified");
                header("Etag: " . $etag);
                header('Cache-Control: private');
                header('Pragma:');
                //header('Expires:');
                exit;
            }
            $out = file_get_contents($c_file);
        } else {
            // バッファリング
            ob_start();
            $lang = $this->cont['LANG'];
            $page_title = $this->func->htmlspecialchars($this->root->siteinfo['sitename'] . '::' . $this->root->module_title . $s_base);
            $self = $this->func->get_script_uri();
            $maketime = $date = substr_replace($this->func->get_date('Y-m-d\\TH:i:sO'), ':', -2, 0);
            $buildtime = $this->func->get_date('r');
            $pubtime = 0;
            $rss_css = $this->cont['LOADER_URL'] . '?src=rss.' . $this->cont['UI_LANG'] . '.xml';
            // Creating <item>
            $items = $rdf_li = '';
            // ゲスト扱いで一覧を取得
            $nolisting = !$base || $base[0] !== ':';
            $where = $uid ? '`uid`="' . $uid . '"' : '';
            $lines = $this->func->get_existpages(FALSE, $base ? $base . '/' : '', array('limit' => $count, 'order' => ' ORDER BY editedtime DESC', 'nolisting' => $nolisting, 'withtime' => TRUE, 'asguest' => TRUE, 'where' => $where));
            foreach ($lines as $line) {
                list($time, $page) = explode("\t", rtrim($line));
                $r_page = rawurlencode($page);
                $link = $this->func->get_page_uri($page, true, 'keitai');
                $title = $this->func->htmlspecialchars($this->root->pagename_num2str ? preg_replace('/\\/(?:[0-9\\-]+|[B0-9][A-Z0-9]{9})$/', '/' . $this->func->strip_emoji(htmlspecialchars_decode($this->func->get_heading($page))), $page) : $page);
                if ($base) {
                    $title = substr($title, strlen($base) + 1);
                }
                if (!$pubtime) {
                    $pubtime = $this->func->get_date('r', $time);
                }
                switch ($version) {
                    case '0.91':
                        $date = $this->func->get_date('r', $time);
                        $items .= <<<EOD
<item>
 <title>{$title}</title>
 <link>{$link}</link>
 <description>{$date}</description>
</item>

EOD;
                        break;
                    case '2.0':
                        list($description, $html, $pginfo) = $this->get_content($page);
                        $author = $this->func->htmlspecialchars($pginfo['uname']);
                        $date = $this->func->get_date('r', $time);
                        $items .= <<<EOD
<item>
 <title>{$title}</title>
 <link>{$link}</link>
 <guid>{$link}</guid>
 <pubDate>{$date}</pubDate>
 <description>{$description}</description>
 <content:encoded><![CDATA[
  {$html}
  ]]></content:encoded>
</item>

EOD;
                        break;
                    case '1.0':
                        // Add <item> into <items>
                        list($description, $html, $pginfo, $tags) = $this->get_content($page);
                        $author = $this->func->htmlspecialchars($pginfo['uname']);
                        $tag = '';
                        if ($tags) {
                            $tags = array_map('$this->func->htmlspecialchars', array_map('rtrim', $tags));
                            $tag = '<dc:subject>' . join("</dc:subject>\n <dc:subject>", $tags) . '</dc:subject>';
                        }
                        $rdf_li .= '    <rdf:li rdf:resource="' . $link . '" />' . "\n";
                        $date = substr_replace($this->func->get_date('Y-m-d\\TH:i:sO', $time), ':', -2, 0);
                        $trackback_ping = '';
                        /*
                        if ($this->root->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>{$link}</link>
 <dc:date>{$date}</dc:date>
 <dc:creator>{$author}</dc:creator>
 {$tag}
 <description>{$description}</description>
 <content:encoded><![CDATA[
 {$html}
 ]]></content:encoded>
 <dc:identifier>{$self}?{$r_page}</dc:identifier>
{$trackback_ping}
</item>

EOD;
                        break;
                    case 'atom':
                        list($description, $html, $pginfo, $tags) = $this->get_content($page);
                        $author = $this->func->htmlspecialchars($pginfo['uname']);
                        $tag = '';
                        if ($tags) {
                            $tags = array_map('$this->func->htmlspecialchars', array_map('rtrim', $tags));
                            foreach ($tags as $_tag) {
                                $tag .= '<category term="' . str_replace('"', '\\"', $_tag) . '"/>' . "\n";
                            }
                        }
                        $date = substr_replace($this->func->get_date('Y-m-d\\TH:i:sO', $time), ':', -2, 0);
                        $id = $link;
                        $items .= <<<EOD
<entry>
 <title type="html">{$title}</title>
 <link rel="alternate" type="text/html" href="{$link}" />
 <id>{$id}</id>
 <updated>{$date}</updated>
 <published>{$date}</published>
 {$tag}
 <author>
  <name>{$author}</name>
 </author>
 <summary type="html">{$description}</summary>
 <content type="html"><![CDATA[
 {$html}
 ]]></content>
</entry>

EOD;
                        break;
                }
            }
            // Feeding start
            print '<?xml version="1.0" encoding="UTF-8"?>' . "\n\n";
            //$r_whatsnew = rawurlencode($this->root->whatsnew);
            $link = $base ? $this->func->get_page_uri($base, true) : $self;
            switch ($version) {
                case '0.91':
                    print <<<EOD
<!DOCTYPE rss PUBLIC "-//Netscape Communications//DTD RSS 0.91//EN" "http://my.netscape.com/publish/formats/rss-0.91.dtd">
<rss version="{$version}">
 <channel>
  <title>{$page_title}</title>
  <link>{$link}</link>
  <description>xpWiki RecentChanges</description>
  <language>{$lang}</language>

{$items}
 </channel>
</rss>
EOD;
                    break;
                case '2.0':
                    print <<<EOD
<rss version="{$version}" xmlns:content="http://purl.org/rss/1.0/modules/content/">
 <channel>
  <title>{$page_title}</title>
  <link>{$link}</link>
  <description>xpWiki RecentChanges</description>
  <language>{$lang}</language>
  <image>
   <url>{$self}module_icon.php</url>
   <title>{$page_title}</title>
   <link>{$link}</link>
   <description>{$page_title}</description>
  </image>
  <pubDate>{$pubtime}</pubDate>
  <lastBuildDate>{$buildtime}</lastBuildDate>
  <generator>xpWiki</generator>

{$items}
 </channel>
</rss>
EOD;
                    break;
                case '1.0':
                    $xmlns_trackback = $this->root->trackback ? '  xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"' : '';
                    print <<<EOD
<?xml-stylesheet type="text/xsl" media="screen" href="{$rss_css}" ?>
<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#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xml:lang="{$lang}">
 <channel rdf:about="{$link}">
  <title>{$page_title}</title>
  <link>{$link}</link>
  <description>xpWiki RecentChanges</description>
  <dc:date>{$maketime}</dc:date>
  <image rdf:resource="{$self}module_icon.php" />
  <items>
   <rdf:Seq>
{$rdf_li}
   </rdf:Seq>
  </items>
 </channel>
 <image rdf:about="{$self}module_icon.php">
   <title>{$page_title}</title>
   <link>{$link}</link>
   <url>{$self}module_icon.php</url>
 </image>

{$items}
</rdf:RDF>
EOD;
                    break;
                case 'atom':
                    $rpage = $base ? '&amp;p=' . rawurlencode($base) : '';
                    $feedurl = $this->cont['HOME_URL'] . '?cmd=rss' . $rpage . '&amp;ver=atom';
                    $rpage = $base ? '&amp;p=' . rawurlencode($base) : '';
                    $modifier = $this->func->htmlspecialchars($this->root->modifier);
                    print <<<EOD
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="{$lang}">
 <title>{$page_title}</title>
 <link rel="alternate" type="text/html" href="{$link}" />
 <link rel="self" type="application/atom+xml" href="{$feedurl}" />
 <id>{$self}</id>
 <updated>{$maketime}</updated>
 <subtitle>xpWiki RecentChanges</subtitle>
 <generator uri="http://hypweb.net/">xpWiki</generator>
  <rights>hypweb.net</rights>
 <author>
  <name>{$modifier}</name>
  <uri>{$this->root->modifierlink}</uri>
 </author>

{$items}
</feed>
EOD;
                    break;
            }
            $out = mb_convert_encoding(ob_get_contents(), 'UTF-8', $this->cont['CONTENT_CHARSET']);
            ob_end_clean();
            // NULLバイト除去
            $out = $this->func->input_filter($out);
            if ($this->cont['UA_PROFILE'] === 'default') {
                //キャッシュ書き込み
                if ($fp = @fopen($c_file, "wb")) {
                    fputs($fp, $out);
                    fclose($fp);
                }
                $filetime = filemtime($c_file);
            } else {
                $filetime = time();
            }
            $etag = md5($c_file . $filetime);
        }
        if ($this->cont['UA_PROFILE'] === 'keitai' || defined('HYP_K_TAI_RENDER') && HYP_K_TAI_RENDER === 1) {
            HypCommonFunc::loadClass('HypRss2Html');
            $r = new HypRss2Html($out);
            $out = $r->getHtml();
            $out = mb_convert_encoding($out, 'SJIS', $r->encoding);
            HypCommonFunc::loadClass('HypKTaiRender');
            if (HypCommonFunc::get_version() < '20080925') {
                $r = new HypKTaiRender();
            } else {
                $r =& HypKTaiRender::getSingleton();
            }
            $r->set_myRoot($this->root->siteinfo['host']);
            $r->Config_hypCommonURL = $this->cont['ROOT_URL'] . 'class/hyp_common';
            $r->Config_redirect = $this->root->k_tai_conf['redirect'];
            $r->Config_emojiDir = $this->cont['ROOT_URL'] . 'images/emoji';
            if (!empty($this->root->k_tai_conf['showImgHosts'])) {
                $r->Config_showImgHosts = $this->root->k_tai_conf['showImgHosts'];
            }
            if (!empty($this->root->k_tai_conf['directLinkHosts'])) {
                $r->Config_directLinkHosts = $this->root->k_tai_conf['directLinkHosts'];
            }
            if ($this->cont['PKWK_ENCODING_HINT']) {
                $r->Config_encodeHintWord = $this->cont['PKWK_ENCODING_HINT'];
            }
            if (!empty($this->root->k_tai_conf['googleAdsense']['config'])) {
                $r->Config_googleAdSenseConfig = $this->root->k_tai_conf['googleAdsense']['config'];
                $r->Config_googleAdSenseBelow = $this->root->k_tai_conf['googleAdsense']['below'];
            }
            $r->inputEncode = 'SHIFT_JIS';
            $r->outputEncode = 'SJIS';
            $r->outputMode = 'xhtml';
            $r->langcode = $this->cont['LANG'];
            $r->inputHtml = $out;
            $r->doOptimize();
            $out = $r->outputBody;
            // バッファをクリア
            $this->func->clear_output_buffer();
            header('Content-Type: text/html; charset=Shift_JIS');
            header('Content-Length: ' . strlen($out));
            header('Cache-Control: no-cache');
        } else {
            header('Content-Type: application/xml; charset=utf-8');
            header('Content-Length: ' . strlen($out));
            header('Cache-Control: private');
            header('Pragma:');
            header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $filetime) . ' GMT');
            header('Etag: ' . $etag);
        }
        echo $out;
        exit;
    }
Exemple #8
0
         if (defined('XOOPS_URL')) {
             $this->redirect_header(XOOPS_URL . '/modules/system/admin.php?fct=modulesadmin&op=update&module=' . $root->mydirname, 1, $title);
         } else {
             exit($title);
         }
     }
 }
 /////////////////////////////////////////////////
 // ディレクトリのチェック
 $die = '';
 foreach (array($const['DATA_DIR'], $const['DIFF_DIR'], $const['BACKUP_DIR'], $const['CACHE_DIR']) as $dir) {
     if (!is_writable($dir)) {
         $die .= 'Directory is not found or not writable (' . $dir . ')' . "\n";
     }
 }
 if (!$root->can_not_connect_www && HypCommonFunc::get_version() >= '20080213') {
     $dir = $const['TRUST_PATH'] . 'class/hyp_common/favicon/cache';
     if (!is_writable($dir)) {
         $die .= 'Directory is not found or not writable (' . $dir . ')' . "\n";
     }
 }
 // 設定ファイルの変数チェック
 $temp = '';
 foreach (array('rss_max', 'note_hr', 'related_link', 'show_passage', 'rule_related_str', 'load_template_func') as $var) {
     if (!isset($root->{$var})) {
         $temp .= '$' . $var . "\n";
     }
 }
 if ($temp) {
     if ($die) {
         $die .= "\n";
Exemple #9
0
 function plugin_isbn_inline()
 {
     if (HypCommonFunc::get_version() < 20080224) {
         return '&amazon require "HypCommonFunc" >= Ver. 20080224';
     }
     // 言語ファイルの読み込み
     $this->load_language();
     $this->root->rtf['disable_render_cache'] = true;
     $prms = func_get_args();
     $body = array_pop($prms);
     // {}内
     $body = preg_replace('#</?(a|span)[^>]*>#i', '', $body);
     $body = preg_replace('#(?:alt|title)=("|\').*\\1#i', '', $body);
     list($isbn, $option) = array_pad($prms, 2, "");
     $option = $this->func->htmlspecialchars($option);
     // for XSS
     $isbn = $this->func->htmlspecialchars($isbn);
     // for XSS
     $isbn = str_replace("-", "", $isbn);
     $tmpary = array();
     $tmpary = $this->plugin_isbn_get_isbn_title($isbn);
     if ($tmpary[0][0] === "\t") {
         return trim($tmpary[0]) . $this->config['conflink'];
     }
     if ($tmpary[2]) {
         $price = "<div style=\"text-align:right;\">" . str_replace('$1', $tmpary[2], $this->msg['currency']) . "</div>";
     }
     $title = $tmpary[0];
     //$text = $this->func->htmlspecialchars(preg_replace('#</?(a|span)[^>]*>#i','',$option));
     $alt = $this->plugin_isbn_get_caption($tmpary);
     $amazon_a = '<a href="' . str_replace(array('_ISBN_', 'AMAZON_ASE_ID'), array($isbn, $this->config['AMAZON_ASE_ID']), $this->config['ISBN_AMAZON_SHOP']) . '" target="_blank" title="' . $alt . '">';
     $match = array();
     if (!preg_match("/(s|l|m)?ima?ge?/i", $option, $match)) {
         if ($option || $body) {
             $title = $option . $body;
         }
         return $amazon_a . $title . '</a>';
     } else {
         $size = '';
         if (!empty($match[1])) {
             $size = strtoupper($match[1]);
             if ($size === 'M') {
                 $size = '';
             } else {
                 $size .= '-';
             }
         }
         $url = $this->plugin_isbn_cache_image_fetch($size . $isbn, $this->cont['CACHE_DIR']);
         return $amazon_a . '<img src="' . $url . '" alt="' . $alt . '" /></a>';
     }
 }
Exemple #10
0
 function plugin_moblog_action()
 {
     error_reporting(0);
     $this->debug = array();
     $this->admin = $this->root->userinfo['admin'];
     $this->chk_fp = NULL;
     $this->output_mode = isset($this->root->vars['om']) && $this->root->vars['om'] === 'rss' ? 'rss' : 'img';
     $host = $user = $pass = $port = '';
     $execution_time = intval(ini_get('max_execution_time'));
     //設定ファイル読み込み
     if (isset($this->config['host'])) {
         $host = (string) $this->config['host'];
     }
     if (isset($this->config['mail'])) {
         $mail = (string) $this->config['mail'];
     }
     if (isset($this->config['user'])) {
         $user = (string) $this->config['user'];
     }
     if (isset($this->config['pass'])) {
         $pass = (string) $this->config['pass'];
     }
     if (isset($this->config['port'])) {
         $port = (int) $this->config['port'];
     }
     foreach (array('mail', 'host', 'port', 'user', 'pass') as $key) {
         $_key = 'moblog_pop_' . $key;
         if (!empty($this->root->{$_key})) {
             ${$key} = $this->root->{$_key};
         }
     }
     if (!$host || !$user || !$pass || !$port) {
         $this->plugin_moblog_output();
     }
     $ref_option = (string) $this->config['ref'];
     $maxbyte = (int) $this->config['maxbyte'];
     $body_limit = (int) $this->config['body_limit'];
     $refresh_min = (int) $this->config['refresh_min'];
     $nosubject = (string) $this->config['nosubject'];
     $deny = (array) $this->config['deny'];
     $deny_mailer = (string) $this->config['deny_mailer'];
     $deny_title = (string) $this->config['deny_title'];
     $deny_lang = (string) $this->config['deny_lang'];
     $subtype = (string) $this->config['subtype'];
     $viri = (string) $this->config['viri'];
     $del_ereg = (string) $this->config['del_ereg'];
     $word = (array) $this->config['word'];
     $imgonly = (int) $this->config['imgonly'];
     $chk_file = $this->cont['CACHE_DIR'] . "moblog.chk";
     if (!is_file($chk_file)) {
         touch($chk_file);
     } else {
         if ($refresh_min * 60 > $this->cont['UTC'] - filemtime($chk_file) && empty($this->root->vars['now'])) {
             $this->plugin_moblog_output();
         } else {
             $this->func->pkwk_touch_file($chk_file);
         }
     }
     if ($this->config['check_interval']) {
         $interval = max($this->config['check_interval'], $this->config['refresh_min']);
         $data = array('action' => 'plugin_func', 'plugin' => 'moblog', 'func' => 'plugin_moblog_action');
         $this->func->regist_jobstack($data, 0, $interval * 60);
     }
     $this->chk_fp = fopen($chk_file, 'wb');
     if (!flock($this->chk_fp, LOCK_EX)) {
         $this->plugin_moblog_output();
     }
     // user_pref 読み込み
     $adr2page = (array) $this->config['adr2page'];
     $user_pref_all = $this->func->get_user_pref();
     if ($user_pref_all) {
         foreach ($user_pref_all as $_uid => $_dat) {
             $_dat = unserialize($_dat);
             if (!empty($_dat['moblog_base_page'])) {
                 if (!empty($_dat['moblog_mail_address'])) {
                     $adr2page[strtolower($_dat['moblog_mail_address'])] = array($_dat['moblog_base_page'], $_uid);
                 } else {
                     if (!empty($_dat['moblog_user_mail'])) {
                         $adr2page[strtolower($_dat['moblog_user_mail'])] = array($_dat['moblog_base_page'], $_uid);
                     }
                 }
             }
         }
     }
     // SMS(MMS) 経由のデーター読み込み
     if ($smsdata = $this->func->cache_get_db(null, 'moblog')) {
         foreach ($smsdata as $_data) {
             $_data = unserialize($_data);
             $adr2page = array_merge($adr2page, $_data);
         }
     }
     // attach プラグイン読み込み
     $attach = $this->func->get_plugin_instance('attach');
     // wait 指定
     $wait = empty($this->root->vars['wait']) ? 0 : (int) $this->root->vars['wait'];
     sleep(min(5, $wait));
     // 接続開始
     $err = "";
     $num = $size = $errno = 0;
     $this->sock = fsockopen($host, $port, $err, $errno, 10) or $this->plugin_moblog_error_output('Could not connect to ' . $host . ':' . $port);
     $buf = fgets($this->sock, 512);
     if (substr($buf, 0, 3) != '+OK') {
         $this->plugin_moblog_error_output($buf);
     }
     $buf = $this->plugin_moblog_sendcmd("USER {$user}");
     if (substr($buf, 0, 3) != '+OK') {
         $this->plugin_moblog_error_output($buf);
     }
     $buf = $this->plugin_moblog_sendcmd("PASS {$pass}");
     if (substr($buf, 0, 3) != '+OK') {
         $this->plugin_moblog_error_output($buf);
     }
     $data = $this->plugin_moblog_sendcmd("STAT");
     //STAT -件数とサイズ取得 +OK 8 1234
     sscanf($data, '+OK %d %d', $num, $size);
     if ($num == "0") {
         $buf = $this->plugin_moblog_sendcmd("QUIT");
         //バイバイ
         fclose($this->sock);
         $this->debug[] = 'No mail.';
         $this->plugin_moblog_output();
     }
     $this->debug[] = $num . ' message(s) found.';
     $tmpfiles = array();
     // 件数分
     for ($i = 1; $i <= $num; $i++) {
         $line = $this->plugin_moblog_sendcmd("RETR {$i}");
         //RETR n -n番目のメッセージ取得(ヘッダ含
         $dat = '';
         while (!preg_match("/^\\.\r\n/", $line) && $line !== false) {
             //EOFの.まで読む
             $line = fgets($this->sock, 4096);
             $dat .= $line;
         }
         $data = $this->plugin_moblog_sendcmd("DELE {$i}");
         //DELE n n番目のメッセージ削除
         $tmpfname = tempnam($this->cont['CACHE_DIR'], 'moblog');
         file_put_contents($tmpfname, $dat);
         $tmpfiles[] = $tmpfname;
     }
     $buf = $this->plugin_moblog_sendcmd("QUIT");
     //バイバイ
     fclose($this->sock);
     foreach ($tmpfiles as $tmpfname) {
         if ($execution_time) {
             @set_time_limit($execution_time);
         }
         $write = true;
         $subject = $from = $text = $atta = $part = $filename = $charset = '';
         $this->user_pref = array();
         $this->post_options = array();
         $this->is_newpage = 0;
         $filenames = array();
         $body_text = array();
         $rotate = 0;
         $page = '';
         $exifgeo = array();
         $attach_only = false;
         $this->root->vars['refid'] = '';
         unset($this->root->rtf['esummary'], $this->root->rtf['twitter_update']);
         $dat = file_get_contents($tmpfname);
         unlink($tmpfname);
         list($head, $body) = $this->plugin_moblog_mime_split($dat);
         // To:ヘッダ確認
         $treg = array();
         $to_ok = FALSE;
         if (preg_match("/^To:[ \t]*([^\r\n]+)/im", $head, $treg)) {
             $treg[1] = $this->plugin_moblog_addr_search($treg[1]);
             $mail_reg = preg_quote($mail, '/');
             $mail_reg = '/' . str_replace('\\*', '[^@]*?', $mail_reg) . '/i';
             //if ($mail === $treg[1]) {
             if (preg_match($mail_reg, $treg[1])) {
                 $to = $treg[1];
                 $to_ok = TRUE;
             } else {
                 if (preg_match("/^X-Forwarded-To:[ \t]*([^\r\n]+)/im", $head, $treg)) {
                     //if ($mail === $treg[1]) {
                     $treg[1] = $this->plugin_moblog_addr_search($treg[1]);
                     if (preg_match($mail_reg, $treg[1])) {
                         $to = $treg[1];
                         $to_ok = TRUE;
                     }
                 }
             }
         }
         if (!$to_ok) {
             $write = false;
             $this->debug[] = 'Bad To: ' . $to;
         }
         $to = strtolower($to);
         // Received-SPF: のチェック
         if ($this->config['allow_spf']) {
             if (preg_match('/^Received-SPF:\\s*([a-z]+)/im', $head, $match)) {
                 if (!preg_match($this->config['allow_spf'], $match[1])) {
                     $write = false;
                     $this->debug[] = 'Bad SPF.';
                 }
             }
         }
         // メーラーのチェック
         $mreg = array();
         if ($write && preg_match("#^(X-Mailer|X-Mail-Agent):[ \t]*([^\r\n]+)#im", $head, $mreg)) {
             if ($deny_mailer) {
                 if (preg_match($deny_mailer, $mreg[2])) {
                     $write = false;
                     $this->debug[] = 'Bad mailer.';
                 }
             }
         }
         // キャラクターセットのチェック
         if ($write && preg_match('/charset\\s*=\\s*"?([^"\\r\\n]+)/i', $head, $mreg)) {
             $charset = $mreg[1];
             if ($deny_lang) {
                 if (preg_match($deny_lang, $charset)) {
                     $write = false;
                     $this->debug[] = 'Bad charset.';
                 }
             }
         }
         // 日付の抽出
         $datereg = array();
         preg_match("#^Date:[ \t]*([^\r\n]+)#im", $head, $datereg);
         $now = strtotime($datereg[1]);
         if ($now == -1) {
             $now = $this->cont['UTC'];
         }
         // 送信者アドレスの抽出
         $freg = array();
         if (preg_match("#^From:[ \t]*([^\r\n]+)#im", $head, $freg)) {
             $from = $this->plugin_moblog_addr_search($freg[1]);
         } elseif (preg_match("#^Reply-To:[ \t]*([^\r\n]+)#im", $head, $freg)) {
             $from = $this->plugin_moblog_addr_search($freg[1]);
         } elseif (preg_match("#^Return-Path:[ \t]*([^\r\n]+)#im", $head, $freg)) {
             $from = $this->plugin_moblog_addr_search($freg[1]);
         }
         $from = strtolower($from);
         // サブジェクトの抽出
         $subreg = array();
         if (preg_match("#^Subject:[ \t]*([^\r\n]+)#im", $head, $subreg)) {
             if (HypCommonFunc::get_version() >= '20081215') {
                 if (!XC_CLASS_EXISTS('MobilePictogramConverter')) {
                     HypCommonFunc::loadClass('MobilePictogramConverter');
                 }
                 $mpc =& MobilePictogramConverter::factory_common();
             } else {
                 $mpc = null;
             }
             // 改行文字削除
             $subject = str_replace(array("\r", "\n"), "", $subreg[1]);
             $subject = $this->mime_decode($subject, $mpc, $from);
             // ^\*\d+ 認証キー抽出
             $_reg = '/^\\*(\\d+)/i';
             if (preg_match($_reg, $subject, $match)) {
                 $this->post_options['auth_code'] = $match[1];
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
             }
             // ページ指定コマンド検出
             $_reg = '/@&([^&]+)&/';
             if (preg_match($_reg, $subject, $match)) {
                 $page = $match[1];
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
             }
             // ダイレクトページ指定コマンド検出
             $_reg = '/@&([^\\$]+)\\$/';
             if (preg_match($_reg, $subject, $match)) {
                 $page = $match[1];
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
                 $this->post_options['directpage'] = 1;
             }
             // 回転指定コマンド検出
             $_reg = '/@(r|l)\\b/i';
             if (preg_match($_reg, $subject, $match)) {
                 $rotate = strtolower($match[1]) == "r" ? 1 : 3;
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
             }
             $_reg = '/\\b(r|l)@/i';
             // compat for old type
             if (preg_match($_reg, $subject, $match)) {
                 $rotate = strtolower($match[1]) == "r" ? 1 : 3;
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
             }
             // @new 新規ページ指定コマンド検出
             $_reg = '/@new\\b/i';
             if (preg_match($_reg, $subject)) {
                 $this->post_options['new'] = true;
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
             }
             // @p\d+ 対象ページ指定(過去へxページ)コマンド検出
             $_reg = '/@p(\\d+)/i';
             if (preg_match($_reg, $subject, $match)) {
                 $this->post_options['page_past'] = $match[1];
                 $subject = trim(preg_replace($_reg, '', $subject));
             }
             // マップ作成コマンド検出
             $_reg = '/@map\\b/i';
             if (preg_match($_reg, $subject, $match)) {
                 $this->post_options['makemap'] = true;
                 $subject = trim(preg_replace($_reg, '', $subject));
             }
             // タグの抽出
             $_reg = '/#([^#]*)/';
             if (preg_match($_reg, $subject, $match)) {
                 $_tag = trim($match[1]);
                 if ($_tag) {
                     $this->post_options['tag'] = $_tag;
                 }
                 $subject = trim(preg_replace($_reg, '', $subject, 1));
             }
             // 未承諾広告カット
             if ($write && $deny_title) {
                 if (preg_match($deny_title, $subject)) {
                     $write = false;
                     $this->debug[] = 'Bad title.';
                 }
             }
         }
         $today = getdate($now);
         $date = sprintf("/%04d-%02d-%02d-0", $today['year'], $today['mon'], $today['mday']);
         // 拒否アドレス
         if ($write) {
             for ($f = 0; $f < count($deny); $f++) {
                 if (strpos($from, $deny[$f]) !== false) {
                     $write = false;
                     $this->debug[] = 'Bad from addr.';
                 }
             }
         }
         // 登録対象ページを設定
         if ($write) {
             $uid = 0;
             if (!empty($adr2page[$to])) {
                 if (!$page) {
                     $page = is_array($adr2page[$to]) ? $adr2page[$to][0] : $adr2page[$to];
                 }
                 if (is_array($adr2page[$to])) {
                     $uid = $adr2page[$to][1];
                     if (!empty($adr2page[$to][2])) {
                         $attach_only = true;
                         $this->post_options['directpage'] = 1;
                         if (!empty($adr2page[$to][3])) {
                             $this->root->vars['refid'] = $adr2page[$to][3];
                         }
                     }
                 }
             } else {
                 if (!empty($adr2page[$from])) {
                     if (!$page) {
                         $page = is_array($adr2page[$from]) ? $adr2page[$from][0] : $adr2page[$from];
                     }
                     if (is_array($adr2page[$from])) {
                         $uid = $adr2page[$from][1];
                     }
                 } else {
                     if (!$page) {
                         $page = is_array($adr2page['other']) ? $adr2page['other'][0] : $adr2page['other'];
                     }
                 }
             }
             $uid = intval($uid);
             // userinfo を設定
             $this->func->set_userinfo($uid);
             $this->root->userinfo['ucd'] = '';
             $this->root->cookie['name'] = '';
             // pginfo のキャッシュをクリア
             $this->func->get_pginfo($page, '', TRUE);
             if ($page) {
                 $page = $this->get_pagename($page, $uid, $today);
             }
             if ($page) {
                 if (!$this->func->is_pagename($page)) {
                     $write = false;
                     $this->debug[] = '"' . $page . '" is not the WikiName.';
                 } else {
                     if (!$attach_only) {
                         $this->user_pref = $this->func->get_user_pref($uid);
                         if (!empty($this->user_pref['moblog_auth_code'])) {
                             if ($this->user_pref['moblog_auth_code'] != $this->post_options['auth_code']) {
                                 $write = false;
                                 $this->debug[] = 'User auth key dose not mutch.';
                             }
                         }
                     }
                 }
             } else {
                 $write = false;
                 $this->debug[] = 'Allow page not found.' . $page;
             }
         }
         if ($write) {
             // マルチパートならばバウンダリに分割
             if (preg_match("#^Content-type:.*multipart/#im", $head)) {
                 $boureg = array();
                 preg_match('#boundary="([^"]+)"#i', $head, $boureg);
                 $body = str_replace($boureg[1], urlencode($boureg[1]), $body);
                 $part = split("\r\n--" . urlencode($boureg[1]) . "-?-?", $body);
                 $boureg2 = array();
                 if (preg_match('#boundary="([^"]+)"#i', $body, $boureg2)) {
                     //multipart/altanative
                     $body = str_replace($boureg2[1], urlencode($boureg2[1]), $body);
                     $body = preg_replace("#\r\n--" . urlencode($boureg[1]) . "-?-?\r\n#i", "", $body);
                     $part = split("\r\n--" . urlencode($boureg2[1]) . "-?-?", $body);
                 }
             } else {
                 $part[0] = $dat;
                 // 普通のテキストメール
             }
             foreach ($part as $multi) {
                 if (!$write) {
                     break;
                 }
                 @(list($m_head, $m_body) = $this->plugin_moblog_mime_split($multi));
                 if (!$m_body) {
                     continue;
                 }
                 $filename = '';
                 $m_body = preg_replace("/\r\n\\.\r\n\$/", "", $m_body);
                 if (!preg_match("#^Content-type:(.+)\$#im", $m_head, $match)) {
                     continue;
                 }
                 $match = trim($match[1]);
                 list($type, $charset) = array_pad(explode(';', $match), 2, '');
                 if ($charset) {
                     $charset = trim($charset);
                     if (preg_match('/^charset=(.+)$/i', $charset)) {
                         $charset = substr($charset, 8);
                     } else {
                         $charset = '';
                     }
                 }
                 list($main, $sub) = explode('/', trim($type));
                 $sub = strtolower($sub);
                 // 本文をデコード
                 if (strtolower($main) === 'text') {
                     if (!empty($body_text['plain']) && $sub === 'html') {
                         continue;
                     }
                     // キャラクターセットのチェック
                     if ($charset) {
                         if ($deny_lang) {
                             if (preg_match($deny_lang, $charset)) {
                                 $write = false;
                                 $this->debug[] = 'Bad charset.';
                                 break;
                             }
                         }
                     } else {
                         $charset = 'AUTO';
                     }
                     if (preg_match("#^Content-Transfer-Encoding:.*base64#im", $m_head)) {
                         $m_body = base64_decode($m_body);
                     }
                     if (preg_match("#^Content-Transfer-Encoding:.*quoted-printable#im", $m_head)) {
                         $m_body = quoted_printable_decode($m_body);
                     }
                     if (HypCommonFunc::get_version() >= '20081215') {
                         if (!isset($mpc)) {
                             if (!XC_CLASS_EXISTS('MobilePictogramConverter')) {
                                 HypCommonFunc::loadClass('MobilePictogramConverter');
                             }
                             $mpc =& MobilePictogramConverter::factory_common();
                         }
                         $m_body = $mpc->mail2ModKtai($m_body, $from, $charset);
                     }
                     $text = trim(mb_convert_encoding($m_body, $this->cont['SOURCE_ENCODING'], $charset));
                     // 改行文字統一
                     $text = str_replace(array("\r\n", "\r"), array("\n", "\n"), $text);
                     if ($sub === 'html') {
                         $text = str_replace("\n", '', $text);
                         $text = preg_replace('#<br([^>]+)?>#i', "\n", $text);
                         $text = preg_replace('#</?(?:p|tr|table|div)([^>]+)?>#i', "\n\n", $text);
                         $text = strip_tags($text);
                     }
                     // 改行3連続以上を #clear に置換
                     $text = preg_replace("/\n{3,}/", "\n#clear\n", $text);
                     if ($write) {
                         // 電話番号削除
                         //$text = preg_replace("#([[:digit:]]{11})|([[:digit:]\-]{13})#", "", $text);
                         // 下線削除
                         $text = preg_replace('#' . $del_ereg . '#', '', $text);
                         // mac削除
                         $text = preg_replace("#Content-type: multipart/appledouble;[[:space:]]boundary=(.*)#", "", $text);
                         // 広告等削除
                         if (is_array($word)) {
                             foreach ($word as $delstr) {
                                 $text = str_replace($delstr, "", $text);
                             }
                         }
                         if (strlen($text) > $body_limit) {
                             $text = substr($text, 0, $body_limit) . "...";
                         }
                     }
                     // ISBN, ASIN 変換
                     if (!empty($this->config['isbn'])) {
                         $isbn = $this->config['isbn'];
                         $text = preg_replace('/^([A-Za-z0-9]{10}|\\d{13})$/me', 'str_replace(\'__ISBN__\', \'$1\', \'' . $isbn . '\')', $text);
                     }
                     // キーワード@amazon 変換
                     if (!empty($this->config['amazon'])) {
                         $amazon = $this->config['amazon'];
                         $text = preg_replace('/^(.+)@amazon$/mei', 'str_replace(\'__KEYWORD__\', \'$1\', \'' . $amazon . '\')', $text);
                     }
                     $body_text[$sub][] = trim($text);
                 } else {
                     // ファイル名を抽出
                     $filereg = array();
                     if (preg_match("#name=\"?([^\"\n]+)\"?#i", $m_head, $filereg)) {
                         $filename = trim($filereg[1]);
                         $filename = $this->mime_decode($filename);
                     }
                     // 添付データをデコードして保存
                     if (preg_match("#^Content-Transfer-Encoding:.*base64#im", $m_head) && preg_match('#' . $subtype . '#i', $sub)) {
                         $tmp = base64_decode($m_body);
                         //$save_file = $this->cont['CACHE_DIR'].$this->func->encode($filename).".tmp";
                         if (strlen($tmp) < $maxbyte && $write && $attach) {
                             $save_file = tempnam(rtrim($this->cont['UPLOAD_DIR'], '/'), 'moblog');
                             chmod($save_file, 0606);
                             if (file_put_contents($save_file, $tmp, LOCK_EX)) {
                                 //Exif geo
                                 $exifgeo = $this->getExifGeo($save_file);
                                 list($usec) = explode(' ', microtime());
                                 if (!$filename) {
                                     $filename = $this->cont['UTC'] . '_' . $usec . '.' . $sub;
                                 }
                                 //回転指定
                                 if ($rotate) {
                                     HypCommonFunc::rotateImage($save_file, $rotate);
                                 }
                                 // ページが無ければ空ページを作成
                                 if (!$this->func->is_page($page)) {
                                     $this->func->make_empty_page($page, false);
                                 }
                                 //$attach = $this->func->get_plugin_instance('attach');
                                 $pass = null;
                                 if (!$uid) {
                                     list($pass) = explode('@', $from);
                                 }
                                 $res = $attach->do_upload($page, $filename, $save_file, false, $pass, true);
                                 if ($res['result']) {
                                     $filenames[] = array('name' => $res['name'], 'exifgeo' => $exifgeo);
                                 } else {
                                     $this->debug[] = $res['msg'];
                                 }
                             } else {
                                 $write = false;
                                 $this->debug[] = 'Can not make temp-file.';
                             }
                         } else {
                             $write = false;
                             $this->debug[] = 'Plugin attach was not found.';
                         }
                     }
                 }
             }
             if ($imgonly && !$filenames) {
                 $write = false;
                 $this->debug[] = 'Attach file was not found.';
             }
             $subject = trim($subject);
         }
         if (!empty($body_text['plain'])) {
             $text = join("\n\n", $body_text['plain']);
         } else {
             if (!empty($body_text['html'])) {
                 $text = join("\n\n", $body_text['html']);
             } else {
                 $text = '';
             }
         }
         // wikiページ書き込み
         if ($write && !$attach_only) {
             $this->plugin_moblog_page_write($page, $subject, $text, $filenames, $ref_option, $now);
         }
     }
     // imgタグ呼び出し
     $this->plugin_moblog_output();
 }
Exemple #11
0
    $root->script = $matches[1];
}
/////////////////////////////////////////////////
// ブラウザ調整前のデフォルト値
// max_size (SKINで使用)
$root->max_size = 5;
// SKINで使用, KByte
// cols: テキストエリアのカラム数 rows: 行数
$root->cols = 22;
$root->rows = 5;
// i_mode
// ref でのイメージサイズの最大px
$root->keitai_display_width = 240;
$root->keitai_img_px = 200;
$root->keitai_imageTwiceDisplayWidth = 0;
if (strtolower($root->keitai_output_filter) !== 'pass' && HypCommonFunc::get_version() >= '20090611') {
    HypCommonFunc::loadClass('HypKTaiRender');
    $ktairender =& HypKTaiRender::getSingleton();
    if (!empty($ktairender->vars['ua']['width'])) {
        $root->keitai_display_width = $ktairender->vars['ua']['width'];
        $root->keitai_imageTwiceDisplayWidth = $ktairender->Config_imageTwiceDisplayWidth;
    }
}
/////////////////////////////////////////////////
// ブラウザに合わせた調整
$root->ua_name = $user_agent['name'];
$root->ua_vers = $user_agent['vers'];
$root->ua_agent = $user_agent['agent'];
$root->matches = array();
// Browser-name only
switch ($root->ua_name) {
Exemple #12
0
 function send_update_ping()
 {
     if ($this->root->update_ping && HypCommonFunc::get_version() >= 20080515) {
         if (!$this->cache_get_db('xmlrpc_ping_send', 'system', false, true)) {
             $this->cache_save_db('done', 'system', 1800, 'xmlrpc_ping_send');
             // TTL = 1800 sec.
             $this->unregist_jobstack(array('action' => 'xmlrpc_ping_send'));
             HypCommonFunc::loadClass('HypPinger');
             $p = new HypPinger($this->root->module['title'] . ' / ' . $this->root->siteinfo['sitename'], $this->cont['HOME_URL'], $this->cont['HOME_URL'] . '?' . rawurldecode($this->root->whatsnew), $this->cont['HOME_URL'] . '?cmd=rss', '');
             $p->setEncording($this->cont['SOURCE_ENCODING']);
             foreach (explode("\n", trim($this->root->update_ping_servers)) as $to) {
                 list($url, $extended) = array_pad(explode(' ', trim($to)), 2, '');
                 $url = trim($url);
                 $extended = $extended ? TRUE : FALSE;
                 if ($this->is_url($url, TRUE)) {
                     $p->addSendTo($url, $extended);
                 }
             }
             $p->send();
             $p = NULL;
             unset($p);
         } else {
             // Retry after 5 min.
             $this->regist_jobstack(array('action' => 'xmlrpc_ping_send'), 0, 300);
         }
     }
 }
Exemple #13
0
 function input_filter($param)
 {
     static $magic_quotes_gpc = NULL;
     if ($magic_quotes_gpc === NULL) {
         $magic_quotes_gpc = get_magic_quotes_gpc();
     }
     if (HypCommonFunc::get_version() > 20111122) {
         $result = HypCommonFunc::input_filter($param, 2, defined('HYP_POST_ENCODING') ? HYP_POST_ENCODING : null);
         if (!defined('HYP_COMMON_INPUT_FILTER_STRIPSLASHES') && $magic_quotes_gpc) {
             $result = $this->stripslashes($result);
         }
     } else {
         if (is_array($param)) {
             return array_map(array(&$this, 'input_filter'), $param);
         } else {
             $result = str_replace(array("", '&#8203;', "​"), '', $param);
             $result = $this->remove_bom($result);
             if ($magic_quotes_gpc) {
                 $result = stripslashes($result);
             }
         }
     }
     return $result;
 }
Exemple #14
0
: <a href="<?php 
echo $this->root->modifierlink;
?>
"><?php 
echo $this->root->modifier;
?>
</a></p>
</div>
<?php 
$footer = ob_get_contents();
ob_end_clean();
if ($this->root->runmode === 'standalone') {
    $ctype = 'text/html';
    if (HypCommonFunc::get_version() >= '20080617.2') {
        HypCommonFunc::loadClass('HypKTaiRender');
        if (HypCommonFunc::get_version() >= '20080925') {
            $r =& HypKTaiRender::getSingleton();
        } else {
            $r = new HypKTaiRender();
        }
        $r->set_myRoot($this->root->siteinfo['host']);
        $r->Config_hypCommonURL = $this->cont['ROOT_URL'] . 'class/hyp_common';
        $r->Config_redirect = $this->root->k_tai_conf['redirect'];
        $r->Config_emojiDir = $this->cont['ROOT_URL'] . 'images/emoji';
        if (!empty($this->root->k_tai_conf['showImgHosts'])) {
            $r->Config_showImgHosts = $this->root->k_tai_conf['showImgHosts'];
        }
        if (!empty($this->root->k_tai_conf['directImgHosts'])) {
            $r->Config_directImgHosts = $this->root->k_tai_conf['directImgHosts'];
        }
        if (!empty($this->root->k_tai_conf['directLinkHosts'])) {
 /**
  * JPEG image auto rotation by EXIF info for OnUpLoadPreSave callback
  * 
  * @param string $path
  * @param string $name
  * @param string $src
  * @param object $elfinder
  * @param object $volume
  * @return boolean
  */
 public function autoRotateOnUpLoadPreSave(&$path, &$name, $src, $elfinder, $volume)
 {
     if (!class_exists('HypCommonFunc') || version_compare(HypCommonFunc::get_version(), '20150515', '<')) {
         return false;
     }
     $srcImgInfo = @getimagesize($src);
     if ($srcImgInfo === false) {
         return false;
     }
     if (!in_array($srcImgInfo[2], array(IMAGETYPE_JPEG, IMAGETYPE_JPEG2000))) {
         return false;
     }
     $ret = HypCommonFunc::rotateImage($src, 0, 95, $srcImgInfo);
     // remove exif gps info
     HypCommonFunc::removeExifGps($src, $srcImgInfo);
     return $ret;
 }
Exemple #16
0
 function plugin_amazon_inline()
 {
     if (HypCommonFunc::get_version() < 20080224) {
         return '&amazon require "HypCommonFunc" >= Ver. 20080224';
     }
     list($this->asin_all) = func_get_args();
     $this->asin_all = htmlspecialchars($this->asin_all);
     // for XSS
     if (!$this->is_asin()) {
         return FALSE;
     }
     $title = $this->plugin_amazon_get_asin_title();
     if ($title[0] === "\t") {
         return trim($title) . $this->config['conflink'];
     } else {
         if ($title === '') {
             return FALSE;
         } else {
             $this->config['PLUGIN_AMAZON_AID'] = $this->get_associate_tag($this->config['PLUGIN_AMAZON_AID']);
             return '<a href="' . $this->config['PLUGIN_AMAZON_SHOP_URI'] . $this->asin . '/' . $this->config['PLUGIN_AMAZON_AID'] . '/ref=nosim">' . $title . '</a>' . "\n";
         }
     }
 }