* @copyright Copyright(c) 2010 C-UNIT SQUARE Co.,Ltd. All Rights Reserved. * @license C-UNIT SQUARE Co.,Ltd. ------------------------------------------------------------------------*/ /** * ブロック基本クラスを呼び出す */ require_once('BlockCls.php'); /** * サイトに関する処理をするクラスを呼び出す */ require_once('Util_SiteCls.php'); /** * class connect ftp */ require_once('FtpCls.php'); /** * C-Unit 2011-10-13 add * CMSオブジェクト基本クラスを呼び出す */ require_once('CmsObjectCls.php'); /* * Include Tristan connector */ require_once('TristanConnectorCls.php'); /** * 最大深度 */ define('MAX_DEPTH', 5); /** * 最大表示深度 */ define('MAX_VIEW_DEPTH', 4); /** * 最大下層ページの桁数 */ define('MAX_INDEX', 5); /** * 階層設定が半角数値以外だった時に使用する値 */ define('SEARCH_DEPS_DEFAULT', 1); /** * 表示設定が半角数値以外だった時に使用する値 */ define('STATIC_PAGER_SELECT_DEFAULT', '10,20,30,40,50'); /** * デフォルト表示設定が半角数値以外だった時に使用する値 */ define('STATIC_PAGER_DEFAULT_VIEW', '30'); class ContentsCls extends BlockCls { /** * @var object モデル項目の各名前を格納した連想配列 */ protected $_arrParamName = array( 'name' => 'タイトル', 'url' => 'ページのファイル名', ); /** * @var object 同値チェックするキーと検索条件の連想配列 */ protected $_objAlreadyKey = array( 'name' => '', ); /**---------------------------------------------------------------------- * コンストラクタ * * @param none * @return none ----------------------------------------------------------------------*/ public function __construct() { parent::init(); $this->_arrParamName = array( 'name' => $this->_objTranslation->_('ContentsCls_msg3'), 'url' => $this->_objTranslation->_('ContentsCls_msg4') ); } /**---------------------------------------------------------------------- * リストを階層順に並べ替える * @param array $arrData ソート対象の静的ページリスト ------------------------------------------------------------------------*/ public function layer_sort($arrData) { $length = MAX_DEPTH * MAX_INDEX; foreach ($arrData as $i => $objData) { $arrData[$i]['sort_index'] = ''; $objParent = $objData; while (1) { // 表示順 $index = ((int)$objParent['index']) + 1; while (MAX_INDEX > strlen($index)) { $index = '0' . $index; } $arrData[$i]['sort_index'] = $index . $arrData[$i]['sort_index']; if ('' == $objParent['id_contents_parent']) { break; } // 次の親 $flag = false; foreach ($arrData as $objCompare) { if ($objParent['id_contents_parent'] == $objCompare['id']) { $objParent = $objCompare; $flag = true; break; } } // 親がいなかったら抜ける if (false == $flag) { break; } } while ($length > strlen($arrData[$i]['sort_index'])) { $arrData[$i]['sort_index'] = $arrData[$i]['sort_index'] . '0'; } $arrData[$i]['sort_index'] = '@' . $arrData[$i]['sort_index']; } $arrData = vsort($arrData, array('sort_index' => SORT_ASC)); foreach ($arrData as $i => $objData) { unset($arrData[$i]['sort_index']); } return $arrData; } /**---------------------------------------------------------------------- * トップのリストを取得する * @param boolean $bLastUpdate 最終更新日をサイト内の中で最新のものにするかどうか ------------------------------------------------------------------------*/ public function getTopList($bLastUpdate = false) { $this->_log->start('getTopList'); /* * 既存ページ一覧よりトップページとして設定されているページの「公開状態」を「非公開」に変更して保存する ⇒ トップページの承認依頼を行う ⇒ 承認され、 * 公開される ⇒  トップページ上で「(非公開)」と表示される */ /* * C-Unit 2011-10-17 Start * #5418 * fix Double row of page. */ $arrContentsList = $this->search('`id_contents_parent`="" and `id_org` != "-"', $bLastUpdate); /* * C-Unit 2011-10-17 End */ $arrContentsList = vsort($arrContentsList, array('index' => SORT_ASC)); if ($bLastUpdate) { foreach ($arrContentsList as $i => $objData) { $objNewData = $this->query_fetch('select max(`date_update`) from ' . $this->_table . ' where `id_site`="' . $objData['id_site'] . '"'); $objData['date_update'] = $objNewData['max(`date_update`)']; /* * C-Unit 2011-11-1 start * #5598 * Change date format */ $objData['date_update'] = date($this->_objDateFormat . ' H:i:s',strtotime($objData['date_update'])); $objData['date_create'] = date($this->_objDateFormat . ' H:i:s',strtotime($objData['date_create'])); /* * C-Unit 2011-11-1 and */ $arrContentsList[$i] = $objData; } } $this->_log->end(); return $arrContentsList; } /**---------------------------------------------------------------------- * 子供のリストを取得する ------------------------------------------------------------------------*/ public function getChildList($id_parent) { static $arrChildListCache = array(); // キャッシュ取得 if (isset($arrChildListCache[$id_parent])) { return $arrChildListCache[$id_parent]; } $this->_log->start('getChildList'); $arrContentsList = $this->search('`id_contents_parent`="' . $id_parent . '"'); // キャッシュ保存 $arrChildListCache[$id_parent] = $arrContentsList; $this->_log->end(); return $arrContentsList; } /**---------------------------------------------------------------------- * 子孫の数を取得する ------------------------------------------------------------------------*/ public function getDescendantCount($id) { $arrChildData = $this->getChildList($id); $count = count($arrChildData); foreach ($arrChildData as $i => $objData) { $count += $this->getDescendantCount($objData['id']); } return $count; } /**---------------------------------------------------------------------- * 子孫のリストを取得する ------------------------------------------------------------------------*/ public function getDescendantList($id) { $arrChildData = $this->getChildList($id); $list = array(); foreach ($arrChildData as $i => $objData) { $list[] = $objData; $list = array_merge($list, $this->getDescendantList($objData['id'])); } return $list; } /**---------------------------------------------------------------------- * 同一サイトに所属する静的ページのリストを取得する ------------------------------------------------------------------------*/ public function getSiteList($id_site, $status = null) { $this->_log->start('getSiteList'); if($status != ''){ $arrContentsList = $this->search('`id_site`="' . $id_site . '" AND `status`="' . $status . '"'); } else { $arrContentsList = $this->search('`id_site`="' . $id_site . '"'); } $this->_log->end(); return $arrContentsList; } /**---------------------------------------------------------------------- * 親候補となる静的ページリストを取得する ------------------------------------------------------------------------*/ public function getParentCandidateList($id) { $all_list = $this->getAll(); $del_list = $this->getDescendantList($id); $list = array(); foreach ($all_list as $objData) { if ($id == $objData['id']) { continue; } $flag = true; foreach ($del_list as $objDelData) { if ($objData['id'] == $objDelData['id']) { $flag = false; break; } } if (true == $flag) { $list[] = $objData; } } return $list; } /**---------------------------------------------------------------------- * トップから自分までの階層リストを取得 * @param string $id 起点となる静的ページのID ------------------------------------------------------------------------*/ public function getLayerList($id) { $arrData = array(); while ('' != $id) { $objData = $this->get($id); $arrData[] = $objData; $id = $objData['id_contents_parent']; } $arrData = array_reverse($arrData); return $arrData; } /**---------------------------------------------------------------------- * 階層画像ファイル名のリストを取得 ------------------------------------------------------------------------*/ public function getLayerName($id) { $objTargetData = $this->get($id); // 階層リストを取得 $strDataList = $this->getLayerList($id); if (0 == count($strDataList)) { return array(); } // index のズレを補正 foreach ($strDataList as $i => $objData) { $objChildList = $this->getChildList($objData['id_contents_parent']); $objChildList = vsort($objChildList, array('index' => SORT_ASC)); foreach ($objChildList as $j => $objChildData) { if ($objData['id'] == $objChildData['id']) { $strDataList[$i]['index'] = $j; break; } } } // 線 $intDepthCount = count($strDataList); $arrLayerName = array(); for ($i = 1; $i < $intDepthCount; $i ++) { $objData = $strDataList[$i]; $arrChildData = $this->getChildList($objData['id_contents_parent']); // 末っ子 if (count($arrChildData) - 1 == $objData['index']) { // 自分 if ($intDepthCount - 1 == $i) { $strLayerName = 'lineL.gif'; } else { $strLayerName = 'empty.gif'; } } else { // 自分 if ($intDepthCount - 1 == $i) { $strLayerName = 'lineT.gif'; } else { $strLayerName = 'lineI.gif'; } } $arrLayerName[] = $strLayerName; } // 箱 $arrChildData = $this->getChildList($objTargetData['id']); $intChildCount = count($arrChildData); if (1 <= $intChildCount) { $strLayerName = 'boxParent0' . $objTargetData['depth'] . '.gif'; } else { $strLayerName = 'boxContents0' . $objTargetData['depth'] . '.gif'; } $arrLayerName[] = $strLayerName; // 最大表示数を超えている分は削除 $arrLayerName = array_splice($arrLayerName, 0, MAX_VIEW_DEPTH); return $arrLayerName; } /**---------------------------------------------------------------------- * 自動生成検索結果表示を行う静的ページのリストを取得 * @param string $id_site 検索先のサイト ------------------------------------------------------------------------*/ public function get_itempage_list($id_site) { $sql = 'select * from ' . $this->_table . ' where `id_site`="' . $id_site . '" and `id_dynamic`!=""'; $arrItempage = $this->query_fetch_all($sql); return $arrItempage; } /**---------------------------------------------------------------------- * プレビューデータを取得する ------------------------------------------------------------------------*/ public function preview($model) { CmsObjectCls::set_preview_flag(true); $strBlock = $this->create($model, $model); // テンプレート展開 $objTemplate = $this->createObject('template'); /** * C-Unit 2011-10-06 start * #6122 * show template preview */ //if (isset($model['id_site']) == true && empty($model['id_site'])== false) { if (isset($model['id_template']) == true && empty($model['id_template'])== false) { $strBlock = $objTemplate->display($model['id_template'], $strBlock, $model['id_site']); } /** * C-Unit 2011-12-06 end */ CmsObjectCls::set_preview_flag(false); return $strBlock; } //------------------------------------------------------------------------------------------------------------------ /**---------------------------------------------------------------------- * 取得したデータを加工する * @param object $data 加工するデータを格納した連想配列 * @return object 加工したデータを格納した連想配列 ------------------------------------------------------------------------*/ protected function _get_process($data) { $this->_log->start('_get_process'); $data = parent::_get_process($data); $url = $this->createURL($data); $data['path_rel'] = str_replace(basename($url), '', $url); if ('/' == substr($data['path_rel'], strlen($data['path_rel']) - 1, 1)) { $data['path_rel'] = substr($data['path_rel'], 0, strlen($data['path_rel']) - 1); } $this->_log->end(); return $data; } /**---------------------------------------------------------------------- * レコードを1件登録する * @param object $model 登録するレコードを格納した連想配列 * @return integer 処理結果コード ------------------------------------------------------------------------*/ public function set($model) { $this->_log->start('set'); // ステータス更新か? if (2 == count($model) && isset($model['id']) && isset($model['status'])) { $result = parent::set($model); return $result; } // レコード登録データ更新 $model = $this->set_data_update($model); if (!isset($model['range_use']) || 0 == $model['range_use']) { $model['range_use'] = ''; $model['range_start'] = ''; $model['range_end'] = ''; } // 登録 $result = parent::set($model); // 正常終了した if (!Message::isError($result)) { // 親指定なし if (!isset($model['id_contents_parent']) || '' == $model['id_contents_parent']) { $id_site = $this->_last_id; } else { $objParentData = $this->get($model['id_contents_parent']); $id_site = $objParentData['id_site']; } $this->_db->update($this->_table, array('id_site' => $id_site), '`id`="' . $this->_last_id . '"'); // 子達を再登録 $arrChildData = $this->getChildList($this->_last_id); foreach ($arrChildData as $i => $objChildData) { $objChildData = $this->set_data_update($objChildData); unset($objChildData['search_data']); $this->_db->update($this->_table, $objChildData, '`id`="' . $objChildData['id'] . '"'); } // 新規作成 if (!isset($model['id']) || '' == $model['id']) { // 全権限に初期権限を設定 $objAccountMgr = $this->createObject('account'); $objAccountMgr->setAuth(null, 'contents', $this->_last_id); } } $this->_log->end(); return $result; } /**---------------------------------------------------------------------- * レコード登録データ更新 * @param object $model 登録するレコードを格納した連想配列 * @return object 登録するレコードを更新した連想配列 ------------------------------------------------------------------------*/ public function set_data_update($model) { $del_keys = array( 'path_rel', ); foreach ($del_keys as $key) { unset($model[$key]); } // サイトマップXMLの情報 { if (!isset($model['sitemap_changefreq']) || '' == $model['sitemap_changefreq']) { $model['sitemap_changefreq'] = 'weekly'; } if (!isset($model['sitemap_priority']) || '' == $model['sitemap_priority']) { $model['sitemap_priority'] = '0.5'; } } $set_index = false; // 親あり if ('' != $model['id_contents_parent']) { // サイトIDを親からもらう $objData = $this->get($model['id_contents_parent']); $model['id_site'] = $objData['id_site']; // 位置更新するかどうか { // 親が更新された? if (isset($model['id']) && '' != $model['id']) { $objData = $this->get($model['id']); if ($objData['id_contents_parent'] != $model['id_contents_parent']) { $set_index = true; // 元弟たちの「index」を上げる(-1) $arrChildData = $this->getChildList($objData['id_contents_parent']); foreach ($arrChildData as $i => $objChildData) { // 弟か? if ($objData['index'] < $objChildData['index']) { // 必要なデータのみ抜き出し $objChildData = array( 'id' => $objChildData['id'], 'index' => $objChildData['index'] - 1, ); // 登録 $this->_db->update($this->_table, $objChildData, '`id`="' . $objChildData['id'] . '"'); } } } } } } else if (isset($model['id'])) { $model['id_site'] = $model['id']; // 親が更新された? if ('' != $model['id']) { $objData = $this->get($model['id']); if ($objData['id_contents_parent'] != $model['id_contents_parent']) { $set_index = true; } } } // 新規作成? if (!isset($model['id']) || '' == $model['id']) { $set_index = true; } // 深度 $arrLayerData = $this->getLayerList($model['id_contents_parent']); $model['depth'] = count($arrLayerData) + 1; // 位置設定 if (true == $set_index) { $arrChildData = $this->getChildList($model['id_contents_parent']); $model['index'] = count($arrChildData); } return $model; } /**---------------------------------------------------------------------- * レコードを1件削除する * @param string $id 対象レコードの主キー * @return integer 処理結果コード ------------------------------------------------------------------------*/ public function del($id) { $this->_log->start('del'); $objData = $this->get($id); $result = parent::del($id); $id = $this->_last_id; // 公開ファイル削除 { $url = $this->createURL($objData); $objPath = new PathMgr($this->_config); $strSystemPath = $objPath->get('user_site', 'system'); $this->_log->error($strSystemPath . $url); /* * C-Unit 2011-10-27 Start * #5565 * delete filr */ // Check server public or private if($this->_config['system']['ftp_transfer'] == '1') { $objFtpMgr = new FtpCls(); $objFtpMgr->deleteFile( $url, true); } else { if (is_file($strSystemPath . $url)) { unlink($strSystemPath . $url); } } } if (!Message::isError($result)) { // 子を消す $arrChildData = $this->getChildList($id); foreach ($arrChildData as $i => $objChildData) { $this->del($objChildData['id']); } // 弟たちの「index」を上げる(-1) $arrChildData = $this->getChildList($objData['id_contents_parent']); foreach ($arrChildData as $i => $objChildData) { // 弟か? if ($objData['index'] < $objChildData['index']) { // 必要なデータのみ抜き出し $objChildData = array( 'id' => $objChildData['id'], 'index' => $objChildData['index'] - 1, ); // 登録 $this->_db->update($this->_table, $objChildData, '`id`="' . $objChildData['id'] . '"'); } } } $this->_log->end(); return $result; } /**---------------------------------------------------------------------- * データを検証する * @param object $model 処理対象とするモデルデータ * @param string $validate_name 処理対象とするモデルデータ * @return array 検証結果のエラーを格納した配列 ------------------------------------------------------------------------*/ public function check($model, $validate_name = null) { $this->_log->start('check'); $arrError = parent::check($model, $validate_name); // 同一URLが無いかチェック $my_url = $this->createURL($model); $arrDataList = $this->getAll(); foreach ($arrDataList as $i => $objData) { if ($model['id'] == $objData['id']) { continue; } $url = $this->createURL($objData); if ($my_url == $url) { if (!isset($arrError['url'])) { $arrError['url'] = array(); } if (!isset($arrError['url']['already'])) { $arrError['url']['already'] = array(); } $arrError['url']['already'][] = 'URL[' . $my_url . $this->_objTranslation->_('ContentsCls_msg0'); break; } } /** * C-Unit 2011-11-01 * Move check_nochar function to Util_SiteCls */ $objSiteMgr = new Util_SiteCls($this->_config); $arrError = $objSiteMgr->check_nochar($model, $arrError, array('url' => 'URL')); /** * C-Unit 2011-11-30 * #6267 * check fomat path */ $arrError = $objSiteMgr->check_path($model, $arrError, array('path' => 'PATH')); $this->_log->end(); return $arrError; } /**---------------------------------------------------------------------- * ブロックテキスト取得メイン * @param object $model Smartyテンプレート展開用オブジェクト * @return string ブロックテキスト ------------------------------------------------------------------------*/ protected function _create_main($model) { $this->_log->start('_create_main'); $strBlock = ''; if (isset($model['model']['contents']) == true && empty($model['model']['contents'])== false) { $strBlock = $model['model']['contents']; } $this->_log->end(); return $strBlock; } /**---------------------------------------------------------------------- * PHPを使うかどうかを返す * @param string $id 対象レコードの主キー * @return boolean true=PHPを使う,false=PHPを使わない ------------------------------------------------------------------------*/ public function isPHP($id) { $this->_log->start('isPHP'); if (is_string($id)) { $objContents = $this->get($id); } else { $objContents = $id; $id = $objContents['id']; } /* * 公開期間[設定なし]の場合、拡張子htmlでもアクセス可能であり、拡張子phpでアクセスしても、拡張子htmlのページにリダイレクトされる。 * 公開期間が設定されている場合、拡張子phpでもアクセス可能であり、拡張子htmlでアクセスしても拡張子phpのページにリダイレクトされる。 */ $bUse = (isset($objContents['range_use']) == true && (1 == $objContents['range_use']) && (empty($objContents['range_start']) == false || empty($objContents['range_end']) == false)); $this->_log->end(); return $bUse; } /**---------------------------------------------------------------------- * 親かどうかを返す * @param string $id 対象レコードの主キー * @return boolean true=親,false=親ではない ------------------------------------------------------------------------*/ public function isParent($id) { $result = $this->query_fetch_all('select count(`status`) from `' . $this->_table . '` where `id_contents_parent`="' . $id . '"'); if (isset($result[0]) && isset($result[0]['count(`status`)']) && 0 < $result[0]['count(`status`)']) { return true; } else { return false; } } /**---------------------------------------------------------------------- * ルート以降、ファイル名より前までのパスを取得する * @param string $id 対象レコードのID ------------------------------------------------------------------------*/ public function createRoot($id) { $this->_log->start('createRoot'); $url = $this->createURL($id); $path = str_replace(basename($url), '', $url); $this->_log->end(); return $path; } /**---------------------------------------------------------------------- * ルート以降の公開パスを取得する * @param string $id 対象レコードのID * @param bollen $bolGetPath true then return path, false then return link. * @return string ルート以降の公開パス ------------------------------------------------------------------------*/ public function createURL($id, $bolGetPath = false) { $this->_log->start('createURL'); if (is_string($id)) { $objContents = $this->get($id); } else { $objContents = $id; $id = @$objContents['id']; } if (!isset($objContents['url'])) { $this->_log->end(); return ''; } $url = ''; if($bolGetPath == false){ $url = $objContents['url']; if ($this->isPHP($objContents) || $this->isMobile($objContents)) { $url .= '.php'; } else { $url .= '.html'; } } $count = 0; while (1) { if ('' != $objContents['path']) { $url = $objContents['path'] . '/' . $url; } if ('' == $objContents['id_contents_parent']) { break; } // 親を指す $objContents = $this->get($objContents['id_contents_parent']); if (0 == count($objContents)) { break; } $count ++; if (MAX_DEPTH < $count) { $this->_log->warn($this->_objTranslation->_('ContentsCls_msg1')); break; } } $this->_log->end(); return $url; } /**---------------------------------------------------------------------- * サイトマップ作成 * @param string $id_site サイトトップのコンテンツID * @return string サイトマップのHTMLテキスト ------------------------------------------------------------------------*/ function create_sitemap($id_site) { $this->_log->start('create_sitemap'); $objPath = new PathMgr($this->_config); $strPublicPath = $objPath->get('user_site', 'public'); $site_list = $this->getSiteList($id_site); $site_list = $this->getDisplaySiteList($site_list); $site_list = $this->layer_sort($site_list); // 最大深度を取得 $max_indent = 0; foreach ($site_list as $i => $site) { if ($max_indent < $site['depth']) { $max_indent = $site['depth']; } } // サイトマップデータ作成 foreach ($site_list as $i => $site) { $indent = array(); for ($j = 0; $j < $site['depth'] - 1; $j ++) { $indent[] = ' '; } $indent[] = '・'; $site_list[$i] = array( 'indent' => $indent, 'colspan' => $max_indent - $site['depth'] + 1, 'link' => $strPublicPath . $this->createURL($site['id']), 'name' => $site['name'], 'depth' => $site['depth'], ); } $model = array( 'site_list' => $site_list, ); $view = new ViewMgr($this->_config); $userSession = new Zend_Session_Namespace('userinfo'); if ($userSession->user_id != '') { $strRootDir = $this->_config['saas']['root_dir']; $strTplPath = $this->_config['saas']['tpl_path']; $block = $view->view($strRootDir . $strTplPath . '/block/sitemap.tpl', $model); } else { $block = $view->view('block/sitemap.tpl', $model); } $this->_log->end(); return $block; } //------------------------------------------------------------------------------------------------------------------ /**---------------------------------------------------------------------- * データベースの指定テーブルから全レコードを取得する(メイン) * @return array 全レコードのリスト ------------------------------------------------------------------------*/ protected function _getAll_main() { $this->_log->start('_getAll_main'); // 条件検索(階層以外) { // 検索条件 $whereList = array(); if (isset(self::$_input['search_name']) && '' != self::$_input['search_name']) { $whereList[] = '(`name` LIKE "%' . self::$_input['search_name'] . '%")'; } if (isset(self::$_input['search_status']) && '' != self::$_input['search_status']) { if (self::$_input['search_status'] == 5) { $whereList[] = "(`edit_time` != '')"; } else { $whereList[] = '(`status`=' . self::$_input['search_status'] . ')'; $whereList[] = "(`edit_time` = '')"; } } // SQL $sql = 'select * from `' . $this->_table . '`'; if (0 != count($whereList)) { $sql .= ' where ' . implode('AND', $whereList); } /** * C-Unit 2011-10-13 Start , C-Unit 2011-11-26 open * #5300 | #6160 * sort list */ if(isset(self::$_input['search_sortlist']) == true && '' != self::$_input['search_sortlist']){ if(self::$_input['search_sortlist'] == 'date_update_last') { $sql .= ' ORDER BY `date_update` ASC'; } elseif(self::$_input['search_sortlist'] == 'date_update') { $sql .= ' ORDER BY `date_update` DESC'; } elseif(self::$_input['search_sortlist'] == 'name') { $sql .= ' ORDER BY `name` ASC'; } } /** * C-Unit 2011-10-13 End */ // 検索 try { $list = $this->query_fetch_all($sql); } catch (Exception $e) { echo $e->getMessage(); print_r($e->getTrace()); } } // 階層に合うものだけ抜き出し if (isset(self::$_input['search_deps']) && '' != self::$_input['search_deps']) { $use_list = array(); foreach ($list as $i => $oData) { if ($oData['id'] == self::$_input['search_deps']) { $use_list[] = $oData; } else { $arrLayerList = $this->getLayerList($oData['id']); foreach ($arrLayerList as $j => $oLayer) { if (self::$_input['search_deps'] == $oLayer['id']) { $use_list[] = $oData; } } } } $list = $use_list; } // 深度、表示順でソート { $max_length = 0; foreach ($list as $i => $objData) { // 11桁の数字にする // 同一階層に最大 999,9999,9999 ページ作れる $str_index = ($objData['index'] + 1); while (11 > strlen($str_index)) { $str_index = '0' . $str_index; } // 親までの表示順数字を作成する while ('' != $objData['id_contents_parent']) { // 親を探す $strParentId = ''; foreach ($list as $j => $objParent) { if ($objData['id_contents_parent'] == $objParent['id']) { $strParentId = $objParent['id']; break; } } // 親が見つからなかった(有り得ないと思われるが、念のため) if ('' == $strParentId) { $this->_log->warn($this->_objTranslation->_('ContentsCls_msg2') . $objData['id'] . ']'); break; } // 次の検索対象として保持 $objData = $objParent; // 親の表示順序を足す $str = ($objData['index'] + 1); while (11 > strlen($str)) { $str = '0' . $str; } $str_index = $str . $str_index; // 最大の文字数を取得 // 階層制限を設けるまでも無いので、動的に最大文字数を取得する $max_length = max($max_length, strlen($str_index)); } // 表示順数字を登録 $list[$i]['str_index'] = $str_index; } // ソートまえの整理 foreach ($list as $i => $objData) { // 全ての桁数を最大文字数に合わせる while ($max_length > strlen($objData['str_index'])) { $objData['str_index'] = $objData['str_index'] . '0'; } // 文字として扱ってもらうため、先頭に適当な文字を設定 $list[$i]['str_index'] = '@' . $objData['str_index']; } /** * C-Unit 2011-12-07 Start * #6331 */ if(isset(self::$_input['search_sortlist']) == false || '' == self::$_input['search_sortlist']){ $list = vsort($list, array('str_index' => SORT_ASC)); } /** * C-Unit 2011-12-07 End */ /* * C-Unit 2011-10-13 del ,C-Unit 2011-11-26 del * #5300 | #6160 * sort list */ // 表示順数字を元にソート /* if(isset(self::$_input['search_sortlist']) == true && '' != self::$_input['search_sortlist']){ if(self::$_input['search_sortlist'] == 'date_update_last'){ $list = vsort($list, array('date_update' => SORT_ASC)); }elseif(self::$_input['search_sortlist'] == 'date_update'){ $list = vsort($list, array('date_update' => SORT_DESC)); } else{ $list = vsort($list, array(self::$_input['search_sortlist'] => SORT_ASC)); } } else { $list = vsort($list, array('str_index' => SORT_ASC)); } */ /** * C-Unit 2011-11-26 End */ } // 承認情報取得 $objApproval = $this->createObject('approval'); $objAccount = $this->createObject('account'); /* * C-Unit 2011-10-13 Start * #5300 * get account edit + account edit last */ $objAccountEdit = $this->createObject('account'); $objAccountEditLast = $this->createObject('account'); $arrHistoryEdit = array(); /* * C-Unit 2011-10-13 End */ foreach ($list as $i => $objData) { $list[$i]['approval'] = $objApproval->get($objData['id_approval']); $list[$i]['account'] = $objAccount->get($objData['id_account']); /* * C-Unit 2011-11-1 start * #5598 * Change date format */ if(isset($objData['date_update'])) { $objData['date_update'] = date($this->_objDateFormat . ' H:i:s',strtotime($objData['date_update'])); } /* * C-Unit 2011-11-1 and */ /* * C-Unit 2011-10-13 Start * #5300 #5397 * get account edit + account edit last */ //$arrHistoryEdit = $this->get_history($list[$i]['id']); $list[$i]['account_edit'] = $objAccountEdit->get($objData['id_account_edit']); $list[$i]['account_edit_last'] = $objAccountEditLast->get($objData['id_account_update']); $list[$i]['account_edit_last']['head_date_update'] = $objData['date_update']; /* * C-Unit 2011-10-13 End */ } $this->_log->end(); return $list; } /**---------------------------------------------------------------------- * レコードを複製する * @param string $id 対象レコードの主キー * @return integer 処理結果コード ------------------------------------------------------------------------*/ public function cpy($id) { $result = parent::cpy($id); // 権限複製 if (DB_COPY_OK == $result) { $objAccountMgr = $this->createObject('account'); $arrAccountData = $objAccountMgr->getAll(); foreach ($arrAccountData as $i => $objData) { $auth = $objAccountMgr->getAuth($objData['id'], 'contents', $id); $objAccountMgr->setAuth($objData['id'], 'contents', $this->_last_id, $auth); } } return $result; } /**---------------------------------------------------------------------- * 複製対象のレコードを更新する * @param object $model 複製するレコードを格納した連想配列 * @param object $uniq_list 一意な値とするキーとフォーマットの組を格納した連想配列 * 指定するとテーブル内で一意な値となるように複製する * * @return object 更新後の複製レコードを格納した連想配列 ------------------------------------------------------------------------*/ protected function _cpy_update($model, $uniq_list = array()) { $this->_log->start('_cpy_update'); $del_keys = array( 'path_rel', ); foreach ($del_keys as $key) { unset($model[$key]); } $list = $this->getChildList($model['id_contents_parent']); $model['index'] = count($list); // 複製元のID $org_id = $model['id']; $uniq_list[] = 'url'; $model = parent::_cpy_update($model, $uniq_list); $this->_log->end(); return $model; } /**---------------------------------------------------------------------- * 階層一覧の取得 * @return array 階層一覧 ------------------------------------------------------------------------*/ public function get_deps_list() { if (is_numeric($this->_config['cms']['static_search_deps'])) { // 半角数値なのでそのまま使用 $deps = $this->_config['cms']['static_search_deps']; } else { // 半角数値以外の時は強制でデフォルト値にする $deps = SEARCH_DEPS_DEFAULT; } // 指定階層以下の静的ページを取 /* * C-Unit 2011-10-17 Start * #5418 * fix Double row of page. */ $deps_list = $this->query_fetch_all('select * from ' . $this->_table . ' where `depth` <= ' . $deps . ' and (`id_org` != "-")'); /* * C-Unit 2011-10-17 End */ // 階層順にソート $deps_list = $this->layer_sort($deps_list); // 階層名作成 foreach ($deps_list as $i => $objData) { // トップまでのリストを取得 $layer_list = $this->getLayerList($objData['id']); // 名前の配列を作成 $name = array(); foreach ($layer_list as $j => $objData) { $name[] = $objData['name']; } // 階層名を作成 $deps_list[$i]['name'] = implode('>', $name); } return $deps_list; } /**---------------------------------------------------------------------- * 自動生成検索結果表示を行う静的ページのリストを取得 * @param string $id_site 検索先のサイト * @param string $id_dynamic 自動生成検索 ------------------------------------------------------------------------*/ public function get_itempage_list_full($idSite, $idDynamic) { $strSql = 'select * from ' . $this->_table . ' where 1=1 '; if ((isset($idSite) == true) && ($idSite != '')) { $strSql .= ' and `id_site`="' . $idSite . '" '; } if ((isset($idDynamic) == true) && ($idDynamic != '')) { $strSql .= ' and `id_dynamic`="' . $idDynamic . '" '; } $arrItempage = $this->query_fetch_all($strSql); return $arrItempage; } /**---------------------------------------------------------------------- * Get media info * @return array media ------------------------------------------------------------------------*/ public function get_media_org($name) { $strSql = 'select * from ' . $this->_config['db_cms']['prefix'] . 'media where `name` = "' . $name . '" order by name asc'; $arrItem = $this->query_fetch_all($strSql); return $arrItem; } /**---------------------------------------------------------------------- * Get media info * @return array media ------------------------------------------------------------------------*/ function getDisplaySiteList($arrData) { $arrResult = array(); foreach($arrData as $objData) { if($objData['display'] != '1') { $arrResult[] = $objData; } } return $arrResult; } /**---------------------------------------------------------------------- * PHPを使うかどうかを返す * @param string $id 対象レコードの主キー * @return boolean true=PHPを使う,false=PHPを使わない ------------------------------------------------------------------------*/ public function isMobile($srtId, $pathContent = '') { $bolReturn = false; $this->_log->start('isMobile'); $url = ''; if (is_string($srtId)) { $objContents = $this->get($srtId); } else { $objContents = $srtId; } if(empty($objContents) == false){ if ($objContents['id'] == $objContents['id_site'] ){ $url = $objContents['path']; } else { $objContentsSite = $this->get($objContents['id_site']); if(isset($objContentsSite['path']) == true){ $url = $objContentsSite['path']; } } } else { $url = $pathContent; } $arrUrl = explode('/', $url); if ($arrUrl[0] == 'mbl' && $this->_config['mobile']['use_mobile'] == '1'){ $bolReturn = true; } $this->_log->end(); return $bolReturn; } }