OSDN Git Service

「カスタム検索」ウィジェットの検索処理、パスワードが設定されている汎用コンテンツを検索対象からはずす。
authornaoki hirata <naoki@magic3.org>
Tue, 10 Dec 2013 10:48:57 +0000 (19:48 +0900)
committernaoki hirata <naoki@magic3.org>
Tue, 10 Dec 2013 10:48:57 +0000 (19:48 +0900)
widgets/custom_search/include/container/custom_searchWidgetContainer.php
widgets/custom_search/include/db/custom_searchDb.php

index b30f65e..a13eebd 100644 (file)
@@ -32,7 +32,8 @@ class custom_searchWidgetContainer extends BaseWidgetContainer
        const CONTENT_SIZE = 200;                       // 検索結果コンテンツの文字列最大長
        const SEARCH_LIST_CONTENT_ID = 'SEARCH_LIST';   // 検索一覧に表示するコンテンツのID
        const DEFAULT_SEARCH_ACT = 'custom_search';             // 検索実行処理
-
+       const CF_USE_PASSWORD                   = 'use_password';               // 汎用コンテンツに対するパスワードアクセス制御
+       
        /**
         * コンストラクタ
         */
@@ -161,11 +162,13 @@ class custom_searchWidgetContainer extends BaseWidgetContainer
                                $message = self::MESSAGE_NO_KEYWORD;
                        } else {
                                // ##### 検索実行の場合 #####
+                               // 設定値取得
+                               $configArray = $this->loadContentConfig();
+                               $contentUsePassword = $configArray[self::CF_USE_PASSWORD];                      // パスワードによるコンテンツ閲覧制限
+               
                                // 総数を取得
-//                             $totalCount = $this->db->searchContentsCountByKeyword($parsedKeywords, $selectCategory, $this->langId, $isAll, $isTargetContent, $isTargetUser, $isTargetBlog,
-//                                                             $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto);
                                $totalCount = $this->db->searchContentsByKeyword(0/*項目数取得*/, 0/*ダミー*/, $parsedKeywords, $selectCategory, $this->langId, $isAll, $isTargetContent, $isTargetUser, $isTargetBlog,
-                                                               $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto);
+                                                               $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto, $contentUsePassword);
                                $this->calcPageLink($pageNo, $totalCount, $this->resultCount);          // ページ番号修正
                                
                                // リンク文字列作成、ページ番号調整
@@ -174,7 +177,7 @@ class custom_searchWidgetContainer extends BaseWidgetContainer
                                
                                // 検出項目を表示
                                $this->db->searchContentsByKeyword($this->resultCount, $pageNo, $parsedKeywords, $selectCategory, $this->langId, $isAll, $isTargetContent, $isTargetUser, $isTargetBlog, 
-                                                               $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto, array($this, 'searchItemsLoop'));
+                                                               $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto, $contentUsePassword, array($this, 'searchItemsLoop'));
                                
                                if ($this->isExistsViewData){
                                        // ページリンクを埋め込む
@@ -669,5 +672,27 @@ class custom_searchWidgetContainer extends BaseWidgetContainer
                }
                return $destUrl;
        }
+       /**
+        * 汎用コンテンツ定義値をDBから取得
+        *
+        * @return array                取得データ
+        */
+       function loadContentConfig()
+       {
+               $retVal = array();
+
+               // 汎用コンテンツ定義を読み込み
+               $ret = $this->db->getAllConfig($rows);
+               if ($ret){
+                       // 取得データを連想配列にする
+                       $configCount = count($rows);
+                       for ($i = 0; $i < $configCount; $i++){
+                               $key = $rows[$i]['ng_id'];
+                               $value = $rows[$i]['ng_value'];
+                               $retVal[$key] = $value;
+                       }
+               }
+               return $retVal;
+       }
 }
 ?>
index ef1b93b..d90fb44 100644 (file)
@@ -10,7 +10,7 @@
  * @author     株式会社 毎日メディアサービス
  * @copyright  Copyright 2010-2013 株式会社 毎日メディアサービス.
  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
- * @version    SVN: $Id: custom_searchDb.php 5969 2013-04-29 13:16:04Z fishbone $
+ * @version    SVN: $Id$
  * @link       http://www.m-media.co.jp
  */
 require_once($gEnvManager->getDbPath() . '/baseDb.php');
@@ -18,6 +18,21 @@ require_once($gEnvManager->getDbPath() . '/baseDb.php');
 class custom_searchDb extends BaseDb
 {
        /**
+        * 汎用コンテンツ定義値を取得をすべて取得
+        *
+        * @param array  $rows                  レコード
+        * @return bool                                 1行以上取得 = true, 取得なし= false
+        */
+       function getAllConfig(&$rows)
+       {
+               $contentType = '';
+               $queryStr  = 'SELECT * FROM content_config ';
+               $queryStr .=   'WHERE ng_type = ? ';
+               $queryStr .=   'ORDER BY ng_index';
+               $retValue = $this->selectRecords($queryStr, array($contentType), $rows);
+               return $retValue;
+       }
+       /**
         * すべてのカテゴリ種別を取得
         *
         * @param string  $langId               言語ID
@@ -87,11 +102,12 @@ class custom_searchDb extends BaseDb
         * @param bool          $isTargetEvent          イベント情報を検索対象とするかどうか
         * @param bool          $isTargetBbs            BBSを検索対象とするかどうか
         * @param bool          $isTargetPhoto          フォトギャラリーを検索対象とするかどうか
+        * @param bool          $contentUsePassword     汎用コンテンツのパスワード閲覧制限するかどうか
         * @param function      $callback                       コールバック関数
         * @return int,bool                                             $limitが0のときintで項目数、$limitが0以外のときはbool(true=1行以上レコード取得、false=レコードなし)
         */
        function searchContentsByKeyword($limit, $page, $keywords, $categoryInfo, $langId, $isAll, $isTargetContent, $isTargetUser, $isTargetBlog, 
-                                                                       $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto, $callback = NULL)
+                                                                       $isTargetProduct, $isTargetEvent, $isTargetBbs, $isTargetPhoto, $contentUsePassword, $callback = NULL)
        {
                $offset = $limit * ($page -1);
                if ($offset < 0) $offset = 0;
@@ -110,7 +126,8 @@ class custom_searchDb extends BaseDb
                        $queryStr .=    'AND cn_type = ? ';$params[] = $contentType;
                        $queryStr .=    'AND cn_language_id = ? ';$params[] = $langId;
                        if (!$all) $queryStr .=    'AND cn_user_limited = false ';              // ユーザ制限のないデータ
-
+                       if ($contentUsePassword) $queryStr .=    'AND cn_password = \'\' ';     // パスワード閲覧制限する場合はパスワードが設定されているコンテンツを検索しない
+                       
                        // タイトルと記事を検索
                        if (!empty($keywords)){
                                for ($i = 0; $i < count($keywords); $i++){