/foody.blogtamsudev.vn/vendor/yajra/laravel-datatables-oracle/src/Helper.php
https://gitlab.com/ntphuc/BackendFeedy · PHP · 303 lines · 170 code · 39 blank · 94 comment · 22 complexity · b0a902f2cff8e1793b306e46f6809d71 MD5 · raw file
- <?php
- namespace Yajra\Datatables;
- use DateTime;
- use Illuminate\Contracts\Support\Arrayable;
- use Illuminate\Filesystem\Filesystem;
- use Illuminate\Support\Str;
- use Illuminate\View\Compilers\BladeCompiler;
- /**
- * Class Helper.
- *
- * @package Yajra\Datatables
- * @author Arjay Angeles <aqangeles@gmail.com>
- */
- class Helper
- {
- /**
- * Places item of extra columns into results by care of their order.
- *
- * @param $item
- * @param $array
- * @return array
- */
- public static function includeInArray($item, $array)
- {
- if (self::isItemOrderInvalid($item, $array)) {
- return array_merge($array, [$item['name'] => $item['content']]);
- } else {
- $count = 0;
- $last = $array;
- $first = [];
- foreach ($array as $key => $value) {
- if ($count == $item['order']) {
- return array_merge($first, [$item['name'] => $item['content']], $last);
- }
- unset($last[$key]);
- $first[$key] = $value;
- $count++;
- }
- }
- }
- /**
- * Check if item order is valid.
- *
- * @param array $item
- * @param array $array
- * @return bool
- */
- protected static function isItemOrderInvalid($item, $array)
- {
- return $item['order'] === false || $item['order'] >= count($array);
- }
- /**
- * Determines if content is callable or blade string, processes and returns.
- *
- * @param string|callable $content Pre-processed content
- * @param array $data data to use with blade template
- * @param mixed $param parameter to call with callable
- * @return string Processed content
- */
- public static function compileContent($content, array $data, $param)
- {
- if (is_string($content)) {
- return static::compileBlade($content, static::getMixedValue($data, $param));
- } elseif (is_callable($content)) {
- return $content($param);
- }
- return $content;
- }
- /**
- * Parses and compiles strings by using Blade Template System.
- *
- * @param string $str
- * @param array $data
- * @return string
- * @throws \Exception
- */
- public static function compileBlade($str, $data = [])
- {
- if (view()->exists($str)) {
- return view($str, $data)->render();
- }
- $empty_filesystem_instance = new Filesystem();
- $blade = new BladeCompiler($empty_filesystem_instance, 'datatables');
- $parsed_string = $blade->compileString($str);
- ob_start() && extract($data, EXTR_SKIP);
- try {
- eval('?>' . $parsed_string);
- } catch (\Exception $e) {
- ob_end_clean();
- throw $e;
- }
- $str = ob_get_contents();
- ob_end_clean();
- return $str;
- }
- /**
- * @param array $data
- * @param mixed $param
- * @return array
- */
- public static function getMixedValue(array $data, $param)
- {
- $param = self::castToArray($param);
- foreach ($data as $key => $value) {
- if (isset($param[$key])) {
- $data[$key] = $param[$key];
- }
- }
- return $data;
- }
- /**
- * @param $param
- * @return array
- */
- public static function castToArray($param)
- {
- if ($param instanceof \stdClass) {
- $param = (array) $param;
- return $param;
- }
- return $param;
- }
- /**
- * Get equivalent or method of query builder.
- *
- * @param string $method
- * @return string
- */
- public static function getOrMethod($method)
- {
- if (! Str::contains(Str::lower($method), 'or')) {
- return 'or' . ucfirst($method);
- }
- return $method;
- }
- /**
- * Wrap value depending on database type.
- *
- * @param string $database
- * @param string $value
- * @return string
- */
- public static function wrapDatabaseValue($database, $value)
- {
- $parts = explode('.', $value);
- $column = '';
- foreach ($parts as $key) {
- $column = static::wrapDatabaseColumn($database, $key, $column);
- }
- return substr($column, 0, strlen($column) - 1);
- }
- /**
- * Database column wrapper
- *
- * @param string $database
- * @param string $key
- * @param string $column
- * @return string
- */
- public static function wrapDatabaseColumn($database, $key, $column)
- {
- switch ($database) {
- case 'mysql':
- $column .= '`' . str_replace('`', '``', $key) . '`' . '.';
- break;
- case 'sqlsrv':
- $column .= '[' . str_replace(']', ']]', $key) . ']' . '.';
- break;
- case 'pgsql':
- case 'sqlite':
- $column .= '"' . str_replace('"', '""', $key) . '"' . '.';
- break;
- default:
- $column .= $key . '.';
- }
- return $column;
- }
- /**
- * Converts array object values to associative array.
- *
- * @param mixed $row
- * @return array
- */
- public static function convertToArray($row)
- {
- $data = $row instanceof Arrayable ? $row->toArray() : (array) $row;
- foreach (array_keys($data) as $key) {
- if (is_object($data[$key]) || is_array($data[$key])) {
- $data[$key] = self::convertToArray($data[$key]);
- }
- }
- return $data;
- }
- /**
- * @param array $data
- * @return array
- */
- public static function transform(array $data)
- {
- return array_map(function ($row) {
- return self::transformRow($row);
- }, $data);
- }
- /**
- * @param $row
- * @return mixed
- */
- protected static function transformRow($row)
- {
- foreach ($row as $key => $value) {
- if ($value instanceof DateTime) {
- $row[$key] = $value->format('Y-m-d H:i:s');
- } else {
- if (is_object($value)) {
- $row[$key] = (string) $value;
- } else {
- $row[$key] = $value;
- }
- }
- }
- return $row;
- }
- /**
- * Build parameters depending on # of arguments passed.
- *
- * @param array $args
- * @return array
- */
- public static function buildParameters(array $args)
- {
- $parameters = [];
- if (count($args) > 2) {
- $parameters[] = $args[0];
- foreach ($args[1] as $param) {
- $parameters[] = $param;
- }
- } else {
- foreach ($args[0] as $param) {
- $parameters[] = $param;
- }
- }
- return $parameters;
- }
- /**
- * Replace all pattern occurrences with keyword
- *
- * @param array $subject
- * @param string $keyword
- * @param string $pattern
- * @return array
- */
- public static function replacePatternWithKeyword(array $subject, $keyword, $pattern = '$1')
- {
- $parameters = [];
- foreach ($subject as $param) {
- if (is_array($param)) {
- $parameters[] = self::replacePatternWithKeyword($param, $keyword, $pattern);
- } else {
- $parameters[] = str_replace($pattern, $keyword, $param);
- }
- }
- return $parameters;
- }
- }