Example #1
0
 public function add_item($data = array(), $default = false, $save = true)
 {
     if (\Arr::is_multi($data)) {
         foreach ($data as $default => $item) {
             $this->add_item($item, $default === 'default', false);
         }
     } else {
         $model = \Model_Enum_Item::forge();
         $model->set($data);
         $this->items[] = $model;
         $default === true and $this->default = $model;
     }
     $save === true and $this->save(true);
 }
Example #2
0
 /**
  * To CSV conversion
  *
  * @param mixed $data        	
  * @param mixed $delimiter        	
  * @return string
  */
 public function to_csv($data = null, $delimiter = null)
 {
     // csv format settings
     $newline = \Config::get('format.csv.export.newline', \Config::get('format.csv.newline', "\n"));
     $delimiter or $delimiter = \Config::get('format.csv.export.delimiter', \Config::get('format.csv.delimiter', ','));
     $enclosure = \Config::get('format.csv.export.enclosure', \Config::get('format.csv.enclosure', '"'));
     $escape = \Config::get('format.csv.export.escape', \Config::get('format.csv.escape', '"'));
     // escape function
     $escaper = function ($items) use($enclosure, $escape) {
         return array_map(function ($item) use($enclosure, $escape) {
             return str_replace($enclosure, $escape . $enclosure, $item);
         }, $items);
     };
     if ($data === null) {
         $data = $this->_data;
     }
     if (is_object($data) and !$data instanceof \Iterator) {
         $data = $this->to_array($data);
     }
     // Multi-dimensional array
     if (is_array($data) and \Arr::is_multi($data)) {
         $data = array_values($data);
         if (\Arr::is_assoc($data[0])) {
             $headings = array_keys($data[0]);
         } else {
             $headings = array_shift($data);
         }
     } else {
         $headings = array_keys((array) $data);
         $data = array($data);
     }
     $output = $enclosure . implode($enclosure . $delimiter . $enclosure, $escaper($headings)) . $enclosure . $newline;
     foreach ($data as $row) {
         $output .= $enclosure . implode($enclosure . $delimiter . $enclosure, $escaper((array) $row)) . $enclosure . $newline;
     }
     return rtrim($output, $newline);
 }
Example #3
0
 /**
  * hook plugin to get multisite tables names.<br>
  * this will get module's tables that need to be copy while create new site.<br>
  * attention! you must call this method everytime when you want to access multisite tables list.
  * 
  * @todo [fuelstart][multisite][plug] get module's multisite tables plug.
  */
 public function hookGetMultisiteTables()
 {
     $plugin = new \Library\Plugins();
     if ($plugin->hasFilter('SitesGetModulesMultisiteTables') !== false) {
         $plugin->doFilter('SitesGetModulesMultisiteTables');
         if (is_array($plugin->original_data) && !empty($plugin->original_data)) {
             foreach ($plugin->original_data as $table) {
                 if (!empty($table)) {
                     if (is_array($table) && !\Arr::is_multi($table)) {
                         $this->multisite_tables = array_merge($this->multisite_tables, $table);
                     } elseif (is_string($table)) {
                         $this->multisite_tables = array_merge($this->multisite_tables, [$table]);
                     }
                 }
             }
             unset($each_cfg);
             $this->multisite_tables = \Arr::unique($this->multisite_tables);
         }
     }
     unset($plugin);
 }
Example #4
0
 /**
  * Tests Arr::is_multi()
  *
  * @test
  */
 public function test_multidimensional_array()
 {
     // Single array
     $arr_single = array('one' => 1, 'two' => 2);
     $this->assertFalse(Arr::is_multi($arr_single));
     // Multi-dimensional array
     $arr_multi = array('one' => array('test' => 1), 'two' => array('test' => 2), 'three' => array('test' => 3));
     $this->assertTrue(Arr::is_multi($arr_multi));
     // Multi-dimensional array (not all elements are arrays)
     $arr_multi_strange = array('one' => array('test' => 1), 'two' => array('test' => 2), 'three' => 3);
     $this->assertTrue(Arr::is_multi($arr_multi_strange, false));
     $this->assertFalse(Arr::is_multi($arr_multi_strange, true));
 }
Example #5
0
 /**
  * get the average of the items
  *
  * @param array[array]      $array
  * @param string            $key
  */
 public static function average($array, $key = null)
 {
     if (!is_array($array)) {
         throw new \InvalidArgumentException('Arr::average - first argunent has to be an array.');
     }
     if (is_string($key) && Arr::is_multi($array)) {
         $array = Arr::pick($key, $array);
     }
     return static::sum($array) / count($array);
 }
Example #6
0
 /**
  * To CSV conversion
  *
  * @param   mixed   $data
  * @param   mixed   $separator
  * @return  string
  */
 public function to_csv($data = null, $separator = ',')
 {
     if ($data === null) {
         $data = $this->_data;
     }
     if (is_object($data) and !$data instanceof \Iterator) {
         $data = $this->to_array($data);
     }
     // Multi-dimensional array
     if (is_array($data) and \Arr::is_multi($data)) {
         $data = array_values($data);
         if (\Arr::is_assoc($data[0])) {
             $headings = array_keys($data[0]);
         } else {
             $headings = array_shift($data);
         }
     } else {
         $headings = array_keys((array) $data);
         $data = array($data);
     }
     $output = "\"" . implode('"' . $separator . '"', $headings) . "\"\n";
     foreach ($data as &$row) {
         $output .= '"' . implode('"' . $separator . '"', (array) $row) . "\"\n";
     }
     return rtrim($output, "\n");
 }
Example #7
0
 /**
  * To CSV conversion
  *
  * @param   mixed   $data
  * @param   mixed   $delimiter
  * @param   mixed   $enclose_numbers
  * @param   array   $headings  Custom headings to use
  * @return  string
  */
 public function to_csv($data = null, $delimiter = null, $enclose_numbers = null, array $headings = array())
 {
     // csv format settings
     $newline = \Config::get('format.csv.newline', \Config::get('format.csv.export.newline', "\n"));
     $delimiter or $delimiter = \Config::get('format.csv.delimiter', \Config::get('format.csv.export.delimiter', ','));
     $enclosure = \Config::get('format.csv.enclosure', \Config::get('format.csv.export.enclosure', '"'));
     $escape = \Config::get('format.csv.escape', \Config::get('format.csv.export.escape', '\\'));
     is_null($enclose_numbers) and $enclose_numbers = \Config::get('format.csv.delimit_numbers', true);
     // escape, delimit and enclose function
     $escaper = function ($items, $enclose_numbers) use($enclosure, $escape, $delimiter) {
         return implode($delimiter, array_map(function ($item) use($enclosure, $escape, $delimiter, $enclose_numbers) {
             if (!is_numeric($item) or $enclose_numbers) {
                 $item = $enclosure . str_replace($enclosure, $escape . $enclosure, $item) . $enclosure;
             }
             return $item;
         }, $items));
     };
     if ($data === null) {
         $data = $this->_data;
     }
     if (is_object($data) and !$data instanceof \Iterator) {
         $data = $this->to_array($data);
     }
     // Multi-dimensional array
     if (empty($headings)) {
         if (is_array($data) and \Arr::is_multi($data)) {
             $data = array_values($data);
             if (\Arr::is_assoc($data[0])) {
                 $headings = array_keys($data[0]);
             } else {
                 $headings = array_shift($data);
             }
         } else {
             $headings = array_keys((array) $data);
             $data = array($data);
         }
     }
     $output = $escaper($headings, true) . $newline;
     foreach ($data as $row) {
         $output .= $escaper($row, $enclose_numbers) . $newline;
     }
     return rtrim($output, $newline);
 }
Example #8
0
 protected static function buildQueryOptions($query, $options)
 {
     foreach ($options as $key => $value) {
         switch ($key) {
             case 'select':
                 $query = isset($options['join']) ? static::buildSelect($query, $value, true) : static::buildSelect($query, $value);
                 break;
             case 'where':
                 if (is_array($value) and count($value) > 0) {
                     if (\Arr::is_multi($value, true) and \Arr::is_assoc($value)) {
                         if (\Arr::get($value, 'ROOT') !== null) {
                             $count = count($value['ROOT']);
                             if ($count == 3) {
                                 $query->where($value['ROOT'][0], $value['ROOT'][1], $value['ROOT'][2]);
                             }
                             if ($count == 2) {
                                 $query->where($value['ROOT'][0], $value['ROOT'][1]);
                             }
                         }
                         if (\Arr::get($value, 'AND') !== null) {
                             foreach ($value['AND'] as $item) {
                                 $count = count($item);
                                 if ($count == 3) {
                                     $query->and_where($item[0], $item[1], $item[2]);
                                 }
                                 if ($count == 2) {
                                     $query->and_where($item[0], $item[1]);
                                 }
                             }
                         }
                         if (\Arr::get($value, 'OR') !== null) {
                             foreach ($value['OR'] as $item) {
                                 $count = count($item);
                                 if ($count == 3) {
                                     $query->or_where($item[0], $item[1], $item[2]);
                                 }
                                 if ($count == 2) {
                                     $query->or_where($item[0], $item[1]);
                                 }
                             }
                         }
                     } else {
                         foreach ($value as $k => $v) {
                             if (is_array($v)) {
                                 $count = count($v);
                                 switch ($count) {
                                     case 2:
                                         $query->where($v[0], $v[1]);
                                         break;
                                     case 3:
                                         $query->where($v[0], $v[1], $v[2]);
                                         break;
                                     default:
                                         break;
                                 }
                             } else {
                                 $query->where($k, $v);
                             }
                         }
                     }
                 }
                 break;
             case 'join':
                 if (is_array($value) and $value) {
                     foreach ($value as $join) {
                         if (isset($join['select'])) {
                             (is_array($join['select']) and $join['select']) ? $query->select_array($join['select']) : $query->select($join['select']);
                         }
                         isset($join['type']) ? $query->join($join['table'], $join['type']) : $query->join($join['table']);
                         $query->on($join['on'][0], $join['on'][1], $join['on'][2]);
                     }
                 }
                 break;
             case 'limit':
                 if (is_array($value) and count($value) > 0) {
                     if (count($value) == 1) {
                         $query->limit($value[0]);
                     }
                     if (count($value) == 2) {
                         $query->limit($value[0]);
                         $query->offset($value[1]);
                     }
                 } else {
                     $query->limit($value);
                 }
                 break;
             case 'order':
                 if (is_array($value) and count($value) > 0) {
                     while (list($key, $direction) = each($value)) {
                         is_int($key) ? $query->order_by($direction) : $query->order_by($key, $direction);
                     }
                 } else {
                     $query->order_by(\DB::expr($value));
                 }
                 break;
             case 'group':
                 if (is_array($value) and count($value) > 0) {
                     foreach ($value as $field) {
                         $query->group_by($field);
                     }
                 } else {
                     $query->group_by($value);
                 }
                 break;
             case 'having':
                 if (is_array($value) and count($value) > 0) {
                     if (count($value) == 2) {
                         $query->having($value[0], $value[1]);
                     }
                     if (count($value) == 3) {
                         $query->having($value[0], $value[1], $value[2]);
                     }
                 }
                 break;
             default:
                 break;
         }
     }
     return $query;
 }
Example #9
0
 protected static function set_where(\Orm\Query $query, $params = array())
 {
     if (!$params) {
         return $query;
     }
     if (!is_array($params)) {
         $params = (array) $params;
     }
     if (!\Arr::is_multi($params)) {
         return static::set_where4not_multi($query, $params);
     }
     if (count($params) == 3 && !is_array($params[0]) && in_array(strToLower($params[2]), array('in', '<', '>', '<=', '>='))) {
         return static::set_where4not_multi($query, $params);
     }
     foreach ($params as $param) {
         $query = static::set_where4not_multi($query, $param);
     }
     return $query;
 }