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')); }
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')); }