*
* @package Magic3 Framework
* @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright Copyright 2006-2013 Magic3 Project.
+ * @copyright Copyright 2006-2014 Magic3 Project.
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version SVN: $Id$
* @link http://www.magic3.org
return self::DEFAULT_ADMIN_PAGE_ID;
}
/**
+ * 一般画面のデフォルトのページID取得
+ *
+ * @return array ページID(0=PC,1=携帯,2=スマートフォン)
+ */
+ public function getAllDefaultPageId()
+ {
+ return array(self::DEFAULT_PAGE_ID, self::DEFAULT_MOBILE_PAGE_ID, self::DEFAULT_SMARTPHONE_PAGE_ID);
+ }
+ /**
* 現在のページID
*/
public function setCurrentPageId($id)
return $subId;
}
/**
+ * コンテンツタイプとページIDからページサブID取得
+ *
+ * @param string $contentType コンテンツタイプ
+ * @param string $pageId ページID
+ * @return string ページサブID
+ */
+ function getPageSubIdByContentType($contentType, $pageId)
+ {
+ $subId = $this->db->getSubPageIdWithContent($contentType, $pageId);// ページサブIDを取得
+ return $subId;
+ }
+ /**
* 指定のウィジェットがページ上にあるかを取得
*
* @param string $pageId ページID
*
* @package Magic3 Framework
* @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright Copyright 2006-2013 Magic3 Project.
+ * @copyright Copyright 2006-2014 Magic3 Project.
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version SVN: $Id$
* @link http://www.magic3.org
const TASK_ADMIN = 'initwizard_admin'; // システム管理者
const TASK_ACCESS_POINT = 'initwizard_accesspoint'; // アクセスポイント
const TASK_MENU = 'initwizard_menu'; // メニュー
+ const TASK_CONTENT = 'initwizard_content'; // コンテンツ
const TASK_PAGE1 = 'initwizard_page1'; // ページ1
const TASK_PAGE2 = 'initwizard_page2'; // ページ2
const TASK_END = 'initwizard_end'; // 処理終了
const TASK_TITLE_ADMIN = '管理者'; // 管理者
const TASK_TITLE_ACCESS_POINT = 'アクセスポイント';
const TASK_TITLE_MENU = 'メニュー';
+ const TASK_TITLE_CONTENT = 'コンテンツ';
const TASK_TITLE_PAGE1 = 'ページ1';
const TASK_TITLE_PAGE2 = 'ページ2';
const TASK_TITLE_END = '完了'; // 完了
$this->_mainDb = new admin_mainDb();
$this->_taskArray = array(self::TASK_SITE, self::TASK_ADMIN, self::TASK_ACCESS_POINT, self::TASK_MENU,
- self::TASK_PAGE1, self::TASK_PAGE2, self::TASK_END); // 管理下のタスク
+ self::TASK_CONTENT, self::TASK_PAGE1, self::TASK_PAGE2, self::TASK_END); // 管理下のタスク
$this->_taskTitleArray = array(self::TASK_TITLE_SITE, self::TASK_TITLE_ADMIN, self::TASK_TITLE_ACCESS_POINT, self::TASK_TITLE_MENU,
- self::TASK_TITLE_PAGE1, self::TASK_TITLE_PAGE2, self::TASK_TITLE_END);
+ self::TASK_TITLE_CONTENT, self::TASK_TITLE_PAGE1, self::TASK_TITLE_PAGE2, self::TASK_TITLE_END);
}
/**
* テンプレート前処理
class admin_mainInitwizard_accesspointWidgetContainer extends admin_mainInitwizardBaseWidgetContainer
{
const MENU_ID = 'admin_menu'; // メニュー変換対象メニューバーID
- const CF_SITE_PC_IN_PUBLIC = 'site_pc_in_public'; // PC用サイトの公開状況
- const CF_SITE_MOBILE_IN_PUBLIC = 'site_mobile_in_public'; // 携帯用サイトの公開状況
- const CF_SITE_SMARTPHONE_IN_PUBLIC = 'site_smartphone_in_public'; // スマートフォン用サイトの公開状況
/**
* コンストラクタ
--- /dev/null
+<?php
+/**
+ * コンテナクラス
+ *
+ * PHP versions 5
+ *
+ * LICENSE: This source file is licensed under the terms of the GNU General Public License.
+ *
+ * @package Magic3 Framework
+ * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
+ * @copyright Copyright 2006-2014 Magic3 Project.
+ * @license http://www.gnu.org/copyleft/gpl.html GPL License
+ * @version SVN: $Id$
+ * @link http://www.magic3.org
+ */
+require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_mainInitwizardBaseWidgetContainer.php');
+
+class admin_mainInitwizard_contentWidgetContainer extends admin_mainInitwizardBaseWidgetContainer
+{
+ private $idArray = array(); // 表示するコンテンツ
+ private $pageIdArray; // アクセスポイント
+ private $mainContentType; // 主要コンテンツタイプ
+ private $selectedContentType = array(); // 選択中のコンテンツタイプ
+
+ /**
+ * コンストラクタ
+ */
+ function __construct()
+ {
+ // 親クラスを呼び出す
+ parent::__construct();
+
+ $this->mainContentType = $this->gPage->getMainContentType(); // 主要コンテンツタイプ
+ $this->pageIdArray = $this->gEnv->getAllDefaultPageId();
+ }
+ /**
+ * テンプレートファイルを設定
+ *
+ * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
+ * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
+ *
+ * @param RequestManager $request HTTPリクエスト処理クラス
+ * @param object $param 任意使用パラメータ。そのまま_assign()に渡る
+ * @return string テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
+ */
+ function _setTemplate($request, &$param)
+ {
+ return 'initwizard_content.tmpl.html';
+ }
+ /**
+ * テンプレートにデータ埋め込む
+ *
+ * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
+ *
+ * @param RequestManager $request HTTPリクエスト処理クラス
+ * @param object $param 任意使用パラメータ。_setTemplate()と共有。
+ * @param なし
+ */
+ function _assign($request, &$param)
+ {
+ // デフォルト値取得
+ $this->langId = $this->gEnv->getDefaultLanguage();
+
+ $act = $request->trimValueOf('act');
+
+ $reloadData = false; // データの再ロード
+ if ($act == 'update'){ // 設定更新のとき
+ $listedItem = explode(',', $request->trimValueOf('idlist'));
+
+ // エラーなしの場合は、データを更新
+ if ($this->getMsgCount() == 0){
+ // ウィジェットの配置情報を取得
+ $oldContentType = $this->getSelectedContentType($widgetInfoRows);
+
+ for ($i = 0; $i < count($listedItem); $i++){
+ // 項目がチェックされているかを取得
+ $itemName = 'item' . $i . '_selected';
+ $itemValue = ($request->trimValueOf($itemName) == 'on') ? 1 : 0;
+ $contentType = $listedItem[$i];
+
+ // コンテンツの表示可否によってウィジェットを配置
+ if ($itemValue){
+ // 表示に変更された場合のみウィジェットを配置
+ if (!in_array($contentType, $oldContentType)){
+ // アクセスポイントごとの処理
+ for ($j = 0; $j < count($this->pageIdArray); $j++){
+ // アクセスポイントが有効の場合のみ処理を行う
+ $isActive = $this->isActiveAccessPoint($j);
+ if (!$isActive) continue;
+
+ $pageId = $this->pageIdArray[$j];
+
+ // コンテンツ属性からページサブIDを取得
+ $pageSubId = $this->gPage->getPageSubIdByContentType($contentType, $pageId);
+
+ // コンテンツに対するメインウィジェットを取得
+ $ret = $this->_mainDb->getWidgetListByDeviceType($contentType, $j/*デバイスタイプ*/, $rows);
+ if ($ret){
+ $widgetId = $rows[0]['wd_id'];
+
+ // ウィジェットがなければウィジェットを配置
+ $this->_db->addWidget($pageId, $pageSubId, 'main', $widgetId, 0/*インデックス*/);
+ }
+
+ // ページの使用状況を更新
+ $this->updatePageAvailable($pageSubId, true); // メニューから選択可能
+ }
+ }
+ } else {
+ // 非選択のコンテンツタイプのウィジェットはページから削除
+ if (in_array($contentType, $oldContentType)){
+ for ($j = 0; $j < count($widgetInfoRows); $j++){
+ // 指定のコンテンツタイプに対応するウィジェットを取得
+ $widgetId = $widgetInfoRows[$j]['wd_id'];
+ if ($contentType == $widgetInfoRows[$j]['wd_type']){
+ $ret = $this->_mainDb->delPageDefByWidgetId($widgetId);
+
+ // アクセスポイントごとの処理
+ for ($k = 0; $k < count($this->pageIdArray); $k++){
+ $pageId = $this->pageIdArray[$k];
+
+ // コンテンツ属性からページサブIDを取得
+ $pageSubId = $this->gPage->getPageSubIdByContentType($contentType, $pageId);
+
+ // ページの使用状況を更新
+ $this->updatePageAvailable($pageSubId, false); // メニューから選択不可
+ }
+ }
+ }
+ }
+ }
+ }
+ if (true){
+ // 次の画面へ遷移
+ $this->_redirectNextTask();
+ } else {
+ $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました'); // データ更新に失敗しました
+ }
+ }
+ } else {
+ $reloadData = true;
+ }
+
+ if ($reloadData){ // データ再取得のとき
+ }
+
+ // 使用しているコンテンツタイプを取得
+ $this->selectedContentType = $this->getSelectedContentType($tmp);
+
+ // コンテンツタイプ一覧を作成
+ $this->createContentTypeList();
+ $this->tmpl->addVar("_widget", "id_list", implode($this->idArray, ','));// 表示項目のIDを設定
+ }
+ /**
+ * コンテンツタイプ一覧作成
+ *
+ * @return なし
+ */
+ function createContentTypeList()
+ {
+ for ($i = 0; $i < count($this->mainContentType); $i++){
+ $value = $this->mainContentType[$i]['value'];
+ $name = $this->mainContentType[$i]['name'];
+
+ $checked = '';
+ if (in_array($value, $this->selectedContentType)) $checked = 'checked';
+ $row = array(
+ 'index' => $i,
+ 'name' => $name, // コンテンツ名
+ 'checked' => $checked
+ );
+ $this->tmpl->addVars('content_type_list', $row);
+ $this->tmpl->parseTemplate('content_type_list', 'a');
+
+ // 表示中項目のページサブIDを保存
+ $this->idArray[] = $value;
+ }
+ }
+ /**
+ * 使用中のコンテンツタイプを取得
+ *
+ * @param array $widgetInfoRows 配置されているウィジェットの情報
+ * @return array 使用されているコンテンツタイプ
+ */
+ function getSelectedContentType(&$widgetInfoRows)
+ {
+ $selectedContentType = array();
+ $menuItems = array(array(), array(), array());
+
+ $contentType = array( M3_VIEW_TYPE_CONTENT, // 汎用コンテンツ
+ M3_VIEW_TYPE_PRODUCT, // 製品
+ M3_VIEW_TYPE_BBS, // BBS
+ M3_VIEW_TYPE_BLOG, // ブログ
+ M3_VIEW_TYPE_WIKI, // Wiki
+ M3_VIEW_TYPE_USER, // ユーザ作成コンテンツ
+ M3_VIEW_TYPE_EVENT, // イベント
+ M3_VIEW_TYPE_PHOTO); // フォトギャラリー
+ $ret = $this->_mainDb->getEditWidgetOnPage($this->langId, $this->pageIdArray, $contentType, $rows);
+ if ($ret){
+ $widgetInfoRows = $rows;
+
+ $usedContentType = array();
+ $rowCount = count($rows);
+ for ($i = 0; $i < $rowCount; $i++){
+ $usedContentType[] = $rows[$i]['wd_type'];
+ }
+
+ for ($i = 0; $i < count($contentType); $i++){
+ $type = $contentType[$i];
+ if (in_array($type, $usedContentType)) $selectedContentType[] = $type;
+ }
+ }
+ return $selectedContentType;
+ }
+ /**
+ * ページの使用状況を更新
+ *
+ * @param string $pageSubId ページサブID
+ * @param bool $available メニューから利用可能かどうか
+ * @return bool true=成功、false=失敗
+ */
+ function updatePageAvailable($pageSubId, $available)
+ {
+ // 使用ページにする
+ $ret = $this->_mainDb->getPageIdRecord(1/*ページサブIDを指定*/, $pageSubId, $row);
+ if ($ret){
+ $ret = $this->_mainDb->updatePageId(1/*ページサブIDを指定*/, $pageSubId, $row['pg_name'], $row['pg_description'], $row['pg_priority'], $row['pg_active'], $available);
+ }
+ return $ret;
+ }
+ /**
+ * アクセスポイントが有効かどうか
+ *
+ * @param int $deviceType デバイスタイプ(0=PC,1=携帯,2=スマートフォン)
+ * @return bool true=有効、false=無効
+ */
+ function isActiveAccessPoint($deviceType)
+ {
+ // ページID作成
+ switch ($deviceType){
+ case 0: // PC
+ $pageId = 'index';
+ break;
+ case 1: // 携帯
+ $pageId = M3_DIR_NAME_MOBILE . '_index';
+ break;
+ case 2: // スマートフォン
+ $pageId = M3_DIR_NAME_SMARTPHONE . '_index';
+ break;
+ }
+
+ $isActive = false;
+ $ret = $this->_mainDb->getPageIdRecord(0/*アクセスポイント*/, $pageId, $row);
+ if ($ret){
+ $isActive = $row['pg_active'];
+ }
+ return $isActive;
+ }
+}
+?>
// キャッシュデータをクリア
$this->gCache->clearAllCache();
} else if ($act == 'deleteline'){ // 削除のとき
- $ret = $this->db->delPageDef($this->serialNo, $userId);
+ $ret = $this->db->delPageDef($this->serialNo);
if ($ret){ // データ削除成功のとき
$this->setMsg(self::MSG_GUIDANCE, $this->_('Data deleted.')); // データを削除しました
} else {
*
* @package Magic3 Framework
* @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright Copyright 2006-2013 Magic3 Project.
+ * @copyright Copyright 2006-2014 Magic3 Project.
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version SVN: $Id$
* @link http://www.magic3.org
$this->selectLoop($queryStr, array(), $callback);
}
/**
- * ã\82¦ã\82£ã\82¸ã\82§ã\83\83ã\83\88ã\83ªã\82¹ã\83\88(ã\83¡ã\83\8bã\83¥ã\83¼ã\81\8bã\82\89é\81¸æ\8a\9eå\8f¯è\83½ã\81ªã\82\82ã\81®)取得
+ * ã\82¦ã\82£ã\82¸ã\82§ã\83\83ã\83\88ã\82¿ã\82¤ã\83\97ã\81¨ã\83\87ã\83\90ã\82¤ã\82¹ã\82¿ã\82¤ã\83\97ã\81\8bã\82\89ã\82¦ã\82£ã\82¸ã\82§ã\83\83ã\83\88ã\83ªã\82¹ã\83\88ã\82\92取得
*
- * @param function $callback コールバック関数
- * @return なし
+ * @param string $widgetType ウィジェットタイプ
+ * @param int $deviceType デバイスタイプ
+ * @param array $rows レコード
+ * @return bool 1行以上取得 = true, 取得なし= false
*/
- /*function getAvailableWidgetList($callback)
+ function getWidgetListByDeviceType($widgetType, $deviceType, &$rows)
{
- $queryStr = 'select * from _widgets ';
- $queryStr .= 'where wd_deleted = false ';// 削除されていない
- $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの
- $queryStr .= 'and wd_mobile = false '; // 携帯用ウィジェット以外
- $queryStr .= 'order by wd_id';
- $this->selectLoop($queryStr, array(), $callback);
- }*/
- /**
- * 携帯用のウィジェットリスト(メニューから選択可能なもの)取得
- *
- * @param function $callback コールバック関数
- * @return なし
- */
- /*function getAvailableMobileWidgetList($callback)
- {
- $queryStr = 'select * from _widgets ';
- $queryStr .= 'where wd_deleted = false ';// 削除されていない
- $queryStr .= 'and wd_available = true '; // メニューから選択可能なもの
- $queryStr .= 'and wd_mobile = true '; // 携帯用ウィジェット
- $queryStr .= 'order by wd_id';
- $this->selectLoop($queryStr, array(), $callback);
- }*/
+ $queryStr = 'SELECT * FROM _widgets ';
+ $queryStr .= 'WHERE wd_deleted = false '; // 削除されていない
+ $queryStr .= 'AND wd_type = ? '; // ウィジェットタイプ
+ $queryStr .= 'AND wd_device_type = ? '; // デバイスタイプ
+ $queryStr .= 'ORDER BY wd_priority';
+ $retValue = $this->selectRecords($queryStr, array($widgetType, $deviceType), $rows);
+ return $retValue;
+ }
/**
* ウィジェットIDリスト取得
*
* ページ定義項目の削除
*
* @param int $serialNo シリアルNo
- * @param int $userId ユーザID(データ更新者)
* @return true=成功、false=失敗
*/
- function delPageDef($serialNo, $userId)
+ function delPageDef($serialNo)
{
- // 更新ユーザ、日時設定
- $this->now = date("Y/m/d H:i:s"); // 現在日時
- $this->userId = $userId;
-
// トランザクション開始
$this->startTransaction();
$ret = $this->endTransaction();
return $ret;
}
-
+ /**
+ * ウィジェットIDでページ定義項目の削除
+ *
+ * @param string $widgetId ウィジェットID
+ * @param int $setId 定義セットID
+ * @return true=成功、false=失敗
+ */
+ function delPageDefByWidgetId($widgetId, $setId = 0)
+ {
+ // トランザクション開始
+ $this->startTransaction();
+
+ $queryStr = 'DELETE FROM _page_def ';
+ $queryStr .= 'WHERE pd_widget_id = ? ';
+ $queryStr .= 'AND pd_set_id = ? ';
+ $this->execStatement($queryStr, array($widgetId, $setId));
+
+ // トランザクション確定
+ $ret = $this->endTransaction();
+ return $ret;
+ }
/**
* ページ定義項目をすべて削除
*
<input type="hidden" name="act" />
<div class="form-group">
<label class="col-lg-3 control-label"><span {_HELP_INITWIZARD_ACCESSPOINT_}>運用対象</span></label>
-<div class="col-lg-4">
+<div class="col-lg-5">
<div class="checkbox"><label><input type="checkbox" name="site_open_pc" {SITE_OPEN_PC_CHECKED}>PC用アクセスポイント</label></div>
<div class="checkbox"><label><input type="checkbox" name="site_open_smartphone" {SITE_OPEN_SMARTPHONE_CHECKED}>スマートフォン用アクセスポイント</label></div>
<div class="checkbox"><label><input type="checkbox" name="site_open_mobile" {SITE_OPEN_MOBILE_CHECKED}>携帯用アクセスポイント</label></div>
--- /dev/null
+/**
+ * 表示データ作成用テンプレート(patTemplate)
+ *
+ * LICENSE: This source file is licensed under the terms of the GNU General Public License.
+ *
+ * @package Magic3 Framework
+ * @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
+ * @copyright Copyright 2006-2014 Magic3 Project.
+ * @license http://www.gnu.org/copyleft/gpl.html GPL License
+ * @version SVN: $Id$
+ * @link http://www.magic3.org
+ */
+<patTemplate:tmpl name="_widget">
+<script type="text/javascript">
+//<![CDATA[
+// 前の画面へ遷移
+function goPrev(task){
+ document.main.task.value = task;
+ document.main.submit();
+}
+// 次の画面へ遷移
+function goNext(){
+ // 入力データ編集中のページ離脱を許可
+ m3CancelSafeContentEdit();
+
+ document.main.act.value = 'update';
+ document.main.submit();
+}
+$(function(){
+ // 編集中の離脱を防止
+ m3SetSafeContentEdit();
+
+ // 前後エントリー移動ボタン
+ <patTemplate:tmpl name="show_prev_button" visibility="hidden">m3SetPrevButtonEvent(goPrev, '{TASK}');</patTemplate:tmpl>
+ <patTemplate:tmpl name="show_next_button" visibility="hidden">m3SetNextButtonEvent(goNext);</patTemplate:tmpl>
+});
+//]]>
+</script>
+<div id="main-content">
+{MENU_ITEMS}
+<!-- m3:ErrorMessage -->
+<div class="page-header">
+</div>
+<form method="post" name="main" role="form" class="form-horizontal">
+<input type="hidden" name="task" value="initwizard_content" />
+<input type="hidden" name="act" />
+<input type="hidden" name="idlist" value="{ID_LIST}" />
+<div class="form-group">
+<label class="col-lg-3 control-label"><span {_HELP_INITWIZARD_CONTENT_}>表示するコンテンツ</span></label>
+<div class="col-lg-5">
+<patTemplate:tmpl name="content_type_list">
+<div class="checkbox"><label><input type="checkbox" name="item{INDEX}_selected" {CHECKED}>{NAME}</label></div>
+</patTemplate:tmpl>
+</div>
+</div>
+</form>
+</div>
+</patTemplate:tmpl>
\ No newline at end of file
*
* @package Magic3 Framework
* @author 平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright Copyright 2006-2013 Magic3 Project.
+ * @copyright Copyright 2006-2014 Magic3 Project.
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version SVN: $Id$
* @link http://www.magic3.org
<div class="form-group">
<label class="col-lg-3 control-label"><span {_HELP_INITWIZARD_PAGE_DEFAULT}>デフォルトページ</span></label>
<patTemplate:tmpl name="page_pc" visibility="hidden">
-<div class="{OFFSET_CLASS} col-lg-4">
+<div class="{OFFSET_CLASS} col-lg-5">
<label for="page_default_pc" class="control-label">PC用アクセスポイント</label>
<select id="page_default_pc" name="page_default_pc" class="form-control">
<patTemplate:tmpl name="page_list_pc">
</div>
</patTemplate:tmpl>
<patTemplate:tmpl name="page_smartphone" visibility="hidden">
-<div class="{OFFSET_CLASS} col-lg-4">
+<div class="{OFFSET_CLASS} col-lg-5">
<label for="page_default_smartphone" class="control-label">スマートフォン用アクセスポイント</label>
<select id="page_default_smartphone" name="page_default_smartphone" class="form-control">
<patTemplate:tmpl name="page_list_smartphone">
</div>
</patTemplate:tmpl>
<patTemplate:tmpl name="page_mobile" visibility="hidden">
-<div class="{OFFSET_CLASS} col-lg-4">
+<div class="{OFFSET_CLASS} col-lg-5">
<label for="page_default_mobile" class="control-label">携帯用アクセスポイント</label>
<select id="page_default_mobile" name="page_default_mobile" class="form-control">
<patTemplate:tmpl name="page_list_mobile">