public static function createMethod(XenForo_Controller $controller, $method, $body = '', $signature = '') { $class = self::getClass($controller); $reflectionClass = new ThemeHouse_Reflection_Class($class); if ($reflectionClass->hasMethod($method)) { $reflectionMethod = $reflectionClass->getMethod($method); // TODO update signature // $reflectionMethod->setSignature($signature); $reflectionMethod->setMethodBody($body); } else { $reflectionClass->addMethod($method, $body, $signature); } return $method; }
protected function _getMethodDeleteResponse($class, $prefix) { $reflectionClass = new ThemeHouse_Reflection_Class(get_class($class)); $method = $this->_input->filterSingle('method', XenForo_Input::STRING); if (!$reflectionClass->hasMethod($method)) { return $this->responseNoPermission(); } if ($this->isConfirmedPost()) { $reflectionClass->deleteMethod($method); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::SUCCESS, XenForo_Link::buildAdminLink($prefix, array('class' => get_class($class)))); } else { $viewParams = array('class' => array('class' => get_class($class)), 'method' => $method, 'prefix' => $prefix); return $this->responseView('ThemeHouse_Reflection_ViewAdmin_Method_Delete', 'th_method_delete_reflection', $viewParams); } }
public function actionSaveField() { $input = $this->_input->filter(array('class' => XenForo_Input::STRING, 'table' => XenForo_Input::STRING, 'name' => XenForo_Input::STRING, 'data_type' => XenForo_Input::STRING, 'default' => XenForo_Input::STRING, 'auto_increment' => XenForo_Input::BOOLEAN)); $dataWriter = XenForo_DataWriter::create($input['class']); if (empty($dataWriter) || !$dataWriter instanceof XenForo_DataWriter) { return $this->responseNoPermission(); } $reflectionClass = new ThemeHouse_Reflection_Class($input['class']); if ($reflectionClass->hasMethod('_getFields')) { /* @var $reflectionMethod ThemeHouse_DataWriters_Reflection_Method_DataWriter_GetFields */ $reflectionMethod = $reflectionClass->getMethod('_getFields', 'ThemeHouse_DataWriters_Reflection_Method_DataWriter_GetFields'); $reflectionMethod->addField($input['table'], $input['name'], $input['data_type'], $input['default'], $input['auto_increment']); } else { // TODO add _getFields method } $addOnId = ThemeHouse_DataWriters_Helper_DataWriter::getAddOnIdFromDataWriterClass($input['class']); $installControllerClass = $addOnId . '_Install_Controller'; /* @var $reflectionClass ThemeHouse_DataWriters_Reflection_Class_InstallController */ $reflectionClass = new ThemeHouse_DataWriters_Reflection_Class_InstallController($installControllerClass); if ($reflectionClass->hasOveridden('_getTables')) { /* @var $reflectionMethod ThemeHouse_DataWriters_Reflection_Method_InstallController_GetTables */ $reflectionMethod = $reflectionClass->getMethod('_getTables', 'ThemeHouse_DataWriters_Reflection_Method_InstallController_GetTables'); $reflectionMethod->addColumn($input['table'], $input['name'], $input['data_type'], $input['default'], $input['auto_increment']); } else { $reflectionClass->addGetTablesMethod($input['table'], $input['name'], $input['data_type'], $input['default'], $input['auto_increment']); } // TODO add column to database? $dataWriter = array('class' => $input['class']); return $this->responseRedirect(XenForo_ControllerResponse_Redirect::RESOURCE_CREATED, XenForo_Link::buildAdminLink('data-writers/edit-method', $dataWriter, array('method' => '_getFields'))); }