setCode($code); $this->_defaultView = $this->getCode(); } public function init() { /*load model and other preload data goes here*/ } protected function _onBeforeInit() { } protected function _onAfterInit() { } public function setCode( $code ) { $this->_code = $code; } public function getCode() { return $this->_code; } public function isActionAllowed( $task ) { if ( ! is_string( $task ) || '' === $task || '_' === substr( $task, 0, 1 ) ) { return false; } return method_exists( $this, $task ); } public function exec( $task = '' ) { if ( $this->isActionAllowed( $task ) && method_exists( $this, $task ) ) { $this->_task = $task; //For multicontrollers module version - who know, maybe that's will be?)) return $this->$task(); } return null; } public function getView( $name = '' ) { if (empty($name)) { $name = $this->getCode(); } if (!isset($this->_views[$name])) { $this->_views[$name] = $this->_createView($name); } return $this->_views[$name]; } public function getModel( $name = '' ) { if (!$name) { $name = $this->_code; } if (!isset($this->_models[$name])) { $this->_models[$name] = $this->_createModel($name); } return $this->_models[$name]; } protected function _createModel( $name = '' ) { if (empty($name)) { $name = $this->getCode(); } $parentModule = WaicFrame::_()->getModule( $this->getCode() ); $className = ''; if (waicImport($parentModule->getModDir() . 'models' . WAIC_DS . $name . '.php')) { $className = waicToeGetClassName($name . 'Model'); } if ($className) { $model = new $className(); $model->setCode( $this->getCode() ); return $model; } return null; } protected function _createView( $name = '' ) { if (empty($name)) { $name = $this->getCode(); } $parentModule = WaicFrame::_()->getModule( $this->getCode() ); $className = ''; if (waicImport($parentModule->getModDir() . 'views' . WAIC_DS . $name . '.php')) { $className = waicToeGetClassName($name . 'View'); } if ($className) { $view = new $className(); $view->setCode( $this->getCode() ); return $view; } return null; } public function display( $viewName = '' ) { $view = $this->getView($viewName); if (null === $view) { $view = $this->getView(); //Get default view } if ($view) { $view->display(); } } public function __call( $name, $arguments ) { $model = $this->getModel(); if (method_exists($model, $name)) { return $model->$name($arguments[0]); } else { return false; } } /** * Retrive permissions for controller methods if exist. * If need - should be redefined in each controller where it required. * * @return array with permissions * Can be used on of sub-array - WAIC_METHODS or WAIC_USERLEVELS */ public function getPermissions() { return array(); } /** * Methods that require nonce to be generated * If need - should be redefined in each controller where it required. * * @return array */ public function getNoncedMethods() { return array(); } public function getAjaxActions() { return array(); } public function allowNoprivAjax( $action ) { return is_string( $action ) && in_array( $action, $this->getAjaxActions(), true ); } protected function _getAdminAjaxCap() { $cap = 'manage_options'; $adminMenu = WaicFrame::_()->getModule('adminmenu'); if ($adminMenu && method_exists($adminMenu, 'getMainCap')) { $mainCap = $adminMenu->getMainCap(); if (!empty($mainCap)) { $cap = $mainCap; } } return $cap; } protected function _ajaxSecurityError( $message ) { if (function_exists('status_header')) { status_header(403); } $res = new WaicResponse(); $res->pushError($message); return $res->ajaxExec(true); } protected function _checkAdminAjaxSecurity() { if (false === check_ajax_referer('waic-nonce', 'waicNonce', false)) { return $this->_ajaxSecurityError(esc_html__('Security check failed', 'ai-copilot-content-generator')); } if (!current_user_can($this->_getAdminAjaxCap())) { return $this->_ajaxSecurityError(esc_html__('You have no permissions to view this page', 'ai-copilot-content-generator')); } return true; } public function getModule() { return WaicFrame::_()->getModule( $this->getCode() ); } protected function _prepareTextLikeSearch( $val ) { return ''; // Should be re-defined for each type } protected function _prepareModelBeforeListSelect( $model ) { return $model->setSelectFields('*'); } public function removeGroup() { if (true !== $this->_checkAdminAjaxSecurity()) { return; } $res = new WaicResponse(); if ($this->getModel()->removeGroup(WaicReq::getVar('ids', 'post'))) { $res->addMessage(esc_html__('Done', 'ai-copilot-content-generator')); } else { $res->pushError($this->getModel()->getErrors()); } $res->ajaxExec(); } public function clear() { if (true !== $this->_checkAdminAjaxSecurity()) { return; } $res = new WaicResponse(); if ($this->getModel()->clear()) { $res->addMessage(esc_html__('Done', 'ai-copilot-content-generator')); } else { $res->pushError($this->getModel()->getErrors()); } $res->ajaxExec(); } protected function _prepareListForTbl( $data ) { return $data; } protected function _prepareSearchField( $searchField ) { return $searchField; } protected function _prepareSearchString( $searchString ) { return $searchString; } protected function _prepareSortOrder( $sortOrder ) { return $sortOrder; } }