<?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('notempty'),
- 'required' => array('boolean'),
- 'editable' => array('boolean'),
- 'sort_order' => array('numeric'),
- 'is_link' => array('boolean')
+ '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
'className' => 'System',
'foreignKey' => 'system_id',
'conditions' => '',
- 'fields' => '',
- 'order' => ''
+ 'fields' => array('id', 'name'),
)
);
'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' => '',
'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' => ''
- )
- );
-
- var $hasAndBelongsToMany = array(
- 'CharactersHa' => array(
- 'className' => 'CharactersHa',
- 'joinTable' => 'characters_has_profiles',
+ ),
+ 'CharactersHasProfile' => array(
+ 'className' => 'CharactersHasProfile',
'foreignKey' => 'profile_id',
- 'associationForeignKey' => 'characters_ha_id',
- 'unique' => true,
+ 'associationForeignKey' => 'id',
+ 'dependent' => true,
'conditions' => '',
- 'fields' => '',
- 'order' => '',
+ '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' => '',
+ 'finderQuery' => '',
+ 'counterQuery' => ''
)
);
+ /* 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