Restyling sidebar: adding buttons and dropdowns;

removing sidebar from user edit/add page;
fixing typo in template service
This commit is contained in:
Pepijn Over 2014-04-04 21:35:10 +02:00
parent 25d49b4ff2
commit 8cca8a6b29
10 changed files with 237 additions and 108 deletions

View File

@ -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;
}
}

View File

@ -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'),

View File

@ -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');

View File

@ -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);
}

View File

@ -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' : '',
);
}

View File

@ -1,6 +1,6 @@
<!--%tpl_main_sidebar_container-->
<div class="span2">
<div class="well sidebar-nav">
<div class="sidebar-nav">
<ul class="nav nav-list">
<li class="nav-header">{subtitle}</li>
<!--%tpl_repeat_items-->
@ -8,8 +8,30 @@
<!--%%tpl_repeat_items-->
{items}
</ul>
<div class="clearfix"></div>
</div>
</div>
<!--%%tpl_main_sidebar_container-->
<!--%tpl_main_sidebar_types_link--><a href="{url}"><i class="icon-{icon}"></i>&nbsp;{label}</a><!--%%tpl_main_sidebar_types_link-->
<!--%tpl_main_sidebar_types_link--><a href="{url}"><i class="icon-{icon}"></i>&nbsp;{label}</a><!--%%tpl_main_sidebar_types_link-->
<!--%tpl_main_sidebar_types_button-->
<button class="btn btn-{btn_class}" onclick="{onclick}">
<i class="icon-{icon}"></i>&nbsp;{label}
</button>
<!--%%tpl_main_sidebar_types_button-->
<!--%tpl_main_sidebar_types_dropdown-->
<div class="btn-group">
<button class="btn btn-success dropdown-toggle" data-toggle="dropdown">
<i class="icon-th icon-white"></i>&nbsp;{label}
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<!--%tpl_repeat_options-->
<li class="{class_active}"><a href="{url}">{label}</a>
<!--%%tpl_repeat_options-->
{options}
</ul>
</div>
<!--%%tpl_main_sidebar_types_dropdown-->

View File

@ -32,7 +32,8 @@
<td>{active}</td>
<td>{email}</td>
<td>{sms}</td>
<td>{html_actions}</td>
<td><a class="btn btn-small" href="index.php?mod=server&amp;action=view&amp;id={server_id}"><i class="icon-eye-open"></i></a>
{html_actions}</td>
</tr>
<!--%%tpl_repeat_servers-->
{servers}
@ -50,7 +51,7 @@
<!--%%tpl_server_list_admin_actions-->
<!--%tpl_server_update-->
<form class="form-horizontal well" action="index.php?mod=server&action=save&id={edit_server_id}" method="post">
<form class="form-horizontal well" action="{url_save}" method="post">
<fieldset>
<legend>{titlemode}</legend>
<div class="control-group">

View File

@ -1,11 +1,11 @@
<!--%tpl_server_view-->
<table class="table">
<table class="table table-bordered">
<colgroup>
<col class="oce-first" />
</colgroup>
<thead>
<tr class="head">
<th colspan="2">{label}</th>
<th colspan="2"><h4>{label}</h4></th>
</tr>
</thead>
<tbody>
@ -53,7 +53,22 @@
<td>{label_send_sms}:</td>
<td>{sms}</td>
</tr>
{html_actions}
</tbody>
</table>
{html_history}
<!--%%tpl_server_view-->
<!--%%tpl_server_view-->
<!--%tpl_server_view_admin_actions-->
<tr>
<td>&nbsp;</td>
<td>
<a class="btn btn-success" href="{url_edit}">
<i class="icon-edit icon-white"></i>&nbsp;{label_edit}
</a>
<a class="btn btn-danger" href="javascript:sm_delete('{server_id}', 'server');">
<i class="icon-remove icon-white"></i>&nbsp;{label_delete}
</a>
</td>
</tr>
<!--%%tpl_server_view_admin_actions-->

View File

@ -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;
}

View File

@ -14,6 +14,10 @@ function psm_tooltips() {
});
}
function psm_goTo(url) {
window.location = url;
}
function trim(str) {
return str.replace(/^\s+|\s+$/g,"");
}