예제 #1
0
 /**
  * ページのレイアウト情報を取得し, 設定する.
  *
  * 現在の URL に応じたページのレイアウト情報を取得し, LC_Page インスタンスに
  * 設定する.
  *
  * @access public
  * @param LC_Page $objPage LC_Page インスタンス
  * @param boolean $preview プレビュー表示の場合 true
  * @param string $url ページのURL($_SERVER['PHP_SELF'] の情報)
  * @param integer $device_type_id 端末種別ID
  * @return void
  */
 function sfGetPageLayout(&$objPage, $preview = false, $url = "", $device_type_id = DEVICE_TYPE_PC)
 {
     // URLを元にページ情報を取得
     if ($preview === false) {
         $url = preg_replace('|^' . preg_quote(ROOT_URLPATH) . '|', '', $url);
         $arrPageData = $this->getPageProperties($device_type_id, null, 'url = ?', array($url));
     } else {
         $arrPageData = $this->getPageProperties($device_type_id, 0);
     }
     $objPage->tpl_mainpage = $this->getTemplatePath($device_type_id) . $arrPageData[0]['filename'] . ".tpl";
     $objPage->arrPageLayout =& $arrPageData[0];
     $objBlob = new SC_Helper_Blob_Ex();
     $containerName = $objBlob->getTemplateContainerName($device_type_id);
     /** pageのテンプレートがなければBlobから取得する */
     if (!is_file($objPage->tpl_mainpage)) {
         $objBlob->getBlob($containerName, $arrPageData[0]['filename'] . ".tpl", $objPage->tpl_mainpage);
     }
     // ページタイトルを設定
     if (SC_Utils_Ex::isBlank($objPage->tpl_title)) {
         $objPage->tpl_title = $objPage->arrPageLayout['page_name'];
     }
     // 該当ページのブロックを取得し, 配置する
     $masterData = new SC_DB_MasterData();
     $arrTarget = $masterData->getMasterData("mtb_target");
     $arrBlocs = $this->getBlocPositions($device_type_id, $objPage->arrPageLayout['page_id']);
     // php_path, tpl_path が存在するものを, 各ターゲットに配置
     foreach (array_keys($arrTarget) as $target_id) {
         foreach ($arrBlocs as $arrBloc) {
             if ($arrBloc['target_id'] != $target_id) {
                 continue;
             }
             /* Blobからすでにファイルを取得している場合*/
             if (is_file($arrBloc['tpl_path'])) {
                 $objPage->arrPageLayout[$arrTarget[$target_id]][] = $arrBloc;
             } else {
                 if ($objBlob->blobExists($containerName, $arrBloc['filename'] . ".tpl")) {
                     $localFilename = $arrBloc['tpl_path'];
                     $objBlob->getBlob($containerName, $arrBloc['filename'] . ".tpl", $localFilename);
                     $objPage->arrPageLayout[$arrTarget[$target_id]][] = $arrBloc;
                 } else {
                     $error = "ブロックが見つかりません\n" . "tpl_path: " . $arrBloc['tpl_path'] . "\n" . "php_path: " . $arrBloc['php_path'];
                     GC_Utils_Ex::gfPrintLog($error);
                 }
             }
         }
     }
     // カラム数を取得する
     $objPage->tpl_column_num = $this->getColumnNum($objPage->arrPageLayout);
 }
 /**
  * 登録を実行する.
  *
  * ファイルの作成に失敗した場合は, エラーメッセージを出力し,
  * データベースをロールバックする.
  *
  * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  * @param SC_Helper_PageLayout $objLayout SC_Helper_PageLayout インスタンス
  * @return integer|boolean 登録が成功した場合, 登録したページID;
  *                         失敗した場合 false
  */
 function doRegister(&$objFormParam, &$objLayout)
 {
     $filename = $objFormParam->getValue('filename');
     $arrParams['device_type_id'] = $objFormParam->getValue('device_type_id');
     $arrParams['page_id'] = $objFormParam->getValue('page_id');
     $arrParams['header_chk'] = intval($objFormParam->getValue('header_chk')) === 1 ? 1 : 2;
     $arrParams['footer_chk'] = intval($objFormParam->getValue('footer_chk')) === 1 ? 1 : 2;
     $arrParams['tpl_data'] = $objFormParam->getValue('tpl_data');
     $arrParams['page_name'] = $objFormParam->getValue('page_name');
     $arrParams['url'] = USER_DIR . $filename . '.php';
     $arrParams['filename'] = USER_DIR . $filename;
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     $objQuery->begin();
     $page_id = $this->registerPage($arrParams, $objLayout);
     $objBlob = new SC_Helper_Blob_Ex();
     $containerName = $objBlob->getTemplateContainerName($arrParams['device_type_id']);
     /*
      * 新規登録時
      * or 編集可能な既存ページ編集時かつ, PHP ファイルが存在しない場合に,
      * PHP ファイルを作成する.
      */
     if (SC_Utils_Ex::isBlank($arrParams['page_id']) || $objLayout->isEditablePage($arrParams['device_type_id'], $arrParams['page_id'])) {
         if (!$this->createPHPFile($filename)) {
             $this->arrErr['err'] = '※ PHPファイルの作成に失敗しました<br />';
             $objQuery->rollback();
             return false;
         }
         // 新規登録時のみ $page_id を代入
         $arrParams['page_id'] = $page_id;
     }
     if ($objLayout->isEditablePage($arrParams['device_type_id'], $page_id)) {
         $tpl_path = $objLayout->getTemplatePath($arrParams['device_type_id']) . $arrParams['filename'] . '.tpl';
     } else {
         $tpl_path = $objLayout->getTemplatePath($arrParams['device_type_id']) . $filename . '.tpl';
     }
     if (!$objBlob->putBlobData($containerName, $arrParams['filename'] . '.tpl', $arrParams['tpl_data'])) {
         $this->arrErr['err'] = '※ TPLファイルの書き込みに失敗しました<br />';
         $objQuery->rollback();
         return false;
     }
     //既存のTPLが存在する場合は削除しておく
     if (file_exists($tpl_path)) {
         unlink($tpl_path);
     }
     $objQuery->commit();
     return $arrParams['page_id'];
 }
 /**
  * 登録を実行する.
  *
  * ファイルの作成に失敗した場合は, エラーメッセージを出力し,
  * データベースをロールバックする.
  *
  * @param SC_FormParam $objFormParam SC_FormParam インスタンス
  * @param SC_Helper_PageLayout $objLayout SC_Helper_PageLayout インスタンス
  * @return integer|boolean 登録が成功した場合, 登録したブロックID;
  *                         失敗した場合 false
  */
 function doRegister(&$objFormParam, &$objLayout)
 {
     $arrParams = $objFormParam->getHashArray();
     $objQuery =& SC_Query_Ex::getSingletonInstance();
     $objQuery->begin();
     // blod_id が空の場合は新規登録
     $is_new = SC_Utils_Ex::isBlank($arrParams['bloc_id']);
     $bloc_dir = $objLayout->getTemplatePath($arrParams['device_type_id']) . BLOC_DIR;
     // 既存データの重複チェック
     if (!$is_new) {
         $arrExists = $objLayout->getBlocs($arrParams['device_type_id'], 'bloc_id = ?', array($arrParams['bloc_id']));
         // 既存のファイルが存在する場合は削除しておく
         $exists_file = $bloc_dir . $arrExists[0]['filename'] . '.tpl';
         if (file_exists($exists_file)) {
             unlink($exists_file);
         }
     }
     $table = 'dtb_bloc';
     $arrValues = $objQuery->extractOnlyColsOf($table, $arrParams);
     $arrValues['tpl_path'] = $arrParams['filename'] . '.tpl';
     $arrValues['update_date'] = 'CURRENT_TIMESTAMP';
     $objBlob = new SC_Helper_Blob_Ex();
     $containerName = $objBlob->getTemplateContainerName($arrParams['device_type_id']);
     // 新規登録
     if ($is_new || SC_Utils_Ex::isBlank($arrExists)) {
         $objQuery->setOrder('');
         $arrValues['bloc_id'] = 1 + $objQuery->max('bloc_id', $table, 'device_type_id = ?', array($arrValues['device_type_id']));
         $arrValues['create_date'] = 'CURRENT_TIMESTAMP';
         $objQuery->insert($table, $arrValues);
     } else {
         $objQuery->update($table, $arrValues, 'bloc_id = ? AND device_type_id = ?', array($arrValues['bloc_id'], $arrValues['device_type_id']));
     }
     $bloc_path = $bloc_dir . $arrValues['tpl_path'];
     if (!$objBlob->putBlobData($containerName, BLOC_DIR . $arrValues['tpl_path'], $arrParams['bloc_html'])) {
         $this->arrErr['err'] = '※ ブロックの書き込みに失敗しました<br />';
         $objQuery->rollback();
         return false;
     }
     $objQuery->commit();
     return $arrValues['bloc_id'];
 }