Example #1
0
 function execute(&$form, $action_id)
 {
     $config = $form->actions_config[$action_id];
     $config = new \GCore\Libs\Parameter($config);
     $owner_id = $config->get('owner_id_index', '') ? \GCore\Libs\Request::data($config->get('owner_id_index', ''), null) : null;
     if (\GCore\Libs\Authorize::check_rules($config->get('access', array()), array(), $owner_id)) {
         $this->events['success'] = 1;
         return true;
     } else {
         $this->events['fail'] = 1;
         return false;
     }
 }
Example #2
0
 function _initialize()
 {
     //$this->area = 'front';
     $session = \GCore\Libs\Base::getSession();
     if ($this->get('ccname', null)) {
         $this->data['ccname'] = $this->get('ccname');
     }
     if (!empty($this->data['ccname'])) {
         $this->connection = $connection = $this->Connection->find('first', array('conditions' => array('title' => $this->data['ccname'], 'published' => 1)));
         if (!empty($connection['Connection']['extras']['models']['name'][1]) and !empty($connection['Connection']['extras']['models']['tablename'][1])) {
             $dbo_config = array();
             if (!empty($connection['Connection']['extras']['ndb']['enabled'])) {
                 $dbo_config = array('type' => $connection['Connection']['extras']['ndb']['driver'], 'host' => $connection['Connection']['extras']['ndb']['host'], 'name' => $connection['Connection']['extras']['ndb']['database'], 'user' => $connection['Connection']['extras']['ndb']['user'], 'pass' => $connection['Connection']['extras']['ndb']['password'], 'prefix' => $connection['Connection']['extras']['ndb']['prefix']);
             }
             //primary model available
             \GCore\Libs\GModel::generateModel(trim($connection['Connection']['extras']['models']['name'][1]), array('tablename' => trim($connection['Connection']['extras']['models']['tablename'][1]), 'dbo_config' => $dbo_config));
             $pmodel = '\\GCore\\Models\\' . $connection['Connection']['extras']['models']['name'][1];
             $this->pmodel = $pmodel::getInstance();
             $this->connection_models[$this->pmodel->alias] = $this->pmodel;
             //find secondary models if available
             foreach ($this->connection['Connection']['extras']['models']['name'] as $k => $name) {
                 if ($k != 1) {
                     $name = trim($this->connection['Connection']['extras']['models']['name'][$k]);
                     $tablename = trim($this->connection['Connection']['extras']['models']['tablename'][$k]);
                     $pkey = !empty($this->connection['Connection']['extras']['models']['pkey'][$k]) ? trim($this->connection['Connection']['extras']['models']['pkey'][$k]) : NULL;
                     if (!empty($name) and !empty($tablename)) {
                         \GCore\Libs\GModel::generateModel($name, array('tablename' => $tablename, 'pkey' => $pkey, 'dbo_config' => $dbo_config));
                         //setup relation to primary if exists
                         $relation = $this->connection['Connection']['extras']['models']['relation'][$k];
                         if (!empty($relation)) {
                             $relation_settings = array('className' => '\\GCore\\Models\\' . $name);
                             if (!empty($this->connection['Connection']['extras']['models']['foreignKey'][$k])) {
                                 $relation_settings['foreignKey'] = trim($this->connection['Connection']['extras']['models']['foreignKey'][$k]);
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['assoc_save'][$k])) {
                                 $relation_settings['save_on_save'] = true;
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['assoc_delete'][$k])) {
                                 $relation_settings['delete_on_delete'] = true;
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['conditions'][$k])) {
                                 $conditions = eval('?>' . $this->connection['Connection']['extras']['models']['conditions'][$k]);
                                 $relation_settings['conditions'] = is_array($conditions) ? $conditions : array();
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['join_conditions'][$k])) {
                                 $join_conditions = eval('?>' . $this->connection['Connection']['extras']['models']['join_conditions'][$k]);
                                 $relation_settings['join_conditions'] = is_array($join_conditions) ? $join_conditions : array();
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['join_type'][$k])) {
                                 $relation_settings['type'] = $this->connection['Connection']['extras']['models']['join_type'][$k];
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['fields'][$k])) {
                                 $relation_settings['fields'] = $this->_process_fields_list($this->connection['Connection']['extras']['models']['fields'][$k]);
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['order'][$k])) {
                                 $relation_settings['order'] = $this->_process_fields_list($this->connection['Connection']['extras']['models']['order'][$k]);
                             }
                             if (!empty($this->connection['Connection']['extras']['models']['group'][$k])) {
                                 $relation_settings['group'] = $this->_process_fields_list($this->connection['Connection']['extras']['models']['group'][$k]);
                             }
                             if (empty($this->connection['Connection']['extras']['models']['associated_model'][$k])) {
                                 $this->pmodel->bindModels($relation, array($name => $relation_settings));
                                 $this->connection_models[$name] = $this->pmodel->{$name};
                             } else {
                                 $associated_model = $this->connection['Connection']['extras']['models']['associated_model'][$k];
                                 $associated_model_class = '\\GCore\\Models\\' . $this->connection['Connection']['extras']['models']['associated_model'][$k];
                                 if ($associated_model == $this->pmodel->alias) {
                                     $this->pmodel->bindModels($relation, array($name => $relation_settings));
                                     $this->connection_models[$name] = $this->pmodel->{$name};
                                 } else {
                                     $check_model = $this->pmodel;
                                     check_again:
                                     if (in_array($associated_model, array_keys($check_model->associated_models))) {
                                         $check_model->{$associated_model}->bindModels($relation, array($name => $relation_settings));
                                         $this->connection_models[$name] = $check_model->{$associated_model}->{$name};
                                     } else {
                                         $sub_models = array_keys($check_model->associated_models);
                                         foreach ($sub_models as $sub_model) {
                                             $check_model = $sub_model;
                                             goto check_again;
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
         } else {
             $session->setFlash('error', l_('CONN_CONNECTION_NOT_FOUND'));
             return false;
         }
     } else {
         $session->setFlash('error', l_('CONN_NO_CONNECTION_NAME'));
         return false;
     }
     //check permissions
     if (!empty($this->connection['Connection']['extras'][$this->area]['permissions'][$this->action])) {
         $gcb = $this->Request->data('gcb', null);
         $owner_id = null;
         if ($this->connection['Connection']['extras'][$this->area]['permissions'][$this->action]['owner'] == 1) {
             if (!empty($gcb) and !empty($this->connection['Connection']['extras'][$this->area]['permissions_conf']['owner_id_column'])) {
                 $user_id_column = $this->connection['Connection']['extras'][$this->area]['permissions_conf']['owner_id_column'];
                 $records = $this->pmodel->find('all', array('recursive' => -1, 'fields' => array($this->pmodel->pkey, $user_id_column), 'conditions' => array($this->pmodel->pkey => $gcb)));
                 if (strpos($user_id_column, '.') === false) {
                     $user_id_column = $this->pmodel->alias . '.' . $user_id_column;
                 }
                 $owners = \GCore\Libs\Arr::getVal($records, explode('.', '[n].' . $user_id_column));
                 $owners = array_values(array_unique($owners));
                 if (count($owners) > 1) {
                     goto check_all;
                 } else {
                     $owner_id = $owners[0];
                 }
             }
         }
         check_all:
         if (!\GCore\Libs\Authorize::check_rules($this->connection['Connection']['extras'][$this->area]['permissions'][$this->action], \GCore\Libs\Authenticate::get_user_groups(), $owner_id)) {
             $session->setFlash('error', l_('CONNECTIVITY_ACCESS_DENIED'));
             return false;
         }
     }
     //load plugins
     if (!empty($this->pmodel)) {
         if (!empty($this->connection['Connection']['extras'][$this->area]['display']['page_limit']) and is_numeric($this->connection['Connection']['extras'][$this->area]['display']['page_limit'])) {
             $this->pmodel->page_limit = (int) $this->connection['Connection']['extras'][$this->area]['display']['page_limit'];
         }
         //run plugins
         if (!empty($this->connection['Connection']['extras']['plugins'])) {
             //sort plugins execution
             $plugins_priority = array();
             foreach ($this->connection['Connection']['extras']['plugins'] as $plg => $plg_data) {
                 $plugins_priority[$plg] = \GCore\Libs\Arr::getVal($plg_data, array('priority'), 0);
             }
             array_multisort($plugins_priority, SORT_DESC, $this->connection['Connection']['extras']['plugins']);
             foreach ($this->connection['Connection']['extras']['plugins'] as $plugin => $plugin_data) {
                 if (!empty($plugin_data['enabled'])) {
                     $this->plugins[] = $plugin;
                     if (class_exists('\\GCore\\Admin\\Extensions\\Chronoconnectivity\\Plugins\\' . \GCore\Libs\Str::camilize($plugin) . '\\' . \GCore\Libs\Str::camilize($plugin . '_helper'))) {
                         $plugin_helper = '\\GCore\\Admin\\Extensions\\Chronoconnectivity\\Plugins\\' . \GCore\Libs\Str::camilize($plugin) . '\\' . \GCore\Libs\Str::camilize($plugin . '_helper');
                         $this->helpers[$plugin_helper]['connection'] = $this->connection;
                         $this->helpers[$plugin_helper]['model'] = $this->pmodel;
                     }
                 }
             }
         }
         $this->helpers['\\GCore\\Admin\\Extensions\\Chronoconnectivity\\Helpers\\Plugin']['plugins'] = $this->plugins;
         $this->_process_plugins('on_initialize', $this);
     }
 }