summaryrefslogtreecommitdiffstats
path: root/modules/admin.inc.php
diff options
context:
space:
mode:
Diffstat (limited to 'modules/admin.inc.php')
-rw-r--r--modules/admin.inc.php299
1 files changed, 156 insertions, 143 deletions
diff --git a/modules/admin.inc.php b/modules/admin.inc.php
index 2941e21d..97a47819 100644
--- a/modules/admin.inc.php
+++ b/modules/admin.inc.php
@@ -13,145 +13,152 @@ class Page_Admin extends Page
private $tags = false;
private $unusedTags = false;
private $message = false;
-
+
protected function doPreprocess()
{
User::load();
-
+
if (!User::hasPermission('superadmin')) {
Message::addError('no-permission');
Util::redirect('?do=Main');
}
-
- if(Request::get('template')){
+
+ if (Request::get('template')) {
$this->template = Request::get('template');
}
-
- if(Request::get('page')){
+
+ if (Request::get('page')) {
$this->page = Request::get('page');
}
-
- if(Request::get('delete')){
+
+ if (Request::get('delete')) {
$this->delete = Request::get('delete');
}
-
- if(Request::post('update')){
+
+ if (Request::post('update')) {
$this->update = Request::post('update');
}
-
}
protected function doRender()
{
- if($this->update) $this->updateJson();
- if($this->delete && $this->template) $this->deleteTag($this->template,$this->delete);
-
- switch($this->page){
- case 'messages':
- Render::addTemplate('administration/messages', array(
+ if ($this->update)
+ $this->updateJson();
+ if ($this->delete && $this->template)
+ $this->deleteTag($this->template, $this->delete);
+
+ switch ($this->page) {
+ case 'messages':
+ Render::addTemplate('administration/messages', array(
'token' => Session::get('token'),
'msgs' => $this->initMsg(false),
'msgsHC' => $this->initMsg(true)
));
- break;
- case 'templates':
- if($this->templateAnalysis($this->template)){
- Render::addTemplate('administration/template', array(
+ break;
+ case 'templates':
+ if ($this->templateAnalysis($this->template)) {
+ Render::addTemplate('administration/template', array(
+ 'token' => Session::get('token'),
+ 'template' => $this->template,
+ 'path' => $this->path,
+ 'tags' => $this->tags
+ ));
+ break;
+ }
+ default:
+ $this->initTable();
+ Render::addTemplate('administration/_page', array(
'token' => Session::get('token'),
- 'template' => $this->template,
- 'path' => $this->path,
- 'tags' => $this->tags
+ 'adminMessage' => $this->message,
+ 'table' => $this->table
));
- break;
- }
- default:
- $this->initTable();
- Render::addTemplate('administration/_page', array(
- 'token' => Session::get('token'),
- 'adminMessage' => $this->message,
- 'table' => $this->table
- ));
}
-
-
}
-
- private function initTable(){
+
+ private function initTable()
+ {
$this->listTemplates();
$de = $this->listJson('de/');
$en = $this->listJson('en/');
$pt = $this->listJson('pt/');
-
- foreach($this->files as $key => $value){
-
+
+ foreach ($this->files as $key => $value) {
+
$this->table[] = array(
'template' => $value,
'link' => $key,
- 'de' => $this->checkJson($de[$key],'de'),
- 'en' => $this->checkJson($en[$key],'en'),
- 'pt' => $this->checkJson($pt[$key],'pt')
+ 'de' => $this->checkJson($de[$key], 'de'),
+ 'en' => $this->checkJson($en[$key], 'en'),
+ 'pt' => $this->checkJson($pt[$key], 'pt')
);
}
-
+
sort($this->table);
}
-
- private function listTemplates(){
+
+ private function listTemplates()
+ {
$this->files = array();
$dir = 'templates/';
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
- foreach($objects as $name => $object){
- if(array_pop(explode('.',$name)) === 'html'){
+ foreach ($objects as $name => $object) {
+ if (array_pop(explode('.', $name)) === 'html') {
$key = str_replace($dir, '', $name);
$key = str_replace('.html', '', $key);
- $this->files[$key] = $name;
- }
+ $this->files[$key] = $name;
+ }
}
}
-
- private function listJson($lang){
+
+ private function listJson($lang)
+ {
$json = array();
$dir = 'lang/' . $lang;
$objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir));
- foreach($objects as $name => $object){
- if(array_pop(explode('.',$name)) === 'json'){
+ foreach ($objects as $name => $object) {
+ if (array_pop(explode('.', $name)) === 'json') {
$key = str_replace($dir, '', $name);
$key = str_replace('.json', '', $key);
- $json[$key] = $key;
- }
+ $json[$key] = $key;
+ }
}
return $json;
}
-
- private function checkJson($path,$lang){
- if(!$path){
+
+ private function checkJson($path, $lang)
+ {
+ if (!$path) {
return "JSON file is missing";
- }else{
+ } else {
$htmlTemplate = file_get_contents('templates/' . $path . '.html');
- $json = Dictionary::getArrayTemplate($path,$lang);
+ $json = Dictionary::getArrayTemplate($path, $lang);
preg_match_all('/{{lang_(.*?)}}/s', $htmlTemplate, $matches);
$htmlCount = count(array_unique($matches[1]));
$matchCount = 0;
-
- foreach($json as $key => $value){
- if($key != 'lang'){
- if(!in_array(preg_replace('/^lang_/', '', $key), $matches[1])){
+
+ foreach ($json as $key => $value) {
+ if ($key != 'lang') {
+ if (!in_array(preg_replace('/^lang_/', '', $key), $matches[1])) {
$matchCount++;
- }else if($value != ''){
+ } else if ($value != '') {
$matchCount++;
}
}
}
-
+
$diff = $htmlCount - $matchCount;
- if($diff == 0) return "OK";
- if($diff > 0) return $diff . " JSON tag(s) are missing";
- if($diff < 0) return ($diff * -1) . " JSON tag(s) are not being used";
+ if ($diff == 0)
+ return "OK";
+ if ($diff > 0)
+ return $diff . " JSON tag(s) are missing";
+ if ($diff < 0)
+ return ($diff * -1) . " JSON tag(s) are not being used";
}
}
-
- private function templateAnalysis($path){
- if(!file_exists('templates/' . $path . '.html')){
+
+ private function templateAnalysis($path)
+ {
+ if (!file_exists('templates/' . $path . '.html')) {
Message::addError('invalid-template');
return false;
}
@@ -159,124 +166,130 @@ class Page_Admin extends Page
preg_match_all('/{{lang_(.*?)}}/s', $htmlTemplate, $matches);
$tags = $matches[1];
$tags = array_flip($tags);
- foreach ($tags as $key => $value)
- {
- $tags['lang_'.$key] = $value;
+ foreach ($tags as $key => $value) {
+ $tags['lang_' . $key] = $value;
unset($tags[$key]);
}
-
+
$langArray = array('en');
$json = array();
- foreach($langArray as $lang){
- $jsonTags = Dictionary::getArrayTemplate($path,$lang);
- $json = array_merge($json,$jsonTags);
+ foreach ($langArray as $lang) {
+ $jsonTags = Dictionary::getArrayTemplate($path, $lang);
+ $json = array_merge($json, $jsonTags);
}
-
+
unset($json['lang']);
- $test = array_merge($json,$tags);
-
- foreach($test as $tag=>$value){
+ $test = array_merge($json, $tags);
+
+ foreach ($test as $tag => $value) {
$this->tags[] = array(
'tag' => $tag,
- 'de' => $this->checkJsonTag($path,$tag,'de/'),
- 'en' => $this->checkJsonTag($path,$tag,'en/'),
- 'pt' => $this->checkJsonTag($path,$tag,'pt/'),
- 'class' => $this->checkJsonTags($path,$tag)
+ 'de' => $this->checkJsonTag($path, $tag, 'de/'),
+ 'en' => $this->checkJsonTag($path, $tag, 'en/'),
+ 'pt' => $this->checkJsonTag($path, $tag, 'pt/'),
+ 'class' => $this->checkJsonTags($path, $tag)
);
}
-
+
$this->path = $path;
-
+
return true;
}
-
- private function checkJsonTag($path,$tag,$lang){
- if($json = Dictionary::getArrayTemplate($path,$lang)){
+
+ private function checkJsonTag($path, $tag, $lang)
+ {
+ if ($json = Dictionary::getArrayTemplate($path, $lang)) {
return $json[$tag];
}
- return '';
+ return '';
}
-
- private function checkJsonTags($path,$tag){
+
+ private function checkJsonTags($path, $tag)
+ {
$htmlTemplate = file_get_contents('templates/' . $path . '.html');
$htmlCount = substr_count($htmlTemplate, $tag);
- if($htmlCount < 1) return "danger";
-
- $langArray = array('de/','en/','pt/');
- foreach($langArray as $lang){
- if($json = Dictionary::getArrayTemplate($path,$lang)){
- if(!isset($json[$tag]) || $json[$tag] == '') return 'warning';
+ if ($htmlCount < 1)
+ return "danger";
+
+ $langArray = array('de/', 'en/', 'pt/');
+ foreach ($langArray as $lang) {
+ if ($json = Dictionary::getArrayTemplate($path, $lang)) {
+ if (!isset($json[$tag]) || $json[$tag] == '')
+ return 'warning';
}
}
- return '';
+ return '';
}
-
- private function updateJson(){
- $langArray = unserialize(SITE_LANGUAGES);
- $json = array(
- 'de' => array(),
- 'en' => array(),
- 'pt' => array()
- );
-
- foreach($_REQUEST as $key => $value){
- $str = explode('#',$key);
+
+ private function updateJson()
+ {
+ $langArray = Dictionary::getLanguages();
+ $json = array();
+ foreach ($langArray as $lang) {
+ $json[$lang] = array();
+ }
+
+ foreach ($_REQUEST as $key => $value) {
+ $str = explode('#', $key, 3);
+ if (count($str) !== 3)
+ continue;
$pre = $str[0];
$lang = $str[1];
$tag = $str[2];
- if($pre == 'lang'){
- if(in_array($lang,$langArray)){
- if($tag != 'newtag')
+ if ($pre === 'lang') {
+ if (in_array($lang, $langArray)) {
+ if ($tag !== 'newtag')
$json[$lang][$tag] = $value;
- else{
+ else {
$json[$lang][$_REQUEST['newtag']] = $value;
}
}
}
-
}
-
- foreach($json as $key => $array){
- $path = 'lang/' . $key . '/' . $_POST['path'] . '.json';
- $json = json_encode($array,true);
- if(!file_put_contents($path,$json)){
+
+ foreach ($json as $key => $array) {
+ $path = 'lang/' . $key . '/' . $_POST['path'] . '.json'; // TODO: Wtf? Unvalidated user input -> filesystem access!
+ $json = json_encode($array, JSON_PRETTY_PRINT);
+ if (@file_put_contents($path, $json) === false) {
Message::addError('invalid-template');
return false;
}
}
Message::addSuccess('updated-tags');
}
-
- private function initMsg($isHardcoded){
+
+ private function initMsg($isHardcoded)
+ {
$msgs = array();
$path = 'messages';
- if($isHardcoded){
+ if ($isHardcoded) {
$path = 'messages-hardcoded';
}
- $json = Dictionary::getArrayTemplate($path,$lang);
- foreach($json as $key => $array){
- if($key != 'lang')
- $msgs[] = array(
- 'tag' => $key,
- 'de' => $this->checkJsonTag($path,$key,'de/'),
- 'en' => $this->checkJsonTag($path,$key,'en/'),
- 'pt' => $this->checkJsonTag($path,$key,'pt/')
- );
+ $json = Dictionary::getArrayTemplate($path, $lang);
+ foreach ($json as $key => $array) {
+ if ($key != 'lang')
+ $msgs[] = array(
+ 'tag' => $key,
+ 'de' => $this->checkJsonTag($path, $key, 'de/'), // TODO: Hardcoded language list, use Dictionary::getLanguages()
+ 'en' => $this->checkJsonTag($path, $key, 'en/'),
+ 'pt' => $this->checkJsonTag($path, $key, 'pt/')
+ );
}
-
+
return $msgs;
}
-
- private function deleteTag($path,$tag){
+
+ private function deleteTag($path, $tag)
+ {
$langArray = unserialize(SITE_LANGUAGES);
- foreach($langArray as $lang){
- $json = Dictionary::getArrayTemplate($path,$lang);
+ foreach ($langArray as $lang) {
+ $json = Dictionary::getArrayTemplate($path, $lang);
unset($json[$tag]);
unset($json['lang']);
//file_put_contents('test.txt','lang/' . $lang . '/' . $path . '.json');
- file_put_contents('lang/' . $lang . '/' . $path . '.json', json_encode($json));
+ file_put_contents('lang/' . $lang . '/' . $path . '.json', json_encode($json)); // TODO: Check return code, show error if not writable
}
Message::addSuccess('deleted-tag');
}
-
+
}