/** * Add pages to the controller. Note that the controller does not really care * the order in which the pages are added * * @param CRM_Core_StateMachine $stateMachine * @param \const|int $action the mode in which the state machine is operating * typically this will be add/view/edit */ public function addPages(&$stateMachine, $action = CRM_Core_Action::NONE) { $pages = $stateMachine->getPages(); foreach ($pages as $name => $value) { $className = CRM_Utils_Array::value('className', $value, $name); $title = CRM_Utils_Array::value('title', $value); $options = CRM_Utils_Array::value('options', $value); $stateName = CRM_Utils_String::getClassName($className); if (!empty($value['className'])) { $formName = $name; } else { $formName = CRM_Utils_String::getClassName($name); } $ext = CRM_Extension_System::singleton()->getMapper(); if ($ext->isExtensionClass($className)) { require_once $ext->classToPath($className); } else { require_once str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php'; } ${$stateName} = new $className($stateMachine->find($className), $action, 'post', $formName); if ($title) { ${$stateName}->setTitle($title); } if ($options) { ${$stateName}->setOptions($options); } if (property_exists(${$stateName}, 'urlPath') && isset($_GET[CRM_Core_Config::singleton()->userFrameworkURLVar])) { ${$stateName}->urlPath = explode('/', $_GET[CRM_Core_Config::singleton()->userFrameworkURLVar]); } $this->addPage(${$stateName}); $this->addAction($stateName, new HTML_QuickForm_Action_Direct()); //CRM-6342 -we need kill the reference here, //as we have deprecated reference object creation. unset(${$stateName}); } }