public function make($data) { $data = is_object($data) && $data instanceof Container ? $data->assoc() : $data; if (!Arrays::isAssoc($data)) { throw new Exception("This method needs a valid object to process."); } $e = $data['entity'] = $this->entity; $class = $this; $obj = new Container(); $store = function () use($obj, $e) { $class = new Attributes($e); return $class->save($obj); }; $remove = function () use($obj, $e) { $class = new Attributes($e); return $class->delete($obj); }; $date = function ($f) use($obj) { return date('Y-m-d H:i:s', $obj->{$f}); }; $display = function ($f, $echo = true) use($obj) { if (false === $echo) { return Html\Helper::display($obj->{$f}); } else { echo Html\Helper::display($obj->{$f}); } }; $obj->event('store', $store)->event('trash', $remove)->event('date', $date)->event('display', $display); foreach ($data as $k => $v) { if (!isset($obj->{$k})) { $obj->{$k} = $v; } } return $obj; }
private function closures($obj) { $settings = isAke(self::$configs, $this->entity); $class = $this; $class->results = null; $class->wheres = null; $class->joins = null; $class->transactions = null; $extend = function ($name, $callable) use($obj) { if (is_callable($callable)) { $share = function () use($obj, $callable) { $args = func_get_args(); $args[] = $obj; return call_user_func_array($callable, $args); }; $obj->event($name, $share); } }; $export = function () use($class, $obj) { if (isset($obj->id)) { $class->where("id = " . $obj->id)->export(); } }; $save = function () use($class, $obj) { return $class->save($obj->assoc()); }; $delete = function () use($class, $obj) { return $class->delete($obj->getId()); }; $date = function ($f) use($obj) { return date('Y-m-d H:i:s', $obj->{$f}); }; $hydrate = function ($data = array()) use($obj) { $data = empty($data) ? $_POST : $data; if (Arrays::isAssoc($data)) { foreach ($data as $k => $v) { if ("true" == $v) { $v = true; } elseif ("false" == $v) { $v = false; } elseif ("null" == $v) { $v = null; } $obj->{$k} = $v; } } return $obj; }; $display = function ($field, $echo = true) use($obj) { $val = Html\Helper::display($obj->{$field}); if (true === $echo) { echo $val; } else { return $val; } }; $tab = function () use($obj) { return $obj->assoc(); }; $asset = function ($field) use($obj) { return '/storage/img/' . $obj->{$field}; }; $string = function () use($obj) { return $obj->id; }; $obj->event('save', $save)->event('delete', $delete)->event('extend', $extend)->event('date', $date)->event('hydrate', $hydrate)->event('tab', $tab)->event('string', $string)->event('export', $export)->event('display', $display); $functions = isAke($settings, 'functions'); if (count($functions)) { foreach ($functions as $closureName => $callable) { $closureName = lcfirst(Inflector::camelize($closureName)); $share = function () use($obj, $callable) { $args = func_get_args(); $args[] = $obj; return call_user_func_array($callable, $args); }; $obj->event($closureName, $share); } } return $obj; }
private function closures($obj) { $settings = isAke(self::$configs, $this->entity); $class = $this; $class->results = null; $class->wheres = null; $class->joins = null; $class->transactions = null; $export = function () use($class, $obj) { if (isset($obj->id)) { $class->where("id = " . $obj->id)->export(); } }; $save = function () use($class, $obj) { return $class->save($obj->assoc()); }; $delete = function () use($class, $obj) { return $class->delete($obj->getId()); }; $date = function ($f) use($obj) { return date('Y-m-d H:i:s', $obj->{$f}); }; $hydrate = function ($data) use($obj) { if (Arrays::isAssoc($data)) { foreach ($data as $k => $v) { $obj->{$k} = $v; } } return $obj; }; $display = function ($field, $echo = true) use($obj) { $val = Html\Helper::display($obj->{$field}); if (true === $echo) { echo $val; } else { return $val; } }; $tab = function () use($obj) { return $obj->assoc(); }; $asset = function ($field) use($obj) { return '/storage/img/' . $obj->{$field}; }; $extend = function ($n, \Closure $f) use($obj) { if (version_compare(PHP_VERSION, '5.4.0', "<")) { $share = function () use($obj, $f) { return $f($obj); }; } else { $share = $f->bindTo($obj); } $obj->event($n, $share); }; $obj->event('save', $save)->event('delete', $delete)->event('extend', $extend)->event('date', $date)->event('hydrate', $hydrate)->event('tab', $tab)->event('export', $export)->event('display', $display); $functions = isAke($settings, 'functions'); if (count($functions)) { foreach ($functions as $closureName => $callable) { $closureName = lcfirst(Inflector::camelize($closureName)); if (version_compare(PHP_VERSION, '5.4.0', "<")) { $share = function () use($obj, $callable) { return $callable($obj); }; } else { $share = $callable->bindTo($obj); } $obj->event($closureName, $share); } } return $obj; }
public static function link($url, $content, $external = false) { $target = !$external ? '' : 'target="_blank" '; return '<a ' . $target . 'href="' . context('url')->make($url) . '" rel="tooltip" title="' . Html\Helper::display($content) . '">' . Html\Helper::display($content) . '</a>'; }
public function row(array $values) { $class = $this; $class->results = null; $class->wheres = null; $obj = new Container(); $save = function () use($class, $obj) { return $class->push($obj->assoc()); }; $delete = function () use($class, $obj) { return $class->pop($obj->getId()); }; $date = function ($f) use($obj) { return date('Y-m-d H:i:s', $obj->{$f}); }; $hydrate = function ($data) use($obj) { if (Arrays::isAssoc($data)) { foreach ($data as $k => $v) { $obj->{$k} = $v; } } return $obj; }; $display = function ($field) use($obj) { return Html\Helper::display($obj->{$field}); }; $tab = function () use($obj) { return $obj->assoc(); }; $asset = function ($field) use($obj) { return '/storage/img/' . $obj->{$field}; }; $obj->event('save', $save)->event('delete', $delete)->event('date', $date)->event('hydrate', $hydrate)->event('tab', $tab)->event('asset', $asset)->event('display', $display); return $obj->populate($values); }
public static function makeFormElement($field, $value, $fieldInfos, $type, $hidden = false) { if (true === $hidden) { return Form::hidden($field, $value, array('id' => $field)); } $label = Html\Helper::display($fieldInfos['label']); $oldValue = $value; if (Arrays::exists('contentForm', $fieldInfos)) { if (!empty($fieldInfos['contentForm'])) { $content = $fieldInfos['contentForm']; $content = repl(array('##self##', '##field##', '##type##'), array($value, $field, $type), $content); $value = static::internalFunction($content); } } if (true === is_string($value)) { $value = Html\Helper::display($value); } $type = $fieldInfos['fieldType']; $required = $fieldInfos['required']; switch ($type) { case 'select': return Form::select($field, $value, $oldValue, array('id' => $field, 'required' => $required), $label); case 'password': return Form::$type($field, array('id' => $field, 'required' => $required), $label); default: return Form::$type($field, $value, array('id' => $field, 'required' => $required), $label); } }
public static function makeQueryDisplay($queryJs, $type) { $fields = static::getModel($type); $queryJs = substr($queryJs, 9, -2); $query = repl('##', ' AND ', $queryJs); $query = repl('%%', ' ', $query); $query = repl('NOT LIKE', 'ne contient pas', $query); $query = repl('LIKESTART', 'commence par', $query); $query = repl('LIKEEND', 'finit par', $query); $query = repl('LIKE', 'contient', $query); $query = repl('%', '', $query); foreach ($fields as $field => $fieldInfos) { if (strstr($query, $field)) { if (strlen($fieldInfos['content'])) { $seg = Utils::cut($field, " '", $query); $segs = explode(" '", $query); for ($i = 0; $i < count($segs); $i++) { $seg = trim($segs[$i]); if (strstr($seg, $field)) { $goodSeg = trim($segs[$i + 1]); list($oldValue, $dummy) = explode("'", $goodSeg, 2); $content = repl(array('##self##', '##type##', '##field##'), array($oldValue, $type, $field), $fieldInfos['content']); $value = Html\Helper::display(static::internalFunction($content)); $newSeg = repl("{$oldValue}'", "{$value}'", $goodSeg); $query = repl($goodSeg, $newSeg, $query); } } } $query = repl($field, Inflector::lower($fieldInfos['label']), $query); } } $query = repl('=', 'vaut', $query); $query = repl('<', 'plus petit que', $query); $query = repl('>', 'plus grand que', $query); $query = repl('>=', 'plus grand ou vaut', $query); $query = repl('<=', 'plus petit ou vaut', $query); $query = repl(' AND ', ' et ', $query); $query = repl(" '", ' <span style="color: #ffdd00;">', $query); $query = repl("'", '</span>', $query); return $query; }
protected function makeSearch() { $where = !strlen($this->_request->getCrudWhere()) ? '' : Project::makeQueryDisplay($this->_request->getCrudWhere(), $this->_type); $search = '<div class="span10">' . NL; if (!empty($where)) { $search .= '<span class="badge badge-success">Recherche en cours : ' . $where . '</span>'; $search .= ' <a class="btn btn-warning" href="#" onclick="document.location.href = document.URL;"><i class="icon-trash icon-white"></i> Supprimer cette recherche</a> '; } $search .= '<button id="newCrudSearch" type="button" class="btn btn-info" onclick="$(\'#crudSearchDiv\').slideDown();$(\'#newCrudSearch\').hide();$(\'#hideCrudSearch\').show();"><i class="icon-search icon-white"></i> Effectuer une nouvelle recherche</button>'; $search .= ' <button id="hideCrudSearch" type="button" style="display: none;" class="btn btn-danger" onclick="$(\'#crudSearchDiv\').slideUp();$(\'#newCrudSearch\').show();$(\'#hideCrudSearch\').hide();">Masquer la recherche</button>'; $search .= '<fieldset id="crudSearchDiv" style="display:none;">' . NL; $search .= '<hr />' . NL; $i = 0; $fieldsJs = array(); $js = '<script type="text/javascript">' . NL; foreach ($this->_config['fields'] as $field => $infosField) { if (true === $infosField['searchable']) { $fieldsJs[] = "'{$field}'"; $search .= '<div class="control-group">' . NL; $search .= '<label class="control-label">' . Html\Helper::display($infosField['label']) . '</label>' . NL; $search .= '<div class="controls" id="crudControl_' . $i . '">' . NL; $search .= '<select id="crudSearchOperator_' . $i . '"> <option value="=">=</option> <option value="LIKE">Contient</option> <option value="NOT LIKE">Ne contient pas</option> <option value="START">Commence par</option> <option value="END">Finit par</option> <option value="<"><</option> <option value=">">></option> <option value="<=">≤</option> <option value=">=">≥</option> </select>' . NL; $content = $infosField['contentSearch']; if (empty($content)) { $search .= '<input type="text" id="crudSearchValue_' . $i . '" value="" />'; } else { $content = repl(array('##field##', '##type##', '##i##'), array($field, $this->_type, $i), $content); $search .= Crud::internalFunction($content); } $search .= ' <a class="btn" href="#" onclick="addRowSearch(\'' . $field . '\', ' . $i . '); return false;"><i class="icon-plus"></i></a>'; $search .= '</div>' . NL; $search .= '</div>' . NL; $i++; } } $js .= 'var searchFields = [' . implode(', ', $fieldsJs) . ']; var numFieldsSearch = ' . ($i - 1) . ';'; $js .= '</script>' . NL; $search .= '<div class="control-group"> <div class="controls"> <button type="submit" class="btn btn-primary" name="Rechercher" onclick="makeCrudSearch();">Rechercher</button> </div> </div>' . NL; $search .= '</fieldset>' . NL; $search .= '</div> <div class="span2"></div>' . NL . $js . NL; $this->_search = $search; }