<?php
abstract class ModuleWpf extends BaseObjectWpf {
protected $_controller = null;
protected $_helper = null;
protected $_code = '';
protected $_onAdmin = false;
protected $_typeID = 0;
protected $_type = '';
protected $_label = '';
/*
* ID in modules table
*/
protected $_id = 0;
/**
* If module is not in primary package - here wil be it's path
*/
protected $_externalDir = '';
protected $_externalPath = '';
protected $_isExternal = false;
public function __construct( $d) {
$this->setTypeID($d['type_id']);
$this->setCode($d['code']);
$this->setLabel($d['label']);
if (isset($d['id'])) {
$this->_setID($d['id']);
}
if (isset($d['ex_plug_dir']) && !empty($d['ex_plug_dir'])) {
$this->isExternal(true);
$this->setExternalDir( UtilsWpf::getExtModDir($d['ex_plug_dir']) );
$this->setExternalPath( UtilsWpf::getExtModPath($d['ex_plug_dir']) );
}
}
public function isExternal( $newVal = null ) {
if (is_null($newVal)) {
return $this->_isExternal;
}
$this->_isExternal = $newVal;
}
public function getModDir() {
if (empty($this->_externalDir)) {
return WPF_MODULES_DIR . $this->getCode() . DS;
} else {
return $this->_externalDir . $this->getCode() . DS;
}
}
public function getModPath() {
if (empty($this->_externalPath)) {
return WPF_MODULES_PATH . $this->getCode() . '/';
} else {
return $this->_externalPath . $this->getCode() . '/';
}
}
public function getModRealDir() {
return dirname(__FILE__) . DS;
}
public function setExternalDir( $dir ) {
$this->_externalDir = $dir;
}
public function getExternalDir() {
return $this->_externalDir;
}
public function setExternalPath( $path ) {
$this->_externalPath = $path;
}
public function getExternalPath() {
return $this->_externalPath;
}
/*
* Set ID for module, protected - to limit opportunity change this value
*/
protected function _setID( $id ) {
$this->_id = $id;
}
/**
* Get module ID from modules table in database
*
* @return int ID of module
*/
public function getID() {
return $this->_id;
}
public function setTypeID( $typeID ) {
$this->_typeID = $typeID;
}
public function getTypeID() {
return $this->_typeID;
}
public function setType( $type ) {
$this->_type = $type;
}
public function getType() {
return $this->_type;
}
public function getLabel() {
return $this->_label;
}
public function setLabel( $label ) {
$this->_label = $label;
}
public function init() {
}
public function exec( $task = '' ) {
if ($task) {
$controller = $this->getController();
if ($controller) {
return $controller->exec($task);
}
}
return null;
}
public function getController() {
if (!$this->_controller) {
$this->_createController();
}
return $this->_controller;
}
protected function _createController() {
if (!file_exists($this->getModDir() . 'controller.php')) {
return false; // EXCEPTION!!!
}
if ($this->_controller) {
return true;
}
if (file_exists($this->getModDir() . 'controller.php')) {
$className = '';
require $this->getModDir() . 'controller.php';
//if (importWpf($this->getModDir() . 'controller.php')) {
$className = toeGetClassNameWpf($this->getCode() . 'Controller');
if (!empty($className)) {
$this->_controller = new $className($this->getCode());
$this->_controller->init();
return true;
}
}
return false;
}
/**
* Method to call module helper if it exists
*
* @return class HelperWpf
*/
public function getHelper() {
if (!$this->_helper) {
$this->_createHelper();
}
return $this->_helper;
}
/**
* Method to create class of module helper
*
* @return class HelperWpf
*/
protected function _createHelper() {
if ($this->_helper) {
return true;
}
if (file_exists($this->getModDir() . 'helper.php')) {
$helper = $this->getCode() . 'Helper';
//importClassWpf($helper, $this->getModDir() . 'helper.php');
if (!class_exists($helper)) {
if (file_exists($this->getModDir() . 'helper.php')) {
require $this->getModDir() . 'helper.php';
}
}
if (class_exists($helper)) {
$this->_helper = new $helper($this->_code);
$this->_helper->init();
return true;
}
}
}
public function setCode( $code ) {
$this->_code = $code;
}
public function getCode() {
return $this->_code;
}
public function onAdmin() {
return $this->_onAdmin;
}
public function getModel( $modelName = '' ) {
return $this->getController()->getModel($modelName);
}
public function getView( $viewName = '' ) {
return $this->getController()->getView($viewName);
}
public function install() {
}
public function uninstall() {
}
public function activate() {
}
/**
* Returns the available tabs
*
* @return array of tab
*/
public function getTabs() {
return array();
}
public function getConstant( $name ) {
$thisClassRefl = new ReflectionObject($this);
return $thisClassRefl->getConstant($name);
}
public function loadAssets() { }
public function loadAdminAssets() { }
public function translate( $str ) {
return esc_html__($str, 'woo-product-filter');
}
}