diff --git a/plugins/demouser/demouser.php b/plugins/demouser/demouser.php new file mode 100644 index 0000000..f22ce21 --- /dev/null +++ b/plugins/demouser/demouser.php @@ -0,0 +1,85 @@ + 'onSystemnaviLoaded', + 'onRolesPermissionsLoaded' => 'onRolesPermissionsLoaded', + 'onPageReady' => 'onPageReady', + ); + } + + # add routes + public static function addNewRoutes() + { + return [ + ['httpMethod' => 'get', 'route' => '/tm/demoaccess', 'name' => 'demoaccess.show', 'class' => 'Typemill\Controllers\ControllerSettings:showBlank', 'resource' => 'user', 'privilege' => 'view'], + ]; + } + + # add new navi-items into the admin settings + public function onSystemnaviLoaded($navidata) + { + $this->addSvgSymbol(''); + $navi = $navidata->getData(); + + $navi['Demoaccess'] = ['routename' => 'demoaccess.show', 'icon' => 'icon-key', 'aclresource' => 'user', 'aclprivilege' => 'view']; + + # set the navigation item active + if(trim($this->getPath(),"/") == 'tm/demoaccess') + { + $navi['Demoaccess']['active'] = true; + } + + $navidata->setData($navi); + } + + + public function onRolesPermissionsLoaded($rolesAndPermissions) + { + $rolesPermissions = $rolesAndPermissions->getData(); + + $demoauthor = [ + 'name' => 'demoauthor', + 'inherits' => 'author', + 'permissions' => [ + 'mycontent' => ['delete'], + 'content' => ['create', 'update'], + ] + ]; + $rolesPermissions['demoauthor'] = $demoauthor; + $rolesAndPermissions->setData($rolesPermissions); + } + + # show subscriberlist in admin area + public function onPageReady($data) + { + # admin stuff + if($this->adminpath && $this->path == 'tm/demoaccess') + { + $settings = $this->getSettings(); + $username = isset($settings['plugins']['demouser']['demouser']) ? $settings['plugins']['demouser']['demouser'] : 'not set'; + $password = isset($settings['plugins']['demouser']['demopassword']) ? $settings['plugins']['demouser']['demopassword'] : 'not set'; + + $pagedata = $data->getData(); + + $twig = $this->getTwig(); + $loader = $twig->getLoader(); + $loader->addPath(__DIR__ . '/templates'); + + # fetch the template and render it with twig + $content = $twig->fetch('/demouser.twig', ['username' => $username, 'password' => $password]); + + $pagedata['content'] = $content; + + $data->setData($pagedata); + } + } + +} \ No newline at end of file diff --git a/plugins/demouser/demouser.yaml b/plugins/demouser/demouser.yaml new file mode 100644 index 0000000..1ef1fd0 --- /dev/null +++ b/plugins/demouser/demouser.yaml @@ -0,0 +1,18 @@ +name: Demouser +version: 1.0.0 +description: Add a new userrole for the demo-instance +author: Sebastian Schürmanns +homepage: https://typemill.net +licence: MIT +list: false + +forms: + fields: + + demouser: + type: text + label: Username for demo + + demopassword: + type: text + label: Password for demo \ No newline at end of file diff --git a/plugins/demouser/templates/demouser.twig b/plugins/demouser/templates/demouser.twig new file mode 100644 index 0000000..1f11773 --- /dev/null +++ b/plugins/demouser/templates/demouser.twig @@ -0,0 +1,10 @@ +
+ +

Ihr Demo-Zugang

+

Mit den folgenden Angaben haben Sie Zugang zur Typemill-Demo. Die Zugangsdaten werden regelmäßig erneuert.

+ +

Mit den Zugangsaten erhalten Sie vollen Zugriff als Administrator, sodass Sie das System ausgiebig testen können. Das System wird regelmäßig in den Ursprungszustand zurückgesetzt.

+
\ No newline at end of file diff --git a/system/Controllers/ControllerFrontendWebsite.php b/system/Controllers/ControllerFrontendWebsite.php index 427d49e..0e967e4 100644 --- a/system/Controllers/ControllerFrontendWebsite.php +++ b/system/Controllers/ControllerFrontendWebsite.php @@ -72,7 +72,15 @@ class ControllerFrontendWebsite extends ControllerShared $logo = false; if(isset($this->settings['logo']) && $this->settings['logo'] != '') { - $logo = 'media/files/' . $this->settings['logo']; + # check if logo exists + if(file_exists($this->settings['rootPath'] . 'media/live/' . $this->settings['logo'])) + { + $logo = 'media/live/' . $this->settings['logo']; + } + elseif(file_exists($this->settings['rootPath'] . 'media/files/' . $this->settings['logo'])) + { + $logo = 'media/files/' . $this->settings['logo']; + } } $favicon = false; diff --git a/system/Controllers/ControllerSettings.php b/system/Controllers/ControllerSettings.php index cbb4df4..73873c9 100644 --- a/system/Controllers/ControllerSettings.php +++ b/system/Controllers/ControllerSettings.php @@ -82,7 +82,7 @@ class ControllerSettings extends ControllerShared $files = $request->getUploadedFiles(); $newSettings = isset($params['settings']) ? $params['settings'] : false; $validate = new Validation(); - $processFiles = new ProcessFile(); + $processImage = new ProcessImage(); if($newSettings) { @@ -151,7 +151,7 @@ class ControllerSettings extends ControllerShared return $response->withRedirect($this->c->router->pathFor('settings.show')); } - if(!$processFiles->checkFolders()) + if(!$processImage->checkFolders()) { $this->c->flash->addMessage('error', 'Please make sure that your media folder exists and is writable.'); return $response->withRedirect($this->c->router->pathFor('settings.show')); @@ -159,9 +159,9 @@ class ControllerSettings extends ControllerShared # handle single input with single file upload $logo = $files['settings']['logo']; + $allowed = ['jpg', 'jpeg', 'png', 'svg']; if($logo->getError() === UPLOAD_ERR_OK) { - $allowed = ['jpg', 'jpeg', 'png', 'svg']; $extension = pathinfo($logo->getClientFilename(), PATHINFO_EXTENSION); if(!in_array(strtolower($extension), $allowed)) { @@ -170,12 +170,20 @@ class ControllerSettings extends ControllerShared return $response->withRedirect($this->c->router->pathFor('settings.show')); } - $processFiles->deleteFileWithName('logo'); - $newSettings['logo'] = $processFiles->moveUploadedFile($logo, $overwrite = true, $name = 'logo'); + foreach($allowed as $logoextension) + { + $processImage->deleteImage('logo.' . $logoextension); + } + + $newSettings['logo'] = $processImage->moveUploadedImage($logo, $overwrite = true, $name = 'logo'); + $processImage->copyImage('logo.' . $logoextension, $processImage->liveFolder, $processImage->thumbFolder); } elseif(isset($params['settings']['deletelogo']) && $params['settings']['deletelogo'] == 'delete') { - $processFiles->deleteFileWithName('logo'); + foreach($allowed as $logoextension) + { + $processImage->deleteImage('logo.' . $logoextension); + } $newSettings['logo'] = ''; } else @@ -195,7 +203,7 @@ class ControllerSettings extends ControllerShared return $response->withRedirect($this->c->router->pathFor('settings.show')); } - $processImage = new ProcessImage([ + $processFavImage = new ProcessImage([ '16' => ['width' => 16, 'height' => 16], '32' => ['width' => 32, 'height' => 32], '72' => ['width' => 72, 'height' => 72], @@ -203,19 +211,19 @@ class ControllerSettings extends ControllerShared '144' => ['width' => 144, 'height' => 144], '180' => ['width' => 180, 'height' => 180], ]); - $favicons = $processImage->generateSizesFromImageFile('favicon.png', $favicon->file); + $favicons = $processFavImage->generateSizesFromImageFile('favicon.png', $favicon->file); foreach($favicons as $key => $favicon) { - imagepng( $favicon, $processFiles->fileFolder . 'favicon-' . $key . '.png' ); - # $processFiles->moveUploadedFile($favicon, $overwrite = true, $name = 'favicon-' . $key); + imagepng( $favicon, $processFavImage->fileFolder . 'favicon-' . $key . '.png' ); } $newSettings['favicon'] = 'favicon'; } elseif(isset($params['settings']['deletefav']) && $params['settings']['deletefav'] == 'delete') { - $processFiles->deleteFileWithName('favicon'); + $processFiles = new ProcessFile(); + $processFiles->deleteFileWithName('favicon-*.png'); $newSettings['favicon'] = ''; } else diff --git a/system/Models/ProcessFile.php b/system/Models/ProcessFile.php index 9f29681..fb6ba8c 100644 --- a/system/Models/ProcessFile.php +++ b/system/Models/ProcessFile.php @@ -13,7 +13,7 @@ class ProcessFile extends ProcessAssets * @param UploadedFile $uploadedFile file uploaded file to move * @return string filename of moved file */ - public function moveUploadedFile(UploadedFile $uploadedFile, $overwrite = false, $name = false) + public function moveUploadedFile(UploadedFile $uploadedFile, $overwrite = false, $name = false, $folder = NULL) { $this->setFileName($uploadedFile->getClientFilename(), 'file'); @@ -104,7 +104,7 @@ class ProcessFile extends ProcessAssets if($name != '' && !in_array($name, array(".",".."))) { - foreach(glob($this->fileFolder . $name . '.*') as $file) + foreach(glob($this->fileFolder . $name) as $file) { unlink($file); } diff --git a/system/Models/ProcessImage.php b/system/Models/ProcessImage.php index 8254792..e9da150 100644 --- a/system/Models/ProcessImage.php +++ b/system/Models/ProcessImage.php @@ -1,6 +1,7 @@ setFileName($uploadedFile->getClientFilename(), 'file'); + + if($name) + { + $this->setFileName($name . '.' . $this->extension, 'file', $overwrite); + } + + if(!$folder) + { + $folder = $this->liveFolder; + } + + $uploadedFile->moveTo($folder . $this->getFullName()); + + return $this->getFullName(); + } public function deleteImage($name) { @@ -301,6 +328,35 @@ class ProcessImage extends ProcessAssets return $result; } + + public function deleteImageWithName($name) + { + # e.g. delete $name = 'logo...'; + + $name = basename($name); + + if($name != '' && !in_array($name, array(".",".."))) + { + foreach(glob($this->liveFolder . $name) as $file) + { + unlink($file); + } + foreach(glob($this->originalFolder . $name) as $file) + { + unlink($file); + } + foreach(glob($this->thumbFolder . $name) as $file) + { + unlink($file); + } + } + } + + public function copyImage($name,$sourcefolder,$targetfolder) + { + copy($sourcefolder . $name, $targetfolder . $name); + } + /* * scans content of a folder (without recursion) * vars: folder path as string