OSDN Git Service

初回コミット(v2.6.17.1)
[magic3/magic3.git] / widgets / blog_main / include / container / admin_blog_mainConfigWidgetContainer.php
1 <?php
2 /**
3  * コンテナクラス
4  *
5  * PHP versions 5
6  *
7  * LICENSE: This source file is licensed under the terms of the GNU General Public License.
8  *
9  * @package    Magic3 Framework
10  * @author     平田直毅(Naoki Hirata) <naoki@aplo.co.jp>
11  * @copyright  Copyright 2006-2012 Magic3 Project.
12  * @license    http://www.gnu.org/copyleft/gpl.html  GPL License
13  * @version    SVN: $Id: admin_blog_mainConfigWidgetContainer.php 5701 2013-02-20 02:26:14Z fishbone $
14  * @link       http://www.magic3.org
15  */
16 require_once($gEnvManager->getCurrentWidgetContainerPath() . '/admin_blog_mainBaseWidgetContainer.php');
17
18 class admin_blog_mainConfigWidgetContainer extends admin_blog_mainBaseWidgetContainer
19 {
20         const DEFAULT_VIEW_COUNT        = 10;                           // デフォルトの表示記事数
21                 
22         /**
23          * コンストラクタ
24          */
25         function __construct()
26         {
27                 // 親クラスを呼び出す
28                 parent::__construct();
29         }
30         /**
31          * テンプレートファイルを設定
32          *
33          * _assign()でデータを埋め込むテンプレートファイルのファイル名を返す。
34          * 読み込むディレクトリは、「自ウィジェットディレクトリ/include/template」に固定。
35          *
36          * @param RequestManager $request               HTTPリクエスト処理クラス
37          * @param object         $param                 任意使用パラメータ。そのまま_assign()に渡る
38          * @return string                                               テンプレートファイル名。テンプレートライブラリを使用しない場合は空文字列「''」を返す。
39          */
40         function _setTemplate($request, &$param)
41         {
42                 return 'admin_config.tmpl.html';
43         }
44         /**
45          * テンプレートにデータ埋め込む
46          *
47          * _setTemplate()で指定したテンプレートファイルにデータを埋め込む。
48          *
49          * @param RequestManager $request               HTTPリクエスト処理クラス
50          * @param object         $param                 任意使用パラメータ。_setTemplate()と共有。
51          * @param                                                               なし
52          */
53         function _assign($request, &$param)
54         {
55                 $defaultLang    = $this->gEnv->getDefaultLanguage();
56                                 
57                 $act = $request->trimValueOf('act');
58                 $entryViewCount = $request->trimValueOf('entry_view_count');            // 記事表示数
59                 $entryViewOrder = $request->trimValueOf('entry_view_order');            // 記事表示順
60                 $categoryCount = $request->trimValueOf('category_count');               // カテゴリ数
61                 $receiveComment = ($request->trimValueOf('receive_comment') == 'on') ? 1 : 0;           // コメントを受け付けるかどうか
62                 $useMultiBlog = ($request->trimValueOf('use_multi_blog') == 'on') ? 1 : 0;              // マルチブログ機能を使用するかどうか
63                 $topContent = $request->valueOf('top_content'); // トップコンテンツ
64                 $maxCommentLength = $request->valueOf('max_comment_length');    // コメント最大文字数
65                 $layoutEntrySingle = $request->valueOf('item_layout_entry_single');                                     // コンテンツレイアウト(記事詳細)
66                 $layoutEntryList = $request->valueOf('item_layout_entry_list');                                 // コンテンツレイアウト(記事一覧)
67                 $layoutCommentList = $request->valueOf('item_layout_comment_list');                                     // コンテンツレイアウト(コメント一覧)
68                 $outputHead     = ($request->trimValueOf('item_output_head') == 'on') ? 1 : 0;          // ヘッダ出力するかどうか
69                 $headViewDetail = $request->valueOf('item_head_view_detail');                                   // ヘッダ出力(詳細表示)
70                 $commentUserLimited = ($request->trimValueOf('comment_user_limited') == 'on') ? 1 : 0;          // コメントのユーザ制限
71                 if (strlen($topContent) <= 10){ // FCKEditorのバグの対応(空の場合でもBRタグが送信される)
72                         $topContent = '';
73                 }
74                 
75                 if ($act == 'update'){          // 設定更新のとき
76                         // 入力値のエラーチェック
77                         $this->checkNumeric($entryViewCount, '記事表示順');
78                         $this->checkNumeric($maxCommentLength, 'コメント最大文字数');
79                         
80                         if ($this->getMsgCount() == 0){                 // エラーのないとき
81                                 $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_ENTRY_VIEW_COUNT, $entryViewCount);                          // 記事表示数
82                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_ENTRY_VIEW_ORDER, $entryViewOrder);        // 記事表示順
83                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_CATEGORY_COUNT, $categoryCount);           // カテゴリ数
84                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_RECEIVE_COMMENT, $receiveComment);         // コメントを受け付けるかどうか
85                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_MAX_COMMENT_LENGTH, $maxCommentLength);// コメント最大文字数
86                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_COMMENT_USER_LIMITED, $commentUserLimited);// コメントのユーザ制限
87                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_USE_MULTI_BLOG, $useMultiBlog);            // マルチブログ機能を使用するかどうか
88                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_MULTI_BLOG_TOP_CONTENT, $topContent);      // マルチブログ時のトップコンテンツ
89                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_LAYOUT_ENTRY_SINGLE, $layoutEntrySingle);          // コンテンツレイアウト(記事詳細)
90                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_LAYOUT_ENTRY_LIST, $layoutEntryList);              // コンテンツレイアウト(記事一覧)
91                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_LAYOUT_COMMENT_LIST, $layoutCommentList);          // コンテンツレイアウト(コメント一覧)
92                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_OUTPUT_HEAD, $outputHead);         // ヘッダ出力するかどうか
93                                 if ($ret) $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_HEAD_VIEW_DETAIL, $headViewDetail);        // ヘッダ出力(詳細表示)
94                                                                                                                                                                                                                                 
95                                 if ($ret){
96                                         $this->setMsg(self::MSG_GUIDANCE, 'データを更新しました');
97                                 } else {
98                                         $this->setMsg(self::MSG_APP_ERR, 'データ更新に失敗しました');
99                                 }
100                                 $this->gPage->updateParentWindow();// 親ウィンドウを更新
101                         }
102                 } else if ($act == 'upload'){           // 画像アップロードのとき
103                         // アップロードされたファイルか?セキュリティチェックする
104                         if (is_uploaded_file($_FILES['upfile']['tmp_name'])){
105                                 // テンポラリディレクトリの書き込み権限をチェック
106                                 if (!is_writable($this->gEnv->getWorkDirPath())){
107                                         $msg = sprintf('一時ディレクトリに書き込み権限がありません。(ディレクトリ:%s)', $this->gEnv->getWorkDirPath());
108                                         $this->setAppErrorMsg($msg);
109                                 }
110                                 
111                                 if ($this->getMsgCount() == 0){         // エラーが発生していないとき
112                                         // ファイルを保存するサーバディレクトリを指定
113                                         $tmpFile = tempnam($this->gEnv->getWorkDirPath(), M3_SYSTEM_WORK_UPLOAD_FILENAME_HEAD);
114                 
115                                         // アップされたテンポラリファイルを保存ディレクトリにコピー
116                                         $ret = move_uploaded_file($_FILES['upfile']['tmp_name'], $tmpFile);
117                                         if ($ret){
118                                                 // サムネール作成
119                                                 $ret = $this->gInstance->getImageManager()->createSystemDefaultThumb(M3_VIEW_TYPE_BLOG, blog_mainCommonDef::$_deviceType, 0/*記事ID*/, $tmpFile, $destFilename);
120                                                 if ($ret){
121                                                         $entryDefaultImages = implode(';', $destFilename);
122                                                         $ret = self::$_mainDb->updateConfig(blog_mainCommonDef::CF_ENTRY_DEFAULT_IMAGE, $entryDefaultImages);
123                                                 }
124                                                 if ($ret){
125                                                         $msg = '画像を変更しました';
126                                                         $this->setGuidanceMsg($msg);
127                                                 } else {
128                                                         $msg = '画像の作成に失敗しました';
129                                                         $this->setAppErrorMsg($msg);
130                                                 }
131                                         } else {
132                                                 $msg = 'ファイルのアップロードに失敗しました';
133                                                 $this->setAppErrorMsg($msg);
134                                         }
135                                         // テンポラリファイル削除
136                                         unlink($tmpFile);
137                                 }
138                         } else {
139                                 $msg = sprintf('アップロードファイルが見つかりません(要因:アップロード可能なファイルのMaxサイズを超えている可能性があります。%sバイト)', $this->gSystem->getMaxFileSizeForUpload());
140                                 $this->setAppErrorMsg($msg);
141                         }
142                 } else {                // 初期表示の場合
143                         $entryViewCount = self::$_mainDb->getConfig(blog_mainCommonDef::CF_ENTRY_VIEW_COUNT);// 記事表示数
144                         if (empty($entryViewCount)) $entryViewCount = self::DEFAULT_VIEW_COUNT;
145                         $entryViewOrder = self::$_mainDb->getConfig(blog_mainCommonDef::CF_ENTRY_VIEW_ORDER);// 記事表示順
146                         $categoryCount  = self::$_mainDb->getConfig(blog_mainCommonDef::CF_CATEGORY_COUNT);// カテゴリ数
147                         if (empty($categoryCount)) $categoryCount = self::DEFAULT_CATEGORY_COUNT;
148                         $receiveComment = self::$_mainDb->getConfig(blog_mainCommonDef::CF_RECEIVE_COMMENT);
149                         $maxCommentLength = self::$_mainDb->getConfig(blog_mainCommonDef::CF_MAX_COMMENT_LENGTH);       // コメント最大文字数
150                         if ($maxCommentLength == '') $maxCommentLength = self::DEFAULT_COMMENT_LENGTH;
151                         $commentUserLimited = self::$_mainDb->getConfig(blog_mainCommonDef::CF_COMMENT_USER_LIMITED);   // コメントのユーザ制限
152                         if (!isset($commentUserLimited)) $commentUserLimited = '0';
153                         $useMultiBlog = self::$_mainDb->getConfig(blog_mainCommonDef::CF_USE_MULTI_BLOG);// マルチブログ機能を使用するかどうか
154                         if (!isset($useMultiBlog)) $useMultiBlog = '0';
155                         $topContent = self::$_mainDb->getConfig(blog_mainCommonDef::CF_MULTI_BLOG_TOP_CONTENT);// マルチブログ時のトップコンテンツ
156                         $layoutEntrySingle = self::$_mainDb->getConfig(blog_mainCommonDef::CF_LAYOUT_ENTRY_SINGLE);             // コンテンツレイアウト(記事詳細)
157                         if (empty($layoutEntrySingle)) $layoutEntrySingle = blog_mainCommonDef::DEFAULT_LAYOUT_ENTRY_SINGLE;
158                         $layoutEntryList = self::$_mainDb->getConfig(blog_mainCommonDef::CF_LAYOUT_ENTRY_LIST);         // コンテンツレイアウト(記事一覧)
159                         if (empty($layoutEntryList)) $layoutEntryList = blog_mainCommonDef::DEFAULT_LAYOUT_ENTRY_LIST;
160                         $layoutCommentList = self::$_mainDb->getConfig(blog_mainCommonDef::CF_LAYOUT_COMMENT_LIST);             // コンテンツレイアウト(コメント一覧)
161                         if (empty($layoutCommentList)) $layoutCommentList = blog_mainCommonDef::DEFAULT_LAYOUT_COMMENT_LIST;
162                         $outputHead = self::$_mainDb->getConfig(blog_mainCommonDef::CF_OUTPUT_HEAD);            // ヘッダ出力するかどうか
163                         $headViewDetail = self::$_mainDb->getConfig(blog_mainCommonDef::CF_HEAD_VIEW_DETAIL);           // ヘッダ出力(詳細表示)
164                 }
165                 // 画面に書き戻す
166                 $this->tmpl->addVar("_widget", "view_count", $entryViewCount);// 記事表示数
167                 if (empty($entryViewOrder)){    // 順方向
168                         $this->tmpl->addVar("_widget", "view_order_inc_selected", 'selected');// 記事表示順
169                 } else {
170                         $this->tmpl->addVar("_widget", "view_order_dec_selected", 'selected');// 記事表示順
171                 }
172                 
173                 // 記事デフォルト画像
174                 $entryDefaultImageUrl = '';
175                 $value = self::$_mainDb->getConfig(blog_mainCommonDef::CF_ENTRY_DEFAULT_IMAGE);
176                 if (!empty($value)){
177                         $entryDefaultImages = explode(';', $value);
178                         $entryDefaultImageUrl = $this->gInstance->getImageManager()->getSystemThumbUrl(M3_VIEW_TYPE_BLOG, blog_mainCommonDef::$_deviceType, $entryDefaultImages[count($entryDefaultImages) -1]);
179                         $entryDefaultImage = '<img src="' . $this->convertUrlToHtmlEntity($this->getUrl($entryDefaultImageUrl . '?' . date('YmdHis'))) . '" />';
180                         $this->tmpl->addVar("_widget", "entry_default_image", $entryDefaultImage);
181                 }
182                 
183                 $this->tmpl->addVar("_widget", "category_count", $categoryCount);// カテゴリ数
184                 $checked = '';
185                 if ($receiveComment) $checked = 'checked';
186                 $this->tmpl->addVar("_widget", "receive_comment", $checked);// コメントを受け付けるかどうか
187                 $this->tmpl->addVar("_widget", "max_comment_length", $maxCommentLength);// コメント最大文字数
188                 $checked = '';
189                 if ($commentUserLimited) $checked = 'checked';
190                 $this->tmpl->addVar("_widget", "comment_user_limited", $checked);// コメントのユーザ制限
191                 $checked = '';
192                 if ($useMultiBlog) $checked = 'checked';
193                 $this->tmpl->addVar("_widget", "use_multi_blog", $checked);// マルチブログ機能を使用するかどうか
194                 $this->tmpl->addVar("_widget", "top_content", $topContent);             // マルチブログ時のトップコンテンツ
195                 $this->tmpl->addVar("_widget", "layout_entry_single", $layoutEntrySingle);              // コンテンツレイアウト(記事詳細)
196                 $this->tmpl->addVar("_widget", "layout_entry_list", $layoutEntryList);          // コンテンツレイアウト(記事一覧)
197                 $this->tmpl->addVar("_widget", "layout_comment_list", $layoutCommentList);              // コンテンツレイアウト(コメント一覧)
198                 $checked = '';
199                 if (!empty($outputHead)) $checked = 'checked';
200                 $this->tmpl->addVar("_widget", "output_head_checked", $checked);                // ヘッダ出力するかどうか
201                 $this->tmpl->addVar("_widget", "head_view_detail", $headViewDetail);            // ヘッダ出力(詳細表示)
202         }
203 }
204 ?>