diff --git a/app/Core/Controllers/Admin/LogController.php b/app/Core/Controllers/Admin/LogController.php new file mode 100644 index 0000000..42253c3 --- /dev/null +++ b/app/Core/Controllers/Admin/LogController.php @@ -0,0 +1,52 @@ +view->render($response, 'logs/adminLogTable.twig', ['title' => 'core.perms.users.log', 'api' => 'user']); + } + + public function userTable($request, $response) + { + $logs = new Log(); + $table = new DataTable($logs->where('type', '5')->orderBy('created_at', 'desc'), ['id', 'message', 'user_id', 'created_at']); + + $table->setFormatRowFunction(function ($log) { + return [ + $log->name, + $log->message, + (string) $log->created_at + ]; + }); + + return $response->withJson($table->make()); + } + + public function groupIndex($request, $response) + { + return $this->view->render($response, 'logs/adminLogTable.twig', ['title' => 'core.perms.group.log', 'api' => 'group']); + } + + public function groupTable($request, $response) + { + $logs = new Log(); + $table = new DataTable($logs->where('type', '6')->orderBy('created_at', 'desc'), ['id', 'message', 'user_id', 'created_at']); + + $table->setFormatRowFunction(function ($log) { + return [ + $log->name, + $log->message, + (string) $log->created_at + ]; + }); + + return $response->withJson($table->make()); + } +} \ No newline at end of file diff --git a/app/Core/Controllers/Auth/GroupController.php b/app/Core/Controllers/Auth/GroupController.php index 9d76c29..2bdbdd7 100644 --- a/app/Core/Controllers/Auth/GroupController.php +++ b/app/Core/Controllers/Auth/GroupController.php @@ -4,6 +4,7 @@ use CyberWorks\Core\Controllers\Controller; use CyberWorks\Core\Models\Group; +use CyberWorks\Core\Helper\EditLogger; use LiveControl\EloquentDataTable\DataTable; use Respect\Validation\Validator as v; @@ -13,7 +14,7 @@ public function index($request, $response) { return $this->view->render($response, 'groups/index.twig'); } - public function new($request, $response) { + public function newView($request, $response) { return $this->view->render($response, 'groups/new.twig'); } @@ -25,7 +26,7 @@ public function table($request, $response) { return [ '' . $group->group_name . '', ($group->is_superUser == 1 ? "Yes" : "No"), - '' + ' id .',"'. $group->group_name .'")\'>' ]; }); @@ -87,7 +88,8 @@ public function updateGroup($request, $response, $args) { 'can_edit_group_perms_container' => v::optional(v::notEmpty()), 'can_edit_house' => v::optional(v::notEmpty()), 'can_view_houses' => v::optional(v::notEmpty()), - 'can_edit_group_perms_house' => v::optional(v::notEmpty()) + 'can_edit_group_perms_house' => v::optional(v::notEmpty()), + 'can_del_group' => v::optional(v::notEmpty()) ]); if ($req_validation->failed()) { @@ -149,12 +151,15 @@ public function updateGroup($request, $response, $args) { if ($group->can_edit_users != $this->convertCheckBox($request->getParam('can_edit_users'))) $group->can_edit_users = $this->convertCheckBox($request->getParam('can_edit_users')); if ($group->can_add_user != $this->convertCheckBox($request->getParam('can_add_user'))) $group->can_add_user = $this->convertCheckBox($request->getParam('can_add_user')); if ($group->can_del_user != $this->convertCheckBox($request->getParam('can_del_user'))) $group->can_del_user = $this->convertCheckBox($request->getParam('can_del_user')); + if ($group->can_del_group != $this->convertCheckBox($request->getParam('can_del_group'))) $group->can_del_group = $this->convertCheckBox($request->getParam('can_del_group')); if ($group->isDirty()) { $this->container->logger->info("Group: " + $group->id + " Was updated By User:" + $_SESSION['user_id']); $group->save(); } + EditLogger::logEdit('6', "Updated Group ". $group->id ." ". $group->group_name); + return $response->withRedirect($this->router->pathFor('groups')); } @@ -206,7 +211,8 @@ public function newGroup($request, $response) { 'can_edit_group_perms_container' => v::optional(v::notEmpty()), 'can_edit_house' => v::optional(v::notEmpty()), 'can_view_houses' => v::optional(v::notEmpty()), - 'can_edit_group_perms_house' => v::optional(v::notEmpty()) + 'can_edit_group_perms_house' => v::optional(v::notEmpty()), + 'can_del_group' => v::optional(v::notEmpty()) ]); if ($req_validation->failed()) { @@ -274,14 +280,39 @@ public function newGroup($request, $response) { $group->can_edit_users = $this->convertCheckBox($request->getParam('can_edit_users')); $group->can_add_user = $this->convertCheckBox($request->getParam('can_add_user')); $group->can_del_user = $this->convertCheckBox($request->getParam('can_del_user')); + $group->can_del_group = $this->convertCheckBox($request->getParam('can_del_group')); $this->container->logger->info("Group: " + $group->id + " Was Added By User:" + $_SESSION['user_id']); $group->save(); + EditLogger::logEdit('6', "Added Group ". $group->id ." ". $group->group_name); + return $response->withRedirect($this->router->pathFor('groups')); } public function convertCheckBox($input) { return ($input == 'on' ? 1 : 0); } + + public function deleteGroup($request, $response) { + $req_validation = $this->validator->validate($request, [ + 'id' => v::notEmpty() + ]); + + if ($req_validation->failed()) { + return $response->withJson(['error' => 'Validation Failed', 'errors' => $req_validation->errors()], 400); + } + + if ($request->getParam('id') == 1) { + return $response->withJson(['error' => 'Can Not Remove Default Group!'], 400); + } + + $group = Group::find($request->getParam('id')); + + EditLogger::logEdit('6', "Deleted Group ". $group->group_name ." ". $request->getParam('id')); + + $group->delete(); + + return $response->withStatus(200); + } } diff --git a/app/Core/Controllers/Auth/UserController.php b/app/Core/Controllers/Auth/UserController.php index 8c54983..dd01155 100644 --- a/app/Core/Controllers/Auth/UserController.php +++ b/app/Core/Controllers/Auth/UserController.php @@ -6,6 +6,7 @@ use CyberWorks\Core\Controllers\Controller; use CyberWorks\Core\Models\Group; use CyberWorks\Core\Models\User; +use CyberWorks\Core\Helper\EditLogger; use LiveControl\EloquentDataTable\DataTable; use Respect\Validation\Validator as v; @@ -17,7 +18,7 @@ public function index($request, $response) { return $this->view->render($response, 'users/index.twig', $data); } - public function new($request, $response) { + public function newUserView($request, $response) { $groups = Group::all(); $data = ['groups' => $groups]; return $this->view->render($response, 'users/new.twig', $data); @@ -35,7 +36,7 @@ public function table($request, $response) { $user->name, $user->email, '' . $group->group_name . '', - 'id .',"'. $user->name .'","'. $user->email .'",'. $group->id .')\'> id .',"'. $user->name .'")\'>' + 'id .',"'. $user->name .'","'. $user->email .'",'. $group->id .')\'> id .',"'. $user->name .'")\'> id .',"'. $user->name .'")\'>' ]; }); @@ -66,6 +67,8 @@ public function updateUser($request, $response) { $user->save(); } + EditLogger::logEdit('5', "Updated User ". $user->name); + return $response->withStatus(200); } @@ -84,6 +87,27 @@ public function changeUserPassword($request, $response) { $user->password = password_hash($request->getParam('password'), PASSWORD_DEFAULT); $user->save(); + EditLogger::logEdit('5', "Changed ". $user->name ." Password"); + + return $response->withStatus(200); + } + + public function changeOwnPassword($request, $response) { + $req_validation = $this->validator->validate($request, [ + 'password' => v::notEmpty() + ]); + + if ($req_validation->failed()) { + return $response->withJson(['error' => 'Validation Failed', 'errors' => $req_validation->errors()], 400); + } + + $user = User::find($_SESSION['user_id']); + + $user->password = password_hash($request->getParam('password'), PASSWORD_DEFAULT); + $user->save(); + + EditLogger::logEdit('5', "Changed ". $user->name ." Their Password"); + return $response->withStatus(200); } @@ -111,7 +135,28 @@ public function newUser($request, $response) { 'profilePicture' => $picture, ]); + EditLogger::logEdit('5', "Added User ". $request->getParam('username')); + $this->alerts->addMessage('success', 'Account Created'); return $response->withRedirect($this->router->pathFor('dashboard')); } + + public function deleteUser($request, $response) { + $req_validation = $this->validator->validate($request, [ + 'id' => v::notEmpty() + ]); + + if ($req_validation->failed()) { + return $response->withJson(['error' => 'Validation Failed', 'errors' => $req_validation->errors()], 400); + } + + $user = User::find($request->getParam('id')); + + EditLogger::logEdit('5', "Deleted User ". $request->getParam('id') . " " . $user->name); + + $user->delete(); + + + return $response->withStatus(200); + } } \ No newline at end of file diff --git a/app/Core/Controllers/PatchController.php b/app/Core/Controllers/PatchController.php index 97720a5..2f6a8fb 100644 --- a/app/Core/Controllers/PatchController.php +++ b/app/Core/Controllers/PatchController.php @@ -20,7 +20,7 @@ public function doGetRequest($url) public function checkForUpdate($request, $response) { $latestVersion = $this->doGetRequest("https://api.github.com/repos/Cyberbyte-Studios/CyberWorks-3/releases/latest")->tag_name; - $currentVersion = $this->container->config->get('version','1.1.3'); + $currentVersion = $this->container->config->get('version','1.1.4'); $updatedNeeded = false; if ($latestVersion != $currentVersion) $updatedNeeded = true; diff --git a/app/Core/Helper/EditLogger.php b/app/Core/Helper/EditLogger.php new file mode 100644 index 0000000..715c1d2 --- /dev/null +++ b/app/Core/Helper/EditLogger.php @@ -0,0 +1,17 @@ +user_id = $_SESSION['user_id']; + $entry->message = $message; + $entry->type = $type; + + $entry->save(); + } +} \ No newline at end of file diff --git a/app/Core/Middleware/API/GroupIsValidAPIMiddleware.php b/app/Core/Middleware/API/GroupIsValidAPIMiddleware.php new file mode 100644 index 0000000..c0928a8 --- /dev/null +++ b/app/Core/Middleware/API/GroupIsValidAPIMiddleware.php @@ -0,0 +1,21 @@ +getParam('id')); + + if (!$group) { + return $response->withJson(['error' => 'Group Not Found!'], 404); + } + + $response = $next($request, $response); + return $response; + } +} \ No newline at end of file diff --git a/app/Core/Middleware/API/UserIsValidAPIMiddleware.php b/app/Core/Middleware/API/UserIsValidAPIMiddleware.php index edfe351..6d52dc2 100644 --- a/app/Core/Middleware/API/UserIsValidAPIMiddleware.php +++ b/app/Core/Middleware/API/UserIsValidAPIMiddleware.php @@ -3,8 +3,9 @@ namespace CyberWorks\Core\Middleware\API; use CyberWorks\Core\Models\User; +use CyberWorks\Core\Middleware\Middleware; -class UserIsValidAPIMiddleware +class UserIsValidAPIMiddleware extends Middleware { public function __invoke($request, $response, $next) { @@ -17,5 +18,4 @@ public function __invoke($request, $response, $next) $response = $next($request, $response); return $response; } - } \ No newline at end of file diff --git a/app/Core/Models/Group.php b/app/Core/Models/Group.php index 3619a03..56771ce 100644 --- a/app/Core/Models/Group.php +++ b/app/Core/Models/Group.php @@ -55,6 +55,7 @@ class Group extends Model 'can_add_user', 'can_del_user', 'can_edit_container', - 'can_view_containers' + 'can_view_containers', + 'can_del_group' ]; } \ No newline at end of file diff --git a/app/Core/container.php b/app/Core/container.php index 7061933..34c361c 100644 --- a/app/Core/container.php +++ b/app/Core/container.php @@ -24,3 +24,6 @@ $container['PatchController'] = function ($container) { return new CyberWorks\Core\Controllers\PatchController($container); }; +$container['LogController'] = function ($container) { + return new CyberWorks\Core\Controllers\Admin\LogController($container); +}; \ No newline at end of file diff --git a/app/Core/routes.php b/app/Core/routes.php index d15edce..375fcc4 100644 --- a/app/Core/routes.php +++ b/app/Core/routes.php @@ -6,6 +6,7 @@ use CyberWorks\Core\Middleware\Permissions\HasPermissionMiddleware; use CyberWorks\Core\Middleware\API\UserIsValidAPIMiddleware; use CyberWorks\Core\Middleware\GroupIsValidMiddleware; +use CyberWorks\Core\Middleware\API\GroupIsValidAPIMiddleware; $app->group("/auth", function() { $this->get('/login','AuthController:loginPage')->setName('auth.login'); @@ -30,7 +31,7 @@ $this->get('/groups', 'GroupController:index')->add(new HasPermissionMiddleware($this->getContainer(), "can_edit_group_perms"))->setName('groups'); - $this->get('/group/new', 'GroupController:new')->add(new HasPermissionMiddleware($this->getContainer(), "can_make_groups"))->setName('group.new'); + $this->get('/group/new', 'GroupController:newView')->add(new HasPermissionMiddleware($this->getContainer(), "can_make_groups"))->setName('group.new'); $this->post('/group/new', 'GroupController:newGroup')->add(new HasPermissionMiddleware($this->getContainer(), "can_make_groups")); $this->get('/group/{id}', 'GroupController:group')->add(new HasPermissionMiddleware($this->getContainer(), "can_edit_group_perms"))->add(new GroupIsValidMiddleware($this->getContainer())); @@ -38,9 +39,15 @@ $this->get('/users', 'UserController:index')->add(new HasPermissionMiddleware($this->getContainer(), "can_edit_users"))->setName('users'); - $this->get('/user/new', 'UserController:new')->add(new HasPermissionMiddleware($this->getContainer(), "can_add_user")); + $this->get('/user/new', 'UserController:newUserView')->add(new HasPermissionMiddleware($this->getContainer(), "can_add_user")); $this->post('/user/new', 'UserController:newUser')->add(new HasPermissionMiddleware($this->getContainer(), "can_add_user"))->setName('user.new'); + $this->group("/logs", function () { + $container = $this->getContainer(); + $this->get('/user', 'LogController:userIndex')->add(new HasPermissionMiddleware($container, "can_view_logs"))->setName('logs.user'); + $this->get('/group', 'LogController:groupIndex')->add(new HasPermissionMiddleware($container, "can_view_logs"))->setName('logs.group'); + }); + })->add(new AuthenticatedMiddleware($app->getContainer())); $app->group("/api/internal", function() { @@ -51,8 +58,18 @@ $this->post('/users', 'UserController:table'); $this->post('/user/update', 'UserController:updateUser')->add(new HasPermissionAPIMiddleware($this->getContainer(), "can_edit_users"))->add(new UserIsValidAPIMiddleware($this->getContainer()))->setName('user.update'); $this->post('/user/update/password', 'UserController:changeUserPassword')->add(new HasPermissionAPIMiddleware($this->getContainer(), "can_edit_users"))->add(new UserIsValidAPIMiddleware($this->getContainer()))->setName('user.update'); + $this->post('/user/delete', 'UserController:deleteUser')->add(new HasPermissionAPIMiddleware($this->getContainer(), "can_del_user"))->add(new UserIsValidAPIMiddleware($this->getContainer()))->setName('user.delete'); + + $this->post('/group/delete', 'GroupController:deleteGroup')->add(new HasPermissionAPIMiddleware($this->getContainer(), "can_del_group"))->add(new GroupIsValidAPIMiddleware($this->getContainer()))->setName('group.delete'); $this->get('/check/update', 'PatchController:checkForUpdate'); + $this->group("/logs", function () { + $container = $this->getContainer(); + $this->post('/user', 'LogController:userTable')->add(new HasPermissionAPIMiddleware($container, "can_view_logs"))->setName('api.logs.user'); + $this->post('/group', 'LogController:groupTable')->add(new HasPermissionAPIMiddleware($container, "can_view_logs"))->setName('api.logs.group'); + }); + + $this->post('/self/update/password', 'UserController:changeOwnPassword')->setName('self.update'); })->add(new AuthenticatedMiddleware($app->getContainer())); diff --git a/bootstrap/app.php b/bootstrap/app.php index faddc7d..78c12c6 100644 --- a/bootstrap/app.php +++ b/bootstrap/app.php @@ -66,30 +66,36 @@ }; $container['view'] = function ($container) { - $view = new \Slim\Views\Twig( + $view = new \Slim\Views\Twig( __DIR__ . '/../resources/views', [ 'cache' => false, ] - ); + ); - $view->addExtension(new \Slim\Views\TwigExtension( + $view->addExtension(new \Slim\Views\TwigExtension( $container->router, $container->request->getUri() - )); + )); - $view->addExtension(new \CyberWorks\Extension\TranslationExtension( + $view->addExtension(new \CyberWorks\Extension\TranslationExtension( $container->translator - )); + )); - $view->getEnvironment()->addGlobal('auth', [ + $view->getEnvironment()->addGlobal('auth', [ 'authenticated' => $container->auth->isAuthed(), 'user' => $container->auth->user(), 'group' => $container->auth->primaryGroup(), 'isSuperUser' => $container->auth->isSuperUser(), 'permissions' => $container->auth->permissions(), 'useIps' => $container->config->get('useIps', false) - ]); + ]); + + $view->getEnvironment()->addGlobal('life', [ + 'copRanks' => $container->config->get('life.copRanks', false), + 'emsRanks' => $container->config->get('life.emsRanks', false), + 'adminRanks' => $container->config->get('life.adminRanks', false) + ]); $view->getEnvironment()->addGlobal('alerts', $container->alerts); diff --git a/composer.lock b/composer.lock index d268724..2be5112 100644 --- a/composer.lock +++ b/composer.lock @@ -163,7 +163,7 @@ }, { "name": "illuminate/container", - "version": "v5.6.11", + "version": "v5.6.15", "source": { "type": "git", "url": "https://github.com/illuminate/container.git", @@ -207,16 +207,16 @@ }, { "name": "illuminate/contracts", - "version": "v5.6.11", + "version": "v5.6.15", "source": { "type": "git", "url": "https://github.com/illuminate/contracts.git", - "reference": "00a8296c63b6429eb8705d2700c2436ea193c553" + "reference": "965b814964cc4649cd7e933bba2ae3eeb11f2927" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/00a8296c63b6429eb8705d2700c2436ea193c553", - "reference": "00a8296c63b6429eb8705d2700c2436ea193c553", + "url": "https://api.github.com/repos/illuminate/contracts/zipball/965b814964cc4649cd7e933bba2ae3eeb11f2927", + "reference": "965b814964cc4649cd7e933bba2ae3eeb11f2927", "shasum": "" }, "require": { @@ -247,20 +247,20 @@ ], "description": "The Illuminate Contracts package.", "homepage": "https://laravel.com", - "time": "2018-02-20T16:46:51+00:00" + "time": "2018-03-25T12:54:46+00:00" }, { "name": "illuminate/database", - "version": "v5.6.11", + "version": "v5.6.15", "source": { "type": "git", "url": "https://github.com/illuminate/database.git", - "reference": "4d2fc3c816ed402fcac290e6ca7bc855d5313000" + "reference": "56c2ab0b8a2f75764082d9087d43d2a3d46c59b0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/4d2fc3c816ed402fcac290e6ca7bc855d5313000", - "reference": "4d2fc3c816ed402fcac290e6ca7bc855d5313000", + "url": "https://api.github.com/repos/illuminate/database/zipball/56c2ab0b8a2f75764082d9087d43d2a3d46c59b0", + "reference": "56c2ab0b8a2f75764082d9087d43d2a3d46c59b0", "shasum": "" }, "require": { @@ -306,11 +306,11 @@ "orm", "sql" ], - "time": "2018-03-09T13:55:05+00:00" + "time": "2018-03-30T13:11:54+00:00" }, { "name": "illuminate/filesystem", - "version": "v5.6.11", + "version": "v5.6.15", "source": { "type": "git", "url": "https://github.com/illuminate/filesystem.git", @@ -361,30 +361,30 @@ }, { "name": "illuminate/support", - "version": "v5.6.11", + "version": "v5.6.15", "source": { "type": "git", "url": "https://github.com/illuminate/support.git", - "reference": "259f6f17a11b0379340ec5311fcba27bc2a04070" + "reference": "79d074f5a49fa972b3c0ccf4468be2ad92eb3e3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/259f6f17a11b0379340ec5311fcba27bc2a04070", - "reference": "259f6f17a11b0379340ec5311fcba27bc2a04070", + "url": "https://api.github.com/repos/illuminate/support/zipball/79d074f5a49fa972b3c0ccf4468be2ad92eb3e3d", + "reference": "79d074f5a49fa972b3c0ccf4468be2ad92eb3e3d", "shasum": "" }, "require": { "doctrine/inflector": "~1.1", "ext-mbstring": "*", "illuminate/contracts": "5.6.*", - "nesbot/carbon": "^1.20", + "nesbot/carbon": "^1.24.1", "php": "^7.1.3" }, "conflict": { "tightenco/collect": "<5.5.33" }, "suggest": { - "illuminate/filesystem": "Required to use the composer class (5.2.*).", + "illuminate/filesystem": "Required to use the composer class (5.6.*).", "symfony/process": "Required to use the composer class (~4.0).", "symfony/var-dumper": "Required to use the dd function (~4.0)." }, @@ -414,11 +414,11 @@ ], "description": "The Illuminate Support package.", "homepage": "https://laravel.com", - "time": "2018-03-09T16:52:54+00:00" + "time": "2018-03-29T15:55:16+00:00" }, { "name": "illuminate/translation", - "version": "v5.6.11", + "version": "v5.6.15", "source": { "type": "git", "url": "https://github.com/illuminate/translation.git", @@ -586,16 +586,16 @@ }, { "name": "nesbot/carbon", - "version": "1.24.2", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bba6c6e410c6b4317e37a9474aeaa753808c3875" + "reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bba6c6e410c6b4317e37a9474aeaa753808c3875", - "reference": "bba6c6e410c6b4317e37a9474aeaa753808c3875", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cbcf13da0b531767e39eb86e9687f5deba9857b4", + "reference": "cbcf13da0b531767e39eb86e9687f5deba9857b4", "shasum": "" }, "require": { @@ -635,7 +635,7 @@ "datetime", "time" ], - "time": "2018-03-10T10:10:14+00:00" + "time": "2018-03-19T15:50:49+00:00" }, { "name": "nikic/fast-route", @@ -1512,16 +1512,16 @@ }, { "name": "twig/twig", - "version": "v2.4.6", + "version": "v2.4.8", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "d2117ec118c1ff3d28ccddca8212d82787a4809f" + "reference": "7b604c89da162034bdf4bb66310f358d313dd16d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/d2117ec118c1ff3d28ccddca8212d82787a4809f", - "reference": "d2117ec118c1ff3d28ccddca8212d82787a4809f", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/7b604c89da162034bdf4bb66310f358d313dd16d", + "reference": "7b604c89da162034bdf4bb66310f358d313dd16d", "shasum": "" }, "require": { @@ -1530,8 +1530,8 @@ }, "require-dev": { "psr/container": "^1.0", - "symfony/debug": "~2.7", - "symfony/phpunit-bridge": "~3.3@dev" + "symfony/debug": "^2.7", + "symfony/phpunit-bridge": "^3.3" }, "type": "library", "extra": { @@ -1574,7 +1574,7 @@ "keywords": [ "templating" ], - "time": "2018-03-03T16:23:01+00:00" + "time": "2018-04-02T09:24:19+00:00" } ], "packages-dev": [], diff --git a/public/installer.php b/public/installer.php index f1196f9..98511e7 100644 --- a/public/installer.php +++ b/public/installer.php @@ -32,7 +32,7 @@ function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts $config = []; - $config['version'] = "1.1.3"; + $config['version'] = "1.1.4"; $config['slim'] = [ 'settings' => [ @@ -71,6 +71,12 @@ function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts 'allowedGroups' => [], ]; + $config['life'] = [ + 'copRanks' => 7, + 'emsRanks' => 5, + 'adminRanks' => 5, + ]; + try { $connection->query('CREATE TABLE IF NOT EXISTS `cw_users` ( `id` int(11) NOT NULL AUTO_INCREMENT, @@ -142,6 +148,7 @@ function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts `can_del_user` tinyint(1) NOT NULL DEFAULT 0, `can_edit_group_perms_container` tinyint(1) NOT NULL DEFAULT 0, `can_edit_group_perms_house` tinyint(1) NOT NULL DEFAULT 0, + `can_del_group` tinyint(1) NOT NULL DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `id` (`id`), UNIQUE KEY `group_id` (`group_id`) @@ -162,7 +169,7 @@ function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts $connection->query('CREATE TABLE IF NOT EXISTS `cw_logs` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` int(11) NOT NULL, - `type` enum(\'0\',\'1\',\'2\',\'3\',\'4\') NOT NULL DEFAULT \'0\', + `type` enum(\'0\',\'1\',\'2\',\'3\',\'4\',\'5\',\'6\') NOT NULL DEFAULT \'0\', `message` text NOT NULL, `player_id` int(11) DEFAULT NULL, `vehicle_id` int(11) DEFAULT NULL, @@ -176,14 +183,14 @@ function get_gravatar( $email, $s = 80, $d = 'mm', $r = 'g', $img = false, $atts ) ENGINE=InnoDB DEFAULT CHARSET=utf8;'); $connection->query('INSERT INTO `cw_permissions` (`id`, `group_name`, `group_id`, `is_superUser`, `can_view_players`, `can_view_player`, `can_view_vehicles`, `can_view_vehicle`, `can_view_logs`, `can_view_player_civ_lic`, `can_view_player_cop_lic`, `can_view_player_ems_lic`, `can_view_player_notes`, `can_view_player_edit_log`, `can_view_player_vehicles`, `can_view_gangs`, `can_view_containers`, `can_view_houses`, `can_edit_container`, `can_edit_house`, `can_compensate`, `can_blacklist`, `can_add_note`, `can_delete_note`, `can_edit_cash`, `can_edit_bank`, `can_edit_donator`, `can_edit_jailed`, `can_edit_cop_rank`, `can_edit_cop_lic`, `can_edit_ems_rank`, `can_edit_ems_lic`, `can_edit_civ_lic`, `can_edit_admin_rank`, `can_edit_vehicle`, `can_edit_gang`, `can_edit_group_name`, `can_edit_group_perms_player`, `can_edit_group_perms_vehicle`, `can_edit_group_perms_settings`, `can_edit_group_perms_gang`, `can_edit_group_perms`, `can_edit_group_ips_id`, `can_make_groups`, `can_edit_users`, `can_add_user`, `can_del_user`, `can_edit_group_perms_container`, `can_edit_group_perms_house`) VALUES - (1, \'Admin\', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1);'); + (1, \'Root Admin\', 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1);'); $query = $connection->prepare("INSERT INTO `cw_users` (`name`, `password`, `email`, `profilePicture`, `primaryGroup`, `created_at`) VALUES (:username, :password, :email, :profilePicture, '{\"id\":\"1\"}', NOW())"); $query->bindParam(':username', $_POST['admin_user']); - $query->bindParam(':email', $_POST['admin_email']); - $password_hash = password_hash($_POST['admin_password'], PASSWORD_DEFAULT); - $query->bindParam(':password', $password_hash); - $gravatar = get_gravatar($_POST['admin_email']); + $query->bindParam(':email', $_POST['admin_email']); + $password_hash = password_hash($_POST['admin_password'], PASSWORD_DEFAULT); + $query->bindParam(':password', $password_hash); + $gravatar = get_gravatar($_POST['admin_email']); $query->bindParam(':profilePicture', $gravatar); $query->execute(); diff --git a/resources/lang/en/core.php b/resources/lang/en/core.php index efb759f..2d70e41 100644 --- a/resources/lang/en/core.php +++ b/resources/lang/en/core.php @@ -21,12 +21,15 @@ 'vehicle' => 'Vehicle Logs', 'gang' => 'Gang Logs', 'house' => 'House Logs', - 'container' => 'Container Logs' + 'container' => 'Container Logs', + 'user' => 'User Edit Logs', + 'group' => 'Group Edit Logs' ), 'groups' => 'Groups', 'users' => 'Users', 'metrics' => 'Metrics' ), + 'changePW' => 'Change Password', ), 'admin' => array ( 'generic' => array ( @@ -103,6 +106,7 @@ 'groups' => 'Groups', 'actions' => 'Actions', 'sUser' => 'Super User', + 'sure' => 'Are you sure you want to do this?', ), 'users' => array ( 'title' => 'Users', @@ -114,6 +118,7 @@ 'title' => 'New User', 'create' => 'Create Account', ), + 'log' => 'Users Edit', ), 'group' => array ( 'gPerms' => 'Group Permissions', @@ -123,6 +128,8 @@ ), 'ipsID' => 'IPS ID', 'save' => 'Save', + 'delete' => 'Delete Group', + 'log' => 'Group Edit', ), 'admin' => array ( 'ePPG' => 'Edit Player Permission Group', diff --git a/resources/views/groups/group.twig b/resources/views/groups/group.twig index 6af6233..7bc2bd4 100644 --- a/resources/views/groups/group.twig +++ b/resources/views/groups/group.twig @@ -550,6 +550,14 @@ +
+ +
+
+ +
+
+
{% if useIps %}
diff --git a/resources/views/groups/index.twig b/resources/views/groups/index.twig index f62026e..54bff96 100644 --- a/resources/views/groups/index.twig +++ b/resources/views/groups/index.twig @@ -20,6 +20,32 @@
+ + {% if auth.permissions.can_del_group %} + + {% endif %} {% endblock %} {% block script %} @@ -65,5 +91,57 @@ } } }); + + {% if auth.permissions.can_del_group %} + + function showDeleteGroupBox(id, name) { + $("#id_del").val(id); + $("#delete-name").text(name); + + $(".deleteGroup").modal({ + show: 'true' + }); + } + + $("#deleteGroup").click(function() { + $.ajax({ + type: "POST", + url: "{{ base_url() }}/api/internal/group/delete", + data: { + "{{ csrf.javascript.tokenNameKey }}":window.csrfTokenName, + "{{ csrf.javascript.tokenValueKey }}":window.csrfTokenValue, + "id":document.getElementById("id_del").value + }, + complete: function (jqXHR, xhr) { + var csrfToken = jqXHR.getResponseHeader('X-CSRF-Token'); + + if (csrfToken) { + var csrfTokenParsed = $.parseJSON(csrfToken); + + csrfTokenName = csrfTokenParsed.csrf_name; + csrfTokenValue = csrfTokenParsed.csrf_value; + } + + if (jqXHR.status == 200) { + new PNotify({ + title: 'Success', + text: 'Deleted User!', + type: 'success', + styling: 'bootstrap3' + }); + } else { + new PNotify({ + title: 'Oh No!', + text: 'Unable To Delete User!', + type: 'error', + styling: 'bootstrap3' + }); + } + + location.reload(); + } + }); + }); + {% endif %} {% endblock %} \ No newline at end of file diff --git a/resources/views/groups/new.twig b/resources/views/groups/new.twig index 1175117..35462ad 100644 --- a/resources/views/groups/new.twig +++ b/resources/views/groups/new.twig @@ -551,6 +551,14 @@ +
+ +
+
+ +
+
+
{% if useIps %}
diff --git a/resources/views/life/player.twig b/resources/views/life/player.twig index 1237d57..4e570a0 100644 --- a/resources/views/life/player.twig +++ b/resources/views/life/player.twig @@ -1,8 +1,8 @@ {% extends 'templates/template.twig' %} -{% set copRanks = range(0,7) %} -{% set emsRanks = range(0,5) %} -{% set adminRanks = range(0,5) %} +{% set copRanks = range(0,life.copRanks) %} +{% set emsRanks = range(0,life.emsRanks) %} +{% set adminRanks = range(0,life.adminRanks) %} {% block title %} | {{ player.name }} diff --git a/resources/views/logs/adminLogTable.twig b/resources/views/logs/adminLogTable.twig new file mode 100644 index 0000000..eabae6a --- /dev/null +++ b/resources/views/logs/adminLogTable.twig @@ -0,0 +1,71 @@ +{% extends 'templates/template.twig' %} + +{% block content %} +
+
+

{{ translate(title) }} {{ translate('core.generic.logs') }}

+
+
+ +
+ +
+ + + + + + + + + +
+ +
+{% endblock %} + +{% block script %} + + + + + + + + + + + + + + + + + +{% endblock %} \ No newline at end of file diff --git a/resources/views/templates/partials/sidebar_navigation.twig b/resources/views/templates/partials/sidebar_navigation.twig index e21d87c..a4ce8df 100644 --- a/resources/views/templates/partials/sidebar_navigation.twig +++ b/resources/views/templates/partials/sidebar_navigation.twig @@ -112,6 +112,16 @@ {{ translate('core.nav.admin.logs.container') }} +
  • + + {{ translate('core.nav.admin.logs.user') }} + +
  • +
  • + + {{ translate('core.nav.admin.logs.group') }} + +
  • {% endif %} diff --git a/resources/views/templates/partials/top_navigation.twig b/resources/views/templates/partials/top_navigation.twig index b230787..0a79528 100644 --- a/resources/views/templates/partials/top_navigation.twig +++ b/resources/views/templates/partials/top_navigation.twig @@ -16,6 +16,7 @@ {% if useIps %}
  • {{ translate('core.generic.profile') }}
  • {% endif %} +
  • {{ translate('core.nav.changePW') }}
  • {{ translate('core.generic.logOut') }}
  • diff --git a/resources/views/templates/template.twig b/resources/views/templates/template.twig index 2a4b8ee..399b95a 100644 --- a/resources/views/templates/template.twig +++ b/resources/views/templates/template.twig @@ -42,6 +42,34 @@
    + +