OSDN Git Service

public_flag_default設定の削除
[trpgtools-onweb/cake-frame.git] / app / models / profile.php
index 26d643d..f389e7a 100644 (file)
 <?php
+/*
+ * PHP version 5
+ *
+ * @copyright Copyright 2010, Cake. (http://trpgtools-onweb.sourceforge.jp/)
+ * @category Model
+ * @package  TRPG Data Bank
+ * @version  beta
+ * @author   Cake <cake_67@users.sourceforge.jp>
+ * @license  http://www.opensource.org/licenses/mit-license.php The MIT License
+ * @link     http://trpgtools-onweb.sourceforge.jp/
+ */
+
 class Profile extends AppModel {
 
        var $name = 'Profile';
 
+       var $profile_type = array(
+               'input',
+               'textarea',
+               'select',
+               'radio',
+               'checkbox',
+               'm-input',
+               'table',
+               's-table',
+       );
+
+       var $fields = array(
+               'add' => array('system_id', 'name', 'key_name', 'profile_type', 'required', 'show_list', 'search', 'sort_order'),
+               'edit' => array('name', 'key_name', 'profile_type', 'required', 'show_list', 'search', 'sort_order'),
+               'edit_all' => array('required', 'show_list', 'search','sort_order'),
+               'escape' => array(
+                       'name' => array(
+                               'html' => true,
+                               'tags' => true,
+                               'all' => true,
+                       ),
+               ),
+       );
+
+       var $validate = array(
+               'name' => array(
+                       'maxLengthJP' => array(
+                               'rule' => array('maxLengthJP', 255),
+                       ),
+                       'notEmpty' => array(
+                               'rule' => 'notEmpty',
+                       ),
+               ),
+               'key_name' => array(
+                       'keyNameNg' => array(
+                               'rule' => 'keyNameNg',
+                       ),
+                       'keyName' => array(
+                               'rule' => 'keyName',
+                       ),
+                       'maxLengthJP' => array(
+                               'rule' => array('maxLengthJP', 64),
+                       ),
+                       'notEmpty' => array(
+                               'rule' => 'notEmpty',
+                       ),
+               ),
+               'profile_type' => array(
+                       'profileType' => array(
+                               'rule' => 'profileType',
+                               'allowEmpty' => true,
+                       ),
+               ),
+               'required' => array(
+                       'boolean' => array(
+                               'rule' => 'boolean',
+                               'allowEmpty' => true,
+                       ),
+               ),
+               'show_list' => array(
+                       'boolean' => array(
+                               'rule' => 'boolean',
+                               'allowEmpty' => true,
+                       ),
+               ),
+               'search' => array(
+                       'boolean' => array(
+                               'rule' => 'boolean',
+                               'allowEmpty' => true,
+                       ),
+               ),
+               'sort_order' => array(
+                       'numeric' => array(
+                               'rule' => array('numeric'),
+                               'allowEmpty' => true,
+                       ),
+               ),
+       );
+
        //The Associations below have been created with all possible keys, those that are not needed can be removed
        var $belongsTo = array(
                'System' => array(
                        'className' => 'System',
                        'foreignKey' => 'system_id',
                        'conditions' => '',
-                       'fields' => '',
-                       'order' => ''
+                       'fields' => array('id', 'name'),
                )
        );
 
@@ -18,10 +108,10 @@ class Profile extends AppModel {
                'ProfileSelect' => array(
                        'className' => 'ProfileSelect',
                        'foreignKey' => 'profile_id',
-                       'dependent' => false,
+                       'dependent' => true,
                        'conditions' => '',
                        'fields' => '',
-                       'order' => '',
+//                     'order' => array('ProfileSelect.sort_order' => 'asc'), // Using filesortの原因
                        'limit' => '',
                        'offset' => '',
                        'exclusive' => '',
@@ -31,10 +121,45 @@ class Profile extends AppModel {
                'ProfileTable' => array(
                        'className' => 'ProfileTable',
                        'foreignKey' => 'profile_id',
-                       'dependent' => false,
+                       'dependent' => true,
                        'conditions' => '',
                        'fields' => '',
-                       'order' => '',
+//                     'order' => array('ProfileTable.sort_order' => 'asc'),
+                       'limit' => '',
+                       'offset' => '',
+                       'exclusive' => '',
+                       'finderQuery' => '',
+                       'counterQuery' => ''
+               ),
+               'CharactersHasProfile' => array(
+                       'className' => 'CharactersHasProfile',
+                       'foreignKey' => 'profile_id',
+                       'associationForeignKey' => 'id',
+                       'dependent' => true,
+                       'conditions' => '',
+                       'fields' => array(
+                               'CharactersHasProfile.id',
+                               'CharactersHasProfile.character_id',
+                               'CharactersHasProfile.profile_table_id',
+                               'CharactersHasProfile.profile_table_static_id',
+                               'CharactersHasProfile.value',
+                               'CharactersHasProfile.public_flag',
+                               'CharactersHasProfile.link_value',
+                       ),
+                       'order' => array('CharactersHasProfile.id' => 'asc'),
+                       'limit' => '',
+                       'offset' => '',
+                       'finderQuery' => '',
+                       'deleteQuery' => '',
+                       'insertQuery' => ''
+               ),
+               'DefaultProfile' => array(
+                       'className' => 'DefaultProfile',
+                       'foreignKey' => 'profile_id',
+                       'dependent' => true,
+                       'conditions' => '',
+                       'fields' => '',
+                       'order' => '', // Using filesortの原因
                        'limit' => '',
                        'offset' => '',
                        'exclusive' => '',
@@ -43,5 +168,69 @@ class Profile extends AppModel {
                )
        );
 
+       /* validation Rule */
+
+       /* 同システム中に同じkey_nameは不可 */
+       function isUniqueKeyname4system($data, $system_id, $id = null) 
+       {
+               $params = array(
+                       'conditions' => array(
+                               'Profile.system_id' => $system_id,
+                               'Profile.key_name' => $data['key_name'],
+                       ),
+                       'recursive' => -1,
+               );
+
+               if($id) {
+                       $params['conditions']['Profile.id !='] = $id;
+               }
+
+               return !($this->find('count', $params));
+       }
+
+       /* プロフィールの入力型 */
+       function profileType($data) 
+       {
+               if (isset($data['profile_type']) && in_array($data['profile_type'], $this->profile_type)) {
+                       return true;
+               } else {
+                       return false;
+               }
+       }
+
+       /* コールバックメソッド */
+       function beforeSave($options = array())
+       {
+               if (empty($this->data['Profile']['sort_order'])) {
+                       $this->data['Profile']['sort_order'] = 0;
+               }
+
+               return parent::beforeSave($options);
+       }
+
+       function afterSave($created) {
+               $this->deleteCache4Profile();
+
+               return parent::afterSave($created);
+       }
+       function afterDelete() {
+               $this->deleteCache4Profile();
+
+               return parent::afterDelete();
+       }
+
+       /* キャッシュ削除 */
+       function deleteCache4Profile()
+       {
+               if (!isset($this->Character)) {
+                       $this->Character = CorePlus::set_model('Character');
+               }
+               $this->Character->cacheDelete();
+
+               if (!isset($this->System)) {
+                       $this->System = CorePlus::set_model('System');
+               }
+               $this->System->cacheDelete();
+       }
+
 }
-?>
\ No newline at end of file