aboutsummaryrefslogtreecommitdiff
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/class/Colors.php125
-rw-r--r--app/class/Controllerhome.php18
-rw-r--r--app/class/Model.php2
-rw-r--r--app/class/Opt.php38
-rw-r--r--app/class/Routes.php1
-rw-r--r--app/view/templates/admin.php2
-rw-r--r--app/view/templates/arthead.php6
-rw-r--r--app/view/templates/confirmdelete.php2
-rw-r--r--app/view/templates/connect.php2
-rw-r--r--app/view/templates/edit.php2
-rw-r--r--app/view/templates/font.php2
-rw-r--r--app/view/templates/home.php4
-rw-r--r--app/view/templates/homemenu.php7
-rw-r--r--app/view/templates/homeopt.php4
-rw-r--r--app/view/templates/info.php2
-rw-r--r--app/view/templates/layout.php6
-rw-r--r--app/view/templates/media.php2
-rw-r--r--app/view/templates/timeline.php2
-rw-r--r--app/view/templates/user.php2
19 files changed, 196 insertions, 33 deletions
diff --git a/app/class/Colors.php b/app/class/Colors.php
new file mode 100644
index 0000000..0ad5cca
--- /dev/null
+++ b/app/class/Colors.php
@@ -0,0 +1,125 @@
+<?php
+
+namespace Wcms;
+
+class Colors extends Item
+{
+
+ protected $file = MODEL::CSS_DIR . 'tagcolors.css';
+
+
+ protected $rawcss = "";
+ protected $tagcolor = [];
+
+
+
+ public function __construct(array $taglist = [])
+ {
+ if ($this->readcssfile()) {
+ $this->parsetagcss();
+ }
+ if (!empty($taglist)) {
+ $this->removeaddtags($taglist);
+ $this->tocss();
+ $this->writecssfile();
+ }
+ }
+
+ public function readcssfile(): bool
+ {
+ if (MODEL::dircheck(MODEL::CSS_DIR) && file_exists($this->file)) {
+ $this->rawcss = file_get_contents($this->file);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function removeaddtags(array $taglist = [])
+ {
+ $tagcolor = [];
+ foreach ($taglist as $tag => $tagcount) {
+ if (key_exists($tag, $this->tagcolor)) {
+ $tagcolor[$tag] = $this->tagcolor[$tag];
+ } else {
+ $tagcolor[$tag] = '#' . dechex(rand(50, 255)) . dechex(rand(50, 255)) . dechex(rand(50, 255));
+ }
+ }
+ $this->tagcolor = $tagcolor;
+ }
+
+
+
+ /**
+ * Transform a CSS string in a array of `tag => background-color`
+ *
+ * @return array Ouput array using TAG as key and Hex Color as value
+ */
+ public function parsetagcss()
+ {
+ $pattern = '%.tag\_([a-z0-9\-\_]*)\s*\{\s*background-color:\s*(#[A-Fa-f0-9]{6})\;\s*\}%';
+ preg_match_all($pattern, $this->rawcss, $matches);
+ $tagcolor = array_combine($matches[1], $matches[2]);
+ if ($tagcolor !== false) {
+ $this->tagcolor = $tagcolor;
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ public function tocss()
+ {
+ $css = "";
+ foreach ($this->tagcolor as $tag => $color) {
+ $css .= PHP_EOL . '.tag_' . $tag . ' { background-color: ' . $color . '; }';
+ }
+ $this->rawcss = $css;
+ }
+
+ public function writecssfile()
+ {
+ if (MODEL::dircheck(MODEL::CSS_DIR)) {
+ return file_put_contents($this->file, $this->rawcss);
+ }
+ }
+
+ public function htmlcolorpicker(): string
+ {
+ $html = '<ul>';
+ foreach ($this->tagcolor as $tag => $color) {
+ $html .= PHP_EOL . '<li><input type="color" name="tagcolor[' . $tag . ']" value="' . $color . '" id="color_' . $tag . '"><label for="color_' . $tag . '" >' . $tag . '</label></li>';
+ }
+ $html .= PHP_EOL . '</ul>';
+ return $html;
+ }
+
+
+ // ______________________ G E T _________________________
+
+ public function rawcss()
+ {
+ return $this->rawcss;
+ }
+
+ public function tagcolor()
+ {
+ return $this->tagcolor;
+ }
+
+ // _______________________ S E T _________________________
+
+ public function setrawcss($rawcss)
+ {
+ if(is_string($rawcss)) {
+ $this->rawcss = $rawcss;
+ }
+ }
+
+ public function settagcolor($tagcolor)
+ {
+ if(is_array($tagcolor)) {
+ $this->tagcolor = $tagcolor;
+ }
+ }
+}
diff --git a/app/class/Controllerhome.php b/app/class/Controllerhome.php
index 1603511..d102930 100644
--- a/app/class/Controllerhome.php
+++ b/app/class/Controllerhome.php
@@ -27,16 +27,16 @@ class Controllerhome extends Controllerpage
} else {
-
-
$table = $this->modelhome->getlister();
$this->opt = $this->modelhome->optinit($table);
+ $colors = new Colors($this->opt->taglist());
+
$table2 = $this->modelhome->table2($table, $this->opt);
$columns = $this->modelhome->setcolumns($this->user->columns());
- $vars = ['user' => $this->user, 'table2' => $table2, 'opt' => $this->opt, 'columns' => $columns, 'faviconlist' => $this->mediamanager->listfavicon(), 'editorlist' => $this->usermanager->getlisterbylevel(2, '>=')];
+ $vars = ['user' => $this->user, 'table2' => $table2, 'opt' => $this->opt, 'columns' => $columns, 'faviconlist' => $this->mediamanager->listfavicon(), 'editorlist' => $this->usermanager->getlisterbylevel(2, '>='), 'colors' => $colors];
$vars['footer'] = ['version' => getversion(), 'total' => count($table), 'database' => Config::pagetable()];
if (isset($_POST['query']) && $this->user->iseditor()) {
@@ -61,6 +61,18 @@ class Controllerhome extends Controllerpage
$this->routedirect('home');
}
+ public function colors()
+ {
+ if (isset($_POST['tagcolor']) && $this->user->issupereditor()) {
+ $colors = new Colors();
+ $colors->hydrate($_POST);
+ $colors->tocss();
+ $colors->writecssfile();
+ }
+ $this->routedirect('home');
+
+ }
+
public function search()
{
if (isset($_POST['id']) && !empty($_POST['id'])) {
diff --git a/app/class/Model.php b/app/class/Model.php
index 655de9f..40e3a2e 100644
--- a/app/class/Model.php
+++ b/app/class/Model.php
@@ -139,7 +139,7 @@ abstract class Model
*
* @return bool return true if the dir already exist or was created succesfullt. Otherwise return false
*/
- public function dircheck(string $dir) : bool
+ public static function dircheck(string $dir) : bool
{
if (!is_dir($dir)) {
return mkdir($dir);
diff --git a/app/class/Opt.php b/app/class/Opt.php
index a1492f4..7ffbd62 100644
--- a/app/class/Opt.php
+++ b/app/class/Opt.php
@@ -17,7 +17,7 @@ class Opt extends Item
protected $taglist = [];
protected $authorlist = [];
protected $invert = 0;
- protected $limit= 0;
+ protected $limit = 0;
protected $pagevarlist;
@@ -63,7 +63,7 @@ class Opt extends Item
public function getall()
{
- $optlist = ['sortby', 'order', 'secure', 'tagcompare', 'tagfilter', 'authorcompare', 'authorfilter', 'limit','invert'];
+ $optlist = ['sortby', 'order', 'secure', 'tagcompare', 'tagfilter', 'authorcompare', 'authorfilter', 'limit', 'invert'];
foreach ($optlist as $method) {
if (method_exists($this, $method)) {
@@ -96,7 +96,7 @@ class Opt extends Item
public function sortbyorder($sortby = "")
{
$object = $this->drylist(['sortby', 'order', 'secure', 'tagfilter', 'tagcompare', 'authorfilter', 'authorcompare', 'invert', 'limit']);
- if(!empty($sortby)) {
+ if (!empty($sortby)) {
$object['sortby'] = $sortby;
}
$object['order'] = $object['order'] * -1;
@@ -111,10 +111,10 @@ class Opt extends Item
* @param array $taglist List of tag to be
* @return string html code to be printed
*/
- public function taglinks(array $taglist = []) : string
+ public function taglinks(array $taglist = []): string
{
$tagstring = "";
- foreach ($taglist as $tag ) {
+ foreach ($taglist as $tag) {
$tagstring .= '<a class="tag tag_' . $tag . '" href="?' . $this->getfilteradress(['tagfilter' => [$tag]]) . '" >' . $tag . '</a>' . PHP_EOL;
}
return $tagstring;
@@ -126,11 +126,11 @@ class Opt extends Item
* @param array $authorlist List of author to be
* @return string html code to be printed
*/
- public function authorlinks(array $authorlist = []) : string
+ public function authorlinks(array $authorlist = []): string
{
$authorstring = "";
- foreach ($authorlist as $author ) {
- $authorstring .= '<a class="tag author_' . $author . '" href="?' . $this->getfilteradress(['authorfilter' => [$author]]) . '" >' . $author . '</a>' . PHP_EOL;
+ foreach ($authorlist as $author) {
+ $authorstring .= '<a class="author author_' . $author . '" href="?' . $this->getfilteradress(['authorfilter' => [$author]]) . '" >' . $author . '</a>' . PHP_EOL;
}
return $authorstring;
}
@@ -170,7 +170,27 @@ class Opt extends Item
return urldecode(http_build_query($query));
}
+ public function parsetagcss(string $cssstring)
+ {
+ $classprefix = 'tag';
+ $pattern = '%a\.' . $classprefix . '\_([a-z0-9\-\_]*)\s*\{\s*(background-color):\s*(#[A-F0-6]{6})\;\s*\}%';
+ preg_match($pattern, $cssstring, $matches);
+ foreach ($matches as $value) {
+ }
+ }
+ public function tocss($cssdatas)
+ {
+ $string = '';
+ foreach ($cssdatas as $element => $css) {
+ $string .= PHP_EOL . $element . ' {';
+ foreach ($css as $param => $value) {
+ $string .= PHP_EOL . ' ' . $param . ': ' . $value . ';';
+ }
+ $string .= PHP_EOL . '}' . PHP_EOL;
+ }
+ return $string;
+ }
// _______________________________________________ G E T _______________________________________________
@@ -400,7 +420,7 @@ class Opt extends Item
public function setlimit($limit)
{
$limit = intval($limit);
- if($limit < 0) {
+ if ($limit < 0) {
$limit = 0;
} elseif ($limit >= 10000) {
$limit = 9999;
diff --git a/app/class/Routes.php b/app/class/Routes.php
index 4a87fc8..c4571d9 100644
--- a/app/class/Routes.php
+++ b/app/class/Routes.php
@@ -20,6 +20,7 @@ class Routes
['GET', '/', 'Controllerhome#desktop', 'home'],
['POST', '/', 'Controllerhome#desktop', 'homequery'],
['POST', '/columns', 'Controllerhome#columns', 'homecolumns'],
+ ['POST', '/colors', 'Controllerhome#colors', 'homecolors'],
['GET', '//renderall', 'Controllerhome#renderall', 'homerenderall'],
['POST', '/bookmark', 'Controllerhome#bookmark', 'homebookmark'],
['POST', '/multi', 'Controllerhome#multi', 'multi'],
diff --git a/app/view/templates/admin.php b/app/view/templates/admin.php
index c201d90..f7d25b3 100644
--- a/app/view/templates/admin.php
+++ b/app/view/templates/admin.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'admin', 'css' => $css . 'home.css']) ?>
+<?php $this->layout('layout', ['title' => 'admin', 'stylesheets' => [$css . 'home.css']]) ?>
<?php $this->start('page') ?>
diff --git a/app/view/templates/arthead.php b/app/view/templates/arthead.php
deleted file mode 100644
index b137c7f..0000000
--- a/app/view/templates/arthead.php
+++ /dev/null
@@ -1,6 +0,0 @@
-<meta charset="utf8" />
-<meta name="viewport" content="width=device-width" />
-<link rel="shortcut icon" href="./media/logo.png" type="image/x-icon">
-<title><?= $title ?></title>
-<meta name="description" content="<?= $description ?>">
-<link rel="stylesheet" href="./css/soft.css"> \ No newline at end of file
diff --git a/app/view/templates/confirmdelete.php b/app/view/templates/confirmdelete.php
index 133f32b..24de454 100644
--- a/app/view/templates/confirmdelete.php
+++ b/app/view/templates/confirmdelete.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'delete', 'description' => 'delete', 'css' => $css . 'delete.css']) ?>
+<?php $this->layout('layout', ['title' => 'delete', 'description' => 'delete', 'stylesheets' => [$css . 'home.css']]) ?>
<?php $this->start('page') ?>
diff --git a/app/view/templates/connect.php b/app/view/templates/connect.php
index dca4303..e21b360 100644
--- a/app/view/templates/connect.php
+++ b/app/view/templates/connect.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'Connect', 'description' => 'connect', 'css' => $css . 'connect.css']) ?>
+<?php $this->layout('layout', ['title' => 'Connect', 'description' => 'connect', 'stylesheets' => [$css . 'home.css']]) ?>
diff --git a/app/view/templates/edit.php b/app/view/templates/edit.php
index 5507583..d0125f2 100644
--- a/app/view/templates/edit.php
+++ b/app/view/templates/edit.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => '✏ '.$page->title(), 'css' => $css . 'edit.css', 'favicon' => $page->favicon()]) ?>
+<?php $this->layout('layout', ['title' => '✏ '.$page->title(), 'stylesheets' => [$css . 'edit.css'], 'favicon' => $page->favicon()]) ?>
diff --git a/app/view/templates/font.php b/app/view/templates/font.php
index 8fcf149..cf6d309 100644
--- a/app/view/templates/font.php
+++ b/app/view/templates/font.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'font', 'css' => $css . 'home.css']) ?>
+<?php $this->layout('layout', ['title' => 'font', 'stylesheets' => [$css . 'home.css']]) ?>
<?php $this->start('page') ?>
diff --git a/app/view/templates/home.php b/app/view/templates/home.php
index 9c71b53..fa9ef63 100644
--- a/app/view/templates/home.php
+++ b/app/view/templates/home.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'home', 'css' => $css . 'home.css', 'favicon' => '']) ?>
+<?php $this->layout('layout', ['title' => 'home', 'stylesheets' => [$css . 'home.css', $css . 'tagcolors.css'], 'favicon' => '']) ?>
@@ -16,7 +16,7 @@
<?php
$optlist = $optlist ?? null;
- $this->insert('homemenu', ['user' => $user, 'opt' => $opt, 'optlist' => $optlist, 'pagelist' => $pagelist, 'faviconlist' => $faviconlist, 'editorlist' => $editorlist]);
+ $this->insert('homemenu', ['user' => $user, 'opt' => $opt, 'optlist' => $optlist, 'pagelist' => $pagelist, 'faviconlist' => $faviconlist, 'editorlist' => $editorlist, 'colors' => $colors]);
?>
diff --git a/app/view/templates/homemenu.php b/app/view/templates/homemenu.php
index 669f9f2..51a58e9 100644
--- a/app/view/templates/homemenu.php
+++ b/app/view/templates/homemenu.php
@@ -304,6 +304,13 @@
</ul>
<input type="submit" value="update columns">
</form>
+ <?php if($user->issupereditor()) { ?>
+ <h2>Tag colors</h2>
+ <form action="<?= $this->url('homecolors') ?>" method="post">
+ <?= $colors->htmlcolorpicker() ?>
+ <input type="submit" value="update">
+ </form>
+ <?php } ?>
</div>
</details>
diff --git a/app/view/templates/homeopt.php b/app/view/templates/homeopt.php
index 7f42c8e..05f8d27 100644
--- a/app/view/templates/homeopt.php
+++ b/app/view/templates/homeopt.php
@@ -63,9 +63,9 @@
if (in_array($tagfilter, $opt->tagfilter())) {
- echo '<li><input type="checkbox" name="tagfilter[]" id="tag_' . $tagfilter . '" value="' . $tagfilter . '" checked /><label for="tag_' . $tagfilter . '">' . $tagfilter . ' (' . $count . ')</label></li>';
+ echo '<li><input type="checkbox" name="tagfilter[]" id="tag_' . $tagfilter . '" value="' . $tagfilter . '" checked /><label for="tag_' . $tagfilter . '">' . $tagfilter . ' <span class="counter tag_' . $tagfilter . '">' . $count . '</span></label></li>';
} else {
- echo '<li><input type="checkbox" name="tagfilter[]" id="tag_' . $tagfilter . '" value="' . $tagfilter . '" /><label for="tag_' . $tagfilter . '">' . $tagfilter . ' (' . $count . ')</label></li>';
+ echo '<li><input type="checkbox" name="tagfilter[]" id="tag_' . $tagfilter . '" value="' . $tagfilter . '" /><label for="tag_' . $tagfilter . '">' . $tagfilter . ' <span class="counter tag_' . $tagfilter . '">' . $count . '</span></label></li>';
}
}
if ($in = true || $out = true) {
diff --git a/app/view/templates/info.php b/app/view/templates/info.php
index 9a5357e..a5a5213 100644
--- a/app/view/templates/info.php
+++ b/app/view/templates/info.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'info', 'css' => $css . 'home.css']) ?>
+<?php $this->layout('layout', ['title' => 'info', 'stylesheets' => [$css . 'home.css']]) ?>
<?php $this->start('page') ?>
diff --git a/app/view/templates/layout.php b/app/view/templates/layout.php
index 9259fda..b255738 100644
--- a/app/view/templates/layout.php
+++ b/app/view/templates/layout.php
@@ -12,7 +12,11 @@
<link rel="shortcut icon" href="<?= Wcms\Model::faviconpath() . Wcms\Config::defaultfavicon() ?>" type="image/x-icon">
<?php } ?>
<title><?= $title ?></title>
- <link rel="stylesheet" href="<?= $css ?>">
+
+ <?php foreach ($stylesheets as $stylsheet) { ?>
+ <link rel="stylesheet" href="<?= $stylsheet ?>">
+ <?php } ?>
+
<?php
if (!empty(Wcms\Config::interfacecss())) {
echo '<link rel="stylesheet" href="' . Wcms\Model::csspath() . Wcms\Config::interfacecss() . '">';
diff --git a/app/view/templates/media.php b/app/view/templates/media.php
index f3d87fc..59d0836 100644
--- a/app/view/templates/media.php
+++ b/app/view/templates/media.php
@@ -2,7 +2,7 @@
use Wcms\Model;
-$this->layout('layout', ['title' => 'media', 'css' => $css . 'home.css']) ?>
+$this->layout('layout', ['title' => 'media', 'stylesheets' => [$css . 'home.css']]) ?>
<?php $this->start('page') ?>
diff --git a/app/view/templates/timeline.php b/app/view/templates/timeline.php
index 2db861c..f06180e 100644
--- a/app/view/templates/timeline.php
+++ b/app/view/templates/timeline.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'timeline', 'css' => $css . 'home.css', 'favicon' => '']) ?>
+<?php $this->layout('layout', ['title' => 'timeline', 'stylesheets' => [$css . 'home.css'], 'favicon' => '']) ?>
diff --git a/app/view/templates/user.php b/app/view/templates/user.php
index f281c93..f7b2b25 100644
--- a/app/view/templates/user.php
+++ b/app/view/templates/user.php
@@ -1,4 +1,4 @@
-<?php $this->layout('layout', ['title' => 'user', 'css' => $css . 'home.css']) ?>
+<?php $this->layout('layout', ['title' => 'user', 'stylesheets' => [$css . 'home.css']]) ?>
<?php $this->start('page') ?>