Complex classes like TDMCreateFields often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes. You can also have a look at the cohesion graph to spot any un-connected, or weakly-connected components.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use TDMCreateFields, and based on these observations, apply Extract Interface, too.
| 1 | <?php |
||
| 34 | class TDMCreateFields extends XoopsObject |
||
| 35 | { |
||
| 36 | /** |
||
| 37 | * @var mixed |
||
| 38 | */ |
||
| 39 | private $tdmcreate; |
||
| 40 | |||
| 41 | /** |
||
| 42 | * Options. |
||
| 43 | */ |
||
| 44 | public $options = array( |
||
| 45 | 'parent', |
||
| 46 | 'admin', |
||
| 47 | 'inlist', |
||
| 48 | 'inform', |
||
| 49 | 'user', |
||
| 50 | 'thead', |
||
| 51 | 'tbody', |
||
| 52 | 'tfoot', |
||
| 53 | 'block', |
||
| 54 | 'search', |
||
| 55 | 'required', |
||
| 56 | ); |
||
| 57 | |||
| 58 | /* |
||
| 59 | * @public function constructor class |
||
| 60 | * @param null |
||
| 61 | */ |
||
| 62 | /** |
||
| 63 | * |
||
| 64 | */ |
||
| 65 | public function __construct() |
||
| 93 | |||
| 94 | /** |
||
| 95 | * @param string $method |
||
| 96 | * @param array $args |
||
| 97 | * |
||
| 98 | * @return mixed |
||
| 99 | */ |
||
| 100 | public function __call($method, $args) |
||
| 106 | |||
| 107 | /* |
||
| 108 | * @static function &getInstance |
||
| 109 | * |
||
| 110 | * @return TDMCreateFields |
||
| 111 | */ |
||
| 112 | public static function &getInstance() |
||
| 121 | |||
| 122 | /* |
||
| 123 | * @private function getHeaderForm |
||
| 124 | * |
||
| 125 | * @param bool $action |
||
| 126 | * @return TDMCreateThemeForm |
||
| 127 | */ |
||
| 128 | private function getHeaderForm($action = false) |
||
| 160 | |||
| 161 | /* |
||
| 162 | * @public function getFormNew |
||
| 163 | * |
||
| 164 | * @param null $fieldMid |
||
| 165 | * @param null $fieldTid |
||
| 166 | * @param null $fieldNumb |
||
| 167 | * @param null $fieldName |
||
| 168 | * @param bool $action |
||
| 169 | * @return mixed |
||
| 170 | */ |
||
| 171 | public function getFormNew($fieldMid = null, $fieldTid = null, $fieldNumb = null, $fieldName = null, $action = false) |
||
| 172 | { |
||
| 173 | // Header function class |
||
| 174 | $fieldsForm = self::getInstance(); |
||
| 175 | $form = $fieldsForm->getHeaderForm($action); |
||
| 176 | // Get handler tables |
||
| 177 | $tableObj = $this->tdmcreate->getHandler('tables'); // Changed by goffy |
||
| 178 | $tableAutoincrement = $tableObj->get($fieldTid)->getVar('table_autoincrement'); // Added by goffy |
||
| 179 | // Loop for fields number |
||
| 180 | $class = 'even'; |
||
| 181 | for ($i = 1; $i <= $fieldNumb; ++$i) { |
||
| 182 | $class = ($class == 'even') ? 'odd' : 'even'; |
||
| 183 | // Replaced creation of new line by new function - goffy |
||
| 184 | $this->getFormNewLine($form, $class, $i, $fieldMid, $fieldTid, $fieldName, $tableAutoincrement); |
||
| 185 | } |
||
| 186 | |||
| 187 | // Footer form |
||
| 188 | return $fieldsForm->getFooterForm($form); |
||
| 189 | } |
||
| 190 | |||
| 191 | /** |
||
| 192 | * @private function getFormNewLine |
||
| 193 | * |
||
| 194 | * @param $form |
||
| 195 | * @param $class |
||
| 196 | * @param $i |
||
| 197 | * @param $fieldMid |
||
| 198 | * @param $fieldTid |
||
| 199 | * @param $fName |
||
| 200 | * @param $tableAutoincrement |
||
| 201 | */ |
||
| 202 | private function getFormNewLine($form, $class, $i, $fieldMid, $fieldTid, $fName, $tableAutoincrement) |
||
| 322 | |||
| 323 | /* |
||
| 324 | * @public function getFormEdit |
||
| 325 | * |
||
| 326 | * @param null $fieldMid |
||
| 327 | * @param null $fieldTid |
||
| 328 | * @param bool $action |
||
| 329 | * @return mixed |
||
| 330 | */ |
||
| 331 | public function getFormEdit($fieldMid = null, $fieldTid = null, $action = false) |
||
| 332 | { |
||
| 333 | // Header function class |
||
| 334 | $fieldsForm = self::getInstance(); |
||
| 335 | $form = $fieldsForm->getHeaderForm($action); |
||
| 336 | // |
||
| 337 | $class = 'even'; |
||
| 338 | // Get the number of fields - goffy |
||
| 339 | $tablesHandler = &$this->tdmcreate->getHandler('tables'); |
||
| 340 | $tables = $tablesHandler->get($fieldTid); |
||
| 341 | $tableAutoincrement = $tables->getVar('table_autoincrement'); |
||
| 342 | $fieldNumb = $tables->getVar('table_nbfields'); |
||
| 343 | $fName = $tables->getVar('table_fieldname'); |
||
| 344 | |||
| 345 | // Get the list of fields |
||
| 346 | $criteria = new CriteriaCompo(); |
||
| 347 | $criteria->add(new Criteria('field_mid', $fieldMid)); |
||
| 348 | $criteria->add(new Criteria('field_tid', $fieldTid)); |
||
| 349 | $criteria->setSort('field_id'); //added by goffy |
||
| 350 | $fields = $this->tdmcreate->getHandler('fields')->getObjects($criteria); |
||
| 351 | unset($criteria); |
||
| 352 | $id = 1; |
||
| 353 | foreach ($fields as $field) { |
||
| 354 | $class = ($class == 'even') ? 'odd' : 'even'; |
||
| 355 | $fieldId = (int) ($field->getVar('field_id')); |
||
| 356 | if ($id > $fieldNumb) { // delete additional fields, if number of fields is reduced - goffy |
||
| 357 | $fieldsObj = &$this->tdmcreate->getHandler('fields')->get($fieldId); |
||
| 358 | $this->tdmcreate->getHandler('fields')->delete($fieldsObj, true); |
||
| 359 | } else { |
||
| 360 | // show field with settings |
||
| 361 | $form->addElement(new XoopsFormHidden('field_id['.$id.']', $fieldId)); |
||
| 362 | //$form->addElement(new XoopsFormHidden('field_mid', $fieldMid)); |
||
| 363 | //$form->addElement(new XoopsFormHidden('field_tid', $fieldTid)); |
||
| 364 | |||
| 365 | $form->addElement(new TDMCreateFormLabel('<tr class="'.$class.'">')); |
||
| 366 | // Index ID |
||
| 367 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$id.'</td>')); |
||
| 368 | // Field Name |
||
| 369 | $fieldName = new XoopsFormText(_AM_TDMCREATE_FIELD_NAME, 'field_name['.$id.']', 15, 255, $field->getVar('field_name')); |
||
| 370 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldName->render().'</td>')); |
||
| 371 | // Field Type |
||
| 372 | $fieldTypeSelect = new XoopsFormSelect(_AM_TDMCREATE_FIELD_TYPE, 'field_type['.$id.']', $field->getVar('field_type')); |
||
| 373 | $fieldTypeSelect->addOptionArray($this->tdmcreate->getHandler('fieldtype')->getList()); |
||
| 374 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldTypeSelect->render().'</td>')); |
||
| 375 | // Field Value |
||
| 376 | $fieldValue = new XoopsFormText(_AM_TDMCREATE_FIELD_VALUE, 'field_value['.$id.']', 5, 20, $field->getVar('field_value')); |
||
| 377 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldValue->render().'</td>')); |
||
| 378 | // Field Attributes |
||
| 379 | $fieldAttributesSelect = new XoopsFormSelect(_AM_TDMCREATE_FIELD_TYPE, 'field_attribute['.$id.']', $field->getVar('field_attribute')); |
||
| 380 | $fieldAttributesSelect->addOptionArray($this->tdmcreate->getHandler('fieldattributes')->getList()); |
||
| 381 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldAttributesSelect->render().'</td>')); |
||
| 382 | // Field Null |
||
| 383 | $fieldNullSelect = new XoopsFormSelect(_AM_TDMCREATE_FIELD_NULL, 'field_null['.$id.']', $field->getVar('field_null')); |
||
| 384 | $fieldNullSelect->addOptionArray($this->tdmcreate->getHandler('fieldnull')->getList()); |
||
| 385 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldNullSelect->render().'</td>')); |
||
| 386 | // Field Default |
||
| 387 | $fieldDefault = new XoopsFormText(_AM_TDMCREATE_FIELD_DEFAULT, 'field_default['.$id.']', 15, 25, $field->getVar('field_default')); |
||
| 388 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldDefault->render().'</td>')); |
||
| 389 | // Field Key |
||
| 390 | $fieldKeySelect = new XoopsFormSelect(_AM_TDMCREATE_FIELD_KEY, 'field_key['.$id.']', $field->getVar('field_key')); |
||
| 391 | $fieldKeySelect->addOptionArray($this->tdmcreate->getHandler('fieldkey')->getList()); |
||
| 392 | $form->addElement(new TDMCreateFormLabel('<td class="center">'.$fieldKeySelect->render().'</td>')); |
||
| 393 | // Field Void |
||
| 394 | if ((1 == $id) && (1 == $tableAutoincrement)) { |
||
| 395 | $form->addElement(new TDMCreateFormLabel('<td> </td></tr>')); |
||
| 396 | } else { |
||
| 397 | // Box header row |
||
| 398 | $parametersTray = new XoopsFormElementTray('', '<br />'); |
||
| 399 | // Field Elements |
||
| 400 | $criteriaElement = new CriteriaCompo(); |
||
| 401 | $criteriaElement->add(new Criteria('fieldelement_tid', 0)); |
||
| 402 | $criteriaTable = new CriteriaCompo(); |
||
| 403 | $criteriaTable->add(new Criteria('fieldelement_mid', $fieldMid)); |
||
| 404 | $fieldElementsSelect = new XoopsFormSelect(_AM_TDMCREATE_FIELD_ELEMENT_NAME, 'field_element['.$id.']', $field->getVar('field_element')); |
||
| 405 | $fieldElementsSelect->addOptionArray($this->tdmcreate->getHandler('fieldelements')->getList($criteriaElement)); |
||
| 406 | $fieldElementsSelect->addOptionArray($this->tdmcreate->getHandler('fieldelements')->getList($criteriaTable)); |
||
| 407 | unset($criteriaElement, $criteriaTable); |
||
| 408 | $parametersTray->addElement($fieldElementsSelect); |
||
| 409 | |||
| 410 | // Options |
||
| 411 | /*$moduleOption = $this->getOptions(); |
||
| 412 | $checkbox = new XoopsFormCheckbox(' ', 'fields_option[' . $id . ']', $moduleOption, '<br />'); |
||
| 413 | $checkbox->setDescription(_AM_TDMCREATE_OPTIONS_DESC); |
||
| 414 | foreach ($this->options as $option) { |
||
| 415 | $checkbox->addOption($option, self::getDefinedLanguage('_AM_TDMCREATE_FIELD_' . strtoupper($option))); |
||
| 416 | } |
||
| 417 | $parametersTray->addElement($checkbox);*/ |
||
| 418 | |||
| 419 | $checkFieldParent = new XoopsFormCheckBox(' ', 'field_parent['.$id.']', $field->getVar('field_parent')); |
||
| 420 | $checkFieldParent->addOption(1, _AM_TDMCREATE_FIELD_PARENT); |
||
| 421 | $parametersTray->addElement($checkFieldParent); |
||
| 422 | |||
| 423 | $checkFieldAdmin = new XoopsFormCheckBox(' ', 'field_admin['.$id.']', $field->getVar('field_admin')); |
||
| 424 | $checkFieldAdmin->addOption(1, _AM_TDMCREATE_FIELD_ADMIN); |
||
| 425 | $parametersTray->addElement($checkFieldAdmin); |
||
| 426 | |||
| 427 | $checkFieldInList = new XoopsFormCheckBox(' ', 'field_inlist['.$id.']', $field->getVar('field_inlist')); |
||
| 428 | $checkFieldInList->addOption(1, _AM_TDMCREATE_FIELD_INLIST); |
||
| 429 | $parametersTray->addElement($checkFieldInList); |
||
| 430 | |||
| 431 | $checkFieldInForm = new XoopsFormCheckBox(' ', 'field_inform['.$id.']', $field->getVar('field_inform')); |
||
| 432 | $checkFieldInForm->addOption(1, _AM_TDMCREATE_FIELD_INFORM); |
||
| 433 | $parametersTray->addElement($checkFieldInForm); |
||
| 434 | |||
| 435 | $checkFieldUser = new XoopsFormCheckBox(' ', 'field_user['.$id.']', $field->getVar('field_user')); |
||
| 436 | $checkFieldUser->addOption(1, _AM_TDMCREATE_FIELD_USER); |
||
| 437 | $parametersTray->addElement($checkFieldUser); |
||
| 438 | |||
| 439 | $checkFieldThead = new XoopsFormCheckBox(' ', 'field_thead['.$id.']', $field->getVar('field_thead')); |
||
| 440 | $checkFieldThead->addOption(1, _AM_TDMCREATE_FIELD_THEAD); |
||
| 441 | $parametersTray->addElement($checkFieldThead); |
||
| 442 | |||
| 443 | $checkFieldTbody = new XoopsFormCheckBox(' ', 'field_tbody['.$id.']', $field->getVar('field_tbody')); |
||
| 444 | $checkFieldTbody->addOption(1, _AM_TDMCREATE_FIELD_TBODY); |
||
| 445 | $parametersTray->addElement($checkFieldTbody); |
||
| 446 | |||
| 447 | $checkFieldTfoot = new XoopsFormCheckBox(' ', 'field_tfoot['.$id.']', $field->getVar('field_tfoot')); |
||
| 448 | $checkFieldTfoot->addOption(1, _AM_TDMCREATE_FIELD_TFOOT); |
||
| 449 | $parametersTray->addElement($checkFieldTfoot); |
||
| 450 | |||
| 451 | $checkFieldBlock = new XoopsFormCheckBox('', 'field_block['.$id.']', $field->getVar('field_block')); |
||
| 452 | $checkFieldBlock->addOption(1, _AM_TDMCREATE_FIELD_BLOCK); |
||
| 453 | $parametersTray->addElement($checkFieldBlock); |
||
| 454 | |||
| 455 | $check_field_search = new XoopsFormCheckBox(' ', 'field_search['.$id.']', $field->getVar('field_search')); |
||
| 456 | $check_field_search->addOption(1, _AM_TDMCREATE_FIELD_SEARCH); |
||
| 457 | $parametersTray->addElement($check_field_search); |
||
| 458 | |||
| 459 | $checkFieldRequired = new XoopsFormCheckBox(' ', 'field_required['.$id.']', $field->getVar('field_required')); |
||
| 460 | $checkFieldRequired->addOption(1, _AM_TDMCREATE_FIELD_REQUIRED); |
||
| 461 | $parametersTray->addElement($checkFieldRequired); |
||
| 462 | |||
| 463 | $fieldMain = (1 == $field->getVar('field_main')) ? $id : 1; |
||
| 464 | $checkFieldMain = new TDMCreateFormRadio('', 'field_main', $fieldMain); |
||
| 465 | $checkFieldMain->addOption($id, _AM_TDMCREATE_FIELD_MAIN); |
||
| 466 | $parametersTray->addElement($checkFieldMain); |
||
| 467 | // |
||
| 468 | $form->addElement(new TDMCreateFormLabel('<td><div class="portlet"><div class="portlet-header">'._AM_TDMCREATE_FIELD_PARAMETERS_LIST.'</div><div class="portlet-content">'.$parametersTray->render().'</div></div></td></tr>')); |
||
| 469 | } |
||
| 470 | } |
||
| 471 | ++$id; |
||
| 472 | } |
||
| 473 | // If you change number fields in tables, |
||
| 474 | // adding missing fields or delete unnecessary fields |
||
| 475 | // By goffy |
||
| 476 | for ($i = $id; $i <= $fieldNumb; ++$i) { |
||
| 477 | $class = ($class == 'even') ? 'odd' : 'even'; |
||
| 478 | $this->getFormNewLine($form, $class, $i, $fieldMid, $fieldTid, $fName, $tableAutoincrement); |
||
| 479 | } |
||
| 480 | unset($id); |
||
| 481 | |||
| 482 | // Footer form |
||
| 483 | return $fieldsForm->getFooterForm($form); |
||
| 484 | } |
||
| 485 | |||
| 486 | /* |
||
| 487 | * @private function getFooterForm |
||
| 488 | * @param null |
||
| 489 | */ |
||
| 490 | /** |
||
| 491 | * @param $form |
||
| 492 | * |
||
| 493 | * @return mixed |
||
| 494 | */ |
||
| 495 | private function getFooterForm($form) |
||
| 508 | |||
| 509 | /** |
||
| 510 | * Get Values. |
||
| 511 | */ |
||
| 512 | public function getValuesFields($keys = null, $format = null, $maxDepth = null) |
||
| 532 | |||
| 533 | /** |
||
| 534 | * Get Options. |
||
| 535 | */ |
||
| 536 | /** |
||
| 537 | * @param $key |
||
| 538 | * |
||
| 539 | * @return string |
||
| 540 | */ |
||
| 541 | public function getOptionsFields() |
||
| 542 | { |
||
| 543 | $retFields = array(); |
||
| 544 | foreach ($this->options as $option) { |
||
| 545 | if ($this->getVar('field_'.$option) == 1) { |
||
| 546 | array_push($retFields, $option); |
||
| 547 | } |
||
| 548 | } |
||
| 549 | |||
| 550 | return $retFields; |
||
| 551 | } |
||
| 552 | |||
| 553 | /** |
||
| 554 | * Get Defined Language. |
||
| 555 | */ |
||
| 556 | /** |
||
| 557 | * @param $lang |
||
| 558 | * |
||
| 559 | * @return string |
||
| 560 | */ |
||
| 561 | private static function getDefinedLanguage($lang) |
||
| 569 | } |
||
| 570 | |||
| 571 | /* |
||
| 572 | * @Class TDMCreateFieldsHandler |
||
| 706 |
The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.
The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.
To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.