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.
+
+ - Username: {{username}}
+ - Passwort: {{password}}
+
+
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