Changeset 18609 for tmp/version-2_5-test/data/class/util/SC_Utils.php
- Timestamp:
- 2010/03/11 10:35:11 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tmp/version-2_5-test/data/class/util/SC_Utils.php
r18562 r18609 74 74 } 75 75 76 /** 77 * インストール初期処理 78 */ 79 function sfInitInstall() 80 { 81 // インストールが完了していない時 82 if( !defined('ECCUBE_INSTALL') ) { 83 if( !ereg('/install/', $_SERVER['PHP_SELF']) ) { 84 // インストールページに遷移させる 85 86 $script_filename = $_SERVER['SCRIPT_FILENAME']; 87 list($real_root, $tmp) = explode('/html/', $script_filename); 88 $real_root = $real_root . '/html/'; 89 $script_name = $_SERVER['SCRIPT_NAME']; 90 $url_dir = rtrim($script_name, basename($script_name)); 91 92 if ($dh = opendir($real_root)) { 93 $arrDir = array(); 94 while ($entry = readdir($dh)) { 95 if (is_dir($real_root.$entry) && !in_array($entry, array('.', '..', '.svn', 'install'))) { 96 $url_dir = rtrim($url_dir, $entry.'/'); 97 } 98 } 99 closedir($dh); 100 } 101 102 $location = $url_dir . '/install/'; 103 header('Location: ' . $location); 104 exit; 105 } 106 } else { 107 $path = HTML_PATH . "install/index.php"; 108 if(file_exists($path)) { 109 SC_Utils::sfErrorHeader(">> /install/index.phpは、インストール完了後にファイルを削除してください。"); 110 } 76 // インストール初期処理 77 function sfInitInstall() { 78 // インストール済みが定義されていない。 79 if (!defined('ECCUBE_INSTALL')) { 80 // ここから2つ上はdataディレクトリ 81 $eccube_data_dir = realpath(dirname(__FILE__) . '/../../'); 82 // dataディレクトリとDATA_DIR2HTMLからhtmlディレクトリを取得。 83 $eccube_html_dir = realpath($eccube_data_dir . '/' . DATA_DIR2HTML); 84 // htmlディレクトリとDOCUMENT_ROOTの相対パスがURL_DIR 85 $document_root = realpath($_SERVER['DOCUMENT_ROOT']); 86 $url_dir = str_replace($document_root, '', $eccube_html_dir); 87 88 // installページへのURLを生成。 89 // Windowsの場合は, ディレクトリの区切り文字を\から/に変換する 90 $url_dir = str_replace("\\", "/", $url_dir); 91 // 先頭が'/'でない場合は'/'を付与。(php4,5のrealpathの挙動の違いによる) 92 if (substr($url_dir, 0, 1) != '/') { 93 $url_dir = '/' . $url_dir; 94 } 95 // 最後が'/'でない場合は'/'を付与。 96 if (substr($url_dir, -1) != '/') { 97 $url_dir .= '/'; 98 } 99 $location = $url_dir . 'install/index.php'; 100 101 header('Location: ' . $location); 102 exit; 103 } 104 $path = HTML_PATH . "install/index.php"; 105 if(file_exists($path)) { 106 SC_Utils::sfErrorHeader(">> /install/index.phpは、インストール完了後にファイルを削除してください。"); 111 107 } 112 108 } … … 138 134 139 135 /* サイトエラーページの表示 */ 140 function sfDispSiteError($type, $objSiteSess = "", $return_top = false, $err_msg = "" , $is_mobile = false) {136 function sfDispSiteError($type, $objSiteSess = "", $return_top = false, $err_msg = "") { 141 137 global $objCampaignSess; 142 138 … … 155 151 } 156 152 153 /** 154 * 例外エラーページの表示 155 * 156 * @param string $debugMsg デバッグ用のメッセージ 157 * @return void 158 */ 159 function sfDispException($debugMsg = null) { 160 require_once(CLASS_EX_PATH . "page_extends/error/LC_Page_Error_SystemError_Ex.php"); 161 162 $objPage = new LC_Page_Error_SystemError_Ex(); 163 register_shutdown_function(array($objPage, "destroy")); 164 $objPage->init(); 165 if (!is_null($debugMsg)) { 166 $objPage->addDebugMsg($debugMsg); 167 } 168 if (function_exists("debug_backtrace")) { 169 $objPage->backtrace = debug_backtrace(); 170 } 171 GC_Utils_Ex::gfPrintLog($objPage->sfGetErrMsg()); 172 $objPage->process(); 173 174 exit(); 175 } 176 157 177 /* 認証の可否判定 */ 158 178 function sfIsSuccess($objSess, $disp_error = true) { … … 232 252 233 253 /* 前のページで正しく登録が行われたか判定 */ 234 function sfIsPrePage(&$objSiteSess , $is_mobile = false) {254 function sfIsPrePage(&$objSiteSess) { 235 255 $ret = $objSiteSess->isPrePage(); 236 256 if($ret != true) { 237 257 // エラーページの表示 238 SC_Utils::sfDispSiteError(PAGE_ERROR, $objSiteSess , false, "", $is_mobile);258 SC_Utils::sfDispSiteError(PAGE_ERROR, $objSiteSess); 239 259 } 240 260 } … … 284 304 } 285 305 286 // INT型の数値チェック 306 /** 307 * INT型の数値チェック 308 * ・FIXME: マイナス値の扱いが不明確 309 * ・XXX: INT_LENには収まるが、INT型の範囲を超えるケースに対応できないのでは? 310 * 311 * @param mixed $value 312 * @return bool 313 */ 314 // 287 315 function sfIsInt($value) { 288 if ($value != ""&& strlen($value) <= INT_LEN && is_numeric($value)) {316 if (strlen($value) >= 1 && strlen($value) <= INT_LEN && is_numeric($value)) { 289 317 return true; 290 318 } 319 return false; 320 } 321 322 /* 323 * 桁が0で埋められているかを判定する 324 * 325 * @param string $value 検査対象 326 * @return boolean 0で埋められている 327 */ 328 function sfIsZeroFilling($value) { 329 if (strlen($value) > 1 && $value{0} === '0') 330 return true; 291 331 return false; 292 332 } … … 398 438 // html_checkboxesの値をマージしてSQL検索用に変更する。 399 439 function sfSearchCheckBoxes($array) { 400 $max = 0; 401 $ret = ""; 402 foreach($array as $val) { 403 $arrTmp[$val] = "1"; 404 if($val > $max) { 405 $max = $val; 406 } 407 } 408 for($i = 1; $i <= $max; $i++) { 409 if($arrTmp[$i] == "1") { 410 $ret.= "1"; 411 } else { 412 $ret.= "_"; 413 } 414 } 415 416 if($ret != "") { 417 $ret.= "%"; 440 $max = max($array); 441 $ret = ''; 442 for ($i = 1; $i <= $max; $i++) { 443 $ret .= in_array($i, $array) ? '1' : '_'; 444 } 445 if (strlen($ret) != 0) { 446 $ret .= '%'; 418 447 } 419 448 return $ret; … … 448 477 // チェックボックスの値を分解 449 478 function sfSplitCBValue($val, $keyname = "") { 479 $arr = array(); 450 480 $len = strlen($val); 451 481 $no = 1; … … 651 681 } 652 682 653 /* 税金計算 */ 654 function sfTax($price, $tax = null, $tax_rule = null) { 655 // 店舗基本情報を取得 656 static $CONF; 657 if (is_null($CONF) && (is_null($tax) || is_null($tax_rule))) { 658 $CONF = SC_Helper_DB_Ex::sf_getBasisData(); 659 } 660 if (is_null($tax)) { 661 $tax = $CONF['tax']; 662 } 663 if (is_null($tax_rule)) { 664 $tax_rule = $CONF['tax_rule']; 665 } 666 683 /** 684 * 税金額を返す 685 * 686 * ・店舗基本情報に基づいた計算は SC_Helper_DB::sfTax() を使用する 687 * 688 * @param integer $price 計算対象の金額 689 * @param integer $tax 税率(%単位) 690 * XXX integer のみか不明 691 * @param integer $tax_rule 端数処理 692 * @return integer 税金額 693 */ 694 function sfTax($price, $tax, $tax_rule) { 667 695 $real_tax = $tax / 100; 668 696 $ret = $price * $real_tax; … … 688 716 } 689 717 690 /* 税金付与 */ 691 function sfPreTax($price, $tax = null, $tax_rule = null) { 718 /** 719 * 税金付与した金額を返す 720 * 721 * ・店舗基本情報に基づいた計算は SC_Helper_DB::sfTax() を使用する 722 * 723 * @param integer $price 計算対象の金額 724 * @param integer $tax 税率(%単位) 725 * XXX integer のみか不明 726 * @param integer $tax_rule 端数処理 727 * @return integer 税金付与した金額 728 */ 729 function sfPreTax($price, $tax, $tax_rule) { 692 730 return $price + SC_Utils_Ex::sfTax($price, $tax, $tax_rule); 693 731 } … … 769 807 } 770 808 771 /* 規格の登録 */772 function sfInsertProductClass($objQuery, $arrList, $product_id , $product_class_id = "") {773 // すでに規格登録があるかどうかをチェックする。774 $where = "product_id = ? AND classcategory_id1 <> 0 AND classcategory_id1 <> 0";775 $count = $objQuery->count("dtb_products_class", $where, array($product_id));776 777 // すでに規格登録がない場合778 if($count == 0) {779 // 既存規格の削除780 $where = "product_id = ?";781 $objQuery->delete("dtb_products_class", $where, array($product_id));782 783 // 配列の添字を定義784 $checkArray = array("product_code", "stock", "stock_unlimited", "price01", "price02");785 $arrList = SC_Utils_Ex::arrayDefineIndexes($arrList, $checkArray);786 787 $sqlval['product_id'] = $product_id;788 if(strlen($product_class_id ) > 0 ){789 $sqlval['product_class_id'] = $product_class_id;790 }791 $sqlval['classcategory_id1'] = '0';792 $sqlval['classcategory_id2'] = '0';793 $sqlval['product_code'] = $arrList["product_code"];794 $sqlval['stock'] = $arrList["stock"];795 $sqlval['stock_unlimited'] = $arrList["stock_unlimited"];796 $sqlval['price01'] = $arrList['price01'];797 $sqlval['price02'] = $arrList['price02'];798 $sqlval['creator_id'] = $_SESSION['member_id'];799 $sqlval['create_date'] = "now()";800 801 if($_SESSION['member_id'] == "") {802 $sqlval['creator_id'] = '0';803 }804 805 // INSERTの実行806 $objQuery->insert("dtb_products_class", $sqlval);807 }808 }809 810 809 function sfGetProductClassId($product_id, $classcategory_id1, $classcategory_id2) { 811 810 $where = "product_id = ? AND classcategory_id1 = ? AND classcategory_id2 = ?"; … … 915 914 } 916 915 917 /* 加算ポイントの計算式 */ 918 function sfGetAddPoint($totalpoint, $use_point, $arrInfo) { 919 if( USE_POINT === false ) return ; 916 /** 917 * 加算ポイントの計算 918 * 919 * ・店舗基本情報に基づいた計算は SC_Helper_DB::sfGetAddPoint() を使用する 920 * 921 * @param integer $totalpoint 922 * @param integer $use_point 923 * @param integer $point_rate 924 * @return integer 加算ポイント 925 */ 926 function sfGetAddPoint($totalpoint, $use_point, $point_rate) { 920 927 // 購入商品の合計ポイントから利用したポイントのポイント換算価値を引く方式 921 $add_point = $totalpoint - intval($use_point * ($ arrInfo['point_rate']/ 100));928 $add_point = $totalpoint - intval($use_point * ($point_rate / 100)); 922 929 923 930 if($add_point < 0) { … … 934 941 $id = uniqid($head); 935 942 return ($id . $random); 936 }937 938 // カテゴリ別オススメ品の取得939 function sfGetBestProducts( $conn, $category_id = 0){940 // 既に登録されている内容を取得する941 $sql = "SELECT name, main_image, main_list_image, price01_min, price01_max, price02_min, price02_max, point_rate,942 A.product_id, A.comment FROM dtb_best_products as A LEFT JOIN vw_products_allclass AS allcls943 USING (product_id) WHERE A.category_id = ? AND A.del_flg = 0 AND status = 1 ORDER BY A.rank";944 $arrItems = $conn->getAll($sql, array($category_id));945 946 return $arrItems;947 943 } 948 944 … … 1220 1216 } 1221 1217 $objConn->query("COMMIT"); 1222 $subject = sfMakeSubject('メルマガ仮登録が完了しました。');1218 $subject = 'メルマガ仮登録が完了しました'; 1223 1219 $objPage->tpl_url = SSL_URL."mailmagazine/regist.php?temp_id=".$arrRegistMailMagazine['temp_id']; 1224 1220 switch ($mail_flag){ … … 1237 1233 break; 1238 1234 } 1239 1235 $objPage->tpl_email = $email; 1240 1236 sfSendTplMail($email, $subject, 'mail_templates/mailmagazine_temp.tpl', $objPage); 1241 1237 } … … 1276 1272 1277 1273 if($basename == "") { 1278 $path = $_SERVER["REQUEST_URI"] . "index.php";1274 $path = $_SERVER["REQUEST_URI"] . DIR_INDEX_URL; 1279 1275 } else { 1280 1276 $path = $_SERVER["REQUEST_URI"]; … … 1464 1460 1465 1461 $fileArray=glob( $src."*" ); 1466 foreach( $fileArray as $key => $data_ ){ 1467 // CVS管理ファイルはコピーしない 1468 if(ereg("/CVS/Entries", $data_)) { 1469 break; 1470 } 1471 if(ereg("/CVS/Repository", $data_)) { 1472 break; 1473 } 1474 if(ereg("/CVS/Root", $data_)) { 1475 break; 1476 } 1477 1478 mb_ereg("^(.*[\/])(.*)",$data_, $matches); 1479 $data=$matches[2]; 1480 if( is_dir( $data_ ) ){ 1481 $mess = SC_Utils::sfCopyDir( $data_.'/', $des.$data.'/', $mess); 1482 }else{ 1483 if(!$override && file_exists($des.$data)) { 1484 $mess.= $des.$data . ":ファイルが存在します\n"; 1485 } else { 1486 if(@copy( $data_, $des.$data)) { 1487 $mess.= $des.$data . ":コピー成功\n"; 1462 if (is_array($fileArray)) { 1463 foreach( $fileArray as $key => $data_ ){ 1464 // CVS管理ファイルはコピーしない 1465 if(ereg("/CVS/Entries", $data_)) { 1466 break; 1467 } 1468 if(ereg("/CVS/Repository", $data_)) { 1469 break; 1470 } 1471 if(ereg("/CVS/Root", $data_)) { 1472 break; 1473 } 1474 1475 mb_ereg("^(.*[\/])(.*)",$data_, $matches); 1476 $data=$matches[2]; 1477 if( is_dir( $data_ ) ){ 1478 $mess = SC_Utils::sfCopyDir( $data_.'/', $des.$data.'/', $mess); 1479 }else{ 1480 if(!$override && file_exists($des.$data)) { 1481 $mess.= $des.$data . ":ファイルが存在します\n"; 1488 1482 } else { 1489 $mess.= $des.$data . ":コピー失敗\n"; 1483 if(@copy( $data_, $des.$data)) { 1484 $mess.= $des.$data . ":コピー成功\n"; 1485 } else { 1486 $mess.= $des.$data . ":コピー失敗\n"; 1487 } 1490 1488 } 1491 }1492 $mod=stat($data_ );1489 $mod=stat($data_ ); 1490 } 1493 1491 } 1494 1492 } … … 1555 1553 } 1556 1554 1557 function sfFlush($output = " ", $sleep = 0){ 1558 // 実行時間を制限しない 1559 set_time_limit(0); 1555 /** 1556 * ブラウザに強制的に送出する 1557 * 1558 * @param boolean|string $output 半角スペース256文字+改行を出力するか。または、送信する文字列を指定。 1559 * @return void 1560 */ 1561 function sfFlush($output = false, $sleep = 0){ 1560 1562 // 出力をバッファリングしない(==日本語自動変換もしない) 1561 ob_end_clean(); 1562 1563 // IEのために256バイト空文字出力 1564 echo str_pad('',256); 1565 1566 // 出力はブランクだけでもいいと思う 1567 echo $output; 1563 while (@ob_end_flush()); 1564 1565 if ($output === true) { 1566 // IEのために半角スペース256文字+改行を出力 1567 //echo str_repeat(' ', 256) . "\n"; 1568 echo str_pad('', 256) . "\n"; 1569 } else if ($output !== false) { 1570 echo $output; 1571 } 1572 1568 1573 // 出力をフラッシュする 1569 1574 flush(); 1570 1575 1571 ob_flush();1572 1576 ob_start(); 1573 1577 … … 1658 1662 } 1659 1663 return $array; 1664 } 1665 1666 /** 1667 * $arrSrc のうち、キーが $arrKey に含まれるものを返す 1668 * 1669 * $arrSrc に含まない要素は返されない。 1670 * 1671 * @param array $arrSrc 1672 * @param array $arrKey 1673 * @return array 1674 */ 1675 function sfArrayIntersectKeys($arrSrc, $arrKey) { 1676 $arrRet = array(); 1677 foreach ($arrKey as $key) { 1678 if (isset($arrSrc[$key])) $arrRet[$key] = $arrSrc[$key]; 1679 } 1680 return $arrRet; 1660 1681 } 1661 1682 … … 2008 2029 for($i = 0; $i < $cnt; $i++) { 2009 2030 $html.= "<tr>"; 2010 foreach($array[$i] as $val) {2031 foreach($array[$i] as $val) { 2011 2032 $html.="<td>$val</td>"; 2012 2033 } … … 2016 2037 } 2017 2038 2018 /** 2019 * 出力バッファをフラッシュし, バッファリングを開始する. 2020 * 2021 * @return void 2022 */ 2023 function flush() { 2024 flush(); 2025 ob_end_flush(); 2026 ob_start(); 2039 /** 2040 * 一覧-メイン画像のファイル指定がない場合、専用の画像ファイルに書き換える。 2041 * 2042 * @param string &$filename ファイル名 2043 * @return string 2044 */ 2045 function sfNoImageMainList($filename = '') { 2046 if (strlen($filename) == 0 || substr($filename, -1, 1) == '/') { 2047 $filename .= 'noimage_main_list.jpg'; 2048 } 2049 return $filename; 2050 } 2051 2052 /** 2053 * 詳細-メイン画像のファイル指定がない場合、専用の画像ファイルに書き換える。 2054 * 2055 * @param string &$filename ファイル名 2056 * @return string 2057 */ 2058 function sfNoImageMain($filename = '') { 2059 if (strlen($filename) == 0 || substr($filename, -1, 1) == '/') { 2060 $filename .= 'noimage_main.png'; 2061 } 2062 return $filename; 2027 2063 } 2028 2064 … … 2037 2073 print("<strong>**デバッグ中**</strong></div>\n"); 2038 2074 } 2075 2076 /** 2077 * ポイント使用するかの判定 2078 * 2079 * @param integer $status 対応状況 2080 * @return boolean 使用するか(顧客テーブルから減算するか) 2081 */ 2082 function sfIsUsePoint($status) { 2083 switch ($status) { 2084 case ORDER_CANCEL: // キャンセル 2085 return false; 2086 default: 2087 break; 2088 } 2089 2090 return true; 2091 } 2092 2093 /** 2094 * ポイント加算するかの判定 2095 * 2096 * @param integer $status 対応状況 2097 * @return boolean 加算するか 2098 */ 2099 function sfIsAddPoint($status) { 2100 switch ($status) { 2101 case ORDER_NEW: // 新規注文 2102 case ORDER_PAY_WAIT: // 入金待ち 2103 case ORDER_PRE_END: // 入金済み 2104 case ORDER_CANCEL: // キャンセル 2105 case ORDER_BACK_ORDER: // 取り寄せ中 2106 return false; 2107 2108 case ORDER_DELIV: // 発送済み 2109 return true; 2110 2111 default: 2112 break; 2113 } 2114 2115 return false; 2116 } 2117 2118 /** 2119 * ランダムな文字列を取得する 2120 * 2121 * @param integer $length 文字数 2122 * @return string ランダムな文字列 2123 */ 2124 function sfGetRandomString($length = 1) { 2125 require_once(dirname(__FILE__) . '/../../module/Text/Password.php'); 2126 return Text_Password::create($length); 2127 } 2128 2129 /** 2130 * 現在の URL を取得する 2131 * 2132 * @return string 現在のURL 2133 */ 2134 function sfGetUrl() { 2135 $url = ''; 2136 2137 if (SC_Utils_Ex::sfIsHTTPS()) { 2138 $url = "https://"; 2139 } else { 2140 $url = "http://"; 2141 } 2142 2143 $url .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . '?' . $_SERVER['QUERY_STRING']; 2144 2145 return $url; 2146 } 2147 2148 /** 2149 * バックトレースをテキスト形式で出力する 2150 * 2151 * @return string テキストで表現したバックトレース 2152 */ 2153 function sfBacktraceToString($arrBacktrace) { 2154 $string = ''; 2155 2156 foreach ($arrBacktrace as $backtrace) { 2157 if (strlen($backtrace['class']) >= 1) { 2158 $func = $backtrace['class'] . $backtrace['type'] . $backtrace['function']; 2159 } else { 2160 $func = $backtrace['function']; 2161 } 2162 2163 $string .= $backtrace['file'] . " " . $backtrace['line'] . ":" . $func . "\n"; 2164 } 2165 2166 return $string; 2167 } 2168 2169 /** 2170 * 管理機能かを判定 2171 * 2172 * @return bool 管理機能か 2173 */ 2174 function sfIsAdminFunction() { 2175 return defined('ADMIN_FUNCTION') && ADMIN_FUNCTION; 2176 } 2177 2178 /** 2179 * フロント機能かを判定 2180 * 2181 * @return bool フロント機能か 2182 */ 2183 function sfIsFrontFunction() { 2184 return SC_Utils_Ex::sfIsPcSite() || SC_Utils_Ex::sfIsMobileSite(); 2185 } 2186 2187 /** 2188 * フロント機能PCサイトかを判定 2189 * 2190 * @return bool フロント機能PCサイトか 2191 */ 2192 function sfIsPcSite() { 2193 return defined('FRONT_FUNCTION_PC_SITE') && FRONT_FUNCTION_PC_SITE; 2194 } 2195 2196 /** 2197 * フロント機能モバイル機能かを判定 2198 * 2199 * @return bool フロント機能モバイル機能か 2200 */ 2201 function sfIsMobileSite() { 2202 return defined('MOBILE_SITE') && MOBILE_SITE; 2203 } 2204 2205 /** 2206 * インストール機能かを判定 2207 * 2208 * @return bool インストール機能か 2209 */ 2210 function sfIsInstallFunction() { 2211 return defined('INSTALL_FUNCTION') && INSTALL_FUNCTION; 2212 } 2213 2214 // 郵便番号から住所の取得 2215 function sfGetAddress($zipcode) { 2216 2217 $conn = new SC_DBconn(ZIP_DSN); 2218 2219 $masterData = new SC_DB_MasterData_Ex(); 2220 $arrPref = $masterData->getMasterData("mtb_pref", array("pref_id", "pref_name", "rank")); 2221 // インデックスと値を反転させる。 2222 $arrREV_PREF = array_flip($arrPref); 2223 2224 // 郵便番号検索文作成 2225 $zipcode = mb_convert_kana($zipcode ,"n"); 2226 $sqlse = "SELECT state, city, town FROM mtb_zip WHERE zipcode = ?"; 2227 2228 $data_list = $conn->getAll($sqlse, array($zipcode)); 2229 if (empty($data_list)) return array(); 2230 2231 /* 2232 総務省からダウンロードしたデータをそのままインポートすると 2233 以下のような文字列が入っているので 対策する。 2234 ・(1・19丁目) 2235 ・以下に掲載がない場合 2236 */ 2237 $town = $data_list[0]['town']; 2238 $town = ereg_replace("(.*)$","",$town); 2239 $town = ereg_replace("以下に掲載がない場合","",$town); 2240 $data_list[0]['town'] = $town; 2241 $data_list[0]['state'] = $arrREV_PREF[$data_list[0]['state']]; 2242 2243 return $data_list; 2244 } 2245 2246 /** 2247 * プラグインが配置されているディレクトリ(フルパス)を取得する 2248 * 2249 * @param string $file プラグイン情報ファイル(info.php)のパス 2250 * @return SimpleXMLElement プラグイン XML 2251 */ 2252 function sfGetPluginFullPathByRequireFilePath($file) { 2253 return str_replace('\\', '/', dirname($file)) . '/'; 2254 } 2255 2256 /** 2257 * プラグインのパスを取得する 2258 * 2259 * @param string $pluginFullPath プラグインが配置されているディレクトリ(フルパス) 2260 * @return SimpleXMLElement プラグイン XML 2261 */ 2262 function sfGetPluginPathByPluginFullPath($pluginFullPath) { 2263 return basename(rtrim($pluginFullPath, '/')); 2264 } 2265 2266 /** 2267 * プラグイン情報配列の基本形を作成する 2268 * 2269 * @param string $file プラグイン情報ファイル(info.php)のパス 2270 * @return array プラグイン情報配列 2271 */ 2272 function sfMakePluginInfoArray($file) { 2273 $fullPath = SC_Utils_Ex::sfGetPluginFullPathByRequireFilePath($file); 2274 2275 return 2276 array( 2277 // パス 2278 'path' => SC_Utils_Ex::sfGetPluginPathByPluginFullPath($fullPath), 2279 // プラグイン名 2280 'name' => '未定義', 2281 // フルパス 2282 'fullpath' => $fullPath, 2283 // バージョン 2284 'version' => null, 2285 // 著作者 2286 'auther' => '未定義', 2287 ) 2288 ; 2289 } 2290 2291 /** 2292 * プラグイン情報配列を取得する 2293 * 2294 * TODO include_once を利用することで例外対応をサボタージュしているのを改善する。 2295 * 2296 * @param string $path プラグインのディレクトリ名 2297 * @return array プラグイン情報配列 2298 */ 2299 function sfGetPluginInfoArray($path) { 2300 return (array)include_once(PLUGIN_PATH . "$path/plugin_info.php"); 2301 } 2302 2303 /** 2304 * プラグイン XML を読み込む 2305 * 2306 * TODO 空だったときを考慮 2307 * 2308 * @return SimpleXMLElement プラグイン XML 2309 */ 2310 function sfGetPluginsXml() { 2311 return simplexml_load_file(PLUGIN_PATH . 'plugins.xml'); 2312 } 2313 2314 /** 2315 * プラグイン XML を書き込む 2316 * 2317 * @param SimpleXMLElement $pluginsXml プラグイン XML 2318 * @return integer ファイルに書き込まれたバイト数を返します。 2319 */ 2320 function sfPutPluginsXml($pluginsXml) { 2321 if (!($pluginsXml instanceof SimpleXMLElement)) SC_Utils_Ex::sfDispException(); 2322 2323 $xml = $pluginsXml->asXML(); 2324 if (strlen($xml) == 0) SC_Utils_Ex::sfDispException(); 2325 2326 $return = file_put_contents(PLUGIN_PATH . 'plugins.xml', $pluginsXml->asXML()); 2327 if ($return === false) SC_Utils_Ex::sfDispException(); 2328 2329 return $return; 2330 } 2331 2332 function sfLoadPluginInfo($filenamePluginInfo) { 2333 return (array)include_once $filenamePluginInfo; 2334 } 2039 2335 } 2040 2336 ?>
Note: See TracChangeset
for help on using the changeset viewer.