/** * WARNING: proper string/expression escaping is missing * @param array|Zend_Db_Expr|string $expr * @param string|null $alias * @param string|null $separator * @param bool|null $distinct * @param null|array|int|string|Zend_Db_Expr $order * @return $this */ public function groupConcatSet($expr, $alias = null, $separator = null, $distinct = null, $order = null) { debug_assert(is_string($expr) || is_array($expr) || is_object($expr) && $expr instanceof Zend_Db_Expr, "Invalid expression value `" . var_dump_human_compact($expr) . "`"); debug_assert(is_null($alias) || is_string($alias), "Invalid alias value `" . var_dump_human_compact($alias) . "`"); debug_assert(is_null($separator) || is_string($separator), "Invalid separator value `" . var_dump_human_compact($separator) . "`"); debug_assert(is_null($distinct) || is_bool($distinct), "Invalid distinct value `" . var_dump_human_compact($distinct) . "`"); debug_assert(is_null($order) || is_array($order) || is_int($order) || is_string($order) || is_object($order) && $order instanceof Zend_Db_Expr, "Invalid order value `" . var_dump_human_compact($order) . "`"); $convertToString = function ($expr) { if (is_object($expr)) { $expr = strval($expr); } else { if (array_key_exists($expr, $this->schemaColumnsGet())) { $expr = str_wrap($this->getAlias(), '`') . '.' . str_wrap($expr, '`'); } elseif (is_string($expr)) { $expr = str_wrap($expr, '\''); } } return $expr; }; if (is_array($expr)) { $expr = array_chain($expr, array_map_val_dg(tuple_get(0, $convertToString)), array_implode_dg(',')); } else { $expr = $convertToString(strval($expr)); } if ($distinct !== null) { $expr = "DISTINCT {$expr}"; } if ($order !== null) { if (is_array($order)) { $order = array_chain($expr, array_map_val_dg(tuple_get(0, $convertToString)), array_implode_dg(',')); } else { $order = $convertToString(strval($order)); } $expr = "{$expr} ORDER BY {$order}"; } if ($separator !== null) { $expr = "{$expr} SEPARATOR '{$separator}'"; } $expr = "GROUP_CONCAT({$expr})"; if ($alias !== null) { $expr = [$alias => $expr]; } return $this->setColumns($expr, $this->getAlias()); }
/** * @param string $name * @param array $attr * @param string $content * @return string */ function html_tag($name, $attr, $content) { $attrChain = array(array_filter_key_dg(function ($val, $key) { $skip = $val === false; return !$skip; })); if (Doctype::isXhtml()) { $attrChain[] = array_map_val_dg(function ($val, $key) { if (true === $val) { $val = $key; } return $val; }); } $attrChain[] = array_map_key_dg(function ($val, $key) { return preg_replace('/([\\t\\n\\f \\/>"\'=]+)/', '', $key); }); $flags = htmlspecialchars_flags(); $attrChain[] = array_map_val_dg(function ($val, $key) use($flags) { $val = str_wrap(htmlspecialchars($val, ENT_QUOTES | $flags), '"'); return " {$key}={$val}"; }); $attrChain[] = array_implode_dg(''); $attr = call_user_func_array('array_chain', array_merge(array($attr), $attrChain)); if (empty($content)) { if (Doctype::isXhtml()) { $ret = "<{$name}{$attr}/>"; } else { $ret = "<{$name}{$attr}>"; } } else { $ret = "<{$name}{$attr}>{$content}</{$name}>"; } return $ret; }