/** * @param array|object $collection * @param callable $callable * @param bool $recursionFirst * @return array|object * @throws Exception */ function collection_map_val_recursive($collection, $callable, $recursionFirst = true) { if (is_array($collection)) { $ret = array_map_val_recursive($collection, function () use($callable, $recursionFirst) { $args = func_get_args(); if (!$recursionFirst) { $args[0] = call_user_func_array($callable, $args); } if (is_object($args[0]) || is_array($args[0])) { $args[0] = collection_map_val_recursive($args[0], $callable, $recursionFirst); } if ($recursionFirst) { $args[0] = call_user_func_array($callable, $args); } return $args[0]; }, $recursionFirst); } elseif (is_object($collection)) { $ret = object_map_val_recursive($collection, function () use($callable, $recursionFirst) { $args = func_get_args(); if (!$recursionFirst) { $args[0] = call_user_func_array($callable, $args); } if (is_array($args[0]) || is_object($args[0])) { $args[0] = collection_map_val_recursive($args[0], $callable, $recursionFirst); } if ($recursionFirst) { $args[0] = call_user_func_array($callable, $args); } return $args[0]; }, $recursionFirst); } else { debug_enforce(false, "Cannot handle collection: " . var_dump_human_compact($collection)); $ret = []; } return $ret; }
/** * @return string */ public function toString() { $class = get_called_class(); if ($this->recordExists()) { $data = var_dump_human_compact($this->recordColumnsGet()); return $class . '{' . $data . '}'; } else { $query = $this instanceof Lib_Model_Db_Mysql ? $this->getSQL() : ''; return $class . '{' . $query . '}'; } }
/** * @param mixed $subject * @param callable $predicate * @param callable|null $on_fail * @return mixed */ function ensure($subject, $predicate, $on_fail = null) { if (null === $on_fail) { $on_fail = function ($subject) { debug_assert(false, "Could not assure about variable: " . var_dump_human_compact($subject)); return $subject; }; } if (call_user_func($predicate, $subject)) { $ret = $subject; } else { $ret = call_user_func($on_fail, $subject); } return $ret; }
/** * @param array $array * @param string|int $key * @return mixed */ function array_get($array, $key) { debug_enforce(array_key_exists($key, $array), "Key " . var_dump_human_compact($key) . " do not exists in " . var_dump_human_compact($array)); return $array[$key]; }
/** * WARNING: Only columns copying supported. * @param Lib_Model_Db_Mysql $model * @param string|null $thisKeyCol may contain table prefix or not * @param string|null $thatKeyCol may contain table prefix or not * @param string $conditions * @return $this */ public function joinFrom($model, $thisKeyCol, $thatKeyCol = null, $conditions = '') { if ($thatKeyCol === null) { debug_assert($thisKeyCol !== null); $thatKeyCol = $model->getPrimaryKey(); } elseif ($thisKeyCol === null) { debug_assert($thatKeyCol !== null); $thisKeyCol = $this->getPrimaryKey(); } $this->prefixColumn($model, $thatKeyCol); $this->prefixColumn($this, $thisKeyCol); $conditions = str_replace('{that}', $model->getAlias(), $conditions); $conditions = str_replace('{this}', $this->getAlias(), $conditions); $this->mapPartWhere($this->addAliasToConditionDg()); $model->mapPartWhere($model->addAliasToConditionDg()); $thisFrom = $this->_select->getPart(Zend_Db_Select::FROM); $modelColumns = array_chain($model->_select->getPart(Zend_Db_Select::COLUMNS), array_group_dg(array_get_dg(return_dg(0))), array_map_val_dg(array_chain_dg(array_map_val_dg(function ($descriptor) { return null === $descriptor[2] ? $descriptor[1] : [$descriptor[2] => $descriptor[1]]; }), function ($columns) { $outArray = []; array_map_val($columns, function ($column) use(&$outArray) { if (is_array($column)) { array_map_val($column, function ($column, $alias) use(&$outArray) { $outArray[$alias] = $column; }); } else { $outArray[] = $column; } }); return $outArray; }))); array_each($model->_select->getPart(Zend_Db_Select::FROM), function ($descriptor, $alias) use($modelColumns, $thisFrom, $model, $thisKeyCol, $thatKeyCol, $conditions) { debug_enforce(!array_key_exists($alias, $thisFrom), "Alias `{$alias}` already used for table `{$descriptor['tableName']}`"); switch ($descriptor['joinType']) { case Zend_Db_Select::FROM: $this->_select->joinLeft([$model->getAlias() => $model->getTable()], "{$thisKeyCol}={$thatKeyCol} " . $conditions, array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::INNER_JOIN: $this->_select->joinInner([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::LEFT_JOIN: $this->_select->joinLeft([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::RIGHT_JOIN: $this->_select->joinRight([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::FULL_JOIN: $this->_select->joinFull([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::CROSS_JOIN: $this->_select->joinCross([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; case Zend_Db_Select::NATURAL_JOIN: $this->_select->joinNatural([$alias => $descriptor['tableName']], $descriptor['joinCondition'], array_key_exists($alias, $modelColumns) ? $modelColumns[$alias] : [], $descriptor['schema']); break; default: debug_assert(false, "Unknown join type " . var_dump_human_compact($descriptor['joinType'])); break; } }); $this->settingsJoin($model); return $this; }
/** * @param string $string * @return string */ function html_from_string($string) { if (debug_assert(is_string($string), var_dump_human_compact($string))) { $ret = htmlspecialchars($string, htmlspecialchars_flags()); } else { $ret = ''; } return $ret; }
/** * @param string $str * @param int $n * @return string */ function str_from($str, $n) { debug_enforce_type($str, 'string'); $length = strlen($str); $n = min($n, $length); $ret = $length === $n ? '' : substr($str, $n); debug_assert($ret !== false, var_dump_human_compact(func_get_args())); return $ret; }
/** * @param mixed $var * @param int $level * @return null */ function logger_log_compact($var, $level = LOG_DEBUG) { return logger_log(var_dump_human_compact($var), $level); }
/** * @param string $uri_data * @return array * @throws Exception */ function uri_data_unpack($uri_data) { debug_enforce(preg_match('/^data:([^;,]+)?;?([^;,]+)?;?(base64)?,(.+)$/', $uri_data, $matches), 'Malformed data uri: ' . var_dump_human_compact($uri_data)); return array_rest($matches, 1); }
function file_copy($source, $destination) { debug_enforce(copy($source, $destination), "Cannot copy file from " . var_dump_human_compact($source) . " to " . var_dump_human_compact($destination)); }