mirror of
https://github.com/snipe/snipe-it.git
synced 2024-12-26 14:09:43 -08:00
239 lines
7.4 KiB
PHP
Executable file
239 lines
7.4 KiB
PHP
Executable file
<?php
|
|
namespace App\Http\Controllers;
|
|
|
|
use Config;
|
|
use Input;
|
|
use Lang;
|
|
use Redirect;
|
|
use App\Models\Setting;
|
|
use Validator;
|
|
use View;
|
|
use App\Models\Group;
|
|
use App\Helpers\Helper;
|
|
|
|
/**
|
|
* This controller handles all actions related to User Groups for
|
|
* the Snipe-IT Asset Management application.
|
|
*
|
|
* @version v1.0
|
|
*/
|
|
class GroupsController extends Controller
|
|
{
|
|
/**
|
|
* Returns a view that invokes the ajax tables which actually contains
|
|
* the content for the user group listing, which is generated in getDatatable.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net]
|
|
* @see GroupsController::getDatatable() method that generates the JSON response
|
|
* @since [v1.0]
|
|
* @return View
|
|
*/
|
|
public function getIndex()
|
|
{
|
|
// Show the page
|
|
return View::make('groups/index', compact('groups'));
|
|
}
|
|
|
|
/**
|
|
* Returns a view that displays a form to create a new User Group.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net]
|
|
* @see GroupsController::postCreate()
|
|
* @since [v1.0]
|
|
* @return View
|
|
*/
|
|
public function getCreate()
|
|
{
|
|
$group = new Group;
|
|
// Get all the available permissions
|
|
$permissions = config('permissions');
|
|
$groupPermissions = array();
|
|
$selectedPermissions = Input::old('permissions', $groupPermissions);
|
|
|
|
// Show the page
|
|
return View::make('groups/edit', compact('permissions', 'selectedPermissions', 'groupPermissions'))->with('group', $group);
|
|
}
|
|
|
|
/**
|
|
* Validates and stores the new User Group data.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net]
|
|
* @see GroupsController::getCreate()
|
|
* @since [v1.0]
|
|
* @return Redirect
|
|
*/
|
|
public function postCreate()
|
|
{
|
|
// create a new group instance
|
|
$group = new Group();
|
|
$group->name = e(Input::get('name'));
|
|
$group->permissions = json_encode(Input::get('permission'));
|
|
|
|
if ($group->save()) {
|
|
return redirect()->to("admin/groups")->with('success', trans('admin/groups/message.success.create'));
|
|
}
|
|
|
|
return redirect()->back()->withInput()->withErrors($group->getErrors());
|
|
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns a view that presents a form to edit a User Group.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net]
|
|
* @see GroupsController::postEdit()
|
|
* @param int $id
|
|
* @since [v1.0]
|
|
* @return View
|
|
*/
|
|
public function getEdit($id = null)
|
|
{
|
|
$group = Group::find($id);
|
|
$permissions = config('permissions');
|
|
$groupPermissions = $group->decodePermissions();
|
|
$selected_array = Helper::selectedPermissionsArray($permissions, $groupPermissions);
|
|
return View::make('groups/edit', compact('group', 'permissions', 'selected_array', 'groupPermissions'));
|
|
}
|
|
|
|
/**
|
|
* Validates and stores the updated User Group data.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net]
|
|
* @see GroupsController::getEdit()
|
|
* @param int $id
|
|
* @since [v1.0]
|
|
* @return Redirect
|
|
*/
|
|
public function postEdit($id = null)
|
|
{
|
|
$permissions = config('permissions');
|
|
if (!$group = Group::find($id)) {
|
|
return redirect()->route('groups')->with('error', trans('admin/groups/message.group_not_found', compact('id')));
|
|
|
|
}
|
|
$group->name = e(Input::get('name'));
|
|
$group->permissions = json_encode(Input::get('permission'));
|
|
|
|
|
|
if (!config('app.lock_passwords')) {
|
|
|
|
if ($group->save()) {
|
|
return redirect()->to("admin/groups")->with('success', trans('admin/groups/message.success.update'));
|
|
}
|
|
return redirect()->back()->withInput()->withErrors($group->getErrors());
|
|
|
|
} else {
|
|
return redirect()->route('update/group', $id)->withInput()->with('error', 'Denied! Editing groups is not allowed in the demo.');
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Validates and deletes the User Group.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net]
|
|
* @see GroupsController::getEdit()
|
|
* @param int $id
|
|
* @since [v1.0]
|
|
* @return Redirect
|
|
*/
|
|
public function getDelete($id = null)
|
|
{
|
|
if (!config('app.lock_passwords')) {
|
|
try {
|
|
// Get group information
|
|
$group = Group::find($id);
|
|
$group->delete();
|
|
|
|
// Redirect to the group management page
|
|
return redirect()->route('groups')->with('success', trans('admin/groups/message.success.delete'));
|
|
} catch (GroupNotFoundException $e) {
|
|
// Redirect to the group management page
|
|
return redirect()->route('groups')->with('error', trans('admin/groups/message.group_not_found', compact('id')));
|
|
}
|
|
} else {
|
|
return redirect()->route('groups')->with('error', trans('general.feature_disabled'));
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Generates the JSON used to display the User Group listing.
|
|
*
|
|
* @author [A. Gianotto] [<snipe@snipe.net>]
|
|
* @since [v2.0]
|
|
* @return String JSON
|
|
*/
|
|
public function getDatatable()
|
|
{
|
|
|
|
if (Input::has('offset')) {
|
|
$offset = e(Input::get('offset'));
|
|
} else {
|
|
$offset = 0;
|
|
}
|
|
|
|
if (Input::has('limit')) {
|
|
$limit = e(Input::get('limit'));
|
|
} else {
|
|
$limit = 50;
|
|
}
|
|
|
|
if (Input::get('sort')=='name') {
|
|
$sort = 'first_name';
|
|
} else {
|
|
$sort = e(Input::get('sort'));
|
|
}
|
|
|
|
// Grab all the groups
|
|
$groups = Group::with('users')->orderBy('name', 'ASC');
|
|
//$users = Company::scopeCompanyables($users);
|
|
|
|
if (Input::has('search')) {
|
|
$groups = $users->TextSearch(e(Input::get('search')));
|
|
}
|
|
|
|
$order = Input::get('order') === 'asc' ? 'asc' : 'desc';
|
|
|
|
$allowed_columns =
|
|
[
|
|
'name','created_at'
|
|
];
|
|
|
|
$sort = in_array($sort, $allowed_columns) ? $sort : 'name';
|
|
$groups = $groups->orderBy($sort, $order);
|
|
|
|
$groupsCount = $groups->count();
|
|
$groups = $groups->skip($offset)->take($limit)->get();
|
|
$rows = array();
|
|
|
|
foreach ($groups as $group) {
|
|
$group_names = '';
|
|
$inout = '';
|
|
$actions = '<nobr>';
|
|
|
|
$actions .= '<a href="' . route('update/group', $group->id) . '" class="btn btn-warning btn-sm"><i class="fa fa-pencil icon-white"></i></a> ';
|
|
|
|
if (!config('app.lock_passwords')) {
|
|
$actions .= '<a data-html="false" class="btn delete-asset btn-danger btn-sm" data-toggle="modal" href="' . route('delete/group', $group->id) . '" data-content="'.trans('admin/groups/message.delete.confirm').'" data-title="Delete ' . htmlspecialchars($group->name) . '?" onClick="return false;"><i class="fa fa-trash icon-white"></i></a> ';
|
|
} else {
|
|
$actions .= ' <span class="btn delete-asset btn-danger btn-sm disabled"><i class="fa fa-trash icon-white"></i></span>';
|
|
}
|
|
|
|
$actions .= '</nobr>';
|
|
|
|
$rows[] = array(
|
|
'id' => $group->id,
|
|
'name' => $group->name,
|
|
'users' => $group->users->count(),
|
|
'created_at' => $group->created_at->format('Y-m-d'),
|
|
'actions' => ($actions) ? $actions : '',
|
|
);
|
|
}
|
|
|
|
$data = array('total'=>$groupsCount, 'rows'=>$rows);
|
|
return $data;
|
|
}
|
|
}
|