OSDN Git Service

Wikiメインウィジェット更新。
authornaoki hirata <naoki@magic3.org>
Tue, 16 May 2017 21:26:14 +0000 (06:26 +0900)
committernaoki hirata <naoki@magic3.org>
Tue, 16 May 2017 21:26:14 +0000 (06:26 +0900)
templates/_admin4/css/style.css
widgets/wiki_main/include/container/admin_wiki_mainBaseWidgetContainer.php
widgets/wiki_main/include/container/admin_wiki_mainPageWidgetContainer.php
widgets/wiki_main/include/db/wiki_mainDb.php
widgets/wiki_main/include/help/index.php
widgets/wiki_main/include/template/admin_page.tmpl.html

index 24f9ded..cf1f819 100644 (file)
@@ -631,6 +631,10 @@ span[rel="m3help"] { cursor: default; }
 {
        text-decoration: underline;
 }
+.m3config_table th.sort img
+{
+       margin-left:5px;
+}
 .m3config_table th.narrow {
        width: 75px;
 }
index 3e256b5..48b1204 100644 (file)
@@ -8,7 +8,7 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2015 Magic3 Project.
+ * @copyright  Copyright 2006-2017 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
  * @version    SVN: $Id$
  * @link       http://www.magic3.org
@@ -20,6 +20,7 @@ require_once($gEnvManager->getCurrentWidgetDbPath() . '/wiki_mainDb.php');
 class admin_wiki_mainBaseWidgetContainer extends BaseAdminWidgetContainer
 {
        protected static $_mainDb;                      // DB接続オブジェクト
+       protected $_baseUrl;                    // 管理画面のベースURL
        
        // 画面
        const TASK_PAGE                 = 'page';                               // Wikiページ管理(一覧)
@@ -39,6 +40,23 @@ class admin_wiki_mainBaseWidgetContainer extends BaseAdminWidgetContainer
                if (!isset(self::$_mainDb)) self::$_mainDb = new wiki_mainDb();
        }
        /**
+        * テンプレートに前処理
+        *
+        * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
+        *
+        * @param RequestManager $request               HTTPリクエスト処理クラス
+        * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
+        * @return                                                              なし
+        */
+       function _preAssign($request, &$param)
+       {
+               $this->_openBy = $request->trimValueOf(M3_REQUEST_PARAM_OPEN_BY);               // ウィンドウオープンタイプ
+               if (!empty($this->_openBy)) $this->addOptionUrlParam(M3_REQUEST_PARAM_OPEN_BY, $this->_openBy);
+
+               // 管理画面ペースURL取得
+               $this->_baseUrl = $this->getAdminUrlWithOptionParam();
+       }
+       /**
         * テンプレートにデータ埋め込む
         *
         * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
index 0471e71..5dff584 100644 (file)
@@ -8,7 +8,7 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2016 Magic3 Project.
+ * @copyright  Copyright 2006-2017 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
  * @version    SVN: $Id$
  * @link       http://www.magic3.org
@@ -22,13 +22,20 @@ class admin_wiki_mainPageWidgetContainer extends admin_wiki_mainBaseWidgetContai
        private $serialNo;                      // シリアル番号
        private $serialArray = array();         // 表示されている項目シリアル番号
        private $builtinPages;          // 自動生成されるWikiページ
+       private $sortKeyType;                   // ソートキータイプ
+       private $sortKey;               // ソートキー
+       private $sortDirection;         // ソート方向
        const DEFAULT_LIST_COUNT = 20;                  // 最大リスト表示数
        const LINK_PAGE_COUNT           = 5;                    // リンクページ数
        const ICON_SIZE = 32;           // アイコンのサイズ
+       const SORT_ICON_SIZE = 10;              // ソートアイコンサイズ
        const LOCK_ICON_FILE = '/images/system/lock32.png';                     // ロック状態アイコン
        const UNLOCK_ICON_FILE = '/images/system/unlock32_inactive.png';                // アンロック状態アイコン
        const PREVIEW_ICON_FILE = '/images/system/window32.png';                // プレビュー用アイコン
+       const SORT_UP_ICON_FILE = '/images/system/arrow_up10.png';              // ソート降順アイコン
+       const SORT_DOWN_ICON_FILE = '/images/system/arrow_down10.png';          // ソート昇順アイコン
        const WIKI_OBJ_ID = 'wikilib';                  // Wikiコンテンツオブジェクト
+       const DEFAULT_SORT_KEY = 'id';          // デフォルトのソートキー
        
        /**
         * コンストラクタ
@@ -43,6 +50,7 @@ class admin_wiki_mainPageWidgetContainer extends admin_wiki_mainBaseWidgetContai
                // パラメータ初期化
                $this->maxListCount = self::DEFAULT_LIST_COUNT;
                $this->builtinPages     = $this->wikiLibObj->getBuiltinPages();                 // 自動生成されるWikiページ
+               $this->sortKeyType = array('id'/*WikiページID*/, 'date'/*更新日時*/, 'locked'/*ページロック状態*/);
        }
        /**
         * テンプレートファイルを設定
@@ -91,6 +99,14 @@ class admin_wiki_mainPageWidgetContainer extends admin_wiki_mainBaseWidgetContai
        {
                $act = $request->trimValueOf('act');
                $pageNo = $request->trimIntValueOf(M3_REQUEST_PARAM_PAGE_NO, '1');                              // ページ番号
+               $sort = $request->trimValueOf('sort');          // ソート順
+               
+               // ソート順
+               list($this->sortKey, $this->sortDirection) = explode('-', $sort);
+               if (!in_array($this->sortKey, $this->sortKeyType) || !in_array($this->sortDirection, array('0', '1'))){
+                       $this->sortKey = self::DEFAULT_SORT_KEY;                // デフォルトのソートキー
+                       $this->sortDirection = '1';     // 昇順
+               }
                
                if ($act == 'delete'){          // 項目削除の場合
                        $listedItem = explode(',', $request->trimValueOf('seriallist'));
@@ -311,12 +327,57 @@ class admin_wiki_mainPageWidgetContainer extends admin_wiki_mainBaseWidgetContai
                $this->calcPageLink($pageNo, $totalCount, $this->maxListCount);
                
                // ページングリンク作成
-               $pageLink = $this->createPageLink($pageNo, self::LINK_PAGE_COUNT, ''/*リンク作成用(未使用)*/, 'selpage($1);return false;');
-               
-               // イベントリストを取得
-               self::$_mainDb->getAvailablePageList($this->maxListCount, $pageNo, array($this, 'itemListLoop'));
+               $sort = '';             // ソート値
+               if (!empty($this->sortKey)) $sort = '&sort=' . $this->sortKey . '-' . $this->sortDirection;
+//             $pageLink = $this->createPageLink($pageNo, self::LINK_PAGE_COUNT, ''/*リンク作成用(未使用)*/, 'selpage($1);return false;');
+
+               $currentBaseUrl = $this->_baseUrl . $sort;
+               $pageLink = $this->createPageLink($pageNo, self::LINK_PAGE_COUNT, $currentBaseUrl/*リンク作成用*/);
+
+               // ページリストを取得
+//             self::$_mainDb->getAvailablePageList($this->maxListCount, $pageNo, array($this, 'itemListLoop'));
+               self::$_mainDb->getAvailablePageList($this->maxListCount, $pageNo, $this->sortKey, $this->sortDirection, array($this, 'itemListLoop'));
                if (count($this->serialArray) <= 0) $this->tmpl->setAttribute('itemlist', 'visibility', 'hidden');// 表示データないときは、一覧を表示しない
                
+               // ソート用データ設定
+               if (empty($this->sortDirection)){
+                       $iconUrl = $this->getUrl($this->gEnv->getRootUrl() . self::SORT_UP_ICON_FILE);  // ソート降順アイコン
+                       $iconTitle = '降順';
+               } else {
+                       $iconUrl = $this->getUrl($this->gEnv->getRootUrl() . self::SORT_DOWN_ICON_FILE);        // ソート昇順アイコン
+                       $iconTitle = '昇順';
+               }
+               $style = 'style="' . 'width:' . self::SORT_ICON_SIZE . 'px;height:' . self::SORT_ICON_SIZE . 'px;"';
+               $sortImage = '<img src="' . $iconUrl . '" title="' . $iconTitle . '" alt="' . $iconTitle . '" rel="m3help" ' . $style . ' />';
+               
+               switch ($this->sortKey){
+                       case 'id':              // WikiページID
+                               $this->tmpl->addVar('_widget', 'direct_icon_id', $sortImage);
+                               break;
+                       case 'date':            // 更新日時
+                               $this->tmpl->addVar('_widget', 'direct_icon_date', $sortImage);
+                               break;
+                       case 'locked':          // ロック状態
+                               $this->tmpl->addVar('_widget', 'direct_icon_locked', $sortImage);
+                               break;
+               }
+               if ($this->sortKey == 'id' && !empty($this->sortDirection)){
+                       $this->tmpl->addVar('_widget', 'sort_id', 'id-0');
+               } else {
+                       $this->tmpl->addVar('_widget', 'sort_id', 'id-1');
+               }
+               if ($this->sortKey == 'date' && !empty($this->sortDirection)){
+                       $this->tmpl->addVar('_widget', 'sort_date', 'date-0');
+               } else {
+                       $this->tmpl->addVar('_widget', 'sort_date', 'date-1');
+               }
+               if ($this->sortKey == 'locked' && !empty($this->sortDirection)){
+                       $this->tmpl->addVar('_widget', 'sort_locked', 'locked-0');
+               } else {
+                       $this->tmpl->addVar('_widget', 'sort_locked', 'locked-1');
+               }
+               $this->tmpl->addVar('_widget', 'sort', $this->sortKey . '-' . $this->sortDirection);
+
                // 一覧用項目
                $this->tmpl->addVar("_widget", "page", $pageNo);        // ページ番号
                $this->tmpl->addVar("_widget", "page_link", $pageLink);
index c065370..d54c526 100644 (file)
@@ -8,7 +8,7 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2015 Magic3 Project.
+ * @copyright  Copyright 2006-2017 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
  * @version    SVN: $Id$
  * @link       http://www.magic3.org
@@ -215,10 +215,12 @@ class wiki_mainDb extends BaseDb
         *
         * @param int           $limit                          取得する項目数
         * @param int           $pageNo                         取得するページ(1~)
+        * @param string        $sortKey                        ソートキー(id=WikiページID,date=更新日時,locked=ロック状態)
+        * @param int           $sortDirection          取得順(0=降順,1=昇順)
         * @param function      $callback                       コールバック関数
         * @return                                                              なし
         */
-       function getAvailablePageList($limit, $pageNo, $callback)
+       function getAvailablePageList($limit, $pageNo, $sortKey, $sortDirection, $callback)
        {
                $offset = $limit * ($pageNo -1);
                if ($offset < 0) $offset = 0;
@@ -228,7 +230,24 @@ class wiki_mainDb extends BaseDb
                $queryStr .=   'WHERE wc_deleted = false ';     // 削除されていない
                $queryStr .=     'AND wc_type = ? ';
                $queryStr .=     'AND wc_id NOT LIKE \':%\' ';                          // システムファイルは除く
-               $queryStr .=   'ORDER BY wc_id LIMIT ' . $limit . ' OFFSET ' . $offset;
+               
+               // ソート順
+               switch ($sortKey){
+                       case 'id':              // WikiページID
+                               $orderKey = 'wc_id ';
+                               break;
+                       case 'date':            // 更新日時
+                               $orderKey = 'wc_content_dt ';
+                               break;
+                       case 'locked':          // ロック状態
+                               $orderKey = 'wc_locked ';
+                               break;
+               }
+               $ord = '';
+               if (empty($sortDirection)) $ord = 'DESC ';
+               $defaultOrder = '';
+               if ($sortKey != 'id') $defaultOrder = ', wc_id ';
+               $queryStr .=   'ORDER BY ' . $orderKey . $ord . $defaultOrder . 'LIMIT ' . $limit . ' OFFSET ' . $offset;
                $this->selectLoop($queryStr, array($type), $callback);
        }
        /**
index 6647131..7ce0caa 100644 (file)
@@ -9,7 +9,7 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2016 Magic3 Project.
+ * @copyright  Copyright 2006-2017 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
  * @version    SVN: $Id$
  * @link       http://www.magic3.org
@@ -27,6 +27,8 @@ $HELP['visible_items_label']['title'] = '表示項目';
 $HELP['visible_items_label']['body'] = '画面に表示する項目の表示制御を行います。';
 $HELP['attach_files_label']['title'] = '添付ファイルアップロードディレクトリ';
 $HELP['attach_files_label']['body'] = 'Wikiページに添付するファイルの格納ディレクトリです。ファイルをアップロードするには、ディレクトリの書き込み権限が必要です。';
+$HELP['page_id']['title'] = 'WikiページID';
+$HELP['page_id']['body'] = 'Wikiページを区別するIDです。デフォルト値で「FrontPage,RecentChanges,RecentDeleted」のページは自動生成のシステム専用ページです。IDの変更はできますが、ページの削除できません。';
 $HELP['page_status']['title'] = 'Wikiページ状態';
 $HELP['page_status']['body'] = 'Wikiページの編集可否状態をロック(編集不可)またはアンロック(編集可)で示します。状態はフロントのツールバーから「解凍」「凍結」ボタンで変更します。';
 $HELP['page_view_count']['title'] = '閲覧数';
index 9a2e788..07084f1 100644 (file)
@@ -5,7 +5,7 @@
  *
  * @package    Magic3 Framework
  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
- * @copyright  Copyright 2006-2015 Magic3 Project.
+ * @copyright  Copyright 2006-2017 Magic3 Project.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
  * @version    SVN: $Id$
  * @link       http://www.magic3.org
@@ -80,6 +80,11 @@ function selpage(page){
        document.main.submit();
        return true;
 }
+function sortList(type){
+       document.main.sort.value = type;
+       document.main.submit();
+       return true;
+}
 $(function(){
        // テーブルを作成
        m3SetConfigTable('mainconfig');
@@ -97,6 +102,7 @@ $(function(){
 <input type="hidden" name="serial" />
 <input type="hidden" name="seriallist" value="{SERIAL_LIST}" />
 <input type="hidden" name="page" value="{PAGE}" />
+<input type="hidden" name="sort" value="{SORT}" />
 <h3 class="m3config_h"><span {_HELP_PAGE_LIST}>Wikiページ一覧</span></h3>
 <div class="m3config_h_side_buttons pull-right"><div {_HELP_PAGE_BUTTONS}><div class="btn-group">
 <input type="button" class="button" data-toggle="modal" data-target="#uploadModal" value="アップロード" />
@@ -107,11 +113,11 @@ $(function(){
     <thead>
     <tr>
         <th class="select"><span {_HELP_PAGE_CHECK}>選択</span></th>
-        <th><span {_HELP_PAGE_ID}>ID</span></th>
-               <th style="width:50px;"><span {_HELP_PAGE_STATUS}>状態</span></th>
+        <th class="sort"><a href="#" onclick="sortList('{SORT_ID}');"><span {_HELP_PAGE_ID}>ID</span></a>{DIRECT_ICON_ID}</th>
+               <th class="sort" style="width:50px;"><a href="#" onclick="sortList('{SORT_LOCKED}');"><span {_HELP_PAGE_STATUS}>状態</span></a>{DIRECT_ICON_LOCKED}</th>
                <th style="width:50px;"><span {_HELP_PAGE_VIEW_COUNT}>閲覧</span></th>
                <th style="width:50px;"><span {_HELP_PAGE_ATTACH_COUNT}>添付</span></th>
-               <th style="width:110px;">更新日時</th>
+               <th class="sort" style="width:110px;"><a href="#" onclick="sortList('{SORT_DATE}');"><span {_HELP_PAGE_DATE}>更新日時</span></a>{DIRECT_ICON_DATE}</th>
                <th style="width:60px;"><span {_HELP_CONTENT_ACT}>操作</span></th>
        </tr>
     </thead>