409 lines
9.3 KiB
PHP
409 lines
9.3 KiB
PHP
<?php
|
|
Namespace Pagebuilderck;
|
|
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
// class CKController extends \JControllerLegacy {
|
|
class CKController {
|
|
|
|
protected $input;
|
|
|
|
protected $model;
|
|
|
|
protected $name;
|
|
|
|
protected $prefix;
|
|
|
|
protected $view;
|
|
|
|
protected $redirect;
|
|
|
|
protected static $instance;
|
|
|
|
protected static $views;
|
|
|
|
function __construct() {
|
|
$this->input = CKFof::getInput();
|
|
}
|
|
|
|
static function getInstance($prefix) {
|
|
if (is_object(self::$instance))
|
|
{
|
|
return self::$instance;
|
|
}
|
|
|
|
$basePath = PAGEBUILDERCK_BASE_PATH;
|
|
|
|
// Check for a controller.task command.
|
|
$input = CKFof::getInput();
|
|
$cmd = $input->get('task', '', 'cmd');
|
|
if (strpos($cmd, '.') !== false)
|
|
{
|
|
// Explode the controller.task command.
|
|
list ($name, $task) = explode('.', $cmd);
|
|
|
|
// Define the controller filename and path.
|
|
$file = self::createFileName('controller', array('name' => $name));
|
|
$path = $basePath . '/controllers/' . $file;
|
|
$backuppath = $basePath . '/controller/' . $file;
|
|
|
|
// Reset the task without the controller context.
|
|
$input->set('task', $task);
|
|
}
|
|
else
|
|
{
|
|
// Base controller.
|
|
$name = null;
|
|
|
|
// Define the controller filename and path.
|
|
$file = self::createFileName('controller', array('name' => 'controller'));
|
|
$path = $basePath . '/' . $file;
|
|
}
|
|
|
|
// Get the controller class name.
|
|
$class = ucfirst((string) $prefix) . 'Controller' . ucfirst((string) $name);
|
|
|
|
// Include the class if not present.
|
|
if (!class_exists($class))
|
|
{
|
|
// If the controller file path exists, include it.
|
|
if (file_exists($path))
|
|
{
|
|
require_once $path;
|
|
}
|
|
else
|
|
{
|
|
throw new \InvalidArgumentException(\JText::sprintf('ERROR_INVALID_CONTROLLER', $type, $format));
|
|
}
|
|
}
|
|
|
|
// Instantiate the class.
|
|
if (!class_exists($class))
|
|
{
|
|
throw new \InvalidArgumentException(\JText::sprintf('ERROR_INVALID_CONTROLLER_CLASS', $class));
|
|
}
|
|
|
|
// Instantiate the class, store it to the static container, and return it
|
|
return self::$instance = new $class();
|
|
}
|
|
|
|
protected static function createFileName($type, $parts = array())
|
|
{
|
|
$filename = '';
|
|
|
|
switch ($type)
|
|
{
|
|
case 'controller':
|
|
|
|
$filename = strtolower($parts['name'] . '.php');
|
|
break;
|
|
|
|
case 'view':
|
|
|
|
$filename = strtolower($parts['name'] . '/view.html.php');
|
|
break;
|
|
}
|
|
|
|
return $filename;
|
|
}
|
|
|
|
// public function getModel($base = '\Pagebuilderck\CKModel') {
|
|
// if (empty($this->model)) {
|
|
// $name = $this->getName();
|
|
// require_once(PAGEBUILDERCK_BASE_PATH . '/helpers/ckmodel.php');
|
|
// require_once(PAGEBUILDERCK_BASE_PATH . '/models/' . strtolower($name) . '.php');
|
|
// $className = ucfirst($base) . ucfirst($name);
|
|
// $this->model = new $className;
|
|
// }
|
|
// return $this->model;
|
|
// }
|
|
|
|
public function getView($name = '', $type = 'html', $prefix = '')
|
|
{
|
|
// @note We use self so we only access stuff in this class rather than in all classes.
|
|
if (!isset(self::$views))
|
|
{
|
|
self::$views = array();
|
|
}
|
|
|
|
if (empty($name))
|
|
{
|
|
$name = $this->getName();
|
|
}
|
|
|
|
if (empty($prefix))
|
|
{
|
|
$prefix = $this->getPrefix() . 'View';
|
|
}
|
|
|
|
if (empty(self::$views[$name][$type][$prefix]))
|
|
{
|
|
if ($view = $this->createView($name, $prefix))
|
|
{
|
|
self::$views[$name][$type][$prefix] = & $view;
|
|
}
|
|
else
|
|
{
|
|
throw new \Exception(\JText::sprintf('ERROR_VIEW_NOT_FOUND', $name, $type, $prefix), 404);
|
|
}
|
|
}
|
|
|
|
return self::$views[$name][$type][$prefix];
|
|
}
|
|
|
|
protected function createView($name, $prefix = '')
|
|
{
|
|
// Clean the view name
|
|
$viewName = preg_replace('/[^A-Z0-9_]/i', '', $name);
|
|
$classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
|
|
|
|
// Build the view class name
|
|
$viewClass = $classPrefix . ucfirst($viewName);
|
|
|
|
if (!class_exists($viewClass))
|
|
{
|
|
$path = PAGEBUILDERCK_BASE_PATH . '/views/' . $this->createFileName('view', array('name' => $viewName));
|
|
|
|
if (!file_exists($path))
|
|
{
|
|
return null;
|
|
}
|
|
|
|
require_once $path;
|
|
|
|
if (!class_exists($viewClass))
|
|
{
|
|
throw new \Exception(\JText::_('ERROR_VIEW_CLASS_NOT_FOUND : ' . $viewClass . ' - ' . $path), 500);
|
|
}
|
|
}
|
|
|
|
return new $viewClass();
|
|
}
|
|
|
|
public function display() {
|
|
$viewName = $this->input->get('view', $this->getName());
|
|
$viewLayout = $this->input->get('layout', 'default', 'string');
|
|
|
|
$view = $this->getView($viewName, 'html', '');
|
|
$view->setName($viewName);
|
|
|
|
// Get/Create the model
|
|
if ($model = $this->getModel($viewName))
|
|
{
|
|
// Push the model into the view (as default)
|
|
$view->setModel($model);
|
|
}
|
|
|
|
$view->display();
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getModel($name = '', $prefix = '', $config = array())
|
|
{
|
|
if (empty($name))
|
|
{
|
|
$name = ucfirst($this->getName());
|
|
}
|
|
|
|
if (empty($prefix))
|
|
{
|
|
$prefix = ucfirst($this->getPrefix());
|
|
}
|
|
|
|
$model = $this->createModel($name, $prefix, $config);
|
|
|
|
return $model;
|
|
}
|
|
|
|
protected function createModel($name, $prefix = '', $config = array())
|
|
{
|
|
// Clean the model name
|
|
$modelName = preg_replace('/[^A-Z0-9_]/i', '', $name);
|
|
$classPrefix = preg_replace('/[^A-Z0-9_]/i', '', $prefix);
|
|
|
|
return CKModel::getInstance($modelName, $classPrefix, $config);
|
|
}
|
|
|
|
|
|
public function execute($task) {
|
|
if (! $task) $task = 'display';
|
|
if (is_callable(array($this, $task))) {
|
|
return $this->$task();
|
|
}
|
|
else
|
|
{
|
|
throw new \Exception(\JText::sprintf('ERROR_TASK_NOT_FOUND', $task), 404);
|
|
}
|
|
|
|
return;
|
|
}
|
|
|
|
public function setName($name) {
|
|
$this->name = $name;
|
|
}
|
|
|
|
public function getName()
|
|
{
|
|
if (empty($this->name))
|
|
{
|
|
$r = null;
|
|
|
|
if (!preg_match('/Controller(.*)/i', get_class($this), $r))
|
|
{
|
|
throw new \Exception(\CKText::_('Error : Can not get controller name'), 500);
|
|
}
|
|
|
|
$this->name = strtolower($r[1]);
|
|
}
|
|
|
|
return $this->name;
|
|
}
|
|
|
|
public function getPrefix()
|
|
{
|
|
if (empty($this->prefix))
|
|
{
|
|
$r = null;
|
|
|
|
if (!preg_match('/(.*)Controller/i', get_class($this), $r))
|
|
{
|
|
throw new \Exception(\CKText::_('Error : Can not get controller name'), 500);
|
|
}
|
|
|
|
$this->prefix = strtolower($r[1]);
|
|
}
|
|
|
|
return $this->prefix;
|
|
}
|
|
|
|
public function add() {
|
|
return $this->edit(0);
|
|
}
|
|
|
|
public function edit($id = null, $appendUrl = '') {
|
|
$editIds = $this->input->get('cid', $id, 'array');
|
|
if (is_array($editIds)) {
|
|
$editId = (int) $editIds[0];
|
|
} else {
|
|
$editId = (int) $this->input->get('id', $id, 'int');
|
|
}
|
|
|
|
$model = $this->getModel($this->getName());
|
|
$model->checkout($editId);
|
|
|
|
// Redirect to the edit screen.
|
|
CKFof::redirect(PAGEBUILDERCK_BASE_URL . '&view=' . $this->getName() . '&layout=edit&id=' . $editId . $appendUrl);
|
|
}
|
|
|
|
public function copy() {
|
|
$editIds = $this->input->get('cid', null, 'array');
|
|
if (count($editIds)) {
|
|
$id = (int) $editIds[0];
|
|
} else {
|
|
$id = (int) $this->input->get('id', null, 'int');
|
|
}
|
|
|
|
$model = $this->getModel($this->getName());
|
|
if ($model->copy($id)) {
|
|
CKFof::enqueueMessage('Item copied with success');
|
|
} else {
|
|
CKFof::enqueueMessage('Error : Item not copied', 'error');
|
|
}
|
|
|
|
if (! $this->redirect) $this->redirect = PAGEBUILDERCK_ADMIN_GENERAL_URL;
|
|
|
|
// Redirect to the edit screen.
|
|
CKFof::redirect($this->redirect);
|
|
}
|
|
|
|
public function delete() {
|
|
$ids = $this->input->get('cid', null, 'array');
|
|
if (count($ids)) {
|
|
$ids = (array) $ids;
|
|
} else {
|
|
$ids = (array) $this->input->get('id', null, 'array');
|
|
}
|
|
$model = $this->getModel($this->getName());
|
|
foreach($ids as $id) {
|
|
$return = $model->delete($id);
|
|
if ($return) {
|
|
CKFof::enqueueMessage('Item deleted with success');
|
|
} else {
|
|
CKFof::enqueueMessage('Error : Item not deleted', 'error');
|
|
}
|
|
}
|
|
|
|
if (! $this->redirect) $this->redirect = PAGEBUILDERCK_ADMIN_GENERAL_URL;
|
|
|
|
// Redirect to the edit screen.
|
|
CKFof::redirect($this->redirect);
|
|
}
|
|
|
|
public function trash() {
|
|
$ids = $this->input->get('cid', null, 'array');
|
|
if (count($ids)) {
|
|
$ids = (array) $ids;
|
|
} else {
|
|
$ids = (array) $this->input->get('id', null, 'array');
|
|
}
|
|
$model = $this->getModel($this->getName());
|
|
foreach($ids as $id) {
|
|
$return = $model->trash($id);
|
|
if ($return) {
|
|
CKFof::enqueueMessage('CK_ITEM_TRASH_SUCCESS');
|
|
} else {
|
|
CKFof::enqueueMessage('CK_ITEM_TRASH_FAILED', 'error');
|
|
}
|
|
}
|
|
|
|
// Redirect to the edit screen.
|
|
CKFof::redirect(PAGEBUILDERCK_ADMIN_GENERAL_URL);
|
|
}
|
|
|
|
public function publish() {
|
|
$ids = $this->input->get('cid', null, 'array');
|
|
if (count($ids)) {
|
|
$ids = (array) $ids;
|
|
} else {
|
|
$ids = (array) $this->input->get('id', null, 'array');
|
|
}
|
|
if (! empty($ids)) {
|
|
$model = $this->getModel($this->getName());
|
|
foreach($ids as $id) {
|
|
if ($model->publish($id)) {
|
|
CKFof::enqueueMessage('Item published with success');
|
|
} else {
|
|
CKFof::enqueueMessage('Error : Item not published', 'error');
|
|
}
|
|
}
|
|
}
|
|
|
|
// Redirect to the edit screen.
|
|
CKFof::redirect(PAGEBUILDERCK_ADMIN_GENERAL_URL);
|
|
}
|
|
|
|
public function unpublish() {
|
|
$ids = $this->input->get('cid', null, 'array');var_dump($ids);
|
|
if (count($ids)) {
|
|
$ids = (array) $ids;
|
|
} else {
|
|
$ids = (array) $this->input->get('id', null, 'array');
|
|
}
|
|
// var_dump($ids);die;
|
|
if (! empty($ids)) {
|
|
$model = $this->getModel($this->getName());
|
|
foreach($ids as $id) {
|
|
if ($model->unpublish($id)) {
|
|
CKFof::enqueueMessage('Item unpublished with success');
|
|
} else {
|
|
CKFof::enqueueMessage('Error : Item not unpublished', 'error');
|
|
}
|
|
}
|
|
}
|
|
|
|
// Redirect to the edit screen.
|
|
CKFof::redirect(PAGEBUILDERCK_ADMIN_GENERAL_URL);
|
|
}
|
|
}
|