From 30fa5605995ef033ae1dbd29ea37ac92d143ca20 Mon Sep 17 00:00:00 2001 From: mumin Date: Wed, 2 Sep 2009 23:17:06 +0900 Subject: [PATCH] #17689 - Extract skill data. --- documents/changes.en.txt | 1 + documents/changes.ja.txt | 1 + trust_path/modules/sd3rd/class/Enum.class.php | 4 + .../modules/sd3rd/class/handler/Kind.class.php | 46 ++++++++++ .../modules/sd3rd/class/handler/Skill.class.php | 97 ++++++++++++++++++++++ .../sd3rd/class/handler/SkillElement.class.php | 56 +++++++++++++ .../modules/sd3rd/class/handler/Target.class.php | 46 ++++++++++ .../sd3rd/class/updater/UpdateUtils.class.php | 18 ++++ .../sd3rd/class/updater/dispose/Backup.class.php | 4 + .../execute/parser/char/WSkill_Data.class.php | 54 ++++++++++++ .../class/updater/prepare/RefreshTable.class.php | 9 +- .../class/updater/prepare/SetupContext.class.php | 2 +- trust_path/modules/sd3rd/sql/mysql.sql | 30 +++++++ 13 files changed, 366 insertions(+), 2 deletions(-) create mode 100644 trust_path/modules/sd3rd/class/handler/Kind.class.php create mode 100644 trust_path/modules/sd3rd/class/handler/Skill.class.php create mode 100644 trust_path/modules/sd3rd/class/handler/SkillElement.class.php create mode 100644 trust_path/modules/sd3rd/class/handler/Target.class.php create mode 100644 trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php diff --git a/documents/changes.en.txt b/documents/changes.en.txt index 6fa86ec..7752db0 100644 --- a/documents/changes.en.txt +++ b/documents/changes.en.txt @@ -1,3 +1,4 @@ +#17689 - Extract skill data. #18507 - Typo at costume column name. #18506 - Constructor has not compatibility at 5.2.x and 5.3.x. #18505 - Invalid table name at databae schema. diff --git a/documents/changes.ja.txt b/documents/changes.ja.txt index 54352f6..f97aced 100644 --- a/documents/changes.ja.txt +++ b/documents/changes.ja.txt @@ -1,3 +1,4 @@ +#17689 - ‚·‚«‚é‚Ł`‚½‚Ì’Šoˆ—‚ð’ljÁ #18507 - ‚±‚·—p‚ā[‚Ô‚é‚Ì‚©‚ç‚Þ–¼‚ª‚¨‚©‚µ‚©‚Á‚½‚̂ŏC³ #18506 - 5.3 Œn‚Å‚Í‚­‚ç‚·–¼‚±‚ñ‚·‚Æ‚ç‚­‚½‚Ì“®ì‚ª•Ï‚í‚Á‚Ä‚½‚̂ŏC³ #18505 - ‚Ł[‚½‚ׁ[‚·\‘¢‚ªŠÔˆá‚Á‚Ä‚½‚̂ŏC³ diff --git a/trust_path/modules/sd3rd/class/Enum.class.php b/trust_path/modules/sd3rd/class/Enum.class.php index fd70298..95a5a6a 100644 --- a/trust_path/modules/sd3rd/class/Enum.class.php +++ b/trust_path/modules/sd3rd/class/Enum.class.php @@ -18,6 +18,10 @@ interface Sd3rd_HANDLER const ABILITY = 'Ability'; const CHAR = 'Char'; const COSTUME = 'Costume'; + const KIND = 'Kind'; + const SKILL = 'Skill'; + const SKILL_ELEMENT = 'SkillElement'; + const TARGET = 'Target'; const UPDATE = 'Update'; } diff --git a/trust_path/modules/sd3rd/class/handler/Kind.class.php b/trust_path/modules/sd3rd/class/handler/Kind.class.php new file mode 100644 index 0000000..7f5a1d3 --- /dev/null +++ b/trust_path/modules/sd3rd/class/handler/Kind.class.php @@ -0,0 +1,46 @@ +initVar('kind_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('kind_name', XOBJ_DTYPE_STRING, '', false, 20); + } +} + +/** + * Sd3rd_KindHandler +**/ +class Sd3rd_KindHandler extends Sd3rd_AbstractMasterHandler +{ + public /*** string ***/ $mTable = '{dirname}_kind'; + public /*** string ***/ $mPrimary = 'kind_id'; + public /*** string ***/ $mClass = 'Sd3rd_KindObject'; + protected /*** string ***/ $_mIdColumn = 'kind_id'; + protected /*** string ***/ $_mValueColumn = 'kind_name'; +} + +?> diff --git a/trust_path/modules/sd3rd/class/handler/Skill.class.php b/trust_path/modules/sd3rd/class/handler/Skill.class.php new file mode 100644 index 0000000..e34577e --- /dev/null +++ b/trust_path/modules/sd3rd/class/handler/Skill.class.php @@ -0,0 +1,97 @@ +initVar('skill_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('skill_name', XOBJ_DTYPE_STRING, '', false, 50); + $this->initVar('description', XOBJ_DTYPE_STRING, '', false, 255); + $this->initVar('range', XOBJ_DTYPE_INT, '', false); + $this->initVar('target_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('kind_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('tp', XOBJ_DTYPE_INT, '', false); + $this->initVar('register_time', XOBJ_DTYPE_INT, '', false); + } +} + +/** + * Sd3rd_SkillHandler +**/ +class Sd3rd_SkillHandler extends Sd3rd_AbstractMasterHandler +{ + public /*** string ***/ $mTable = '{dirname}_skill'; + public /*** string ***/ $mPrimary = 'skill_id'; + public /*** string ***/ $mClass = 'Sd3rd_SkillObject'; + protected /*** string ***/ $_mIdColumn = 'skill_id'; + protected /*** string ***/ $_mValueColumn = 'skill_name'; + + /** + * Create new record at master data. + * + * @param mixed{} $values + * @param bool $force + * + * @return void + **/ + protected function _appendMaster(/*** mixed{} ***/ $values,/*** bool ***/ $force) + { + $element = $values['element']; + unset($values['element']); + parent::_appendMaster($values,$force); + $this->_setElement($this->getId($values[$this->_mValueColumn]),$element,$force); + } + + /** + * _setElement + * + * @param int $skillId + * @param int[] $element + * @param bool $force + * + * @return void + **/ + protected function _setElement(/*** int ***/ $skillId,/*** int[] ***/ $element,/*** bool ***/ $force = false) + { + static $handler = null; + if($handler === null) + { + $handler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::SKILL_ELEMENT); + } + $obj =& $handler->create(); + $obj->set('skill_id',$skillId); + foreach($element as $elementId) + { + $obj->set('element_id',$elementId); + $obj->setNew(); + if(!$handler->insert($obj,$force)) + { + throw new Sd3rd_QueryErrorException('Cannot insert skill element data.'); + } + } + } +} + +?> diff --git a/trust_path/modules/sd3rd/class/handler/SkillElement.class.php b/trust_path/modules/sd3rd/class/handler/SkillElement.class.php new file mode 100644 index 0000000..0c95da8 --- /dev/null +++ b/trust_path/modules/sd3rd/class/handler/SkillElement.class.php @@ -0,0 +1,56 @@ +initVar('skill_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('element_id', XOBJ_DTYPE_INT, '', false); + } +} + +/** + * Sd3rd_SkillElementHandler +**/ +class Sd3rd_SkillElementHandler extends XoopsObjectGenericHandler +{ + public /*** string ***/ $mTable = '{dirname}_skill_element'; + public /*** string ***/ $mPrimary = 'skill_id'; + public /*** string ***/ $mClass = 'Sd3rd_SkillElementObject'; + + /** + * __construct + * + * @param XoopsDatabase &$db + * @param string $dirname + * + * @return void + **/ + public function __construct(/*** XoopsDatabase ***/ &$db,/*** string ***/ $dirname) + { + $this->mTable = strtr($this->mTable,array('{dirname}' => $dirname)); + parent::__construct($db); + } +} + +?> diff --git a/trust_path/modules/sd3rd/class/handler/Target.class.php b/trust_path/modules/sd3rd/class/handler/Target.class.php new file mode 100644 index 0000000..7e20278 --- /dev/null +++ b/trust_path/modules/sd3rd/class/handler/Target.class.php @@ -0,0 +1,46 @@ +initVar('target_id', XOBJ_DTYPE_INT, '', false); + $this->initVar('target_name', XOBJ_DTYPE_STRING, '', false, 10); + } +} + +/** + * Sd3rd_TargetHandler +**/ +class Sd3rd_TargetHandler extends Sd3rd_AbstractMasterHandler +{ + public /*** string ***/ $mTable = '{dirname}_target'; + public /*** string ***/ $mPrimary = 'target_id'; + public /*** string ***/ $mClass = 'Sd3rd_TargetObject'; + protected /*** string ***/ $_mIdColumn = 'target_id'; + protected /*** string ***/ $_mValueColumn = 'target_name'; +} + +?> diff --git a/trust_path/modules/sd3rd/class/updater/UpdateUtils.class.php b/trust_path/modules/sd3rd/class/updater/UpdateUtils.class.php index d5458fd..07fed55 100644 --- a/trust_path/modules/sd3rd/class/updater/UpdateUtils.class.php +++ b/trust_path/modules/sd3rd/class/updater/UpdateUtils.class.php @@ -385,6 +385,24 @@ class Sd3rd_UpdateUtils throw new Sd3rd_QueryErrorException('Cannot delete objects.',array('type' => $type,'criteria' => $cri)); } } + + /** + * Cleanup related table. + * + * @param Enum $base + * @param Enum $target + * + * @return void + **/ + public static function cleanupTable(/*** Enum ***/ $base,/*** Enum ***/ $target) + { + $sql = 'DELETE `t` FROM `%1$s` AS t LEFT JOIN `%2$s` AS b USING (`%3$s`) WHERE `b`.`%3$s` IS NULL'; + $handler = self::getHandler($base); + if(!$handler->db->queryF(sprintf($sql,self::convertTableName($target),$handler->mTable,$handler->mPrimary))) + { + throw new Sd3rd_QueryErrorException('Cannot cleanup table.',array('base' => $base,'target' => $target)); + } + } #endregion } diff --git a/trust_path/modules/sd3rd/class/updater/dispose/Backup.class.php b/trust_path/modules/sd3rd/class/updater/dispose/Backup.class.php index 5a80d79..7282b1d 100644 --- a/trust_path/modules/sd3rd/class/updater/dispose/Backup.class.php +++ b/trust_path/modules/sd3rd/class/updater/dispose/Backup.class.php @@ -211,6 +211,10 @@ class Sd3rd_BackupDispose extends Sd3rd_AbstractFilter Sd3rd_HANDLER::ABILITY, Sd3rd_HANDLER::CHAR, Sd3rd_HANDLER::COSTUME, + Sd3rd_HANDLER::KIND, + Sd3rd_HANDLER::SKILL, + Sd3rd_HANDLER::SKILL_ELEMENT, + Sd3rd_HANDLER::TARGET, Sd3rd_HANDLER::UPDATE ); } diff --git a/trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php b/trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php new file mode 100644 index 0000000..546051d --- /dev/null +++ b/trust_path/modules/sd3rd/class/updater/execute/parser/char/WSkill_Data.class.php @@ -0,0 +1,54 @@ +_mHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::SKILL); + $this->_mTargetHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::TARGET); + $this->_mElementHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::SKILL_ELEMENT); + $this->_mKindHandler = Sd3rd_UpdateUtils::getHandler(Sd3rd_HANDLER::KIND); + } + + /** + * Latest main process. + * + * @param void + * + * @return void + **/ + public function executeLatest() + { + $data = Sd3rd_UpdateUtils::parseByRegex($this->_mSource,"/\('(?P[^']+)','(?P[^']*)','?(?P[-\d\.]+)'?,'(?P[^']+)','[\d,]+','?(?P[-\d,]+)'?,'(?P[^']+)',(?P\d+),(?P\d+)\)/"); + $targetId = $this->_mTargetHandler->getId($data['target'],array(),true); + $kindId = $this->_mKindHandler->getId($data['kind'],array(),true); + $id = $this->_mHandler->getId($data['name'],array('description' => $data['desc'],'range' => $data['range'],'target_id' => $targetId,'element' => explode(',',$data['element']),'kind_id' => $kindId,'tp' => $data['tp'],'register_time' => $this->_mUpdateTime),true); + } +} + +?> diff --git a/trust_path/modules/sd3rd/class/updater/prepare/RefreshTable.class.php b/trust_path/modules/sd3rd/class/updater/prepare/RefreshTable.class.php index b9f6712..765ad33 100644 --- a/trust_path/modules/sd3rd/class/updater/prepare/RefreshTable.class.php +++ b/trust_path/modules/sd3rd/class/updater/prepare/RefreshTable.class.php @@ -18,6 +18,7 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter protected /*** Enum[] ***/ $_mRegisterTableList = array(); protected /*** Enum[] ***/ $_mUpdateTableList = array(); protected /*** Enum[] ***/ $_mTruncateTableList = array(); + protected /*** Enum[][] ***/ $_mCleanupTableList = array(); /** * Get process priority. @@ -44,6 +45,7 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter $this->_refreshTableList($this->_mRegisterTableList,'DELETE FROM `%s` WHERE `register_time` >= %d'); $this->_refreshTableList($this->_mUpdateTableList,'DELETE FROM `%s` WHERE `update_time` >= %d'); $this->_refreshTableList($this->_mTruncateTableList,'TRUNCATE TABLE `%s`'); + array_walk($this->_mCleanupTableList,create_function('$v','call_user_func_array(array("Sd3rd_UpdateUtils","cleanupTable"),$v);')); } /** @@ -75,9 +77,10 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter **/ public function executeLatest() { - $this->_mRegisterTableList = array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME); + $this->_mRegisterTableList = array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME,Sd3rd_HANDLER::SKILL); $this->_mUpdateTableList = array(Sd3rd_HANDLER::UPDATE); $this->_mTruncateTableList = array(Sd3rd_HANDLER::CHAR); + $this->_mCleanupTableList = array(array(Sd3rd_HANDLER::SKILL,Sd3rd_HANDLER::SKILL_ELEMENT)); } /** @@ -93,6 +96,10 @@ class Sd3rd_RefreshTablePrepare extends Sd3rd_AbstractFilter Sd3rd_HANDLER::ABILITY, Sd3rd_HANDLER::CHAR, Sd3rd_HANDLER::COSTUME, + Sd3rd_HANDLER::KIND, + Sd3rd_HANDLER::SKILL, + Sd3rd_HANDLER::SKILL_ELEMENT, + Sd3rd_HANDLER::TARGET, Sd3rd_HANDLER::UPDATE ); } diff --git a/trust_path/modules/sd3rd/class/updater/prepare/SetupContext.class.php b/trust_path/modules/sd3rd/class/updater/prepare/SetupContext.class.php index 9c79b1f..a84839e 100644 --- a/trust_path/modules/sd3rd/class/updater/prepare/SetupContext.class.php +++ b/trust_path/modules/sd3rd/class/updater/prepare/SetupContext.class.php @@ -36,7 +36,7 @@ class Sd3rd_SetupContextPrepare extends Sd3rd_AbstractFilter **/ public function executeLatest() { - foreach(array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME) as $table) + foreach(array(Sd3rd_HANDLER::ABILITY,Sd3rd_HANDLER::COSTUME,Sd3rd_HANDLER::KIND,Sd3rd_HANDLER::SKILL,Sd3rd_HANDLER::TARGET) as $table) { Sd3rd_UpdateUtils::getHandler($table)->setupMaster(); } diff --git a/trust_path/modules/sd3rd/sql/mysql.sql b/trust_path/modules/sd3rd/sql/mysql.sql index 7585a23..1be39b9 100644 --- a/trust_path/modules/sd3rd/sql/mysql.sql +++ b/trust_path/modules/sd3rd/sql/mysql.sql @@ -42,6 +42,36 @@ CREATE TABLE `{prefix}_{dirname}_costume` ( PRIMARY KEY (`costume_id`) ) ENGINE=MyISAM; +CREATE TABLE `{prefix}_{dirname}_kind` ( + `kind_id` tinyint(3) unsigned NOT NULL auto_increment, + `kind_name` varchar(20) NOT NULL, + PRIMARY KEY (`kind_id`) +) ENGINE=MyISAM; + +CREATE TABLE `{prefix}_{dirname}_skill` ( + `skill_id` smallint(5) unsigned NOT NULL auto_increment, + `skill_name` varchar(50) NOT NULL, + `description` varchar(255) NOT NULL, + `range` tinyint(4) NOT NULL, + `target_id` tinyint(3) unsigned NOT NULL, + `kind_id` tinyint(3) unsigned NOT NULL, + `tp` tinyint(3) unsigned NOT NULL, + `register_time` int(10) unsigned NOT NULL, + PRIMARY KEY (`skill_id`) +) ENGINE=MyISAM; + +CREATE TABLE `{prefix}_{dirname}_skill_element` ( + `skill_id` smallint(5) unsigned NOT NULL, + `element_id` tinyint(4) NOT NULL, + PRIMARY KEY (`skill_id`,`element_id`) +) ENGINE=MyISAM; + +CREATE TABLE `{prefix}_{dirname}_target` ( + `target_id` tinyint(3) unsigned NOT NULL auto_increment, + `target_name` varchar(10) NOT NULL, + PRIMARY KEY (`target_id`) +) ENGINE=MyISAM; + CREATE TABLE `{prefix}_{dirname}_update` ( `update_time` int(10) unsigned NOT NULL, PRIMARY KEY (`update_time`) -- 2.11.0