%PDF- %PDF-
| Direktori : /home1/lightco1/www/lightingrepublic.com.au/libraries/cegcore/libs/ |
| Current File : //home1/lightco1/www/lightingrepublic.com.au/libraries/cegcore/libs/gcontroller.php |
<?php
/**
* ChronoCMS version 1.0
* Copyright (c) 2012 ChronoCMS.com, All rights reserved.
* Author: (ChronoCMS.com Team)
* license: Please read LICENSE.txt
* Visit http://www.ChronoCMS.com for regular updates and information.
**/
namespace GCore\Libs;
/* @copyright:ChronoEngine.com @license:GPLv2 */defined('_JEXEC') or die('Restricted access');
defined("GCORE_SITE") or die;
class GController extends Controller {
function _settings($ext){
$settings_model = new \GCore\Admin\Models\Extension();
$settings = $settings_model->find('first', array('conditions' => array('name' => $ext)));
$this->data[Str::camilize($ext)] = array();
if(!empty($settings['Extension']['settings'])){
$this->data[Str::camilize($ext)] = $settings['Extension']['settings'];
}
}
function _save_settings($ext){
$settings_model = new \GCore\Admin\Models\Extension();
$extenion_name = Str::camilize($ext);
//check data exist
$settings = $settings_model->find('first', array('conditions' => array('name' => $ext)));
if(!empty($this->data[$extenion_name])){
if(!empty($settings['Extension']['settings'])){
$this->data[$extenion_name] = array_merge($settings['Extension']['settings'], $this->data[$extenion_name]);
return $settings_model->save(array('settings' => $this->data[$extenion_name]), array('conditions' => array('name' => $ext)));
}else{
return $settings_model->save(array('name' => $ext, 'enabled' => 1, 'settings' => $this->data[$extenion_name]));
}
}
return false;
}
//simple update function for binary/lists/trio updates
function _toggle(){
$model_class = !empty($this->update_model) ? $this->update_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$id = Request::data('gcb', null);
$field = Request::data('fld', null);
$value = Request::data('val', null);
$session = Base::getSession();
$result = false;
if(!is_null($field) AND !is_null($value) AND !is_null($id)){
$model_class->id = $id;
$result = $model_class->saveField($field, $value);
}
if($result !== false){
$session->setFlash('success', l_('UPDATE_SUCCESS'));
}else{
$session->setFlash('error', l_('UPDATE_ERROR'));
}
return $result;
}
function _save(){
$model_class = !empty($this->save_model) ? $this->save_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$session = Base::getSession();
$result = $model_class->save($this->data, array('validate' => true));
if($result !== false){
$session->setFlash('success', l_('SAVE_SUCCESS'));
}else{
$session->setFlash('error', l_('SAVE_ERROR'));
}
return $result;
}
function _save_list(){
$model_class = !empty($this->save_list_model) ? $this->save_list_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$gcbs = Request::data('gcb', array());
$session = Base::getSession();
$records = Request::data($model_class->alias, array());
foreach($gcbs as $gcb){
$result = $model_class->save($records[$gcb], array('conditions' => array($model_class->pkey => $gcb), 'validate' => false, 'callbacks' => false));
if($result !== false){
$session->setFlash('success', l_('SAVE_SUCCESS'));
}else{
$session->setFlash('error', l_('SAVE_ERROR'));
}
}
}
function _delete(){
$model_class = !empty($this->delete_model) ? $this->delete_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$gcbs = Request::data('gcb', array());
$session = Base::getSession();
$result = $model_class->deleteAll(array($model_class->pkey => $gcbs));
if($result === true){
$session->setFlash('success', l_('DELETE_SUCCESS'));
}elseif($result === false){
$session->setFlash('error', (string)$result.l_('DELETE_ERROR'));
}elseif(is_numeric($result)){
$session->setFlash('success', (string)$result.' '.l_('ITEMS_DELETED'));
}
return $result;
}
//triggred when the order link is clicked
/*
function order(){
$this->view = 'index';
$this->index();
}
function index(){
}
*/
function _sortable($orderfld = '', $orderdrc = 'ASC'){
$model_class = !empty($this->sort_model) ? $this->sort_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$prefix = '';
if(!empty($this->sort_prefix)){
$prefix = '.'.$this->sort_prefix;
}
//check if we should process pagination
if(in_array('\GCore\Helpers\Sorter', $this->helpers) OR in_array('\GCore\Helpers\Sorter', array_keys($this->helpers))){
$session = Base::getSession();
$k = array_search('\GCore\Helpers\Sorter', $this->helpers);
if($k !== false){
unset($this->helpers[$k]);
}
$field = Request::data('orderfld', $session->get(get_class($this).$prefix.'.'.$model_class->alias.'.orderfld', null));
$drc = Request::data('orderdrc', $session->get(get_class($this).$prefix.'.'.$model_class->alias.'.orderdrc', 'ASC'));
//filtering
if(!in_array(strtolower($drc), array('asc', 'desc'))){
$drc = '';
}
$field = str_replace(array(':', ' ', '"', "'", '('), '', $field);
$this->helpers['\GCore\Helpers\Sorter']['direction'] = $drc;
$this->helpers['\GCore\Helpers\Sorter']['active_field'] = $field;
if(!empty($field)){
$model_class->order_by = $field.' '.strtoupper($drc);
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.orderfld', $field);
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.orderdrc', $drc);
}elseif(empty($field) AND !empty($orderfld)){
$model_class->order_by = $orderfld.' '.strtoupper($orderdrc);
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.orderfld', $orderfld);
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.orderdrc', $orderdrc);
}
}
}
function _filter($columns = array()){
$model_class = !empty($this->filter_model) ? $this->filter_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$prefix = '';
if(!empty($this->filter_prefix)){
$prefix = '.'.$this->filter_prefix;
}
$session = Base::getSession();
$filters = Request::data('fltr', $session->get(get_class($this).$prefix.'.'.$model_class->alias.'.filters', array()));
$conditions = array();
if(!empty($filters)){
foreach($columns as $k => $column){
$fv = Arr::getVal($filters, explode('.', $column), null);
if(strlen($fv) > 0){
$conditions[$column] = $fv;
}
}
}
Request::set('fltr', $filters);
//set model conditions based on filters
$model_class->conditions = array_merge($conditions, $model_class->conditions);
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.filters', $filters);
}
function _search($columns = array(), $sfld = 'srch', $type = 'like'){
$model_class = !empty($this->search_model) ? $this->search_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return false;
}
}
$prefix = '';
if(!empty($this->search_prefix)){
$prefix = '.'.$this->search_prefix;
}
if(empty($sfld) OR empty($columns)){
return false;
}
$session = Base::getSession();
$search_string = Request::data($sfld, $session->get(get_class($this).$prefix.'.'.$model_class->alias.'.search.'.$sfld, null));
//check if we have any search fields
if(empty($search_string)){
$session->clear(get_class($this).$prefix.'.'.$model_class->alias.'.search.'.$sfld);
return false;
}
$keywords = $search_string;
if(is_string($search_string)){
$must_pat = '/("|\')(.*?)("|\')/i';
preg_match_all($must_pat, $search_string, $must_words);
if(!empty($must_words[2])){
$search_string_new = preg_replace($must_pat, '', $search_string);
$keywords = array_filter(explode(' ', $search_string_new));
$must_keywords = $must_words[2];
}else{
$keywords = explode(' ', $search_string);
}
}
$conditions = array();
//build the main model's conditions
if($type == 'like'){
foreach($keywords as $keyword){
foreach($columns as $k => $column){
$conditions['OR'][][$column.' LIKE'] = '%'.$keyword.'%';
}
}
if(!empty($must_keywords)){
foreach($must_keywords as $must_keyword){
foreach($columns as $k => $column){
//$conditions['AND'][][$column.' LIKE'] = '%'.$must_keyword.'%';
$conditions['OR'][][$column.' LIKE'] = '%'.$must_keyword.'%';
}
}
}
}else if($type == 'match'){
$columns = array_map(array($model_class->dbo, 'quoteName'), $columns);
//$fixed_search_string = '+'.str_replace(' ', ' +', trim($search_string));
//$conditions[] = ':MATCH ('.implode(',', $columns).') AGAINST ('.$model_class->dbo->quote($fixed_search_string).' IN BOOLEAN MODE)';
$conditions[] = ':MATCH ('.implode(',', $columns).') AGAINST ('.$model_class->dbo->quote($search_string).' IN BOOLEAN MODE)';
}
//set search fields values
Request::set($sfld, $search_string);
//set model conditions based on filters
$model_class->conditions = array_merge($conditions, $model_class->conditions);
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.search.'.$sfld, $search_string);
}
function _paginate(){
$model_class = !empty($this->paginate_model) ? $this->paginate_model : null;
if(empty($model_class)){
$alias = $this->get_main_model();
if(!empty($alias)){
$model_class = $this->{$alias};
}else{
return;
}
}
$prefix = '';
if(!empty($this->paginate_prefix)){
$prefix = '.'.$this->paginate_prefix;
}
//check if we should process pagination
if(!empty($model_class) AND in_array('\GCore\Helpers\Paginator', $this->helpers) OR in_array('\GCore\Helpers\Paginator', array_keys($this->helpers))){
$session = Base::getSession();
$k = array_search('\GCore\Helpers\Paginator', $this->helpers);
if($k !== false){
unset($this->helpers[$k]);
}
$page = Request::data(\GCore\Libs\Base::getConfig('page_url_param_name', 'page'), $session->get(get_class($this).$prefix.'.'.$model_class->alias.'.page', 1));
$page = ($page < 1) ? 1 : $page;
$active_limit = !empty($model_class->page_limit) ? $model_class->page_limit : Base::getConfig('list_limit', 30);
$limit = Request::data('limit', $session->get(get_class($this).$prefix.'.'.$model_class->alias.'.limit', $active_limit));
if($limit == 0 OR $limit > Base::getConfig('max_list_limit', 1000)){
$limit = Base::getConfig('max_list_limit', 1000);
}
if(!empty($model_class->limit)){
$limit = $model_class->limit;
}
if(!empty($model_class->page)){
$page = $model_class->page;
}
$offset = ($page - 1) * (int)$limit;
$total = !empty($this->paginate_total) ? $this->paginate_total : $model_class->find('count', array('cache' => true));
$bad_page = false;
if($offset >= $total){
//$page = ceil($total/$limit);
$bad_page = true;
$page = ceil($total/$limit);
$offset = $limit * ($page - 1);
}
$page = ($page < 1) ? 1 : $page;
$offset = ($offset < 0) ? 0 : $offset;
$this->helpers['\GCore\Helpers\Paginator']['limit'] = $limit;
$this->helpers['\GCore\Helpers\Paginator']['page'] = $page;
$this->helpers['\GCore\Helpers\Paginator']['offset'] = $offset;
$this->helpers['\GCore\Helpers\Paginator']['page_param'] = \GCore\Libs\Base::getConfig('page_url_param_name', 'page');
if(!$bad_page){
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.page', $page);
}
$session->set(get_class($this).$prefix.'.'.$model_class->alias.'.limit', $limit);
$this->helpers['\GCore\Helpers\Paginator']['total'] = $total;
//page (limit and offset) should be set after the count query
$model_class->page = $page;
$model_class->page_limit = $limit;
}
}
function _tags_search(){
$app = \GCore\Libs\App::getInstance();
$app->tvout = 'ajax';
$tag_term = Request::data('term');
$tags_model = new \GCore\Admin\Models\Tag();
$list = $tags_model->find('list', array('fields' => array('Tag.title'), 'conditions' => array('Tag.title LIKE' => '%'.$tag_term.'%')));
return json_encode(array_values($list));
}
function _permissions_setup($title, $path){
$id = \GCore\Admin\Models\Acl::getInstance()->field('id', array('aco' => $path, 'enabled' => 1));
if(!empty($id)){
$acl = \GCore\Admin\Models\Acl::getInstance()->load($id);
echo \GCore\Libs\App::call('admin', '', 'acls', 'edit', array('path' => $acl));
}else{
echo \GCore\Libs\App::call('admin', '', 'acls', 'edit', array('path' => array('Acl' => array('aco' => $path, 'title' => $title, 'enabled' => 1))));
}
}
}