/**
  * loadAsset
  * Load CSS & JS
  * @param type $widget
  * @param type $option
  */
 public function loadAsset($widget = 'jqueryui', $option = array('inline' => false))
 {
     $asset_path = $this->settings['asset_path'];
     $assets = Set::normalize($this->settings['runtimes'], false);
     // gears,html5,flash,browserplus,silverlight,html4
     echo $this->Html->script($asset_path . 'plupload', array('inline' => $option['inline']));
     if (count($assets) > 2) {
         echo $this->Html->script($asset_path . "plupload.full.js", array('inline' => $option['inline']));
     } else {
         foreach ($assets as $asset) {
             echo $this->Html->script($asset_path . "plupload.{$asset}", array('inline' => $option['inline']));
         }
     }
     if (!empty($this->settings['locale'])) {
         echo $this->Html->script($asset_path . 'i18n/' . $this->settings['locale'], array('inline' => $option['inline']));
     }
     switch ($widget) {
         case 'jquery':
             echo $this->Html->script($asset_path . 'jquery.plupload.queue/jquery.plupload.queue', array('inline' => false));
             echo $this->Html->css($asset_path . 'jquery.plupload.queue/css/jquery.plupload.queue', null, array('inline' => false));
             break;
         case 'jqueryui':
         default:
             echo $this->Html->script($asset_path . 'jquery.ui.plupload/jquery.ui.plupload', array('inline' => false));
             echo $this->Html->css($asset_path . 'jquery.ui.plupload/css/jquery.ui.plupload', null, array('inline' => false));
             break;
     }
 }
示例#2
0
 public function cakeArrayToArray($data, $options = array())
 {
     $options += array('fields' => array(), 'models' => array());
     $options['fields'] = Set::normalize($options['fields'], false);
     $options['models'] = Set::normalize($options['models'], false);
     $options += array('defaultModel' => count($options['models']) == 1 ? $options['models'][0] : null);
     $firstRow = true;
     $array = array();
     foreach ($data as $item) {
         foreach ($item as $model => $fields) {
             if ($options['models'] && !in_array($model, $options['models'])) {
                 continue;
             }
             foreach ($fields as $field => $value) {
                 if ($options['fields'] && !in_array($field, $options['fields']) && !in_array("{$model}.{$field}", $options['fields'])) {
                     continue;
                 }
                 if ($firstRow) {
                     if ($model == $options['defaultModel']) {
                         $array[0][] = $field;
                     } else {
                         $array[0][] = "{$model}.{$field}";
                     }
                 }
                 $row[] = $value;
             }
             $array[] = $row;
         }
         $firstRow = false;
     }
     return $array;
 }
示例#3
0
 protected function _setSlugOptions()
 {
     foreach (Set::normalize($this->options['slugs']) as $slug => $options) {
         $defaultBySlug = array('display' => $slug);
         $this->_slugOptions[$slug] = Set::merge(array_intersect_key($this->options, array_flip(array('model', 'urlencode'))), $defaultBySlug, self::$defaultSlugOptions, $options);
     }
 }
 /**
  * Loads a Component
  *
  * @param string $component Name of component to load
  * @return Object loaded component
  **/
 public function loadComponent($settings = array())
 {
     if (!isset($this->Controller)) {
         $this->loadController();
     }
     $component = new $this->componentClass(null);
     if (method_exists($component, 'initialize')) {
         $component->initialize($this->Controller, $settings);
     }
     if (isset($component->components) && is_array($component->components)) {
         $components = (array) Set::normalize($component->components);
         foreach (array_keys($components) as $c) {
             $this->Controller->Component->_loadComponents($component, $c);
         }
         foreach ($components as $c => $config) {
             list($plugin, $c) = pluginSplit($c, true, null);
             if (method_exists($component->{$c}, 'initialize')) {
                 $component->{$c}->initialize($this->Controller, $config);
             }
             if (method_exists($component->{$c}, 'startup')) {
                 $component->{$c}->startup($this->Controller);
             }
         }
     }
     $this->{$this->componentName} = $this->Controller->{$this->componentName} = $component;
     return $this->{$this->componentName};
 }
示例#5
0
    function parse($html = null, $blockName = 'document', $blockParams = null)
    {
        if (empty($html)) {
            return;
        }
        $images = Set::normalize($html, false);
        foreach ($images as &$image) {
            if (!strpos($image, '://') && $image[0] != '/') {
                $image = "img/{$image}";
            }
            $image = $this->_getHelper('SlHtml')->webroot($image);
            SlConfigure::append("Asset.js.ready", "\$.preloadImages({$images})");
        }
        SlConfigure::write('Asset.js.footer.imagePreloader.after', <<<end
jQuery.preLoadImagesCache = [];

// Arguments are image paths relative to the current page.
jQuery.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
        var cacheImage = document.createElement('img');
        cacheImage.src = arguments[i];
        jQuery.preLoadImagesCache.push(cacheImage);
    }
}
end
);
    }
 function _findJoin(&$Model, $dummy, $state, $query, $results = array())
 {
     if ($state == 'after') {
         return $results;
     }
     if (!isset($query[$this->optionName])) {
         return $query;
     }
     $tojoin = Set::normalize($query[$this->optionName]);
     $joins = isset($query['joins']) ? $query['joins'] : array();
     foreach ($tojoin as $alias => $options) {
         // Model::__associations is private property
         foreach ($this->associations as $association) {
             if (isset($Model->{$association}[$alias])) {
                 $join = $this->generateJoins($Model, $alias, $Model->{$association}[$alias], $association, $options);
                 if (!empty($join)) {
                     $joins = Set::merge($joins, $join);
                     $Model->unbindModel(array($association => array($alias)));
                 }
             }
         }
     }
     $query['joins'] = $joins;
     return $query;
 }
 function beforeFind(&$Model, $query = array())
 {
     extract($this->settings);
     if (!isset($query['virtualFields'])) {
         return true;
     }
     $virtualFields = Set::normalize($query['virtualFields']);
     unset($query['virtualFields']);
     $blackList = array();
     foreach ($virtualFields as $key => $sql) {
         if ($sql !== false && empty($sql) || $sql === true) {
             if (isset($Model->{$collectionName}[$key])) {
                 $virtualFields[$key] = $Model->{$collectionName}[$key];
             } else {
                 unset($virtualFields[$key]);
             }
         } else {
             $blackList[] = $key;
             unset($virtualFields[$key]);
         }
     }
     if (!empty($virtualFields) || !empty($blackList)) {
         $this->__virtualFieldsBackup[$Model->alias] = $Model->virtualFields;
         $Model->virtualFields = array_merge($Model->virtualFields, $virtualFields);
         if (!empty($blackList)) {
             foreach ($blackList as $key) {
                 if (isset($Model->virtualFields[$key])) {
                     unset($Model->virtualFields[$key]);
                 }
             }
         }
     }
     return $query;
 }
 function mergeVars($admin, $configuration)
 {
     if (empty($configuration)) {
         $configuration = array($this->defaults);
     }
     $schema = $admin->modelObj->schema();
     foreach ($configuration as $i => $config) {
         foreach ($this->defaults as $key => $value) {
             if (!isset($config[$key])) {
                 $configuration[$i][$key] = $value;
             }
         }
         $fields = array();
         if (empty($configuration[$i]['fields']) || in_array('*', (array) $configuration[$i]['fields'])) {
             // $fields is all fields
             foreach (array_keys($schema) as $field) {
                 $fields[$field] = array('label' => Inflector::humanize($field));
             }
         }
         if (!empty($configuration[$i]['fields'])) {
             $configuration[$i]['fields'] = Set::normalize($configuration[$i]['fields']);
             foreach ((array) $configuration[$i]['fields'] as $field => $config) {
                 if ($field === '*') {
                     continue;
                 }
                 if (empty($configuration[$i])) {
                     $config = array();
                 } else {
                     if (is_string($config)) {
                         $config = array('label' => $config);
                     }
                 }
                 if (empty($config['label'])) {
                     $config['label'] = Inflector::humanize($field);
                 }
                 $fields[$field] = $config;
             }
         }
         if (!empty($configuration[$i]['exclude'])) {
             foreach ($configuration[$i]['exclude'] as $field) {
                 if (in_array($field, array_keys($fields))) {
                     $fields = array_diff_key($fields, array($field => $field));
                 }
             }
         }
         if (!empty($configuration[$i]['hidden'])) {
             foreach ((array) $configuration[$i]['hidden'] as $field) {
                 if (in_array($field, array_keys($fields))) {
                     $fields[$field]['type'] = 'hidden';
                 }
             }
         }
         $configuration[$i]['fields'] = $fields;
         $configuration[$i]['classes'] = (string) $configuration[$i]['classes'];
         $configuration[$i]['description'] = (string) $configuration[$i]['description'];
     }
     return $configuration;
 }
 public function append($name, $settings = array())
 {
     if (is_array($name)) {
         foreach (Set::normalize($name) as $n => $settings) {
             $this->__set($n, $settings);
         }
         return true;
     }
     return $this->__set($name, $settings);
 }
示例#10
0
 public function admin_index($activeSection = null)
 {
     $this->set('sections', $sections = SlConfigure::read2("Config.sections"));
     foreach ($sections as $section => $settings) {
         if (!SlAuth::isAuthorized('config' . Inflector::camelize($section))) {
             unset($sections[$i]);
         }
     }
     if (isset($this->data['_section'])) {
         $activeSection = $this->data['_section'];
     }
     if (empty($activeSection) || !isset($sections[$activeSection])) {
         $activeSection = reset(array_keys($sections));
     }
     $settings = $this->_getSettings($activeSection);
     $this->set('title', __t(SlConfigure::read2("Config.sections.{$activeSection}")));
     if ($this->data) {
         $locales = SlConfigure::read('I18n.locales');
         foreach ($settings as $name => &$setting) {
             if (is_int($name)) {
                 $name = "setting_{$name}";
             }
             if ($setting['collection'] == 'user') {
                 $setting['collection'] = 'User' . SlAuth::user('id');
             }
             if (empty($setting['translate'])) {
                 if (isset($this->data[$name])) {
                     $value = $this->data[$name];
                     if (isset($setting['type']) && $setting['type'] == 'json') {
                         $value = json_decode($value, true);
                     } elseif (isset($setting['type']) && $setting['type'] == 'array') {
                         $value = Set::normalize($value, false);
                     }
                     SlConfigure::write($setting['name'], $value, true, $setting['collection']);
                 }
             } else {
                 foreach ($locales as $locale) {
                     if (isset($this->data["{$name}_{$locale}"])) {
                         $value = $this->data["{$name}_{$locale}"];
                         if (isset($setting['type']) && $setting['type'] == 'json') {
                             $value = json_decode($value, true);
                         } elseif (isset($setting['type']) && $setting['type'] == 'array') {
                             $value = Set::normalize($value, false);
                         }
                         SlConfigure::write($setting['name'], $value, true, "{$setting['collection']}.{$locale}");
                     }
                 }
             }
         }
         $settings = $this->_getSettings($activeSection);
         $this->Session->setFlash(__t('Configuration saved'), array('class' => 'success'));
     }
     $this->data['_section'] = $activeSection;
     $this->set('settings', $settings);
 }
 function mergeVars($admin, $configuration)
 {
     if (empty($configuration)) {
         return array($this->defaults);
     }
     $modelObj = ClassRegistry::init(array('class' => $admin->modelName, 'table' => $admin->useTable, 'ds' => $admin->useDbConfig));
     $schema = $modelObj->schema();
     foreach ($configuration as $i => $config) {
         foreach ($this->defaults as $key => $value) {
             if (!isset($config[$key])) {
                 $configuration[$i][$key] = $value;
             }
         }
         $fields = array();
         if (empty($configuration[$i]['fields']) || in_array('*', (array) $configuration[$i]['fields'])) {
             // $fields is all fields
             foreach (array_keys($schema) as $field) {
                 $fields[$field] = array();
             }
         } else {
             $configuration[$i]['fields'] = Set::normalize($configuration[$i]['fields']);
             foreach ((array) $configuration[$i]['fields'] as $field => $config) {
                 if (empty($configuration[$i])) {
                     $config = array();
                 } else {
                     if (is_string($config)) {
                         $config = array('label' => $config);
                     }
                 }
                 if ($field !== '*') {
                     $fields[$field] = $config;
                 }
             }
         }
         if (!empty($configuration[$i]['exclude'])) {
             foreach ($configuration[$i]['exclude'] as $field) {
                 if (in_array($field, array_keys($fields))) {
                     $fields = array_diff_key($fields, array($field => $field));
                 }
             }
         }
         if (!empty($configuration[$i]['hidden'])) {
             foreach ((array) $configuration[$i]['hidden'] as $field) {
                 if (in_array($field, array_keys($fields))) {
                     $fields[$field]['type'] = 'hidden';
                 }
             }
         }
         $configuration[$i]['fields'] = $fields;
         $configuration[$i]['classes'] = (string) $configuration[$i]['classes'];
         $configuration[$i]['description'] = (string) $configuration[$i]['description'];
     }
     return $configuration;
 }
 /**
  * Save tag and tagged models
  *
  * @param object $model
  */
 function afterSave(&$model)
 {
     if (!isset($model->data[$model->alias]['tags'])) {
         return;
     }
     $tagged_conditions = array('model' => $model->alias, 'model_id' => $model->id);
     $this->Tagged->deleteAll($tagged_conditions, false, true);
     $tags = Set::normalize($model->data[$model->alias]['tags'], false);
     $tags = array_unique($tags);
     foreach ($tags as $tag) {
         $this->Tag->saveTag($tag, $tagged_conditions);
     }
 }
示例#13
0
 function _parseTrueToDefault($config)
 {
     $_this =& CaptchaConfig::getInstance();
     $trueToDefault = Set::normalize($_this->trueToDefault);
     foreach ($trueToDefault as $path => $options) {
         if (Set::extract($path, $config) === true) {
             if (empty($options)) {
                 $options = Set::extract($path, $_this->defaultConfig);
             }
             $config = Set::insert($config, $path, $options);
         }
     }
     return $config;
 }
 function setup(&$Model, $settings = array())
 {
     if (empty($settings['fieldsOpt'])) {
         $settings['fieldsOpt'] = array();
     }
     if (!empty($settings['fields'])) {
         $settings['fieldsOpt'] = set::merge($settings['fieldsOpt'], array_filter(Set::normalize($settings['fields'])));
         $settings['fields'] = array_keys(Set::normalize($settings['fields']));
     }
     if (empty($this->settings[$Model->alias])) {
         $this->settings[$Model->alias] = $this->defSettings;
     }
     $this->settings[$Model->alias] = set::merge($this->settings[$Model->alias], $settings);
 }
示例#15
0
 function loadComponent($componentName, $config = null, $parent = null)
 {
     $component = null;
     $pathing = $this->componentPathing($componentName);
     $created = false;
     if (!isset($this->controller->Component->_loaded[$pathing['name']])) {
         if (!class_exists($pathing['className'])) {
             if (is_null($pathing['plugin']) || !App::import('Component', $pathing['fullName'])) {
                 if (!App::import('Component', $pathing['name'])) {
                     $this->cakeError('missingComponentFile', array(array('className' => $this->controller->name, 'component' => $pathing['name'], 'file' => Inflector::underscore($pathing['name']) . '.php', 'base' => '', 'code' => 500)));
                     return false;
                 }
             }
             if (!class_exists($pathing['className'])) {
                 $this->cakeError('missingComponentClass', array(array('className' => $this->controller->name, 'component' => $pathing['name'], 'file' => Inflector::underscore($pathing['name']) . '.php', 'base' => '', 'code' => 500)));
                 return false;
             }
         }
         $component =& new $pathing['className']();
         $created = true;
         $component->enabled = true;
         $this->controller->Component->_loaded[$pathing['name']] = $component;
     } else {
         $component =& $this->controller->Component->_loaded[$pathing['name']];
     }
     if (!empty($config)) {
         if (isset($this->controller->Component->__settings[$pathing['name']])) {
             $this->controller->Component->__settings[$pathing['name']] = array_merge($this->controller->Component->__settings[$pathing['name']], $config);
         } else {
             $this->controller->Component->__settings[$pathing['name']] = $config;
         }
     }
     if (!empty($parent)) {
         $parent->{$pathing['name']} = $component;
     }
     if (!empty($component->components)) {
         $normal = Set::normalize($component->components);
         foreach ((array) $normal as $subcomponent => $config) {
             $this->loadComponent($subcomponent, $config, $component);
         }
     }
     if ($created && method_exists($component, 'initialize') && $component->enabled === true) {
         $settings = array();
         if (isset($this->controller->Component->__settings[$pathing['name']])) {
             $settings = $this->controller->Component->__settings[$pathing['name']];
         }
         $component->initialize($this->controller, $settings);
     }
     return $component;
 }
示例#16
0
 function loadComponents($components, $startupDefault = true)
 {
     foreach ($components as $from => $alias) {
         list($to, $settings) = each(Set::normalize($alias));
         if (empty($settings)) {
             $settings = array();
         }
         $startup = $startupDefault;
         if (!$this->__primary && isset($settings['startup'])) {
             $startup = $settings['startup'];
             unset($settings['startup']);
         }
         $this->_loadComponent($from, $to, $settings, $startup);
     }
 }
 function _reset()
 {
     $this->initialize(new MockTwitterTestController(), array('datasource' => 'test_twitter'));
     $this->DataSource->reset();
     // -- init components
     $this->components = Set::normalize($this->components);
     foreach ($this->components as $Component => $config) {
         if (empty($config)) {
             $config = array();
         }
         App::import('Component', $Component);
         $this->{$Component} = ClassRegistry::init($Component . 'Component', 'Component');
         $this->{$Component}->initialize($this->controller, $config);
     }
 }
示例#18
0
 function _replace($from, $alias)
 {
     list($to, $settings) = each(Set::normalize((array) $alias));
     $loadedHelpers = array();
     $this->view->_loadHelpers($loadedHelpers, array($to => $settings));
     list($plugin, $to) = pluginSplit($to);
     if (!isset($loadedHelpers[$to])) {
         return false;
     }
     $loaded =& $loadedHelpers[$to];
     list($plugin, $from) = pluginSplit($from);
     $key = Inflector::variable($from);
     $from = Inflector::classify($from);
     $this->view->loaded[$key] = $loaded;
     $this->view->{$from} =& $loaded;
     return true;
 }
示例#19
0
 function _reset($sets = null, $unsets = null)
 {
     unset($this->Controller);
     $this->Controller = new AliasComponentTestController();
     if ($unsets !== null) {
         if ($unsets === true) {
             $this->Controller->components = array();
         } else {
             $components = Set::normalize($this->Controller->components);
             $this->Controller->components = Set::diff($components, array_flip((array) $unsets));
         }
     }
     if ($sets !== null) {
         $this->Controller->components = Set::merge($this->Controller->components, $sets);
     }
     $this->Controller->constructClasses();
     $this->Controller->Component->initialize($this->Controller);
     $this->Controller->beforeFilter();
 }
示例#20
0
 function prepareJoins(&$Model, $tojoin)
 {
     $tojoin = Set::normalize($tojoin);
     $cacheKey = sha1($Model->alias . serialize($tojoin));
     $isCached = false;
     if (isset($this->__cacheJoins[$cacheKey])) {
         list($joins, $unbinds) = $this->__cacheJoins[$cacheKey];
         $isCached = true;
     } else {
         $joins = array();
         $unbinds = array();
         foreach ($tojoin as $alias => $options) {
             foreach ($this->associations as $association) {
                 if (isset($Model->{$association}[$alias])) {
                     $options = Set::merge($this->defaultOptions, $options);
                     $additionals = $options;
                     unset($additionals['type']);
                     unset($additionals['unbind']);
                     if (!empty($additionals)) {
                         $joins = array_merge($joins, $this->prepareJoins($Model->{$alias}, $additionals));
                     }
                     $join = $this->__joinsOptions($Model, $alias, $Model->{$association}[$alias], $association, $options);
                     if (!empty($join)) {
                         $joins = array_merge($joins, $join);
                         if ($options['unbind']) {
                             $unbinds[$association][] = $alias;
                             // $Model->unbindModel(array($association => array($alias)));
                         }
                     }
                 }
             }
         }
         $joins = array_reverse($joins);
     }
     if (!empty($unbinds)) {
         $Model->unbindModel($unbinds);
     }
     if (!$isCached) {
         $this->__cacheJoins[$cacheKey] = array($joins, $unbinds);
     }
     return $joins;
 }
 public function configure($settings)
 {
     extract((array) $settings);
     if (isset($disable)) {
         $this->disable($disable);
     }
     if (isset($disableMethods)) {
         foreach (Set::normalize($disableMethods) as $method => $callback) {
             $this->disableMethod($method, $callback);
         }
     }
     if (isset($enable)) {
         $this->enable($enable);
     }
     if (isset($enableMethods)) {
         foreach (Set::normalize($enableMethods) as $method => $callback) {
             $this->enableMethod($method, $callback);
         }
     }
 }
 /**
  *
  * @param AppModel $model
  * @param array    $query
  */
 function beforeFind(&$model, $query = array())
 {
     if (isset($query['virtualFields'])) {
         $query['virtualFields'] = Set::normalize($query['virtualFields']);
         foreach ($query['virtualFields'] as $key => $sql) {
             if (empty($sql)) {
                 if (isset($model->virtualFieldCollection[$key])) {
                     $query['virtualFields'][$key] = $model->virtualFieldCollection[$key];
                 } else {
                     unset($query['virtualFields'][$key]);
                 }
             }
         }
     }
     if (!empty($query['virtualFields'])) {
         $this->__cache[$model->alias] = $model->virtualFields;
         $model->virtualFields = am($model->virtualFields, $query['virtualFields']);
     }
     return $query;
 }
示例#23
0
 /**
  * Creates all parameters on configuration using defaults, if not set.
  * The configuration is stored back in the Configure class.
  * 
  * @access public
  * @return boolean Return true if succefully nomalized, false, if not.
  */
 static function normalizeConfig()
 {
     $config = Configure::read('ContentStream');
     if (Configure::read() && (!is_array($config['streams']) || Set::numeric(array_keys($config['streams'])))) {
         return !trigger_error('CsConfigurator::normalizeConfig - ContentStream.streams must be a array indexed by type of content stream.');
     }
     $config['streams'] = Set::normalize($config['streams']);
     foreach ($config['streams'] as $type => &$stream) {
         if (!isset($stream['model'])) {
             $stream['model'] = Inflector::camelize($type) . '.' . Inflector::classify($type);
         }
         if (!isset($stream['controller'])) {
             $stream['controller'] = Inflector::pluralize($type);
         }
         if (!isset($stream['title'])) {
             $stream['title'] = Inflector::humanize($type);
         }
     }
     Configure::write('ContentStream', $config);
     return self::$nomalized = true;
 }
 function startup(&$controller)
 {
     if (empty($this->settings['models']) && !empty($controller->modelClass)) {
         $this->settings['models'] = array($controller->modelClass => array());
     } elseif (!is_array($this->settings['models'])) {
         $this->settings['models'] = array($this->settings['models'] => array());
     } else {
         $this->settings['models'] = Set::normalize($this->settings['models']);
     }
     $this->controller = $controller;
     $this->CustomFilter = ClassRegistry::init('CustomFilter.CustomFilter');
     $this->settings['currentFilters'] = $filterIds = $this->getCurentFilterIds();
     if (in_array($controller->params['action'], $this->settings['actions'])) {
         $controller->paginate = $this->applyFilters($controller->paginate, 'all', $filterIds);
         $controller->helpers['CustomFilter.CustomFilter'] = array();
         foreach ($this->settings['models'] as $alias => &$opt) {
             if ($this->settings['autoLock']) {
                 $this->lockFilterSelection($alias, $filterIds);
             }
             if (!empty($controller->{$alias})) {
                 $controller->{$alias}->Behaviors->attach('CustomFilter.CustomFiltered', $opt);
             }
             $raw = $this->findActiveFilters($alias, $this->controller->user, $filterIds);
             //debug($raw);
             $opt['listData'] = array();
             foreach ($raw as $filter) {
                 if (!empty($filter['MyCustomFilter'])) {
                     $filter['CustomFilter'] = array_merge($filter['CustomFilter'], $filter['MyCustomFilter']);
                 }
                 $opt['listData'][$filter['CustomFilterGroup']['id']]['CustomFilter'][$filter['CustomFilter']['id']] =& $filter['CustomFilter'];
                 $opt['listData'][$filter['CustomFilterGroup']['id']]['CustomFilterGroup'] = $filter['CustomFilterGroup'];
                 if (in_array($filter['CustomFilter']['id'], $filterIds)) {
                     $opt['current'][$filter['CustomFilter']['id']] =& $filter;
                     $opt['listData'][$filter['CustomFilterGroup']['id']]['CustomFilter'][$filter['CustomFilter']['id']]['current'] = 1;
                 }
             }
         }
         $controller->params['CustomFilter'] = $this->settings;
     }
 }
示例#25
0
 function unserialize(&$Model, $results = null)
 {
     if (is_null($results)) {
         $results =& $Model->data;
     }
     if (isset($Model->serializeFields)) {
         $serializeFields = $Model->serializeFields;
         if (!$serializeFields) {
             $serializeFields = array();
         } else {
             if (!is_array($serializeFields) && $serializeFields) {
                 $serializeFields = array($serializeFields);
             }
         }
         if (isset($results[$Model->alias])) {
             $res =& $results[$Model->alias];
         } else {
             $res =& $results;
         }
         if (!isset($res[0])) {
             $old_res =& $res;
             unset($res);
             $res = array(&$old_res);
         }
         foreach (Set::normalize($serializeFields) as $field => $opt) {
             foreach ($res as &$r) {
                 if (isset($r[$Model->alias])) {
                     $r =& $r[$Model->alias];
                 }
                 if (isset($r[$field]) && !empty($r[$field])) {
                     $r[$field] = $this->unserializeFunct($Model, $r[$field]);
                 }
             }
         }
     }
     return $results;
 }
示例#26
0
 /**
  * test normalizing arrays
  *
  * @return void
  */
 public function testNormalizeArrays()
 {
     $result = Set::normalize(array('one', 'two', 'three'));
     $expected = array('one' => NULL, 'two' => NULL, 'three' => NULL);
     $this->assertEquals($expected, $result);
     $result = Set::normalize(array('one', 'two', 'three'), FALSE);
     $expected = array('one', 'two', 'three');
     $this->assertEquals($expected, $result);
     $result = Set::normalize(array('one' => 1, 'two' => 2, 'three' => 3, 'four'), FALSE);
     $expected = array('one' => 1, 'two' => 2, 'three' => 3, 'four' => NULL);
     $this->assertEquals($expected, $result);
     $result = Set::normalize(array('one' => 1, 'two' => 2, 'three' => 3, 'four'));
     $expected = array('one' => 1, 'two' => 2, 'three' => 3, 'four' => NULL);
     $this->assertEquals($expected, $result);
     $result = Set::normalize(array('one' => array('a', 'b', 'c' => 'cee'), 'two' => 2, 'three'));
     $expected = array('one' => array('a', 'b', 'c' => 'cee'), 'two' => 2, 'three' => NULL);
     $this->assertEquals($expected, $result);
 }
示例#27
0
 /**
  * testMergeVars method
  *
  * @access public
  * @return void
  */
 function testMergeVars()
 {
     if ($this->skipIf(defined('APP_CONTROLLER_EXISTS'), '%s Need a non-existent AppController')) {
         return;
     }
     $TestController =& new TestController();
     $TestController->constructClasses();
     $testVars = get_class_vars('TestController');
     $appVars = get_class_vars('AppController');
     $components = is_array($appVars['components']) ? array_merge($appVars['components'], $testVars['components']) : $testVars['components'];
     if (!in_array('Session', $components)) {
         $components[] = 'Session';
     }
     $helpers = is_array($appVars['helpers']) ? array_merge($appVars['helpers'], $testVars['helpers']) : $testVars['helpers'];
     $uses = is_array($appVars['uses']) ? array_merge($appVars['uses'], $testVars['uses']) : $testVars['uses'];
     $this->assertEqual(count(array_diff($TestController->helpers, $helpers)), 0);
     $this->assertEqual(count(array_diff($TestController->uses, $uses)), 0);
     $this->assertEqual(count(array_diff_assoc(Set::normalize($TestController->components), Set::normalize($components))), 0);
     $expected = array('ControllerComment', 'ControllerAlias', 'ControllerPost');
     $this->assertEqual($expected, $TestController->uses, '$uses was merged incorrectly, AppController models should be last.');
     $TestController =& new AnotherTestController();
     $TestController->constructClasses();
     $appVars = get_class_vars('AppController');
     $testVars = get_class_vars('AnotherTestController');
     $this->assertTrue(in_array('ControllerPost', $appVars['uses']));
     $this->assertNull($testVars['uses']);
     $this->assertFalse(isset($TestController->ControllerPost));
     $TestController =& new ControllerCommentsController();
     $TestController->constructClasses();
     $appVars = get_class_vars('AppController');
     $testVars = get_class_vars('ControllerCommentsController');
     $this->assertTrue(in_array('ControllerPost', $appVars['uses']));
     $this->assertEqual(array('ControllerPost'), $testVars['uses']);
     $this->assertTrue(isset($TestController->ControllerPost));
     $this->assertTrue(isset($TestController->ControllerComment));
 }
 /**
  * Loads components used by this component.
  *
  * @param object $object
  *        	Object with a Components array
  * @param object $parent
  *        	the parent of the current object
  * @return void
  * @access protected
  */
 function _loadComponents(&$object, $parent = null)
 {
     $base = $this->__controllerVars['base'];
     $normal = Set::normalize($object->components);
     foreach ((array) $normal as $component => $config) {
         $plugin = isset($this->__controllerVars['plugin']) ? $this->__controllerVars['plugin'] . '.' : null;
         list($plugin, $component) = pluginSplit($component, true, $plugin);
         $componentCn = $component . 'Component';
         if (!class_exists($componentCn)) {
             if (is_null($plugin) || !App::import('Component', $plugin . $component)) {
                 if (!App::import('Component', $component)) {
                     $this->cakeError('missingComponentFile', array(array('className' => $this->__controllerVars['name'], 'component' => $component, 'file' => Inflector::underscore($component) . '.php', 'base' => $base, 'code' => 500)));
                     return false;
                 }
             }
             if (!class_exists($componentCn)) {
                 $this->cakeError('missingComponentClass', array(array('className' => $this->__controllerVars['name'], 'component' => $component, 'file' => Inflector::underscore($component) . '.php', 'base' => $base, 'code' => 500)));
                 return false;
             }
         }
         if ($parent === null) {
             $this->_primary[] = $component;
         }
         if (isset($this->_loaded[$component])) {
             $object->{$component} =& $this->_loaded[$component];
             if (!empty($config) && isset($this->__settings[$component])) {
                 $this->__settings[$component] = array_merge($this->__settings[$component], $config);
             } elseif (!empty($config)) {
                 $this->__settings[$component] = $config;
             }
         } else {
             if ($componentCn === 'SessionComponent') {
                 $object->{$component} =& new $componentCn($base);
             } else {
                 if (PHP5) {
                     $object->{$component} = new $componentCn();
                 } else {
                     $object->{$component} =& new $componentCn();
                 }
             }
             $object->{$component}->enabled = true;
             $this->_loaded[$component] =& $object->{$component};
             if (!empty($config)) {
                 $this->__settings[$component] = $config;
             }
             if (isset($object->{$component}->components) && is_array($object->{$component}->components) && !isset($object->{$component}->{$parent})) {
                 $this->_loadComponents($object->{$component}, $component);
             }
         }
     }
 }
示例#29
0
 /**
  * Normalizes a string or array list.
  *
  * @param mixed $list List to normalize
  * @param boolean $assoc If true, $list will be converted to an associative array
  * @param string $sep If $list is a string, it will be split into an array with $sep
  * @param boolean $trim If true, separated strings will be trimmed
  * @return array
  * @access public
  */
 function normalize($list, $assoc = true, $sep = ',', $trim = true)
 {
     if (is_string($list)) {
         $list = explode($sep, $list);
         if ($trim) {
             $list = array_map('trim', $list);
         }
         if ($assoc) {
             return Set::normalize($list);
         }
     } elseif (is_array($list)) {
         $keys = array_keys($list);
         $count = count($keys);
         $numeric = true;
         if (!$assoc) {
             for ($i = 0; $i < $count; $i++) {
                 if (!is_int($keys[$i])) {
                     $numeric = false;
                     break;
                 }
             }
         }
         if (!$numeric || $assoc) {
             $newList = array();
             for ($i = 0; $i < $count; $i++) {
                 if (is_int($keys[$i])) {
                     $newList[$list[$keys[$i]]] = null;
                 } else {
                     $newList[$keys[$i]] = $list[$keys[$i]];
                 }
             }
             $list = $newList;
         }
     }
     return $list;
 }
示例#30
0
文件: Set.php 项目: aichelman/StudyUp
 /**
  * Return a value from an array list if the key exists.
  *
  * If a comma separated $list is passed arrays are numeric with the key of the first being 0
  * $list = 'no, yes' would translate to  $list = array(0 => 'no', 1 => 'yes');
  *
  * If an array is used, keys can be strings example: array('no' => 0, 'yes' => 1);
  *
  * $list defaults to 0 = no 1 = yes if param is not passed
  *
  * @param array $select Key in $list to return
  * @param array|string $list can be an array or a comma-separated list.
  * @return string the value of the array key or null if no match
  * @link http://book.cakephp.org/2.0/en/core-utility-libraries/set.html#Set::enum
  */
 public static function enum($select, $list = null)
 {
     if (empty($list)) {
         $list = array('no', 'yes');
     }
     $return = null;
     $list = Set::normalize($list, false);
     if (array_key_exists($select, $list)) {
         $return = $list[$select];
     }
     return $return;
 }