<?php const VALI_NAME = 'string|regex:/^[a-z0-9_.-]+$/i|max:255'; const VALI_PASSWORD = 'string|min:6|max:1024'; const VALI_EMAIL = 'string|email|max:255'; const VALI_TEXT = 'string|max:4095'; const VALI_LINE = 'string|max:255'; const FEATURE_FORKS = false; const FEATURE_FAVES = false; const FEATURE_TABLE_COMMENTS = false; const FEATURE_PROPOSALS = false; // global helpers function authed() { return ! \Auth::guest(); } function guest() { return \Auth::guest(); } /** * @return \App\Models\User|null */ function user() { return \Auth::user(); } function ellipsis($s, $len) { return \MightyPork\Utils\Str::ellipsis($s, $len); } function faker() { static $fac = null; if ($fac !== null) return $fac; return $fac = Faker\Factory::create(); } function dark_mode($ifDark=true, $ifLight=false) { return isset($_COOKIE["dark_mode"]) ? $ifDark : $ifLight; } /** * Recursively expand validation rules * * @param $arr * @return array */ function vali($arr) { $result = []; foreach ($arr as $key => $rules) { // top level if (is_array($rules)) { $ar = []; foreach ($rules as $rule) { if (is_string($rule) && strpos($rule, '|') !== false) { foreach (explode('|', $rule) as $rr) { $ar[] = $rr; } } else if (is_array($rule)) { // nested array, assume no further recursion foreach ($rule as $rr) { $ar[] = $rr; } } else { // Rule $ar[] = $rule; } } $result[$key] = $ar; } else { // string or Rule $result[$key] = $rules; } } return $result; } /** * like old(), but decodes stringified json * * @param string $name * @param object|array $default * @return object|array */ function old_json($name, $default) { $old = old($name, null); if (is_string($old)) return json_decode($old); return $default; } // Safe JSON funcs function toJSON($object, $emptyObj=false) { if ($emptyObj) { if ((empty($object) || ($object instanceof \Illuminate\Support\Collection && $object->count()==0))) { return '{}'; } } if (!$object instanceof JsonSerializable && $object instanceof \Illuminate\Contracts\Support\Arrayable) { $object = $object->toArray(); } return \GuzzleHttp\json_encode($object, JSON_UNESCAPED_SLASHES + JSON_UNESCAPED_UNICODE); } function fromJSON($object, $assoc=false) { return \GuzzleHttp\json_decode($object, $assoc); } /** * @param \Illuminate\Support\Collection|array $items * @param int $per_page * @param null|\Closure $mapFn * @return \Illuminate\Pagination\LengthAwarePaginator */ function collection_paginate($items, $per_page, $mapFn = null) { if (!$items instanceof \Illuminate\Support\Collection) { $items = collect($items); } $page = Request::get('page', 1); $pageItems = $items->forPage($page, $per_page)->values(); if (count($pageItems) == 0 && $page > 1) { $page = 1; Request::replace(['page' => $page]); $pageItems = $items->forPage($page, $per_page)->values(); } return new Illuminate\Pagination\LengthAwarePaginator( $mapFn ? $pageItems->map($mapFn) : $pageItems, $items->count(), $per_page, Illuminate\Pagination\Paginator::resolveCurrentPage(), ['path' => Illuminate\Pagination\Paginator::resolveCurrentPath()] ); }