public static function handleAction($entity, $action = NULL, $id = NULL) { if (!$action) { $action = "index"; } try { if (self::$modelConfig = AdminHelper::modelExists($entity)) { if (self::$modelConfig->restrictedAccess && $action != 'ajaxSearch') { $role = \Auth::user()->role; if (!self::$modelConfig->restrictedAccess->{$role}) { \Session::put('accessDenied', true); return \Redirect::route('restricted'); } } self::$entity = $entity; $loginRedirect = \Request::get('getIgnore_loginRedirect') ? true : false; $settings = false; if ($entity == "GtcmsSetting") { if ($action != "index") { throw new \Exception("Invalid action for Settings!"); } if (!is_null($id)) { throw new \Exception("You cannot pass ID for Settings!"); } $action = "edit"; $settings = true; } if (in_array($action, array('edit', 'view', 'delete'))) { return self::$action($id, false, $settings); } else { if (in_array($action, array('add', 'index', 'ajaxMove'))) { return self::$action($loginRedirect); } else { if (in_array($action, array('ajaxSearch'))) { return self::$action(); } else { throw new \Exception("Invalid action!"); } } } } elseif ($action == 'ajaxSearch') { self::$entity = $entity; return self::$action(); } else { throw new \Exception("Model doesn't exist: " . $entity); } } catch (\Exception $e) { return AdminHelper::handleException($e); } }
public static function handleFile($entity, $fileAction, $fileNameField, $id) { $data = array('success' => false, 'message' => trans('gtcms.errorHasOccurred') . ". " . trans('gtcms.pleaseTryAgain') . "."); try { /** @var \App\BaseModel $entity */ $modelConfig = AdminHelper::modelExists($entity); /** @var \App\BaseModel $fullEntity */ $fullEntity = $modelConfig->myFullEntityName(); /** @var \App\BaseModel $object */ // "new" when adding an image/file, "new_gtcms_entry" when deleting it, before the object is saved if ($id == "new" || $id == "new_gtcms_entry") { $object = new $fullEntity(); } else { $object = $fullEntity::find($id); } $field = AdminHelper::getFieldsByParam($modelConfig, 'property', $fileNameField, true); if (\Request::ajax() && $modelConfig && $object && $field) { if (in_array($fileAction, array('uploadFile', 'uploadImage'))) { $fieldRules = $field->rules ? array($field->property => ModelConfig::rulesToArray($field->rules)) : array(); $validator = \Validator::make(\Request::all(), $fieldRules); if ($validator->fails()) { $messages = $validator->getMessageBag()->getMessages(); $message = $messages[$fileNameField][0]; $data['message'] = $message; } else { $fileData = false; $action = 'add'; if ($object->id) { $action = 'edit'; } $input = array(); $parentProperty = AdminHelper::standaloneCheck($modelConfig, $action, $input, $object); if ($fileAction == 'uploadFile' && ($fileFields = AdminHelper::modelConfigHasFile($modelConfig))) { $fileData = FileHandler::process($modelConfig, $fileFields, $parentProperty); } else { if ($fileAction == 'uploadImage' && ($imageFields = AdminHelper::modelConfigHasImage($modelConfig))) { $fileData = ImageHandler::process($modelConfig, $imageFields, $parentProperty); } } if (!empty($fileData[0])) { $object->{$fileNameField} = $fileData[0]['filename']; $method = false; if ($field->displayProperty && $field->displayProperty->method) { $method = $field->displayProperty->method; } if ($fileAction == 'uploadImage') { $method = $method ? $method : "image"; $fileUrl = $object->{$method}('url', $fileData[0]['returnFolder']); $fileOriginalUrl = $object->{$method}('url', 'original'); } else { $method = $method ? $method : "file"; $fileUrl = $fileOriginalUrl = $object->{$method}('url', $fileNameField); } $data = array('success' => true, 'message' => false, 'fileUrl' => $fileUrl, 'fileOriginalUrl' => $fileOriginalUrl, 'filename' => $fileData[0]['filename']); } } } else { if ($fileAction == 'deleteFile') { $data['success'] = true; $method = "file"; $file = true; if (\Request::get('imageFile')) { $method = "image"; $file = false; } $fileNameValue = \Request::get('fileNameValue'); if ($file) { $filePath = $object->{$method}('path', $fileNameField, $fileNameValue); if (file_exists($filePath)) { try { unlink($filePath); } catch (\Exception $e) { Dbar::error("File couldn't be deleted: " . $e->getMessage()); } } } else { $folders = array(); $modelImagesPath = public_path("img/modelImages/" . $entity); $scannedFolders = scandir($modelImagesPath); if ($scannedFolders) { foreach ($scannedFolders as $scannedFolder) { if (!in_array($scannedFolder, array('.', '..'))) { $folders[] = $scannedFolder; } } } foreach ($folders as $folder) { $filePath = $object->{$method}('path', $folder, $fileNameField, $fileNameValue); if (file_exists($filePath)) { try { unlink($filePath); } catch (\Exception $e) { Dbar::error("File couldn't be deleted: " . $e->getMessage()); } } } } if ($object->id) { $object->{$fileNameField} = null; $object->save(); } } } } } catch (\Exception $e) { $preventException = false; if (in_array($e->getCode(), array(ImageHandler::DIM_ERROR, FileHandler::INVALID_FILE_ERROR))) { $preventException = true; } AdminHelper::handleException($e, null, $preventException); $data['message'] = $e->getMessage(); $data['success'] = false; } return \Response::json($data); }
public static function drawObjectTree($objects, ModelConfig $modelConfig, $parentModelConfig, $depth = 0) { $tree = ""; if ($depth == 0) { $tree = "\n\t\t\t\t<table\n\t\t\t\t\tclass='table table-hover hasTreeStructure baseContainer sortContainer" . $depth . "'\n\t\t\t\t\tdata-depth='" . $depth . "'\n\t\t\t\t\tdata-modelname='" . $modelConfig->name . "'\n\t\t\t\t>\n\t\t\t\t\t<tbody>"; } $addParentNameOriginal = $editParentNameOriginal = ""; $parentId = ""; $parentProperty = $objectChildren = false; $printProperty = $modelConfig->printProperty; if ($modelConfig->parent) { $addParentNameOriginal = "?" . $modelConfig->parent->property; $parentProperty = $modelConfig->parent->property; } /** @var BaseModel $object */ foreach ($objects as $object) { $addParentName = $editParentName = ""; $addParentName .= $addParentNameOriginal ? $addParentNameOriginal . '=' . $object->id : ''; $addDisabled = ''; if ($parentProperty) { $parentId = $object->{$parentProperty}; } if ($modelConfig->children) { $objectChildren = $modelConfig->children; $childModelName = $objectChildren->name; $addUrl = '/admin/' . $childModelName . '/add' . $addParentName; } else { $addDisabled = "disabled"; $addUrl = "javascript:;"; } // if objects contains constraining objects, disallow adding children if ($modelConfig->constrainingModels) { foreach ($modelConfig->constrainingModels as $constraint) { if (method_exists($object, $constraint) && $object->{$constraint}->count()) { $addDisabled = "disabled"; $addUrl = "javascript:;"; break; } } } if (property_exists($modelConfig, 'maxDepth') && $object->depth == $modelConfig->maxDepth) { $addDisabled = "disabled"; $addUrl = "javascript:;"; } $hasChildren = false; if ($modelConfig->children) { $method = $objectChildren->method; /** @var Collection $children */ $children = $object->{$method}; if ($children->count()) { $hasChildren = true; } } $linkProperty = $modelConfig->linkProperty; $tree .= "\n\t\t\t\t<tr class='childTableContainer isSortable isSortable" . $depth . " objectId" . $object->id . "' data-depth='" . $depth . "' data-objectid='" . $object->id . "'>\n\t\t\t\t\t<td colspan='3'>\n\t\t\t\t\t\t<table class='table table-hover hasTreeStructure depth" . $depth . "' data-depth='" . $depth . "'>\n\t\t\t\t\t\t\t<tbody>"; $tree .= ' <tr class="depth depth' . $depth . ($hasChildren ? ' hasChildren' : ' notSortable') . '" data-depth="' . $depth . '" data-parentid="' . $parentId . '" data-objectid="' . $object->id . '" > <td class="sortHandle"> <div class="sortHandle"> <i class="fa fa-ellipsis-v"></i> </div> </td> <td><a class="printPropertyValue" href="/admin/' . $modelConfig->name . '/edit/' . $object->id . '">' . $object->{$linkProperty} . '</a></td> <td class="controlButtons controls3">'; if ($modelConfig->getQuickEditFields('all')) { $tree .= '<a href="/admin/' . $modelConfig->name . '/edit/' . $object->id . '" class="btn btn-default btn-xs quickEditButton treeQuickEdit" > <i class="fa fa-pencil-square-o"></i> </a>'; } $tree .= '<a href="' . $addUrl . '" class="btn btn-default btn-xs addButton ' . $addDisabled . '"><i class="fa fa-plus"></i></a>'; if ($object->isDeletable()) { $tree .= ' <a href="/admin/' . $modelConfig->name . '/delete/' . $object->id . '" class="btn btn-default btn-xs deleteButton" data-modelname="' . $modelConfig->name . '" data-objectname="' . $object->{$printProperty} . '" > <i class="fa fa-times"></i> </a>'; } else { $tree .= ' <a href="#" class="btn btn-default btn-xs deleteButton disabled" > <i class="fa fa-times"></i> </a>'; } $tree .= ' </td> </tr>'; if ($modelConfig->children) { $tree .= "\n\t\t\t\t\t<tr class='childTableContainer'>\n\t\t\t\t\t\t<td colspan='3'>\n\t\t\t\t\t\t\t<table class='table table-hover hasTreeStructure sortContainer" . ($depth + 1) . "' data-depth='" . ($depth + 1) . "'>\n\t\t\t\t\t\t\t\t<tbody class='transitionHeight depth" . ($depth + 1) . "'>"; $method = $objectChildren->method; $children = $object->{$method}; if ($children->count()) { $reflect = new \ReflectionClass($children[0]); $childObjectName = $reflect->getShortName(); $childObjectConfig = AdminHelper::modelExists($childObjectName); $tree .= self::drawObjectTree($children, $childObjectConfig, $parentModelConfig, $depth + 1); } $tree .= "\n\t\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t\t</table>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</tr>"; } $tree .= "\n\t\t\t\t\t\t\t</tbody>\n\t\t\t\t\t\t</table>\n\t\t\t\t\t</td>\n\t\t\t\t</tr>"; } if ($depth == 0) { $tree .= "\n\t\t\t\t</tbody>\n\t\t\t</table>"; } return $tree; }