Пример #1
0
 function filterNot($array, $callback = null, $lvl = 0)
 {
     if ($lvl < 1) {
         $array = array_diff_key($array, array_filter($array, $callback));
     }
     if ($lvl != 0) {
         foreach ($array as &$val) {
             if (is_array($val)) {
                 $val = SetMulti::filterNot($val, $callback, $lvl - 1);
             }
         }
     }
     return $array;
 }
 function _parse_xls_cols($filePath)
 {
     if (file_exists($filePath)) {
         App::import('Vendor', 'Newsletter.php-ofc-library', array('file' => 'php-ofc-library/open-flash-chart.php'));
         App::import('Vendor', 'Newsletter.PHPExcel', array('file' => 'PHPExcel/IOFactory.php'));
         $objPHPExcel = PHPExcel_IOFactory::load($filePath);
         $objWorksheet = $objPHPExcel->getActiveSheet();
         $highestRow = $objWorksheet->getHighestRow();
         $highestColumn = $objWorksheet->getHighestColumn();
         $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn);
         /////////////// cols config ///////////////
         $langs = Configure::read('languages');
         $fieldsAlias = array('first_name' => array("first name", "firstname", "prenom"), 'last_name' => array("last name", "lastname", "nom", "nom de famille"), 'email' => array("email", "mail", "courriel"));
         $fieldsCharAlias = array("é" => "e", "è" => "e", "ê" => "e", "_" => " ", "-" => " ");
         $fieldGess = array('email' => '/^[\\w-]+@([\\w-]+\\.)+[\\w-]+$/', 'phone' => '/^\\(?[0-9]{3}\\)?[-\\s]?[0-9]{3}[-\\s]?[0-9]{4}$/', 'sex' => '/^(f|m)$/i', 'name' => '/^[a-z\\s-]+$/i');
         $fields = $this->NewsletterSendlist->NewsletterEmail->schema();
         unset($fields['id'], $fields['created'], $fields['modified'], $fields['sendlist_id']);
         $fields = array_merge(array('first_name' => array(), 'last_name' => array()), $fields);
         $defFieldsAlias = array();
         $fieldsList = array();
         foreach ($fields as $f => $opt) {
             $fieldsList[$f] = __(Inflector::humanize($f), true);
             $defFieldsAlias[$f] = array($f);
             $langTmp = Configure::read('Config.language');
             foreach ($langs as $l) {
                 Configure::write('Config.language', 'Config.language', $l);
                 if (!in_array(__($f, true), $defFieldsAlias[$f])) {
                     $defFieldsAlias[$f][] = __($f, true);
                 }
                 if (!in_array(__d('newsletter', $f, true), $defFieldsAlias[$f])) {
                     $defFieldsAlias[$f][] = __d('newsletter', $f, true);
                 }
             }
             Configure::write('Config.language', $langTmp);
         }
         unset($defFieldsAlias['active']);
         $fieldsAlias = array_merge($defFieldsAlias, $fieldsAlias);
         //debug($fieldsAlias);
         $fieldGess = array_intersect_key($fieldGess, $fieldsAlias);
         //debug($fieldGess);
         /////////////// Test first row ///////////////
         $first_row = array();
         for ($col = 0; $col <= $highestColumnIndex; ++$col) {
             $cell = $objWorksheet->getCellByColumnAndRow($col, 1)->getValue();
             $cell = mb_strtolower($cell);
             $cell = str_replace(array_keys($fieldsCharAlias), array_values($fieldsCharAlias), $cell);
             $first_row[$col] = $cell;
         }
         //debug($first_row);
         $cols_fields = array_flip($first_row);
         App::import('Lib', 'Newsletter.SetMulti');
         $cols_fields = SetMulti::extractHierarchicMulti($fieldsAlias, $cols_fields);
         $cols_fields = SetMulti::filterNot($cols_fields, 'is_null');
         $title_row = !empty($cols_fields);
         /////////////// Test data ///////////////
         $tmpGess = array_diff_key($fieldGess, $cols_fields);
         if (!empty($cols_fields['first_name'])) {
             unset($tmpGess['name']);
         }
         for ($i = 0; $i < 50 && !empty($tmpGess) && $i < $highestRow; $i++) {
             $row = $this->_get_xls_row($objWorksheet, $i + 1 + $title_row);
             //debug($row);
             foreach ($tmpGess as $f => $exp) {
                 foreach ($row as $col => $val) {
                     if (!in_array($col, $cols_fields)) {
                         if (preg_match($exp, $val)) {
                             unset($tmpGess[$f]);
                             $cols_fields[$f] = $col;
                             break;
                         }
                     }
                 }
             }
         }
         $cols_fields = array_flip($cols_fields);
         /////////////// teaser ///////////////
         $teaser = array();
         for ($i = 0; $i < 15 && $i < $highestRow; $i++) {
             $row = $this->_get_xls_row($objWorksheet, $i + 1);
             $teaser[] = $row;
         }
         //debug($cols_fields);
         return array('cols' => $cols_fields, 'fields' => $fieldsList, 'showFirst' => !$title_row, 'teaser' => $teaser);
     }
     return null;
 }
Пример #3
0
 function _eventLog($listeners, &$options, $result)
 {
     $loggedListeners = array();
     //debug($listeners);
     //debug(SetMulti::filterNot($options,'is_object',-1));
     foreach ($listeners as $listener) {
         if ($listener['Event']['log']) {
             $loggedListeners[] = $listener;
         }
     }
     if (!empty($loggedListeners) || !empty($options['timed_event_id'])) {
         $this->TimedEvent = ClassRegistry::init('TimedEvent');
         App::import('Lib', 'SetMulti');
         $format = $this->getDataSource()->columns['datetime']['format'];
         $log = count($loggedListeners);
         $data = array('event_type_id' => reset(array_keys($options['all_types'])), 'time' => date($format), 'aro_id' => !empty($options['all_aros']) ? end($options['all_aros']) : null, 'aco_id' => !empty($options['all_acos']) ? end($options['all_acos']) : null, 'final_data' => SetMulti::filterNot($options, 'is_object', -1), 'context' => 'log');
         if ($options['phase'] == 1) {
             $data['success'] = (bool) $result;
         } else {
             $data['success'] = 1;
             $data['result'] = $result;
         }
         if (!empty($options['timed_event_id'])) {
             $data['id'] = $options['timed_event_id'];
             $exclude = array('event_type_id', 'time', 'aro_id', 'aco_id', 'context');
             $data = array_diff_key($data, array_flip($exclude));
         } else {
             $data['active'] = 0;
         }
         foreach ($loggedListeners as $listener) {
             //debug($listener['Event']['function'].'_log');
             $Handler = $this->getHandler($listener['Event']['handler']);
             if ($Handler && method_exists($Handler, $listener['Event']['function'] . '_log')) {
                 $params = (array) $listener['Event']['params'];
                 $params = $this->_parseParams($options, $params);
                 $res = $Handler->{$listener['Event']['function'] . '_log'}($data, $params);
                 if ($res === false) {
                     $log--;
                 } elseif (is_array($res)) {
                     $data = $res;
                 }
             }
         }
         if ($log || !empty($options['timed_event_id'])) {
             $this->TimedEvent->create();
             $this->TimedEvent->save($data);
             if (empty($options['timed_event_id'])) {
                 $options['timed_event_id'] = $this->TimedEvent->id;
             }
         }
     }
 }