diff options
Diffstat (limited to 'modules/admin.inc.php')
-rw-r--r-- | modules/admin.inc.php | 295 |
1 files changed, 0 insertions, 295 deletions
diff --git a/modules/admin.inc.php b/modules/admin.inc.php deleted file mode 100644 index 97a47819..00000000 --- a/modules/admin.inc.php +++ /dev/null @@ -1,295 +0,0 @@ -<?php - -class Page_Admin extends Page -{ - - private $template = false; - private $path = false; - private $page = false; - private $update = false; - private $files = false; - private $table = false; - private $delete = false; - 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')) { - $this->template = Request::get('template'); - } - - if (Request::get('page')) { - $this->page = Request::get('page'); - } - - if (Request::get('delete')) { - $this->delete = Request::get('delete'); - } - - 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( - '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( - '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'), - 'adminMessage' => $this->message, - 'table' => $this->table - )); - } - } - - private function initTable() - { - $this->listTemplates(); - $de = $this->listJson('de/'); - $en = $this->listJson('en/'); - $pt = $this->listJson('pt/'); - - 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') - ); - } - - sort($this->table); - } - - 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') { - $key = str_replace($dir, '', $name); - $key = str_replace('.html', '', $key); - $this->files[$key] = $name; - } - } - } - - 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') { - $key = str_replace($dir, '', $name); - $key = str_replace('.json', '', $key); - $json[$key] = $key; - } - } - return $json; - } - - private function checkJson($path, $lang) - { - if (!$path) { - return "JSON file is missing"; - } else { - $htmlTemplate = file_get_contents('templates/' . $path . '.html'); - $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])) { - $matchCount++; - } 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"; - } - } - - private function templateAnalysis($path) - { - if (!file_exists('templates/' . $path . '.html')) { - Message::addError('invalid-template'); - return false; - } - $htmlTemplate = file_get_contents('templates/' . $path . '.html'); - preg_match_all('/{{lang_(.*?)}}/s', $htmlTemplate, $matches); - $tags = $matches[1]; - $tags = array_flip($tags); - 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); - } - - unset($json['lang']); - $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) - ); - } - - $this->path = $path; - - return true; - } - - private function checkJsonTag($path, $tag, $lang) - { - if ($json = Dictionary::getArrayTemplate($path, $lang)) { - return $json[$tag]; - } - return ''; - } - - 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'; - } - } - return ''; - } - - 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') - $json[$lang][$tag] = $value; - else { - $json[$lang][$_REQUEST['newtag']] = $value; - } - } - } - } - - 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) - { - $msgs = array(); - $path = 'messages'; - 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/'), // 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) - { - $langArray = unserialize(SITE_LANGUAGES); - 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)); // TODO: Check return code, show error if not writable - } - Message::addSuccess('deleted-tag'); - } - -} |