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);
     }
 }
Exemple #2
0
 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);
 }
Exemple #3
0
    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;
    }