From 8cca8a6b29b7860338b95e507abd488ed7d55b39 Mon Sep 17 00:00:00 2001 From: Pepijn Over Date: Fri, 4 Apr 2014 21:35:10 +0200 Subject: [PATCH] Restyling sidebar: adding buttons and dropdowns; removing sidebar from user edit/add page; fixing typo in template service --- .../AbstractServerController.class.php | 26 +++ .../Controller/ServerController.class.php | 166 +++++++++--------- .../User/Controller/UserController.class.php | 14 +- src/psm/Service/Template.class.php | 2 +- src/psm/Util/Module/Sidebar.class.php | 65 ++++++- src/templates/main_sidebar.tpl.html | 26 ++- src/templates/server/server.tpl.html | 5 +- src/templates/server/view.tpl.html | 21 ++- static/css/style.css | 16 ++ static/js/scripts.js | 4 + 10 files changed, 237 insertions(+), 108 deletions(-) diff --git a/src/psm/Module/Server/Controller/AbstractServerController.class.php b/src/psm/Module/Server/Controller/AbstractServerController.class.php index ed1fa330..7015f542 100644 --- a/src/psm/Module/Server/Controller/AbstractServerController.class.php +++ b/src/psm/Module/Server/Controller/AbstractServerController.class.php @@ -86,6 +86,32 @@ abstract class AbstractServerController extends AbstractController { } return $servers; + } + /** + * Format server data for display + * @param array $server + * @return array + */ + protected function formatServer($server) { + $server['rtime'] = round((float) $server['rtime'], 4); + $server['last_online'] = psm_timespan($server['last_online']); + $server['last_check'] = psm_timespan($server['last_check']); + $server['active'] = psm_get_lang('system', $server['active']); + $server['email'] = psm_get_lang('system', $server['email']); + $server['sms'] = psm_get_lang('system', $server['sms']); + $server['url_view'] = psm_build_url(array( + 'mod' => 'server', + 'action' => 'view', + 'id' => $server['server_id'], + )); + + if($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) { + $server['status'] = 'warning'; + } + + $server['type'] = psm_get_lang('servers', 'type_' . $server['type']); + + return $server; } } \ No newline at end of file diff --git a/src/psm/Module/Server/Controller/ServerController.class.php b/src/psm/Module/Server/Controller/ServerController.class.php index 0b9453f1..896718fa 100644 --- a/src/psm/Module/Server/Controller/ServerController.class.php +++ b/src/psm/Module/Server/Controller/ServerController.class.php @@ -34,9 +34,17 @@ use psm\Service\Template; */ class ServerController extends AbstractServerController { + /** + * Current server id + * @var int $server_id + */ + protected $server_id; + function __construct(Database $db, Template $tpl) { parent::__construct($db, $tpl); + $this->server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; + $this->setActions(array( 'index', 'edit', 'save', 'delete', 'view', ), 'index'); @@ -57,11 +65,11 @@ class ServerController extends AbstractServerController { // check if user is admin, in that case we add the buttons if($this->user->getUserLevel() == PSM_USER_ADMIN) { - $sidebar->addLink( + $sidebar->addButton( 'add_new', psm_get_lang('system', 'add_new'), psm_build_url(array('mod' => 'server', 'action' => 'edit')), - 'plus' + 'plus icon-white', 'success' ); // get the action buttons per server $this->tpl->newTemplate('server_list_admin_actions', 'server/server.tpl.html'); @@ -70,7 +78,7 @@ class ServerController extends AbstractServerController { $html_actions = ''; } - $sidebar->addLink( + $sidebar->addButton( 'update', psm_get_lang('menu', 'server_update'), psm_build_url(array('mod' => 'server_update')), @@ -105,23 +113,26 @@ class ServerController extends AbstractServerController { */ protected function executeEdit() { $this->setTemplateId('server_update', 'server/server.tpl.html'); - $sidebar = new \psm\Util\Module\Sidebar($this->tpl); - $this->setSidebar($sidebar); - - $sidebar->addLink( - 'go_back', - psm_get_lang('system', 'go_back'), - psm_build_url(array('mod' => 'server')), - 'th-list' - ); - - $server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; + $back_to = isset($_GET['back_to']) ? $_GET['back_to'] : ''; $tpl_data = array( - 'url_go_back' => psm_build_url(array('mod' => 'server')), + // form url: + 'url_save' => psm_build_url(array( + 'mod' => 'server', + 'action' => 'save', + 'id' => $this->server_id, + 'back_to' => $back_to, + )), ); - switch(intval($server_id)) { + // depending on where the user came from, add the go back url: + if($back_to == 'view' && $this->server_id > 0) { + $tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $this->server_id)); + } else { + $tpl_data['url_go_back'] = psm_build_url(array('mod' => 'server')); + } + + switch($this->server_id) { case 0: // insert mode $tpl_data['titlemode'] = psm_get_lang('system', 'insert'); @@ -131,10 +142,7 @@ class ServerController extends AbstractServerController { default: // edit mode // get server entry - $edit_server = $this->db->selectRow( - PSM_DB_PREFIX.'servers', - array('server_id' => $server_id) - ); + $edit_server = $this->getServers($this->server_id); if (empty($edit_server)) { $this->addMessage('Invalid server', 'error'); return $this->initializeAction('index'); @@ -169,8 +177,6 @@ class ServerController extends AbstractServerController { protected function executeSave() { // check for add/edit mode if(isset($_POST['label']) && isset($_POST['ip']) && isset($_POST['port'])) { - $server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; - $clean = array( 'label' => strip_tags($_POST['label']), 'ip' => strip_tags($_POST['ip']), @@ -184,22 +190,28 @@ class ServerController extends AbstractServerController { ); // check for edit or add - if($server_id > 0) { + if($this->server_id > 0) { // edit $this->db->save( PSM_DB_PREFIX.'servers', $clean, - array('server_id' => $server_id) + array('server_id' => $this->server_id) ); $this->addMessage(psm_get_lang('servers', 'updated'), 'success'); } else { // add $clean['status'] = 'on'; - $this->db->save(PSM_DB_PREFIX.'servers', $clean); + $this->server_id = $this->db->save(PSM_DB_PREFIX.'servers', $clean); $this->addMessage(psm_get_lang('servers', 'inserted'), 'success'); } } - $this->initializeAction('index'); + + $back_to = isset($_GET['back_to']) ? $_GET['back_to'] : 'index'; + if($back_to == 'view') { + $this->initializeAction('view'); + } else { + $this->initializeAction('index'); + } } /** @@ -211,7 +223,7 @@ class ServerController extends AbstractServerController { // do delete $res = $this->db->delete(PSM_DB_PREFIX . 'servers', array('server_id' => $id)); - if($res == 1) { + if($res === 1) { $this->db->delete(PSM_DB_PREFIX.'log', array('server_id' => $id)); $this->db->delete(PSM_DB_PREFIX.'users_servers', array('server_id' => $id)); $this->db->delete(PSM_DB_PREFIX.'servers_uptime', array('server_id' => $id)); @@ -226,77 +238,61 @@ class ServerController extends AbstractServerController { * Prepare the view template */ protected function executeView() { - $this->setTemplateId('server_view', 'server/view.tpl.html'); - $server_id = isset($_GET['id']) ? intval($_GET['id']) : 0; + if($this->server_id == 0) { + return $this->initializeAction('index'); + } + $server = $this->getServers($this->server_id); - // get server entry - $server = $this->getServers($server_id); if(empty($server)) { - $this->addMessage('Invalid server', 'error'); return $this->initializeAction('index'); } - $sidebar = new \psm\Util\Module\Sidebar($this->tpl); - $this->setSidebar($sidebar); - $sidebar->setSubtitle($server['label']); + $this->setTemplateId('server_view', 'server/view.tpl.html'); + $tpl_data = $this->formatServer($server); + + // create history HTML + $history = new \psm\Util\Server\HistoryGraph($this->db, $this->tpl); + $tpl_data['html_history'] = $history->createHTML($this->server_id); + + // add edit/delete buttons for admins if($this->user->getUserLevel() == PSM_USER_ADMIN) { - $sidebar->addLink( - 'edit', - psm_get_lang('system', 'edit'), - psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $server_id)), - 'edit' - ); - $sidebar->addLink( - 'delete', - psm_get_lang('system', 'delete'), - "javascript:sm_delete('{$server_id}', 'server');", - 'remove' + $tpl_id_actions = 'server_view_admin_actions'; + $this->tpl->newTemplate($tpl_id_actions, 'server/view.tpl.html'); + $tpl_data['html_actions'] = $this->tpl->getTemplate($tpl_id_actions); + $tpl_data['url_edit'] = psm_build_url(array('mod' => 'server', 'action' => 'edit', 'id' => $this->server_id, 'back_to' => 'view')); + } + + // add all available servers to the menu + $servers = $this->getServers(); + $options = array(); + foreach($servers as $i => $server) { + $options[] = array( + 'class_active' => ($server['server_id'] == $this->server_id) ? 'active' : '', + 'url' => psm_build_url(array('mod' => 'server', 'action' => 'view', 'id' => $server['server_id'])), + 'label' => $server['label'], ); } - $back_to = isset($_GET['back_to']) ? $_GET['back_to'] : 'server'; - $sidebar->addLink( + $sidebar = new \psm\Util\Module\Sidebar($this->tpl); + $this->setSidebar($sidebar); + + $sidebar->addDropdown( + 'server', + psm_get_lang('menu', 'server'), + $options, + 'th', 'success' + ); + + // check which module the user came from, and add a link accordingly + $back_to = isset($_GET['back_to']) && $_GET['back_to'] == 'status' ? $_GET['back_to'] : 'server'; + $sidebar->addButton( 'go_back', psm_get_lang('system', 'go_back'), psm_build_url(array('mod' => $back_to)), 'th-list' ); - $tpl_data = $this->formatServer($server); - $history = new \psm\Util\Server\HistoryGraph($this->db, $this->tpl); - $tpl_data['html_history'] = $history->createHTML($server_id); - - $this->tpl->addTemplateData( - $this->getTemplateId(), - $tpl_data - ); - } - - /** - * Format server data for display - * @param array $server - * @return array - */ - protected function formatServer($server) { - $server['rtime'] = round((float) $server['rtime'], 4); - $server['last_online'] = psm_timespan($server['last_online']); - $server['last_check'] = psm_timespan($server['last_check']); - $server['active'] = psm_get_lang('system', $server['active']); - $server['email'] = psm_get_lang('system', $server['email']); - $server['sms'] = psm_get_lang('system', $server['sms']); - $server['url_view'] = psm_build_url(array( - 'mod' => 'server', - 'action' => 'view', - 'id' => $server['server_id'], - )); - - if($server['status'] == 'on' && $server['warning_threshold_counter'] > 0) { - $server['status'] = 'warning'; - } - - $server['type'] = psm_get_lang('servers', 'type_' . $server['type']); - - return $server; + $this->tpl->addTemplateData($this->getTemplateId(), $tpl_data); } // override parent::createHTMLLabels() @@ -326,8 +322,8 @@ class ServerController extends AbstractServerController { 'label_action' => psm_get_lang('system', 'action'), 'label_save' => psm_get_lang('system', 'save'), 'label_go_back' => psm_get_lang('system', 'go_back'), - 'label_edit' => psm_get_lang('system', 'edit') . ' ' . psm_get_lang('servers', 'server'), - 'label_delete' => psm_get_lang('system', 'delete') . ' ' . psm_get_lang('servers', 'server'), + 'label_edit' => psm_get_lang('system', 'edit'), + 'label_delete' => psm_get_lang('system', 'delete'), 'label_yes' => psm_get_lang('system', 'yes'), 'label_no' => psm_get_lang('system', 'no'), 'label_add_new' => psm_get_lang('system', 'add_new'), diff --git a/src/psm/Module/User/Controller/UserController.class.php b/src/psm/Module/User/Controller/UserController.class.php index 2a19f796..609f0f2f 100644 --- a/src/psm/Module/User/Controller/UserController.class.php +++ b/src/psm/Module/User/Controller/UserController.class.php @@ -72,11 +72,11 @@ class UserController extends AbstractController { $sidebar = new \psm\Util\Module\Sidebar($this->tpl); $this->setSidebar($sidebar); - $sidebar->addLink( + $sidebar->addButton( 'add_new', psm_get_lang('system', 'add_new'), psm_build_url(array('mod' => 'user', 'action' => 'edit')), - 'plus' + 'plus icon-white', 'success' ); // build label array for the next loop @@ -114,16 +114,6 @@ class UserController extends AbstractController { */ protected function executeEdit() { $this->setTemplateId('user_update', 'user/user.tpl.html'); - $sidebar = new \psm\Util\Module\Sidebar($this->tpl); - $this->setSidebar($sidebar); - - $sidebar->addLink( - 'go_back', - psm_get_lang('system', 'go_back'), - psm_build_url(array('mod' => 'user')), - 'th-list' - ); - $user_id = isset($_GET['id']) ? intval($_GET['id']) : 0; $fields_prefill = array('name', 'user_name', 'mobile', 'email'); diff --git a/src/psm/Service/Template.class.php b/src/psm/Service/Template.class.php index 3bcd72d0..eb212991 100644 --- a/src/psm/Service/Template.class.php +++ b/src/psm/Service/Template.class.php @@ -105,7 +105,7 @@ class Template { foreach($value as $k => $v) { $subdata[$key.'_'.$k] = $v; } - $source = $this->assignTplVar($source, $subdata, true); + $source = $this->addTemplateData($source, $subdata, true); } else { $source = str_replace('{'.$key.'}', $value, $source); } diff --git a/src/psm/Util/Module/Sidebar.class.php b/src/psm/Util/Module/Sidebar.class.php index 7174966b..051e762d 100644 --- a/src/psm/Util/Module/Sidebar.class.php +++ b/src/psm/Util/Module/Sidebar.class.php @@ -94,7 +94,7 @@ class Sidebar implements SidebarInterface { } $this->items['link'][$id] = array( - 'type' => 'link', + 'id' => $id, 'label' => $label, 'url' => str_replace('"', '\"', $url), 'icon' => $icon, @@ -102,11 +102,62 @@ class Sidebar implements SidebarInterface { return $this; } + /** + * Add a new button to the sidebar + * @param string $id + * @param string $label + * @param string $url + * @param string $icon + * @param string $btn_class + * @param boolean $url_is_onclick if you want onclick rather than url, change this to true + * @return \psm\Util\Module\Sidebar + */ + public function addButton($id, $label, $url, $icon = null, $btn_class = null, $url_is_onclick = false) { + if(!isset($this->items['button'])) { + $this->items['button'] = array(); + } + if(!$url_is_onclick) { + $url = "psm_goTo('" . $url . "');"; + } + + $this->items['button'][$id] = array( + 'id' => $id, + 'label' => $label, + 'onclick' => str_replace('"', '\"', $url), + 'icon' => $icon, + 'btn_class'=> $btn_class, + ); + return $this; + } + + /** + * Add dropdown button + * @param string $id + * @param string $label + * @param array $options + * @param string $icon + * @param string $btn_class + * @return \psm\Util\Module\Sidebar + */ + public function addDropdown($id, $label, $options, $icon = null, $btn_class = null) { + if(!isset($this->items['dropdown'])) { + $this->items['dropdown'] = array(); + } + $this->items['dropdown'][$id] = array( + 'id' => $id, + 'label' => $label, + 'options' => $options, + 'icon' => $icon, + 'btn_class' => $btn_class, + ); + return $this; + } + public function createHTML() { $tpl_id = 'main_sidebar_container'; $this->tpl->newTemplate($tpl_id, 'main_sidebar.tpl.html'); - $types = array('link'); + $types = array('dropdown', 'button', 'link'); $items = array(); // loop through all types and build their html @@ -122,8 +173,16 @@ class Sidebar implements SidebarInterface { // build html for each individual item foreach($this->items[$type] as $id => $item) { + $html_item = $html_type; + + if(isset($item['options'])) { + $item['options'] = $this->tpl->addTemplateDataRepeat($html_item, 'options', $item['options'], true); + + } + $html_item = $this->tpl->addTemplateData($html_type, $item, true); + $items[] = array( - 'html_item' => $this->tpl->addTemplateData($html_type, $item, true), + 'html_item' => $html_item, 'class_active' => ($id === $this->active_id) ? 'active' : '', ); } diff --git a/src/templates/main_sidebar.tpl.html b/src/templates/main_sidebar.tpl.html index 61593810..897f8820 100755 --- a/src/templates/main_sidebar.tpl.html +++ b/src/templates/main_sidebar.tpl.html @@ -1,6 +1,6 @@
- - {label} \ No newline at end of file + {label} + + + + + + +
+ + +
+ \ No newline at end of file diff --git a/src/templates/server/server.tpl.html b/src/templates/server/server.tpl.html index e81cd77f..1b738653 100755 --- a/src/templates/server/server.tpl.html +++ b/src/templates/server/server.tpl.html @@ -32,7 +32,8 @@ {active} {email} {sms} - {html_actions} + + {html_actions} {servers} @@ -50,7 +51,7 @@ -
+
{titlemode}
diff --git a/src/templates/server/view.tpl.html b/src/templates/server/view.tpl.html index 4ba87a77..461ce48d 100644 --- a/src/templates/server/view.tpl.html +++ b/src/templates/server/view.tpl.html @@ -1,11 +1,11 @@ - +
- + @@ -53,7 +53,22 @@ + {html_actions}
{label}

{label}

{label_send_sms}: {sms}
{html_history} - \ No newline at end of file + + + + +   + + +  {label_edit} + + +  {label_delete} + + + + \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css index d5b0db4f..d453d968 100755 --- a/static/css/style.css +++ b/static/css/style.css @@ -14,6 +14,22 @@ body { .sidebar-nav { padding: 9px 0; } +.sidebar-nav .btn { + margin: 5px 0; + min-width: 100px; +} +@media (max-width: 979px) { + .sidebar-nav .nav-list { + padding: 0; + } + .sidebar-nav li.nav-header { + display: none; + } + .sidebar-nav li { + float: left; + margin-right: 15px; + } +} body.install{ padding-top:20px; } diff --git a/static/js/scripts.js b/static/js/scripts.js index 1fe8910e..18829b16 100755 --- a/static/js/scripts.js +++ b/static/js/scripts.js @@ -14,6 +14,10 @@ function psm_tooltips() { }); } +function psm_goTo(url) { + window.location = url; +} + function trim(str) { return str.replace(/^\s+|\s+$/g,""); }