6 App::import('Vendor', 'pear_ini');
7 App::import('Vendor', 'Net_UserAgent_Mobile', array('file' => 'Net' . DS . 'UserAgent' . DS . 'Mobile.php'));
12 $this->agent = &Net_UserAgent_Mobile::factory();
13 if (!$this->agent->isNonMobile()) {
14 Configure::write('mobileUserAgent', true);
17 class AppController extends Controller
19 var $user = array('User' => array(
24 var $isAdministrator = false;
26 var $isMobile = false;
28 var $site_configs = array();
30 var $components = array(
33 'Cakeplus.HtmlEscape',
54 var $conditions = array(
55 'Character.public_flag' => 'public',
56 'Character.deleted' => 0
60 'Character.system_id',
63 'Character.main_picture',
64 'Character.sort_order',
66 'Character.public_flag',
69 var $contain = array();
72 'Character.modified' => 'DESC',
74 var $paginate = array(
77 'conditions' => array(
78 'Character.public_flag' => 'public',
79 'Character.deleted' => 0
83 'Character.modified' => 'DESC',
90 var $actionMapPlus = array();
92 // POSTのTokenチェックをしないアクション
93 var $disableTokenActions = array();
95 function __construct() {
96 if (Configure::read('mobileUserAgent')) {
97 Configure::write('Session.save', 'sessino_m_custom');
100 parent::__construct();
103 function beforeFilter()
105 $this->Benchmark->report($this->params['controller']. '/'. $this->action . ':' .' beforeFilterStart');
107 parent::beforeFilter();
109 $this->user['User']['name'] = __('Guest', true);
112 $this->disableCache();
114 if (isset($this->params['prefix'])) {
115 if ($this->params['prefix'] == Configure::read('Routing.admin')) {
116 $this->isAdmin = true;
117 $this->layout = 'admin_'.$this->layout;
118 } elseif ($this->params['prefix'] == 'm') {
119 $this->isMobile = true;
122 $this->set('admin', $this->isAdmin);
125 $this->site_configs = CorePlus::set_db_settings();
126 $this->set('site_configs', $this->site_configs);
128 if ($this->AuthPlus) {
130 $this->AuthPlus->actionPath = 'controllers/';
131 $this->AuthPlus->authorize = 'crud';
133 $this->user_id = $this->AuthPlus->user('id');
134 $user = $this->getUser($this->user_id);
139 if (in_array($this->AuthPlus->user('group_id'), array(1,2,3))) {
140 $this->isAdministrator = true;
144 $this->Token->checkToken();
147 if (Configure::read('mobileUserAgent')) {
148 $this->AuthPlus->loginAction = '/m/users/login';
149 $this->AuthPlus->loginRedirect = '/m/users/index';
150 $this->AuthPlus->logoutRedirect = '/m/users/index';
152 $this->AuthPlus->loginAction = '/users/login';
153 $this->AuthPlus->loginRedirect = '/users/index';
154 $this->AuthPlus->logoutRedirect = '/users/index';
156 if ($this->isAdmin) {
157 $this->AuthPlus->loginRedirect = '/admin/users/index';
160 $this->set('user', $this->user);
161 $this->set('isAdministrator', $this->isAdministrator);
164 function beforeRender()
166 $this->Benchmark->report($this->params['controller']. '/'. $this->action . ':' . ' beforeRenderStart');
167 parent::beforeRender();
170 function afterFilter()
172 $this->Benchmark->report($this->params['controller']. '/'. $this->action . ':' . ' afterFilterStart');
173 parent::afterFilter();
177 /* public_flag設定をview用にセット */
178 function set_public_flag4view()
180 $model_public_flags = $this->get_public_flag();
182 $this->set('public_flags', $model_public_flags);
184 function get_public_flag()
186 return $this->{$this->modelClass}->public_flag;
188 function check_public_flag($data, $key = null)
190 return CorePlus::check_public_flag($data, $key);
192 function check_public_flag2($data, $key = null)
194 return CorePlus::check_public_flag2($data, $key);
197 /* status設定をview用にセット */
198 function set_status4view()
200 $model_status = $this->get_status();
202 $this->set('status', $model_status);
204 function get_status()
206 if (isset($this->Character)) {
207 return $this->Character->status;
208 } elseif (isset($this->CharacterProfileArchive)) {
209 return $this->CharacterProfileArchive->Character->status;
216 function isOwner($data, $user_id)
218 return CorePlus::isOwner($data, $user_id);
222 function getUser($id, $isAdmin=false, $isDelete=false) {
227 if (!isset($this->User)) {
228 $this->User = CorePlus::set_model('User');
234 if ($isAdmin === true) {
235 $conditions['User.group_id'] = array(
236 Configure::read('Group.admin'),
237 Configure::read('Group.subadmin'),
238 Configure::read('Group.watcher'),
239 Configure::read('Group.member'),
240 Configure::read('Group.locked'),
241 Configure::read('Group.pre'),
244 $conditions['User.group_id'] = array(
245 Configure::read('Group.admin'),
246 Configure::read('Group.subadmin'),
247 Configure::read('Group.watcher'),
248 Configure::read('Group.member'),
249 Configure::read('Group.locked'),
261 if ($isAdmin === true) {
262 $fields = array_merge($fields, array(
273 if ($isAdmin === true || $isDelete === true) {
274 $contain = array_merge($contain, array(
278 unset($this->User->hasMany['Character']['conditions']['Character.public_flag']);
279 unset($this->User->hasMany['Character']['limit']);
282 if (empty($contain)) {
285 $recursive = Set::countDim($contain);
288 $user = $this->User->find('first', array(
289 'conditions' => $conditions,
291 'recursive' => $recursive,
292 'contain' => $contain,
296 if (isset($user['User']['pcmail']) && !empty($user['User']['pcmail'])) {
297 $user['User']['pcmail'] = $this->Crypt->decrypt($user['User']['pcmail']);
304 function _check_demo()
306 if (Configure::read('Mode.Demo')) {
307 if ($_SESSION['Auth']['User']['username'] == 'guest') {
308 $this->Session->setFlash(__('NO AVAILABLE NOW.', true));
309 $this->redirect(array('action'=>'index'));
315 function _restore_html_system($data) {
316 if (isset($data['System']['name']) && !empty($data['System']['name'])) {
317 $data['System']['name'] = $this->{$this->modelClass}->restore_html($data['System']['name'], false, false, false);
319 if (isset($data['System']['copyright']) && !empty($data['System']['copyright'])) {
320 $data['System']['copyright'] = $this->{$this->modelClass}->restore_html($data['System']['copyright'], false, false, false);
322 if (isset($data['System']['url']) && !empty($data['System']['url'])) {
323 $data['System']['url'] = $this->{$this->modelClass}->restore_html($data['System']['url'], false, false, false);
325 if (isset($data['System']['detail']) && !empty($data['System']['detail'])) {
326 $data['System']['detail'] = $this->{$this->modelClass}->restore_html($data['System']['detail'], false, false, false);
329 if (isset($data['Profile']) && !empty($data['Profile'])) {
330 $data = $this->_restore_html_profile($data);
336 function _get_systems($public_flag = 'public')
338 $conditions = array();
339 if (!empty($public_flag)) {
340 $conditions['System.public_flag'] = $public_flag;
343 if (!isset($this->System)) {
344 $this->System = CorePlus::set_model('System');
347 $systems = $this->System->find('list', array(
348 'conditions' => $conditions,
351 if (!empty($systems)) {
352 foreach ($systems as $k => $v) {
353 $systems[$k] = $this->{$this->modelClass}->restore_html($v);
362 function _set_conditions_characters4user_id($user_id = null, $conditions = array(), $fields = array(), $contain = array(), $order = array())
364 if (!empty($user_id)) {
365 $conditions = array_merge((array)$conditions,
367 'Character.user_id' => $user_id,
372 $conditions = array_merge($this->conditions, (array)$conditions);
374 if ((isset($conditions['isAdmin']))|| (!empty($user_id) && ($user_id == $this->user_id))) {
375 unset($conditions['Character.public_flag']);
376 unset($conditions['isAdmin']);
379 $fields = array_merge($this->fields, (array)$fields);
382 $contain = array_merge($this->contain, (array)$contain);
383 if (empty($contain)) {
386 $recursive = Set::countDim($contain);
389 $order = array_merge($this->order, (array)$order);
391 return array($conditions, $fields, $contain, $recursive, $order);
394 function _get_characters_list4user_id($user_id = null, $conditions = array(), $limit = 5, $fields = array(), $contain = array(), $order = array())
396 list($conditions, $fields, $contain, $recursive, $order) = $this->_set_conditions_characters4user_id($user_id, $conditions, $fields, $contain, $order);
398 if (!isset($this->Character)) {
399 $this->Character = CorePlus::set_model('Character');
402 return $this->Character->find('all', array(
403 'conditions' => $conditions,
406 'recursive' => $recursive,
407 'contain' => $contain,
412 function _get_characters_page4user_id($user_id = null, $conditions = array(), $limit = 20, $fields = array(), $contain = array(), $order = array(), $page = 1)
414 list($conditions, $fields, $contain, $recursive, $order) = $this->_set_conditions_characters4user_id($user_id, $conditions, $fields, $contain, $order);
416 if (!isset($this->Character)) {
417 $this->Character = CorePlus::set_model('Character');
420 $this->paginate['Character'] = array(
422 'conditions' => $conditions,
424 'contain' => $contain,
425 'recursive' => $recursive,
430 return $this->paginate('Character');
435 function _get_character4character_id($character_id, $user_id = null, $public_flag = null, $is_deleted = 0)
437 if (!isset($this->Character)) {
438 $this->Character = CorePlus::set_model('Character');
442 'Character.id' => $character_id,
443 'Character.deleted' => $is_deleted,
446 $conditions['Character.user_id'] = $user_id;
449 unset($this->Character->hasMany['CharacterPicture']['conditions']['CharacterPicture.public_flag']);
451 $conditions['Character.public_flag'] = $public_flag;
452 $this->Character->hasMany['CharacterPicture']['conditions']['CharacterPicture.public_flag'] = $public_flag;
455 $character = $this->Character->find('first', array(
456 'conditions' => $conditions,
458 'CharacterPicture' => array(
464 if (empty($character)) {
465 $this->Session->setFlash(__('Invalid Character.', true));
466 $this->redirect(array('controller' => 'characters', 'action'=>'index'));
471 function check_character_picture_max($character_pictures_num)
473 if (!$max_num = intval($this->site_configs['Character.maxPictures']['value'])) {
477 if ($max_num <= $character_pictures_num) {
484 /* Profile系 htmlRestore */
485 function _restore_html_profile($data) {
486 if (isset($data['Profile']['name']) && !empty($data['Profile']['name'])) {
487 $data['Profile']['name'] = $this->{$this->modelClass}->restore_html($data['Profile']['name'], false, false, false);
490 if (isset($data['Profile'][0]['ProfileSelect'])) {
491 foreach ($data['Profile'] as $k => $v) {
492 $data['Profile'][$k] = $this->__restore_html_profile($v);
494 } elseif($data['Profile']['ProfileSelect']) {
495 $data['Profile'] = $this->__restore_html_profile($data['Profile']);
500 function __restore_html_profile($data) {
501 if (isset($data['ProfileSelect']) && !empty($data['ProfileSelect'])) {
502 $data = $this->_restore_html_profile_select($data);
504 if (isset($data['ProfileTable']) && !empty($data['ProfileTable'])) {
505 $data = $this->_restore_html_profile_table($data);
507 if (isset($data['ProfileTableStatic']) && !empty($data['ProfileTableStatic'])) {
508 $data = $this->_restore_html_profile_table_static($data);
513 function _restore_html_profile_select($data) {
514 foreach ($data['ProfileSelect'] as $k => $v) {
515 if (isset($data['ProfileSelect'][$k]['value']) && !empty($data['ProfileSelect'][$k]['value'])) {
516 $data['ProfileSelect'][$k]['value'] = $this->{$this->modelClass}->restore_html($v['value'], false, false, false);
522 function _restore_html_profile_table($data) {
523 foreach ($data['ProfileTable'] as $k => $v) {
524 if (isset($data['ProfileTable'][$k]['value']) && !empty($data['ProfileTable'][$k]['value'])) {
525 $data['ProfileTable'][$k]['value'] = $this->{$this->modelClass}->restore_html($v['value'], false, false, false);
531 function _restore_html_profile_table_static($data) {
532 foreach ($data['ProfileTableStatic'] as $k => $v) {
533 if (isset($data['ProfileTableStatic'][$k]['title']) && !empty($data['ProfileTableStatic'][$k]['title'])) {
534 $data['ProfileTableStatic'][$k]['title'] = $this->{$this->modelClass}->restore_html($v['title'], false, false, false);
543 // AppControllerを携帯とPCで振り分け
544 if (Configure::read('mobileUserAgent')) {
545 class ModuleController extends MobileAppController
549 class ModuleController extends PcAppController
557 class MobileAppController extends AppController
559 function beforeFilter()
561 parent::beforeFilter();
564 if (!Configure::read('Mode.Mobile')) {
565 exit("Mobile View is inavailable.");
569 if (!isset($this->params["prefix"])) {
571 if ($this->params["url"]["url"] == "/") {
572 $this->redirect("/m/");
574 $this->cakeError("errorPcView");
578 @array_walk_recursive($this->data, "convertEncodeSjis2Utf8");
581 function beforeRender()
583 parent::beforeRender();
585 $this->layout = 'mobile_'.$this->layout;
588 function afterFilter()
590 parent::afterFilter();
593 $this->output = mb_convert_kana($this->output, "rak", Configure::read('App.encoding'));
595 $this->output = mb_convert_encoding($this->output, "SJIS", Configure::read('App.encoding'));
603 class PcAppController extends AppController
605 function beforeFilter()
607 parent::beforeFilter();
609 // 携帯用アクションへのアクセスはPC用に変更
610 if (isset($this->params["prefix"]) && $this->params["prefix"] == "mobile") {
611 $pc_url = substr_replace($this->params["url"]["url"], "", 0, 2+strlen($this->params["controller"])+1);
614 $pc_url = substr_replace($this->params['action'], "", 0, strlen($this->params["prefix"])+1);
617 $this->redirect($pc_url);
621 function beforeRender()
623 parent::beforeRender();
635 * 文字コード変換 SJISWin->UTF-8
637 function convertEncodeSjis2Utf8(&$str, n$key)
639 $str = mb_convert_encoding($str, 'UTF-8', 'SJIS-Win');