aboutsummaryrefslogtreecommitdiffhomepage
path: root/main/app/sprinkles/admin/src
diff options
context:
space:
mode:
authorMarvin Borner2018-04-26 19:15:47 +0200
committerMarvin Borner2018-04-26 19:15:47 +0200
commit853e77c53fd6e51b6418168922649164cc30172d (patch)
tree20dd6c75fae7da8aeba7b693b2f332e80bfd6436 /main/app/sprinkles/admin/src
parent13dc2eabf58f42467e295b4374f6d57c09f01c06 (diff)
Added basic upload feature - will be image upload feature soon
Diffstat (limited to 'main/app/sprinkles/admin/src')
-rw-r--r--main/app/sprinkles/admin/src/Controller/AdminController.php14
-rw-r--r--main/app/sprinkles/admin/src/Controller/PostController.php118
2 files changed, 124 insertions, 8 deletions
diff --git a/main/app/sprinkles/admin/src/Controller/AdminController.php b/main/app/sprinkles/admin/src/Controller/AdminController.php
index da4da8a..91342de 100644
--- a/main/app/sprinkles/admin/src/Controller/AdminController.php
+++ b/main/app/sprinkles/admin/src/Controller/AdminController.php
@@ -5,6 +5,7 @@
* @link https://github.com/userfrosting/UserFrosting
* @license https://github.com/userfrosting/UserFrosting/blob/master/licenses/UserFrosting.md (MIT License)
*/
+
namespace UserFrosting\Sprinkle\Admin\Controller;
use Carbon\Carbon;
@@ -30,8 +31,7 @@ class AdminController extends SimpleController
* Renders the admin panel dashboard
*
*/
- public function pageDashboard($request, $response, $args)
- {
+ public function pageDashboard($request, $response, $args) {
//** @var UserFrosting\Sprinkle\Account\Authorize\AuthorizationManager */
$authorizer = $this->ci->authorizer;
@@ -48,8 +48,8 @@ class AdminController extends SimpleController
// Probably a better way to do this
$users = $classMapper->staticMethod('user', 'orderBy', 'created_at', 'desc')
- ->take(8)
- ->get();
+ ->take(8)
+ ->get();
// Transform the `create_at` date in "x days ago" type of string
$users->transform(function ($item, $key) {
@@ -97,8 +97,7 @@ class AdminController extends SimpleController
* This route requires authentication.
* Request type: POST
*/
- public function clearCache($request, $response, $args)
- {
+ public function clearCache($request, $response, $args) {
/** @var UserFrosting\Sprinkle\Account\Authorize\AuthorizationManager */
$authorizer = $this->ci->authorizer;
@@ -128,8 +127,7 @@ class AdminController extends SimpleController
* This page requires authentication.
* Request type: GET
*/
- public function getModalConfirmClearCache($request, $response, $args)
- {
+ public function getModalConfirmClearCache($request, $response, $args) {
/** @var UserFrosting\Sprinkle\Account\Authorize\AuthorizationManager */
$authorizer = $this->ci->authorizer;
diff --git a/main/app/sprinkles/admin/src/Controller/PostController.php b/main/app/sprinkles/admin/src/Controller/PostController.php
new file mode 100644
index 0000000..e191207
--- /dev/null
+++ b/main/app/sprinkles/admin/src/Controller/PostController.php
@@ -0,0 +1,118 @@
+<?php
+/**
+ * UserFrosting (http://www.userfrosting.com)
+ *
+ * @link https://github.com/userfrosting/UserFrosting
+ * @license https://github.com/userfrosting/UserFrosting/blob/master/licenses/UserFrosting.md (MIT License)
+ */
+
+namespace UserFrosting\Sprinkle\Admin\Controller;
+
+use UserFrosting\Fortress\RequestDataTransformer;
+use UserFrosting\Fortress\RequestSchema;
+use UserFrosting\Fortress\ServerSideValidator;
+use UserFrosting\Support\Exception\ForbiddenException;
+use UserFrosting\Sprinkle\Core\Controller\SimpleController;
+use UserFrosting\Support\Exception\BadRequestException;
+use Slim\Http\Request;
+use Slim\Http\Response;
+use Slim\Http\UploadedFile;
+
+/**
+ * Controller class for user-related requests, including listing users, CRUD for users, etc.
+ *
+ * @author Alex Weissman (https://alexanderweissman.com)
+ */
+class PostController extends SimpleController
+{
+ public function postImage($request, $response, $args) {
+
+ function moveUploadedFile($directory, UploadedFile $uploadedFile) {
+ $extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
+ $basename = bin2hex(random_bytes(8)); // see http://php.net/manual/en/function.random-bytes.php
+ $filename = sprintf('%s.%0.8s', $basename, $extension);
+
+ $uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
+
+ return $filename;
+ }
+
+ $authorizer = $this->ci->authorizer;
+ $currentUser = $this->ci->currentUser;
+ if (!$authorizer->checkAccess($currentUser, 'uri_dashboard')) {
+ throw new ForbiddenException();
+ }
+
+ $directory = $_SERVER['DOCUMENT_ROOT'] . '/beam/social/main/uploads/';
+ $uploadedFiles = $request->getUploadedFiles();
+ $uploadedFile = $uploadedFiles['example1'];
+ if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
+ $filename = moveUploadedFile($directory, $uploadedFile);
+ $response->write('uploaded ' . $filename . '<br/>');
+ }
+
+ foreach ($uploadedFiles['example2'] as $uploadedFile) {
+ if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
+ $filename = moveUploadedFile($directory, $uploadedFile);
+ $response->write('uploaded ' . $filename . '<br/>');
+ }
+ }
+
+ foreach ($uploadedFiles['example3'] as $uploadedFile) {
+ if ($uploadedFile->getError() === UPLOAD_ERR_OK) {
+ $filename = moveUploadedFile($directory, $uploadedFile);
+ $response->write('uploaded ' . $filename . '<br/>');
+ }
+ }
+ }
+
+ /**
+ * Moves the uploaded file to the upload directory and assigns it a unique name
+ * to avoid overwriting an existing uploaded file.
+ *
+ * @param string $directory directory to which the file is moved
+ * @param UploadedFile $uploaded file uploaded file to move
+ * @return string filename of moved file
+ */
+ function moveUploadedFile($directory, UploadedFile $uploadedFile)
+ {
+ $extension = pathinfo($uploadedFile->getClientFilename(), PATHINFO_EXTENSION);
+ $basename = bin2hex(random_bytes(8)); // see http://php.net/manual/en/function.random-bytes.php
+ $filename = sprintf('%s.%0.8s', $basename, $extension);
+
+ $uploadedFile->moveTo($directory . DIRECTORY_SEPARATOR . $filename);
+
+ return $filename;
+ }
+
+ protected function getUserFromParams($params) {
+ // Load the request schema
+ $schema = new RequestSchema('schema://requests/user/get-by-username.yaml');
+
+ // Whitelist and set parameter defaults
+ $transformer = new RequestDataTransformer($schema);
+ $data = $transformer->transform($params);
+
+ // Validate, and throw exception on validation errors.
+ $validator = new ServerSideValidator($schema, $this->ci->translator);
+ if (!$validator->validate($data)) {
+ // TODO: encapsulate the communication of error messages from ServerSideValidator to the BadRequestException
+ $e = new BadRequestException();
+ foreach ($validator->errors() as $idx => $field) {
+ foreach ($field as $eidx => $error) {
+ $e->addUserMessage($error);
+ }
+ }
+ throw $e;
+ }
+
+ /** @var UserFrosting\Sprinkle\Core\Util\ClassMapper $classMapper */
+ $classMapper = $this->ci->classMapper;
+
+ // Get the user to delete
+ $user = $classMapper->staticMethod('user', 'where', 'user_name', $data['user_name'])
+ ->first();
+
+ return $user;
+ }
+}