예제 #1
0
 public function permissions($table)
 {
     $table = config('center.tables.' . $table);
     $permissions = DB::table(config('center.db.permissions'))->where('table', $table->name)->lists('level', 'user_id');
     $users = DB::table(config('center.db.users'))->get();
     foreach ($users as &$user) {
         $user->level = isset($permissions[$user->id]) ? $permissions[$user->id] : null;
     }
     $permission_levels = LoginController::getPermissionLevels();
     return view('center::tables.permissions', compact('users', 'table', 'permission_levels'));
 }
예제 #2
0
 public function edit($table, $row_id, $linked_field = false, $linked_row = false)
 {
     # Get object / field / whatever infoz
     $table = config('center.tables.' . $table);
     $tables = config('center.tables');
     # Security
     if (!isset($table->name)) {
         return redirect()->action('\\LeftRight\\Center\\Controllers\\TableController@index')->with('error', trans('center::site.table_does_not_exist'));
     } elseif (!LoginController::checkPermission($table->name, 'edit') || !$table->editable) {
         return redirect()->action('\\LeftRight\\Center\\Controllers\\RowController@index', $table->name)->with('error', trans('center::site.no_permissions_edit'));
     }
     # Retrieve instance/row values
     $row = DB::table($table->name)->where('id', $row_id)->first();
     # Add to return stack
     Trail::manage();
     # Format instance values for form
     foreach ($table->fields as $field) {
         if ($field->type == 'datetime') {
             if (!empty($row->{$field->name})) {
                 $row->{$field->name} = date('m/d/Y h:i A', strtotime($row->{$field->name}));
             }
         } elseif ($field->type == 'checkboxes' || $field->type == 'select') {
             //load options for checkboxes or selects
             $field->options = DB::table($tables[$field->source]->name);
             foreach ($tables[$field->source]->order_by as $order_by => $direction) {
                 $field->options->orderBy($order_by, $direction);
             }
             $field->options = $field->options->lists(self::listColumn($field->source), 'id');
             //indent nested selects
             if ($field->type == 'select' && !empty($related_object->group_by_field)) {
                 $grouped_field = DB::table(config('center.db.fields'))->where('id', $related_object->group_by_field)->first();
                 if ($grouped_field->object_id == $grouped_field->related_object_id) {
                     $field->options = $parents = array();
                     $options = DB::table($related_object->name)->orderBy($related_object->order_by, $related_object->direction)->get();
                     foreach ($options as $option) {
                         if (!empty($option->{$grouped_field->name})) {
                             //calculate indent
                             if (in_array($option->{$grouped_field->name}, $parents)) {
                                 $parents = array_slice($parents, 0, array_search($option->{$grouped_field->name}, $parents) + 1);
                             } else {
                                 $parents[] = $option->{$grouped_field->name};
                             }
                             $option->{$related_object->field->name} = str_repeat('    ', count($parents)) . $option->{$related_object->field->name};
                         } elseif (count($parents)) {
                             $parents = array();
                         }
                         $field->options[$option->id] = $option->{$related_object->field->name};
                     }
                 }
             }
             //select might be nullable
             if ($field->type == 'select' && !$field->required) {
                 $field->options = ['' => ''] + $field->options;
             }
             //get checkbox values todo make a function for consistently getting these checkbox column names
             if ($field->type == 'checkboxes') {
                 $table_key = self::formatKeyColumn($table->name);
                 $foreign_key = self::formatKeyColumn($field->source);
                 $row->{$field->name} = DB::table($field->name)->where($table_key, $row->id)->lists($foreign_key);
             }
         } elseif ($field->type == 'image') {
             $row->{$field->name} = DB::table(config('center.db.files'))->where('id', $row->{$field->name})->first();
             if (!empty($row->{$field->name}->width) && !empty($row->{$field->name}->height)) {
                 $field->width = $row->{$field->name}->width;
                 $field->height = $row->{$field->name}->height;
             }
             list($field->screen_width, $field->screen_height) = FileController::getImageDimensions($field->width, $field->height);
         } elseif ($field->type == 'images') {
             $row->{$field->name} = DB::table(config('center.db.files'))->where('field_id', $field->id)->where('instance_id', $row->id)->orderBy('precedence', 'asc')->get();
             foreach ($row->{$field->name} as &$image) {
                 if (!empty($image->width) && !empty($image->height)) {
                     $image->screen_width = $image->width;
                     $image->screen_width = $image->height;
                 }
             }
             list($field->screen_width, $field->screen_height) = FileController::getImageDimensions($field->width, $field->height);
         } elseif ($field->type == 'permissions') {
             $field->tables = array_where(config('center.tables'), function ($key, $value) {
                 return !in_array($value->name, [config('center.db.files'), config('center.db.permissions')]);
             });
             $permissions = LoginController::permissions($row_id);
             foreach ($field->tables as $permissions_table) {
                 $permissions_table->value = isset($permissions[$permissions_table->name]) ? $permissions[$permissions_table->name] : '';
             }
             $field->options = LoginController::getPermissionLevels();
         } elseif ($field->type == 'slug') {
             if ($field->required && empty($row->{$field->name}) && $field->related_field_id) {
                 //slugify related field to populate this one
                 foreach ($fields as $related_field) {
                     if ($related_field->id == $field->related_field_id) {
                         $row->{$field->name} = Str::slug($row->{$related_field->name});
                     }
                 }
             }
         } elseif ($field->type == 'user') {
             $field->options = DB::table(config('center.db.users'))->orderBy('name')->lists('name', 'id');
             if (!$field->required) {
                 $field->options = ['' => ''] + $field->options;
             }
         } elseif ($field->type == 'us_state') {
             $field->options = trans('center::site.us_states');
             if (!$field->required) {
                 $field->options = ['' => ''] + $field->options;
             }
         } elseif ($field->type == 'country') {
             $field->options = trans('center::site.countries');
             if (!$field->required) {
                 $field->options = ['' => ''] + $field->options;
             }
         }
     }
     // Get linked objects
     $links = [];
     foreach ($table->links as $table_name => $field_name) {
         if ($linked_array = self::index($table_name, $field_name, $row_id)) {
             $links[] = $linked_array;
         }
     }
     return view('center::rows.edit', compact('table', 'row', 'links', 'linked_field', 'linked_row'));
 }