datatable.directory codebase
				https://datatable.directory/
			
			
		
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							142 lines
						
					
					
						
							3.6 KiB
						
					
					
				
			
		
		
	
	
							142 lines
						
					
					
						
							3.6 KiB
						
					
					
				| <?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 = true;
 | |
| 
 | |
| // 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()]
 | |
|     );
 | |
| }
 | |
| 
 |