/** * get the Filemanager * * @return Response */ public function postPermission() { $role = Role::find(Input::get('role_id')); if (!empty($role)) { // Validate the inputs $validator = Validator::make(Input::all(), Config::get('validator.admin.permission')); // Check if the form validates with success if ($validator->passes()) { //[id] => name $resources = Cachr::getCache('DB_AdminResourceName'); //Set allowed resources foreach (Input::except(array('role_id', '_token')) as $resource_id) { //['resource_id'] => [id] Log::info('allowed resource : ' . $resource_id); unset($resources[$resource_id]); $permission = Permission::where('role_id', '=', $role->id)->where('resource_id', '=', $resource_id)->first(); if (!empty($permission)) { $permission->type = 'allow'; if (!$permission->save()) { return Redirect::to('admin/role_permission')->with('error_permissions', Lang::get('admin.permission_save_error')); } } } //Set deny resources foreach ($resources as $k => $resource) { $permissions = Permission::where('role_id', '=', $role->id)->where('resource_id', '=', $k)->get(); Log::info('denied resource : ' . $k); foreach ($permissions as $permission) { if (!empty($permission)) { $permission->type = 'deny'; if (!$permission->save()) { return Redirect::to('admin/role_permission')->with('error_permissions', Lang::get('admin.permission_save_error')); } } } } //track user parent::track('update', 'Permission', $role->id); return Redirect::to('admin/role_permission')->with('success_permissions', Lang::get('admin.permission_save_success')); } return Redirect::to('/admin/role_permission')->withInput()->withErrors($validator); } return Redirect::to('/admin/role_permission')->with('error_permissions', Lang::get('admin.role_not_found')); }
/** * Génère a form by a model * @param Object $form * @return Array */ public function generateByModel($model, $modelId, $combine) { $data = array(); $data['locales'] = \Cachr::getCache('DB_LocalesEnabled'); if (is_null($data['locales'])) { $data['locales'][0] = (object) array('id' => Config::get('app.locale'), 'flag' => null); } // Cast l'array en objet $data['form'] = (object) $model; $form = $model->formr($combine); if ($form) { // Cast l'array en objet $form = (object) $form; } else { return false; } if (null != $modelId) { $modelData = $model->find($modelId)->getAttributes(); if ($combine && is_array($combine)) { foreach ($combine as $new_model_name => $value) { $combine_model = $new_model_name::find($value)->getAttributes(); $modelData = array_merge($modelData, $combine_model); } } // Boucle sur les champs pour trouver les champs i18n foreach ($modelData as $key => $value) { if (strpos($key, 'i18n_') !== false) { $splitModel = explode('_', $key); $modelData[$splitModel[1]] = \I18n::read($value); unset($modelData[$key]); } } } $data['form']->id = $form->model; $data['form']->type = $form->type; if (isset($form->action)) { $data['form']->action = $form->action; } $inputs = $form->data; // Boucle sur les inputs foreach ($inputs as $key => $input) { $data['inputs'][$key] = (object) $input; $data['inputs'][$key]->name = $key; if (!isset($data['inputs'][$key]->multiLang)) { $data['inputs'][$key]->multiLang = false; } if (!isset($data['inputs'][$key]->value)) { $data['inputs'][$key]->value = NULL; } $data['inputs'][$key]->i18nInpError = false; // Check if the input is linked to a foreign model if (isset($modelData) && isset($data['inputs'][$key]->foreign) && $data['inputs'][$key]->foreign != null) { if (\Input::old($data['inputs'][$key]->name)) { $data['inputs'][$key]->value = \Input::old($data['inputs'][$key]->name); } else { $localModel = $data['inputs'][$key]->foreign_local_model; $foreignColumn = $data['inputs'][$key]->foreign_column; $foreign = $localModel->hasMany($data['inputs'][$key]->foreign)->where($data['inputs'][$key]->foreign_column_id, $modelData['id'])->first(); if ($foreign == null) { $data['inputs'][$key]->value = null; } else { $data['inputs'][$key]->value = $foreign->{$foreignColumn}; } } } else { if (null == $data['inputs'][$key]->value) { // Si 18n est activé pour cet input if ($data['inputs'][$key]->multiLang) { // Boucle sur les langues et set les valeurs pour les inputs i18n foreach ($data['locales'] as $locale) { $data['inputs'][$key]->value[$locale->id] = \Input::old($data['inputs'][$key]->name . '_lang_' . $locale->id); } // Sinon c'est un input normal } if (\Input::old($data['inputs'][$key]->name)) { $data['inputs'][$key]->value = \Input::old($data['inputs'][$key]->name); // Si il n'y a pas de old value et si la value est setté dans le model } else { if (isset($modelData) && isset($modelData[$data['inputs'][$key]->name]) && null != $modelData[$data['inputs'][$key]->name]) { // Set la value en i18n si elle existe if ($data['inputs'][$key]->multiLang) { foreach ($data['locales'] as $locale) { if (isset($modelData[$data['inputs'][$key]->name][$locale->id]) && $data['inputs'][$key]->value[$locale->id] == null) { $data['inputs'][$key]->value[$locale->id] = $modelData[$data['inputs'][$key]->name][$locale->id]; } } } else { // si c'est pas multilang, on set la value normal $data['inputs'][$key]->value = $modelData[$data['inputs'][$key]->name]; } } } } } // Si c'est un select on génère les options if ($data['inputs'][$key]->type == "select" || $data['inputs'][$key]->type == "multiselect") { // Append la valeur en DB à la key (A bien test correctement) if (\Input::old($data['inputs'][$key]->name)) { $data['inputs'][$key]->key = \Input::old($data['inputs'][$key]->name); } else { if (null != $modelId) { $data['inputs'][$key]->key = $modelData[$data['inputs'][$key]->name]; } else { $data['inputs'][$key]->key = NULL; } } } // Si c'est un multiselect on génère les options if ($data['inputs'][$key]->type == "multiselect") { $data['inputs'][$key]->keys = array(); // Append la valeur en DB à la key (A bien test correctement) if (\Input::old($data['inputs'][$key]->name)) { $oldInput = \Input::old($data['inputs'][$key]->name); foreach ($oldInput as $oldIn) { $data['inputs'][$key]->keys[] = $oldIn; } } else { if (null != $modelId) { // A TESTER A MODIFIER SI BUG /!\ // Recuper le champs en DB (au format json) et le decode pr setter les options $optionsFromModel = json_decode($modelData[$data['inputs'][$key]->name]); // A TERMINER : foreach ($optionsFromModel as $opt) { $data['inputs'][$key]->keys[] = $opt; } } } } if ($data['inputs'][$key]->type == "select" || $data['inputs'][$key]->type == "multiselect") { foreach ($data['inputs'][$key]->options as $keyOpt => $option) { $options[$keyOpt] = (object) $option; } $data['inputs'][$key]->options = $options; } // Set file Type if the input is a filemanager if ($data['inputs'][$key]->type == "filemanager" && !isset($data['inputs'][$key]->typeFilemanager)) { // Set to 0 if typeFilemanager is undefined $data['inputs'][$key]->typeFilemanager = 0; } // Set the height of the wysiwyg if undefined if ($data['inputs'][$key]->type == "wysiwyg" && !isset($data['inputs'][$key]->height)) { // Set to 300 if the height is undefined $data['inputs'][$key]->height = 300; } // Génération des vues $data['inputs'][$key]->view = \Response::view('theme::' . $data['inputs'][$key]->viewPath, array('form' => $form, 'input' => $data['inputs'][$key], 'locales' => $data['locales']))->getOriginalContent(); } return $data; }