Fixes to work with KH 3.3
@ -114,7 +114,7 @@ Kohana::modules(array(
|
||||
'cron' => SMDPATH.'cron', // Kohana Cron Module
|
||||
// 'codebench' => SMDPATH.'codebench', // Benchmarking tool
|
||||
'database' => SMDPATH.'database', // Database access
|
||||
'gchart' => MODPATH.'gchart', // Google Chart Module
|
||||
// 'gchart' => MODPATH.'gchart', // Google Chart Module
|
||||
// 'image' => SMDPATH.'image', // Image manipulation
|
||||
'khemail' => SMDPATH.'khemail', // Email module for Kohana 3 PHP Framework
|
||||
'minion' => SMDPATH.'minion', // CLI Tasks
|
||||
@ -155,7 +155,7 @@ Route::set('default', '(<controller>(/<action>(/<id>)))', array('id'=>'[a-zA-Z0-
|
||||
/**
|
||||
* If APC is enabled, and we need to clear the cache
|
||||
*/
|
||||
if (file_exists(APPPATH.'cache/CLEAR_APC_CACHE') AND function_exists('apc_clear_cache') AND ! Kohana::$is_cli) {
|
||||
if (file_exists(APPPATH.'cache/CLEAR_APC_CACHE') AND function_exists('apc_clear_cache') AND (PHP_SAPI !== 'cli')) {
|
||||
if (! apc_clear_cache() OR ! unlink(APPPATH.'cache/CLEAR_APC_CACHE'))
|
||||
throw new Kohana_Exception('Unable to clear the APC cache.');
|
||||
}
|
||||
|
16
application/classes/Cookie.php
Normal file
@ -0,0 +1,16 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class overrides Kohana's Cookie
|
||||
*
|
||||
* @package PTA/Modifications
|
||||
* @category Classes
|
||||
* @category Helpers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Cookie extends Kohana_Cookie {
|
||||
public static $salt = 'PTA';
|
||||
}
|
||||
?>
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class ORMTSM extends ORM {
|
||||
abstract class TSM_ORM extends ORM {
|
||||
// Suppress ORMs inclusion of <table_name>.*
|
||||
protected $_disable_wild_select = TRUE;
|
||||
// Suppress ORMs inclusion of <table_name>. to column joins
|
||||
@ -35,11 +35,11 @@ class ORMTSM extends ORM {
|
||||
*/
|
||||
protected function _initialize() {
|
||||
// Set out DB connection configuration.
|
||||
$this->_db_group = Kohana::config('config.client_type');
|
||||
$this->_db_group = Kohana::$config->load('config.client_type');
|
||||
|
||||
// Adjustments for DSMADMC or DB2 connections
|
||||
if (array_key_exists(Kohana::config('config.client_type'),$this->_tsm))
|
||||
foreach ($this->_tsm[Kohana::config('config.client_type')] as $k => $v)
|
||||
if (array_key_exists($this->_db_group,$this->_tsm))
|
||||
foreach ($this->_tsm[$this->_db_group] as $k => $v)
|
||||
if (preg_match('/^_/',$k))
|
||||
$this->{$k} = $v;
|
||||
|
||||
@ -51,8 +51,8 @@ class ORMTSM extends ORM {
|
||||
|
||||
public function __get($column) {
|
||||
// Get a substited column name - need for DB2/DSMADMC schema differences
|
||||
if (isset($this->_tsm[Kohana::config('config.client_type')]['translate']) AND array_key_exists($column,$this->_tsm[Kohana::config('config.client_type')]['translate'])) {
|
||||
return is_null($c=$this->_tsm[Kohana::config('config.client_type')]['translate'][$column]) ? NULL : parent::__get($c);
|
||||
if (isset($this->_tsm[$this->_db_group]['translate']) AND array_key_exists($column,$this->_tsm[$this->_db_group]['translate'])) {
|
||||
return is_null($c=$this->_tsm[$this->_db_group]['translate'][$column]) ? NULL : parent::__get($c);
|
||||
}
|
||||
else
|
||||
return parent::__get($column);
|
||||
@ -104,7 +104,7 @@ class ORMTSM extends ORM {
|
||||
private function isCacheable() {
|
||||
$preload = array('NODES','VOLUMES');
|
||||
|
||||
$config = Kohana::config('database')->{Database::$default};
|
||||
$config = Kohana::$config->load('database')->{Database::$default};
|
||||
|
||||
if ($config['caching'] AND isset($config['cachepreload'][$this->_table_name]) AND count($this->_db_pending) == 1 AND $this->_db_pending[0]['name'] == 'where' AND $this->_db_pending[0]['args'][0] == $this->_primary_key AND $this->_db_pending[0]['args'][1] == '=')
|
||||
return $config['cachepreload'][$this->_table_name];
|
||||
@ -126,6 +126,7 @@ class ORMTSM extends ORM {
|
||||
* we hard code the cache to 7 days.
|
||||
*
|
||||
* @return array
|
||||
* @todo This cache time needs to be better integrated with other caching times.
|
||||
*/
|
||||
public function list_columns() {
|
||||
// We'll cache our query results
|
@ -22,7 +22,7 @@ class Auth_ORM extends Kohana_Auth_ORM {
|
||||
|
||||
// Override Kohana logged_in() - if we can get the user, we are logged in.
|
||||
public function logged_in($role = NULL, $all_required = TRUE) {
|
||||
return FALSE !== $this->get_user();
|
||||
return NULL !== $this->get_user();
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -26,12 +26,14 @@ class Auth_TSM extends Auth_ORM {
|
||||
|
||||
// Load the user
|
||||
$user = ORM::factory('admin')
|
||||
->where('ADMIN_NAME','=',$username)
|
||||
->where('ADMIN_NAME','=',strtoupper($username))
|
||||
->cached(0)
|
||||
->find();
|
||||
|
||||
return $user->loaded();
|
||||
}
|
||||
|
||||
// Normally, if we get this far, we are already logged in.
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
class Controller_Default extends Controller_lnApp_Default {}
|
||||
class Controller_Default extends lnApp_Controller_Default {}
|
||||
?>
|
||||
|
@ -47,7 +47,7 @@ class Controller_DOMAIN extends Controller_TemplateDefault {
|
||||
'body'=>_('The domain name is required.'),
|
||||
));
|
||||
|
||||
Request::current()->redirect('domain');
|
||||
HTTP::redirect('domain');
|
||||
}
|
||||
|
||||
$do = ORM::factory('domain',$domain_name);
|
||||
@ -58,7 +58,7 @@ class Controller_DOMAIN extends Controller_TemplateDefault {
|
||||
'body'=>sprintf(_('The domain [%s] does not exist?.'),$domain_name),
|
||||
));
|
||||
|
||||
Request::current()->redirect('domain');
|
||||
HTTP::redirect('domain');
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
|
@ -47,7 +47,7 @@ class Controller_LIBRARY extends Controller_TemplateDefault {
|
||||
'body'=>_('The library pool name is required.'),
|
||||
));
|
||||
|
||||
Request::current()->redirect('library');
|
||||
HTTP::redirect('library');
|
||||
}
|
||||
|
||||
$lo = ORM::factory('library',$library);
|
||||
@ -58,7 +58,7 @@ class Controller_LIBRARY extends Controller_TemplateDefault {
|
||||
'body'=>sprintf(_('The library pool [%s] does not exist?.'),$library),
|
||||
));
|
||||
|
||||
Request::current()->redirect('library');
|
||||
HTTP::redirect('library');
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
|
@ -1,199 +0,0 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides login capability
|
||||
*
|
||||
* @package lnApp
|
||||
* @subpackage Page/Login
|
||||
* @category Controllers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @also [logout]
|
||||
*/
|
||||
class Controller_lnApp_Login extends Controller_TemplateDefault {
|
||||
protected $auth_required = FALSE;
|
||||
|
||||
public function action_index() {
|
||||
// If user already signed-in
|
||||
if (Auth::instance()->logged_in()!= 0) {
|
||||
// Redirect to the user account
|
||||
Request::current()->redirect('welcome/index');
|
||||
}
|
||||
|
||||
// If there is a post and $_POST is not empty
|
||||
if ($_POST) {
|
||||
// Store our details in a session key
|
||||
Session::instance()->set(Kohana::config('auth.session_key'),$_POST['username']);
|
||||
Session::instance()->set('password',$_POST['password']);
|
||||
|
||||
// If the post data validates using the rules setup in the user model
|
||||
if (Auth::instance()->login($_POST['username'],$_POST['password'])) {
|
||||
// Redirect to the user account
|
||||
if ($redir = Session::instance()->get('afterlogin')) {
|
||||
Session::instance()->delete('afterlogin');
|
||||
Request::current()->redirect($redir);
|
||||
|
||||
} else
|
||||
Request::current()->redirect('welcome/index');
|
||||
|
||||
} else {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Invalid username or password'),
|
||||
'type'=>'error',
|
||||
'body'=>_('The username or password was invalid.')
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
'title'=>_('Login to server'),
|
||||
'body'=>View::factory('login'),
|
||||
'style'=>array('css/login.css'=>'screen'),
|
||||
));
|
||||
|
||||
Script::add(array('type'=>'stdin','data'=>'
|
||||
$(document).ready(function() {
|
||||
$("#ajxbody").click(function() {$("#ajBODY").load("'.$this->request->uri().'/"); return false;});
|
||||
});'
|
||||
));
|
||||
}
|
||||
|
||||
public function action_register() {
|
||||
// If user already signed-in
|
||||
if (Auth::instance()->logged_in()!= 0) {
|
||||
// Redirect to the user account
|
||||
Request::current()->redirect('welcome/index');
|
||||
}
|
||||
|
||||
// Instantiate a new user
|
||||
$account = ORM::factory('account');
|
||||
|
||||
// If there is a post and $_POST is not empty
|
||||
if ($_POST) {
|
||||
// Check Auth
|
||||
$status = $account->values($_POST)->check();
|
||||
|
||||
if (! $status) {
|
||||
foreach ($account->validation()->errors('form/register') as $f => $r) {
|
||||
// $r[0] has our reason for validation failure
|
||||
switch ($r[0]) {
|
||||
// Generic validation reason
|
||||
default:
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Validation failed'),
|
||||
'type'=>'error',
|
||||
'body'=>sprintf(_('The defaults on your submission were not valid for field %s (%s).'),$f,$r)
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$ido = ORM::factory('module')
|
||||
->where('name','=','account')
|
||||
->find();
|
||||
|
||||
$account->id = $ido->record_id->next_id($ido->id);
|
||||
// Save the user details
|
||||
if ($account->save()) {}
|
||||
|
||||
}
|
||||
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Already have an account?'),
|
||||
'type'=>'info',
|
||||
'body'=>_('If you already have an account, please login..')
|
||||
));
|
||||
|
||||
Block::add(array(
|
||||
'title'=>_('Register'),
|
||||
'body'=>View::factory('bregister')
|
||||
->set('account',$account)
|
||||
->set('errors',$account->validation()->errors('form/register')),
|
||||
));
|
||||
|
||||
$this->template->left = HTML::anchor('login','Login').'...';
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable user password reset
|
||||
*/
|
||||
public function action_reset() {
|
||||
// If user already signed-in
|
||||
if (Auth::instance()->logged_in()!= 0) {
|
||||
// Redirect to the user account
|
||||
Request::current()->redirect('welcome/index');
|
||||
}
|
||||
|
||||
// If the user posted their details to reset their password
|
||||
if ($_POST) {
|
||||
// If the email address is correct, create a method token
|
||||
if (! empty($_POST['email']) AND ($ao=ORM::factory('account',array('email'=>$_POST['email']))) AND $ao->loaded()) {
|
||||
$mt = ORM::factory('module_method_token');
|
||||
|
||||
// Find out our password reset method id
|
||||
// @todo move this to a more generic method, so that it can be called by other methods
|
||||
$mo = ORM::factory('module',array('name'=>'account'));
|
||||
$mmo = ORM::factory('module_method',array('name'=>'user_resetpassword','module_id'=>$mo->id));
|
||||
|
||||
// Check to see if there is already a token, if so, do nothing.
|
||||
if ($mt->where('account_id','=',$ao->id)->and_where('method_id','=',$mmo->id)->find()) {
|
||||
if ($mt->date_expire < time()) {
|
||||
$mt->delete();
|
||||
$mt->clear();
|
||||
}
|
||||
}
|
||||
|
||||
if (! $mt->loaded()) {
|
||||
$mt->account_id = $ao->id;
|
||||
$mt->method_id = $mmo->id;
|
||||
$mt->date_expire = time() + 15*3600;
|
||||
$mt->token = md5(sprintf('%s:%s:%s',$mt->account_id,$mt->method_id,$mt->date_expire));
|
||||
$mt->save();
|
||||
|
||||
// Send our email with the token
|
||||
$et = EmailTemplate::instance('account_reset_password');
|
||||
$et->to = array($mt->account->email=>sprintf('%s %s',$mt->account->first_name,$mt->account->last_name));
|
||||
$et->variables = array(
|
||||
'SITE'=>URL::base(TRUE,TRUE),
|
||||
'SITE_ADMIN'=>Config::sitename(),
|
||||
'SITE_NAME'=>Config::sitename(),
|
||||
'TOKEN'=>$mt->token,
|
||||
'USER_NAME'=>sprintf('%s %s',$mt->account->first_name,$mt->account->last_name),
|
||||
);
|
||||
$et->send();
|
||||
}
|
||||
|
||||
// Redirect to our password reset, the Auth will validate the token.
|
||||
} elseif (! empty($_REQUEST['token'])) {
|
||||
Request::current()->redirect(sprintf('user/account/resetpassword?token=%s',$_REQUEST['token']));
|
||||
}
|
||||
|
||||
// Show our token screen even if the email was invalid.
|
||||
if (isset($_POST['email']))
|
||||
Block::add(array(
|
||||
'title'=>_('Reset your password'),
|
||||
'body'=>View::factory('login_reset_sent'),
|
||||
'style'=>array('css/login.css'=>'screen'),
|
||||
));
|
||||
else
|
||||
Request::current()->redirect('login');
|
||||
|
||||
} else {
|
||||
Block::add(array(
|
||||
'title'=>_('Reset your password'),
|
||||
'body'=>View::factory('login_reset'),
|
||||
'style'=>array('css/login.css'=>'screen'),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
public function action_noaccess() {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('No access to requested resource'),
|
||||
'type'=>'error',
|
||||
'body'=>_('You do not have access to the requested resource, please contact your administrator.')
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
@ -1,4 +1,4 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
class Controller_Login extends Controller_lnApp_Login {}
|
||||
class Controller_Login extends lnApp_Controller_Login {}
|
||||
?>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
class Controller_Logout extends Controller_lnApp_Logout {}
|
||||
class Controller_Logout extends lnApp_Controller_Logout {}
|
||||
?>
|
||||
|
4
application/classes/controller/media.php
Normal file
@ -0,0 +1,4 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
class Controller_Media extends lnApp_Controller_Media {}
|
||||
?>
|
@ -47,7 +47,7 @@ class Controller_NODE extends Controller_TemplateDefault {
|
||||
'body'=>_('The node name is required.'),
|
||||
));
|
||||
|
||||
Request::current()->redirect('node');
|
||||
HTTP::redirect('node');
|
||||
}
|
||||
|
||||
$no = ORM::factory('node',$node_name);
|
||||
@ -58,7 +58,7 @@ class Controller_NODE extends Controller_TemplateDefault {
|
||||
'body'=>sprintf(_('The node [%s] does not exist?.'),$node_name),
|
||||
));
|
||||
|
||||
Request::current()->redirect('node');
|
||||
HTTP::redirect('node');
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
|
@ -47,7 +47,7 @@ class Controller_STGPOOL extends Controller_TemplateDefault {
|
||||
'body'=>_('The stgpool pool name is required.'),
|
||||
));
|
||||
|
||||
Request::current()->redirect('stgpool');
|
||||
HTTP::redirect('stgpool');
|
||||
}
|
||||
|
||||
$so = ORM::factory('stgpool',$stgpool);
|
||||
@ -58,7 +58,7 @@ class Controller_STGPOOL extends Controller_TemplateDefault {
|
||||
'body'=>sprintf(_('The stgpool pool [%s] does not exist?.'),$stgpool),
|
||||
));
|
||||
|
||||
Request::current()->redirect('stgpool');
|
||||
HTTP::redirect('stgpool');
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Controller_TemplateDefault extends Controller_lnApp_TemplateDefault {
|
||||
class Controller_TemplateDefault extends lnApp_Controller_TemplateDefault {
|
||||
protected $auth_required = TRUE;
|
||||
}
|
||||
?>
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Controller_Tree extends Controller_lnApp_Tree {
|
||||
class Controller_Tree extends lnApp_Controller_Tree {
|
||||
protected $auth_required = TRUE;
|
||||
|
||||
/**
|
||||
@ -21,7 +21,7 @@ class Controller_Tree extends Controller_lnApp_Tree {
|
||||
*
|
||||
* @param id
|
||||
*/
|
||||
public function action_json($id=null,array $data=array()) {
|
||||
public function action_json(array $data=array()) {
|
||||
// @todo Our menu options
|
||||
array_push($data,array(
|
||||
'id'=>'domain',
|
||||
@ -63,7 +63,7 @@ class Controller_Tree extends Controller_lnApp_Tree {
|
||||
'attr_href'=>URL::Site('stgpool'),
|
||||
));
|
||||
|
||||
return parent::action_json($id,$data);
|
||||
return parent::action_json($data);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -14,11 +14,11 @@ class Controller_Welcome extends Controller_TemplateDefault {
|
||||
protected $auth_required = FALSE;
|
||||
|
||||
public function action_index() {
|
||||
if (! Kohana::config('config.client'))
|
||||
Request::current()->redirect('guide/pta');
|
||||
if (! Kohana::$config->load('config')->client)
|
||||
HTTP::redirect('guide/app');
|
||||
|
||||
if (! Auth::instance()->logged_in())
|
||||
Request::current()->redirect('login');
|
||||
HTTP::redirect('login');
|
||||
|
||||
Block::add(array(
|
||||
'title'=>sprintf('%s: %s (%s)',_('Server'),TSM::name(),TSM::version()),
|
||||
|
@ -69,7 +69,9 @@ abstract class Database_TSM extends Database {
|
||||
|
||||
public function query($type, $sql, $as_object = FALSE, array $params = NULL) {
|
||||
// Make sure the database is connected
|
||||
$this->_connection or $this->connect();
|
||||
if (! $this->_connection && ! $this->connect())
|
||||
return new Database_TSM_Result(array(),'',$as_object,$params);
|
||||
|
||||
$this->clear();
|
||||
|
||||
if ( ! empty($this->_config['profiling']))
|
||||
@ -84,8 +86,7 @@ abstract class Database_TSM extends Database {
|
||||
if (isset($benchmark))
|
||||
Profiler::delete($benchmark);
|
||||
|
||||
SystemMessage::TSM_Error(sprintf('%s (%s)',$this->execute_stdout,$this->execute_stderr),$sql);
|
||||
Request::current()->redirect('welcome');
|
||||
SystemMessage::TSM('error',sprintf('%s (%s)',$this->execute_stdout,$this->execute_stderr),$sql);
|
||||
}
|
||||
|
||||
if (isset($benchmark))
|
||||
@ -106,9 +107,6 @@ abstract class Database_TSM extends Database {
|
||||
}
|
||||
|
||||
public function escape($value) {
|
||||
// Make sure the database is connected
|
||||
$this->_connection or $this->connect();
|
||||
|
||||
// SQL standard is to use single-quotes for all values
|
||||
return "'$value'";
|
||||
}
|
||||
|
@ -35,7 +35,7 @@ class Database_TSM_DB2 extends Database_TSM {
|
||||
unset($this->_config['connection']['username'], $this->_config['connection']['password']);
|
||||
|
||||
if (! $username OR ! $password)
|
||||
Request::current()->redirect('/login?need_login=1');
|
||||
HTTP::redirect('login');
|
||||
|
||||
try {
|
||||
if ($persistent) {
|
||||
@ -56,7 +56,7 @@ class Database_TSM_DB2 extends Database_TSM {
|
||||
return TSM::instance()->set($username,$password,$result);
|
||||
|
||||
} else
|
||||
Request::current()->redirect(Request::detect_uri());
|
||||
HTTP::redirect(Request::detect_uri());
|
||||
}
|
||||
|
||||
} catch (ErrorException $e) {
|
||||
|
@ -12,9 +12,6 @@
|
||||
*/
|
||||
class Database_TSM_DSMADMC extends Database_TSM {
|
||||
public function connect() {
|
||||
if ($this->_connection)
|
||||
return;
|
||||
|
||||
// Extract the connection parameters, adding required variabels
|
||||
extract($this->_config['connection'] + array(
|
||||
'database' => '',
|
||||
@ -26,23 +23,21 @@ class Database_TSM_DSMADMC extends Database_TSM {
|
||||
|
||||
// Get user login details from user session - these are set by login
|
||||
if (! $username)
|
||||
$username = Session::instance()->get_once(Kohana::config('auth.session_key'));
|
||||
$username = Session::instance()->get_once(Kohana::$config->load('auth')->session_key);
|
||||
if (! $password)
|
||||
$password = Session::instance()->get_once('password');
|
||||
|
||||
// Prevent this information from showing up in traces
|
||||
unset($this->_config['connection']['username'], $this->_config['connection']['password']);
|
||||
|
||||
if (! file_exists(Kohana::config('config.client'))) {
|
||||
system_message(array('title'=>'Cant find DSMADMC',
|
||||
'body'=>sprintf('Unable to find the dsmadmc at <b>%s</b>',Kohana::config('client.config')),
|
||||
'type'=>'error'));
|
||||
if (! file_exists(Kohana::$config->load('config')->client)) {
|
||||
SystemMessage::TSM('error',sprintf('Unable to find the dsmadmc at <b>%s</b>',Kohana::$config->load('config')->client),'');
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (! $username OR ! $password)
|
||||
Request::current()->redirect('/login?need_login=1');
|
||||
HTTP::redirect('login');
|
||||
|
||||
try {
|
||||
if ($persistent) {
|
||||
@ -52,20 +47,31 @@ class Database_TSM_DSMADMC extends Database_TSM {
|
||||
} else {
|
||||
// Create a connection and force it to be a new link
|
||||
$this->_connection = sprintf('%s %s -id=%s -password=%s -displ=list -editor=no -dataonly=YES %s %s ',
|
||||
Kohana::config('config.client'),
|
||||
Kohana::$config->load('config')->client,
|
||||
$database ? '-server='.$database : '',
|
||||
$username,
|
||||
$password,
|
||||
Kohana::config('config.client_errorlogname') ? sprintf('-errorlogname=%s',Kohana::config('config.client_errorlogname')) : '',
|
||||
Kohana::$config->load('config')->client_errorlogname ? sprintf('-errorlogname=%s',Kohana::$config->load('config')->client_errorlogname) : '',
|
||||
$database ? sprintf('-se=%s',$database) : ''
|
||||
);
|
||||
|
||||
$result = $this->query(Database::SELECT,'SELECT server_name,platform,version,release,level,sublevel FROM status');
|
||||
|
||||
if ($result)
|
||||
if ($result->count()) {
|
||||
return TSM::instance()->set($username,$password,$result);
|
||||
else
|
||||
Request::current()->redirect(Request::detect_uri());
|
||||
|
||||
} else {
|
||||
$this->_connection = FALSE;
|
||||
|
||||
// @todo Get ANS8034E (ID not recognised), or ??????E (invalid password)
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Login Failed'),
|
||||
'type'=>'error',
|
||||
'body'=>_('Invalid Username and/or Password.')
|
||||
));
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
} catch (ErrorException $e) {
|
||||
@ -77,14 +83,6 @@ class Database_TSM_DSMADMC extends Database_TSM {
|
||||
),
|
||||
$e->getCode());
|
||||
}
|
||||
|
||||
// \xFF is a better delimiter, but the PHP driver uses underscore
|
||||
$this->_connection_id = sha1($hostname.'_'.$username.'_'.$password);
|
||||
|
||||
if ( ! empty($this->_config['charset'])) {
|
||||
// Set the character set
|
||||
$this->set_charset($this->_config['charset']);
|
||||
}
|
||||
}
|
||||
|
||||
protected function execute($sql) {
|
||||
@ -95,6 +93,8 @@ class Database_TSM_DSMADMC extends Database_TSM {
|
||||
$sql = str_replace('\\','\\\\',$sql);
|
||||
|
||||
$this->execute_stderr = exec($this->_connection.'"'.$sql.'"',$this->execute_stdout,$this->execute_rc);
|
||||
if (Kohana::$config->load('config.site.mode') == Kohana::DEVELOPMENT)
|
||||
SystemMessage::TSM('info',sprintf('%s (%s) [%s]',$this->_connection.'"'.$sql.'"',join("\n",$this->execute_stdout),$this->execute_rc),$sql);
|
||||
|
||||
// Work out our message codes
|
||||
$result = array();
|
||||
@ -180,7 +180,7 @@ class Database_TSM_DSMADMC extends Database_TSM {
|
||||
$columns[$row['COLNAME']] = $column;
|
||||
}
|
||||
|
||||
return $columns;
|
||||
return $columns ? $columns : array('');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -11,20 +11,21 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class HTTP_Exception_404 extends Kohana_HTTP_Exception_404 {
|
||||
public function __construct($message, array $variables = NULL, $code = 0)
|
||||
public function __construct($message = NULL, array $variables = NULL, Exception $previous = NULL)
|
||||
{
|
||||
set_exception_handler(array(get_class($this),'handler'));
|
||||
parent::__construct($message, $variables, (int) $code);
|
||||
parent::__construct($message, $variables, $previous);
|
||||
}
|
||||
|
||||
public static function handler(Exception $e)
|
||||
{
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Page not found'),
|
||||
'title'=>_('Page not found'),
|
||||
'type'=>'error',
|
||||
'body'=>sprintf(_('The page [%s] you requested was not found?'),Request::detect_uri()),
|
||||
));
|
||||
|
||||
Request::factory()->redirect('welcome');
|
||||
HTTP::redirect('welcome');
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
64
application/classes/lnapp/Controller/Media.php
Normal file
@ -0,0 +1,64 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides access to rendering media items (javascript, images and css).
|
||||
*
|
||||
* @package lnApp
|
||||
* @subpackage Page/Media
|
||||
* @category Controllers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class lnApp_Controller_Media extends Controller {
|
||||
/**
|
||||
* This action will render all the media related files for a page
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
final public function action_get() {
|
||||
// Get the file path from the request
|
||||
$file = $this->request->param('file');
|
||||
|
||||
// Find the file extension
|
||||
$ext = pathinfo($file,PATHINFO_EXTENSION);
|
||||
|
||||
// Remove the extension from the filename
|
||||
$file = substr($file,0,-(strlen($ext)+1));
|
||||
$f = '';
|
||||
|
||||
// If our file is pathed with session, our file is in our session.
|
||||
if ($fd = Session::instance()->get_once($this->request->param('file'))) {
|
||||
$this->response->body($fd);
|
||||
|
||||
// First try and find media files for the theme-site_id
|
||||
} elseif ($f = Kohana::find_file($x=sprintf('media/site/%s/theme/%s',Config::siteid(),Config::theme()),$file,$ext)) {
|
||||
// Send the file content as the response
|
||||
$this->response->body(file_get_contents($f));
|
||||
|
||||
// Try and find media files for the site_id
|
||||
} elseif ($f = Kohana::find_file(sprintf('media/site/%s',Config::siteid()),$file,$ext)) {
|
||||
// Send the file content as the response
|
||||
$this->response->body(file_get_contents($f));
|
||||
|
||||
// If not found try a default media file
|
||||
} elseif ($f = Kohana::find_file('media',$file,$ext)) {
|
||||
// Send the file content as the response
|
||||
$this->response->body(file_get_contents($f));
|
||||
|
||||
} else {
|
||||
// Return a 404 status
|
||||
$this->response->status(404);
|
||||
}
|
||||
|
||||
// Generate and check the ETag for this file
|
||||
if (Kohana::$environment === Kohana::PRODUCTION OR Kohana::$config->load('debug')->etag)
|
||||
$this->check_cache(sha1($this->response->body()));
|
||||
|
||||
// Set the proper headers to allow caching
|
||||
$this->response->headers('Content-Type',File::mime_by_ext($ext));
|
||||
$this->response->headers('Content-Length',(string)$this->response->content_length());
|
||||
$this->response->headers('Last-Modified',date('r',$f ? filemtime($f) : time()));
|
||||
}
|
||||
}
|
||||
?>
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Controller_lnApp_Default extends Controller {
|
||||
abstract class lnApp_Controller_Default extends Controller {
|
||||
/**
|
||||
* The variable that our output is stored in
|
||||
*/
|
||||
@ -52,7 +52,7 @@ abstract class Controller_lnApp_Default extends Controller {
|
||||
*/
|
||||
protected function _auth_required() {
|
||||
// If our global configurable is disabled, then continue
|
||||
if (! Kohana::Config('config.method_security'))
|
||||
if (! Kohana::$config->load('config')->method_security)
|
||||
return FALSE;
|
||||
|
||||
return (($this->auth_required !== FALSE && Auth::instance()->logged_in() === FALSE) ||
|
||||
@ -71,11 +71,11 @@ abstract class Controller_lnApp_Default extends Controller {
|
||||
|
||||
// For no AJAX/JSON requests, display an access page
|
||||
} elseif (Auth::instance()->logged_in(NULL,get_class($this).'|'.__METHOD__)) {
|
||||
Request::current()->redirect('login/noaccess');
|
||||
HTTP::redirect('login/noaccess');
|
||||
|
||||
} else {
|
||||
Session::instance()->set('afterlogin',Request::detect_uri());
|
||||
Request::current()->redirect($this->noauth_redirect);
|
||||
HTTP::redirect($this->noauth_redirect);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -84,7 +84,7 @@ abstract class Controller_lnApp_Default extends Controller {
|
||||
parent::after();
|
||||
|
||||
// Generate and check the ETag for this file
|
||||
$this->response->check_cache(NULL,$this->request);
|
||||
$this->check_cache(sha1($this->response->body()));
|
||||
}
|
||||
}
|
||||
?>
|
70
application/classes/lnapp/Controller/login.php
Normal file
@ -0,0 +1,70 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* This class provides login capability
|
||||
*
|
||||
* @package lnApp
|
||||
* @subpackage Page/Login
|
||||
* @category Controllers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @also [logout]
|
||||
*/
|
||||
class lnApp_Controller_Login extends Controller_TemplateDefault {
|
||||
protected $auth_required = FALSE;
|
||||
|
||||
public function action_index() {
|
||||
// If user already signed-in
|
||||
if (Auth::instance()->logged_in()!= 0) {
|
||||
// Redirect to the user account
|
||||
HTTP::redirect('welcome/index');
|
||||
}
|
||||
|
||||
// If there is a post and $_POST is not empty
|
||||
if ($_POST) {
|
||||
// Store our details in a session key
|
||||
Session::instance()->set(Kohana::$config->load('auth')->session_key,$_POST['username']);
|
||||
Session::instance()->set('password',$_POST['password']);
|
||||
|
||||
// If the post data validates using the rules setup in the user model
|
||||
if (Auth::instance()->login($_POST['username'],$_POST['password'])) {
|
||||
// Redirect to the user account
|
||||
if ($redir = Session::instance()->get('afterlogin')) {
|
||||
Session::instance()->delete('afterlogin');
|
||||
HTTP::redirect($redir);
|
||||
|
||||
} else
|
||||
HTTP::redirect('welcome/index');
|
||||
|
||||
} else {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Invalid username or password'),
|
||||
'type'=>'error',
|
||||
'body'=>_('The username or password was invalid.')
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
Block::add(array(
|
||||
'title'=>_('Login to server'),
|
||||
'body'=>View::factory('login'),
|
||||
'style'=>array('css/login.css'=>'screen'),
|
||||
));
|
||||
|
||||
Script::add(array('type'=>'stdin','data'=>'
|
||||
$(document).ready(function() {
|
||||
$("#ajxbody").click(function() {$("#ajBODY").load("'.$this->request->uri().'/"); return false;});
|
||||
});'
|
||||
));
|
||||
}
|
||||
|
||||
public function action_noaccess() {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('No access to requested resource'),
|
||||
'type'=>'error',
|
||||
'body'=>_('You do not have access to the requested resource, please contact your administrator.')
|
||||
));
|
||||
}
|
||||
}
|
||||
?>
|
@ -11,16 +11,16 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @also [login]
|
||||
*/
|
||||
class Controller_lnApp_Logout extends Controller {
|
||||
class lnApp_Controller_Logout extends Controller {
|
||||
public function action_index() {
|
||||
# If user already signed-in
|
||||
if (Auth::instance()->logged_in()!= 0) {
|
||||
Auth::instance()->logout();
|
||||
|
||||
Request::current()->redirect('login');
|
||||
HTTP::redirect('login');
|
||||
}
|
||||
|
||||
Request::current()->redirect('welcome/index');
|
||||
HTTP::redirect('welcome/index');
|
||||
}
|
||||
}
|
||||
?>
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
abstract class lnApp_Controller_TemplateDefault extends Controller_Template {
|
||||
/**
|
||||
* @var string page template
|
||||
*/
|
||||
@ -42,6 +42,14 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
'menu' => TRUE,
|
||||
);
|
||||
|
||||
public function __construct(Request $request,Response $response) {
|
||||
// Our Menu's can run without method authentication by default.
|
||||
if (! isset($this->secure_actions['menu']))
|
||||
$this->secure_actions['menu'] = FALSE;
|
||||
|
||||
return parent::__construct($request,$response);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check and see if this controller needs authentication
|
||||
*
|
||||
@ -54,7 +62,7 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
*/
|
||||
protected function _auth_required() {
|
||||
// If our global configurable is disabled, then continue
|
||||
if (! Kohana::Config('config.method_security'))
|
||||
if (! Kohana::$config->load('config')->method_security)
|
||||
return FALSE;
|
||||
|
||||
return (($this->auth_required !== FALSE && Auth::instance()->logged_in(NULL,get_class($this).'|'.__METHOD__) === FALSE) ||
|
||||
@ -75,13 +83,14 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
return;
|
||||
}
|
||||
|
||||
// Actions that start with ajax, should only be ajax
|
||||
if (! Kohana::$config->load('debug')->ajax AND preg_match('/^ajax/',Request::current()->action()) AND ! Request::current()->is_ajax())
|
||||
die();
|
||||
|
||||
parent::before();
|
||||
|
||||
// Check user auth and role
|
||||
if ($this->_auth_required()) {
|
||||
if (Kohana::$is_cli)
|
||||
throw new Kohana_Exception('Cant run :method, authentication not possible',array(':method'=>$this->request->action()));
|
||||
|
||||
// If auth is required and the user is logged in, then they dont have access.
|
||||
// (We have already checked authorisation.)
|
||||
if (Auth::instance()->logged_in(NULL,get_class($this).'|'.__METHOD__)) {
|
||||
@ -89,7 +98,7 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Insufficient Access'),
|
||||
'type'=>'debug',
|
||||
'body'=>Kohana::debug(array('required'=>$this->auth_required,'action'=>$this->request->action(),'user'=>Auth::instance()->get_user()->username)),
|
||||
'body'=>Debug::vars(array('required'=>$this->auth_required,'action'=>$this->request->action(),'user'=>Auth::instance()->get_user()->username)),
|
||||
));
|
||||
|
||||
// @todo Login No Access redirects are not handled in JS?
|
||||
@ -97,11 +106,11 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
echo _('You dont have enough permissions.');
|
||||
die();
|
||||
} else
|
||||
Request::current()->redirect('login/noaccess');
|
||||
HTTP::redirect('login/noaccess');
|
||||
|
||||
} else {
|
||||
Session::instance()->set('afterlogin',Request::detect_uri());
|
||||
Request::current()->redirect($this->noauth_redirect);
|
||||
HTTP::redirect($this->noauth_redirect);
|
||||
}
|
||||
}
|
||||
|
||||
@ -121,13 +130,12 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
'data'=>'css/default.css',
|
||||
));
|
||||
|
||||
// Our default scripts
|
||||
// This is in a reverse list, since we push them to the beginging of the scripts to render.
|
||||
foreach (array('file'=>array(
|
||||
// Our default script(s)
|
||||
foreach (array('file'=>array_reverse(array(
|
||||
'js/jquery-1.6.4.min.js',
|
||||
'js/jquery.jstree-1.0rc3.js',
|
||||
'js/jquery.cookie.js',
|
||||
'js/jquery.jstree-1.0rc.js',
|
||||
'js/jquery-1.4.2.js',
|
||||
)) as $type => $datas) {
|
||||
))) as $type => $datas) {
|
||||
|
||||
foreach ($datas as $data) {
|
||||
Script::add(array(
|
||||
@ -185,17 +193,25 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
if ($s = $this->_sysmsg() AND (string)$s)
|
||||
$this->response->body(sprintf('<table class="sysmsg"><tr><td>%s</td></tr></table>',$s));
|
||||
|
||||
# In case there any style sheets or scrpits for this render.
|
||||
// In case there any style sheets for this render.
|
||||
$this->response->bodyadd(Style::factory());
|
||||
|
||||
# Get the response body
|
||||
// Since we are ajax, we should re-render the breadcrumb
|
||||
Session::instance()->set('breadcrumb',(string)Breadcrumb::factory());
|
||||
$this->response->bodyadd(Script::add(array('type'=>'stdin','data'=>'$().ready($("#ajCONTROL").load("'.URL::site('welcome/breadcrumb').'",null,function(x,s,r) {}));')));
|
||||
|
||||
// In case there any javascript for this render.
|
||||
$this->response->bodyadd(Script::factory());
|
||||
|
||||
// Get the response body
|
||||
$this->response->bodyadd(sprintf('<table class="content"><tr><td>%s</td></tr></table>',$this->template->content));
|
||||
}
|
||||
|
||||
parent::after();
|
||||
|
||||
// Generate and check the ETag for this file
|
||||
$this->response->check_cache(NULL,$this->request);
|
||||
if (Kohana::$environment === Kohana::PRODUCTION OR Kohana::$config->load('debug')->etag)
|
||||
$this->check_cache(sha1($this->response->body()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -237,48 +253,5 @@ abstract class Controller_lnApp_TemplateDefault extends Controller_Template {
|
||||
public function _footer() {
|
||||
return sprintf('© %s',Config::SiteName());
|
||||
}
|
||||
|
||||
/**
|
||||
* This action will render all the media related files for a page
|
||||
* @return void
|
||||
*/
|
||||
final public function action_media() {
|
||||
// Get the file path from the request
|
||||
$file = $this->request->param('file');
|
||||
|
||||
// Find the file extension
|
||||
$ext = pathinfo($file, PATHINFO_EXTENSION);
|
||||
|
||||
// Remove the extension from the filename
|
||||
$file = substr($file, 0, -(strlen($ext) + 1));
|
||||
$f = '';
|
||||
|
||||
// If our file is pathed with session, our file is in our session.
|
||||
if ($fd = Session::instance()->get_once($this->request->param('file'))) {
|
||||
$this->response->body($fd);
|
||||
|
||||
// First try and find media files for the site_id
|
||||
} elseif ($f = Kohana::find_file(sprintf('media/%s',Config::siteid()), $file, $ext)) {
|
||||
// Send the file content as the response
|
||||
$this->response->body(file_get_contents($f));
|
||||
|
||||
// If not found try a default media file
|
||||
} elseif ($f = Kohana::find_file('media', $file, $ext)) {
|
||||
// Send the file content as the response
|
||||
$this->response->body(file_get_contents($f));
|
||||
|
||||
} else {
|
||||
// Return a 404 status
|
||||
$this->response->status(404);
|
||||
}
|
||||
|
||||
// Generate and check the ETag for this file
|
||||
$this->response->check_cache(NULL,$this->request);
|
||||
|
||||
// Set the proper headers to allow caching
|
||||
$this->response->headers('Content-Type',File::mime_by_ext($ext));
|
||||
$this->response->headers('Content-Length',(string)$this->response->content_length());
|
||||
$this->response->headers('Last-Modified',date('r', $f ? filemtime($f) : time()));
|
||||
}
|
||||
}
|
||||
?>
|
@ -10,17 +10,17 @@
|
||||
* @copyright (c) 2010 Open Source Billing
|
||||
* @license http://dev.osbill.net/license.html
|
||||
*/
|
||||
class Controller_lnApp_Tree extends Controller_Default {
|
||||
class lnApp_Controller_Tree extends Controller_Default {
|
||||
/**
|
||||
* @var string page media route as per [Route]
|
||||
*/
|
||||
protected static $jsmediaroute = 'default/media';
|
||||
|
||||
public function after() {
|
||||
parent::after();
|
||||
|
||||
$this->response->headers('Content-Type','application/json');
|
||||
$this->response->body(sprintf('[%s]',json_encode($this->output)));
|
||||
$this->response->body(json_encode($this->output));
|
||||
|
||||
parent::after();
|
||||
}
|
||||
|
||||
public static function js() {
|
||||
@ -29,11 +29,13 @@ class Controller_lnApp_Tree extends Controller_Default {
|
||||
return '
|
||||
<div id="tree" class=""></div>
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
$(function () {
|
||||
var use_ajax = false;
|
||||
|
||||
$("#tree").jstree({
|
||||
themes : {
|
||||
"theme" : "default",
|
||||
"url" : "'.URL::site($mediapath->uri(array('file'=>'css/jquery.jstree.css'))).'",
|
||||
"theme" : "classic",
|
||||
},
|
||||
ui : {
|
||||
"select_limit" : 1,
|
||||
@ -41,12 +43,13 @@ $(function () {
|
||||
},
|
||||
cookies : {
|
||||
"save_selected" : false,
|
||||
"cookie_options" : { path : "'.URL::site().'" }
|
||||
},
|
||||
json_data : {
|
||||
"correct_state" : "true",
|
||||
"progressive_render" : "true",
|
||||
"ajax" : {
|
||||
"url" : "'.URL::site('/tree/json').'",
|
||||
"url" : "'.URL::site('tree/json').'",
|
||||
"data" : function (n) {
|
||||
return { id : n.attr ? n.attr("id") : "N_"+0 };
|
||||
}
|
||||
@ -60,18 +63,25 @@ $(function () {
|
||||
if (a = data.rslt.obj.attr(\'id\').indexOf(\'_\')) {
|
||||
id = data.rslt.obj.attr(\'id\').substr(a+1);
|
||||
|
||||
if (href = $("#N_"+id).attr("href"))
|
||||
if (href = $("#N_"+id).attr("href")) {
|
||||
if (! use_ajax) {
|
||||
window.location = href;
|
||||
return;
|
||||
}
|
||||
|
||||
$("#ajBODY").empty().html("<img src=\"'.URL::site('media/img/ajax-progress.gif').'\" alt=\"Loading...\" />");
|
||||
$("#ajBODY").load(href, function(r,s,x) {
|
||||
if (s == "error") {
|
||||
var msg = "Sorry but there was an error: ";
|
||||
$("#ajBODY").html(msg + x.status + " " + x.statusText + r);
|
||||
}
|
||||
});
|
||||
else
|
||||
} else
|
||||
alert("Unknown: "+id+" HREF:"+href);
|
||||
}
|
||||
});
|
||||
});
|
||||
// -->
|
||||
</script>';
|
||||
}
|
||||
|
||||
@ -81,12 +91,12 @@ $(function () {
|
||||
* The incoming ID is either a Branch B_x or a Node N_x
|
||||
* Where X is actually the module.
|
||||
*
|
||||
* @param id
|
||||
* @param array $data Tree data passed in by inherited methods
|
||||
*/
|
||||
public function action_json($id=null,array $data=array()) {
|
||||
public function action_json(array $data=array()) {
|
||||
if ($this->_auth_required() AND ! Auth::instance()->logged_in()) {
|
||||
$this->output = array('attr'=>array('id'=>'a_login'),
|
||||
'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'N_login','href'=>URL::site('/login'))));
|
||||
'data'=>array('title'=>_('Please Login').'...','attr'=>array('id'=>'N_login','href'=>URL::site('login'))));
|
||||
|
||||
return;
|
||||
}
|
||||
@ -98,7 +108,7 @@ $(function () {
|
||||
'attr'=>array('id'=>sprintf('B_%s',$branch['id'])),
|
||||
'state'=>$branch['state'],
|
||||
'data'=>array('title'=>$branch['name']),
|
||||
'attr'=>array('id'=>sprintf('N_%s',$branch['id']),'href'=>empty($branch['attr_href']) ? URL::site(sprintf('/%s/menu',$branch['name'])) : $branch['attr_href']),
|
||||
'attr'=>array('id'=>sprintf('N_%s',$branch['id']),'href'=>empty($branch['attr_href']) ? URL::site(sprintf('%s/menu',$branch['name'])) : $branch['attr_href']),
|
||||
)
|
||||
);
|
||||
}
|
@ -13,7 +13,7 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @uses Style
|
||||
*/
|
||||
class lnApp_Block extends HTMLRender {
|
||||
abstract class lnApp_Block extends HTMLRender {
|
||||
protected static $_data = array();
|
||||
protected static $_spacer = '<table><tr class="spacer"><td> </td></tr></table>';
|
||||
protected static $_required_keys = array('body');
|
||||
@ -24,6 +24,10 @@ class lnApp_Block extends HTMLRender {
|
||||
* @param array Block attributes
|
||||
*/
|
||||
public static function add($block,$prepend=FALSE) {
|
||||
// Any body objects should be converted to a string, so that any calls to Style/Script are processed
|
||||
if (isset($block['body']))
|
||||
$block['body'] = (string)$block['body'];
|
||||
|
||||
parent::add($block);
|
||||
|
||||
// Detect any style sheets.
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_Breadcrumb extends HTMLRender {
|
||||
abstract class lnApp_Breadcrumb extends HTMLRender {
|
||||
protected static $_data = array();
|
||||
protected static $_spacer = ' » ';
|
||||
protected static $_required_keys = array('body');
|
||||
@ -23,17 +23,32 @@ class lnApp_Breadcrumb extends HTMLRender {
|
||||
public static function set($path) {
|
||||
if (is_string($path))
|
||||
static::$_data['path'] = explode('/',$path);
|
||||
else
|
||||
elseif (is_array($path))
|
||||
static::$_data['path'] = $path;
|
||||
else
|
||||
throw new Kohana_Exception('Path is not a string, nor an array');
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable a friendly name to be used for a path
|
||||
*/
|
||||
public static function name($path,$name) {
|
||||
public static function name($path,$name,$override=TRUE) {
|
||||
if (isset(static::$_data['name'][$path]) AND ! $override)
|
||||
return;
|
||||
|
||||
static::$_data['name'][$path] = $name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Enable specifying the URL for a path
|
||||
*/
|
||||
public static function URL($path,$url,$override=TRUE) {
|
||||
if (isset(static::$_data['url'][$path]) AND ! $override)
|
||||
return;
|
||||
|
||||
static::$_data['url'][$path] = $url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return an instance of this class
|
||||
*
|
||||
@ -47,17 +62,26 @@ class lnApp_Breadcrumb extends HTMLRender {
|
||||
* Render this Breadcrumb
|
||||
*/
|
||||
protected function render() {
|
||||
$output = HTML::anchor('/',_('Home'));
|
||||
$output = '<ul id="breadcrumb">';
|
||||
$output .= '<li>'.HTML::anchor('/',_('Home')).'</li>';
|
||||
|
||||
$data = empty(static::$_data['path']) ? explode('/',preg_replace('/^\//','',Request::detect_uri())) : static::$_data['path'];
|
||||
|
||||
$c = count($data);
|
||||
$i=0;
|
||||
foreach ($data as $k => $v) {
|
||||
$output .= static::$_spacer;
|
||||
$i++;
|
||||
|
||||
$p = join('/',array_slice($data,0,$k+1));
|
||||
$output .= HTML::anchor($p,empty(static::$_data['name'][$p]) ? ucfirst($v) : static::$_data['name'][$p]);
|
||||
$output .= $i==$c ? '<li id="active">' : '<li>';
|
||||
$output .= HTML::anchor(
|
||||
(empty(static::$_data['url'][$p]) ? $p : static::$_data['url'][$p]),
|
||||
(empty(static::$_data['name'][$p]) ? ucfirst($v) : static::$_data['name'][$p])
|
||||
);
|
||||
$output .= '</li>';
|
||||
}
|
||||
|
||||
$output .= '</ul>';
|
||||
return $output;
|
||||
}
|
||||
}
|
||||
|
@ -12,76 +12,107 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
abstract class lnApp_Config extends Kohana_Config {
|
||||
protected static $logo = 'img/logo-small.png';
|
||||
|
||||
/**
|
||||
* Some early initialisation
|
||||
*
|
||||
* At this point, KH hasnt been fully initialised either, so we cant rely on
|
||||
* too many KH functions yet.
|
||||
* NOTE: Kohana doesnt provide a parent construct for the Kohana_Config class.
|
||||
*/
|
||||
public function __construct() {
|
||||
if (defined('PHPUNITTEST'))
|
||||
$_SERVER['SERVER_NAME'] = PHPUNITTEST;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return our site name
|
||||
*/
|
||||
public static function site() {
|
||||
if (! empty($_SERVER['SERVER_NAME']))
|
||||
return $_SERVER['SERVER_NAME'];
|
||||
|
||||
if (! $site = CLI::options('site'))
|
||||
throw new Kohana_Exception(_('Cant figure out the site, use --site= for CLI'));
|
||||
|
||||
return $site['site'];
|
||||
return $_SERVER['SERVER_NAME'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Work out our site ID for multiehosting
|
||||
* @todo Change this to query the DB for site number.
|
||||
*/
|
||||
public static function siteid() {
|
||||
$sites = Kohana::config('config.site');
|
||||
|
||||
// If we havent been configured for sites
|
||||
if (is_null($sites) OR ! is_array($sites) OR ! isset($sites[static::site()]))
|
||||
return 0;
|
||||
else
|
||||
return $sites[static::site()];
|
||||
return Kohana::$config->load('config.site.id');
|
||||
}
|
||||
|
||||
/**
|
||||
* Work out our site mode (dev,test,prod)
|
||||
* @todo Change this to query the DB for mode.
|
||||
*/
|
||||
public static function sitemode() {
|
||||
$sites = Kohana::config('config.site_mode');
|
||||
return Kohana::$config->load('config.site.mode');
|
||||
}
|
||||
|
||||
// If we havent been configured for sites
|
||||
if (is_null($sites) OR ! is_array($sites) OR ! isset($sites[static::site()]))
|
||||
return Kohana::PRODUCTION;
|
||||
else
|
||||
return $sites[static::site()];
|
||||
public static function sitemodeverbose() {
|
||||
$modes = array(
|
||||
Kohana::PRODUCTION=>'Production',
|
||||
Kohana::STAGING=>'Staging',
|
||||
Kohana::TESTING=>'Testing',
|
||||
Kohana::DEVELOPMENT=>'Development',
|
||||
);
|
||||
|
||||
return (! isset($modes[static::sitemode()])) ? 'Unknown' : $modes[static::sitemode()];
|
||||
}
|
||||
|
||||
public static function submode() {
|
||||
$submode = Kohana::$config->load('config.debug.submode');
|
||||
|
||||
return (isset($submode[Request::$client_ip])) ? $submode[Request::$client_ip] : FALSE;
|
||||
}
|
||||
|
||||
public static function sitename() {
|
||||
return Kohana::config('config.site_name');
|
||||
return Kohana::$config->load('config')->site_name;
|
||||
}
|
||||
|
||||
// Called in Invoice/Emailing to embed the file.
|
||||
public static function logo_file() {
|
||||
// @todo Move the logo filename to a config file
|
||||
return Kohana::find_file(sprintf('media/%s',Config::siteid()),'img/logo-small','png');
|
||||
list ($path,$suffix) = explode('.',static::$logo);
|
||||
return ($a=Kohana::find_file(sprintf('media/site/%s',Config::siteid()),$path,$suffix)) ? $a : Kohana::find_file('media',$path,$suffix);
|
||||
}
|
||||
|
||||
public static function logo_uri() {
|
||||
list ($path,$suffix) = explode('.',static::$logo);
|
||||
return URL::site(Route::get('default/media')->uri(array('file'=>$path.'.'.$suffix),array('alt'=>static::sitename())),'http');
|
||||
}
|
||||
|
||||
public static function logo() {
|
||||
// @todo Move the logo filename to a config file
|
||||
$mediapath = Route::get('default/media');
|
||||
$logo = $mediapath->uri(array('file'=>'img/logo-small.png'),array('alt'=>static::sitename()));
|
||||
return HTML::image(static::logo_uri(),array('class'=>'headlogo','alt'=>_('Logo')));
|
||||
}
|
||||
|
||||
return HTML::image($logo,array('class'=>'headlogo','alt'=>_('Logo')));
|
||||
public static function login_uri() {
|
||||
return ($ao = Auth::instance()->get_user() AND is_object($ao)) ? HTML::anchor('user/account/edit',$ao->name()) : HTML::anchor('login',_('Login'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Return our caching mechanism
|
||||
*/
|
||||
public static function cachetype() {
|
||||
return is_null(Kohana::config('config.cache_type')) ? 'file' : Kohana::config('config.cache_type');
|
||||
return is_null(Kohana::$config->load('config')->cache_type) ? 'file' : Kohana::$config->load('config')->cache_type;
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a date using a site configured format
|
||||
*/
|
||||
public static function date($date) {
|
||||
return date(Kohana::config('config.date_format'),$date);
|
||||
return $date ? date(Kohana::$config->load('config')->date_format,$date) : '>Not Set<';
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a date using a site configured format
|
||||
*/
|
||||
public static function time($date) {
|
||||
return date(Kohana::$config->load('config')->time_format,$date);
|
||||
}
|
||||
|
||||
/**
|
||||
* Show a date using a site configured format
|
||||
*/
|
||||
public static function datetime($date) {
|
||||
return sprintf('%s %s',static::date($date),static::time($date));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -91,12 +122,16 @@ abstract class lnApp_Config extends Kohana_Config {
|
||||
* @return mixed|array - Email to send test emails to
|
||||
*/
|
||||
public static function testmail($template) {
|
||||
$config = Kohana::config('config.email_admin_only');
|
||||
$config = Kohana::$config->load('config')->email_admin_only;
|
||||
|
||||
if (is_null($config) OR ! is_array($config) OR empty($config[$template]))
|
||||
return FALSE;
|
||||
else
|
||||
return $config[$template];
|
||||
}
|
||||
|
||||
public static function theme() {
|
||||
return Kohana::$config->load('config')->theme;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -10,10 +10,10 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_HeadImages extends HTMLRender {
|
||||
abstract class lnApp_HeadImages extends HTMLRender {
|
||||
protected static $_data = array();
|
||||
protected static $_spacer = ' ';
|
||||
protected static $_required_keys = array('url','img');
|
||||
protected static $_required_keys = array('img');
|
||||
|
||||
/**
|
||||
* Return an instance of this class
|
||||
@ -35,7 +35,10 @@ class lnApp_HeadImages extends HTMLRender {
|
||||
|
||||
foreach (static::$_data as $value) {
|
||||
$i = HTML::image($mediapath->uri(array('file'=>$value['img'])),array('alt'=>isset($value['attrs']['title']) ? $value['attrs']['title'] : ''));
|
||||
$output .= HTML::anchor($value['url'],$i,(isset($value['attrs']) && is_array($value['attrs'])) ? $value['attrs'] : null);
|
||||
if (isset($value['url']))
|
||||
$output .= HTML::anchor($value['url'],$i,(isset($value['attrs']) && is_array($value['attrs'])) ? $value['attrs'] : NULL);
|
||||
else
|
||||
$output .= $i;
|
||||
$output .= static::$_spacer;
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_HTML extends Kohana_HTML {
|
||||
abstract class lnApp_HTML extends Kohana_HTML {
|
||||
public static function nbsp($string) {
|
||||
if (strlen((string)$string))
|
||||
return $string;
|
||||
|
@ -77,9 +77,7 @@ abstract class lnApp_HTMLRender {
|
||||
|
||||
// Display the exception message
|
||||
catch (Exception $e) {
|
||||
Kohana::exception_handler($e);
|
||||
|
||||
return '';
|
||||
Kohana_Exception::handler($e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_Meta {
|
||||
abstract class lnApp_Meta {
|
||||
private $_data = array();
|
||||
private $_array_keys = array();
|
||||
|
||||
@ -19,7 +19,7 @@ class lnApp_Meta {
|
||||
return array();
|
||||
|
||||
if (empty($this->_data[$key]))
|
||||
return null;
|
||||
return NULL;
|
||||
else
|
||||
return $this->_data[$key];
|
||||
}
|
||||
|
@ -10,11 +10,12 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_Script extends HTMLRender {
|
||||
abstract class lnApp_Script extends HTMLRender {
|
||||
protected static $_data = array();
|
||||
protected static $_spacer = "\n";
|
||||
protected static $_required_keys = array('type','data');
|
||||
protected static $_unique_vals = array('file'=>'type');
|
||||
protected static $_rendered = FALSE;
|
||||
|
||||
/**
|
||||
* Return an instance of this class
|
||||
@ -34,26 +35,28 @@ class lnApp_Script extends HTMLRender {
|
||||
$foutput = $soutput = '';
|
||||
$mediapath = Route::get(static::$_media_path);
|
||||
|
||||
$i = $j = 0;
|
||||
foreach (static::$_data as $value) {
|
||||
|
||||
switch ($value['type']) {
|
||||
case 'file':
|
||||
$foutput .= HTML::script($mediapath->uri(array('file'=>$value['data'])));
|
||||
if ($i++)
|
||||
$foutput .= static::$_spacer;
|
||||
break;
|
||||
case 'stdin':
|
||||
$soutput .= sprintf("<script type=\"text/javascript\">//<![CDATA[\n%s\n//]]></script>",$value['data']);
|
||||
if ($j++)
|
||||
$soutput .= static::$_spacer;
|
||||
break;
|
||||
default:
|
||||
throw new Kohana_Exception('Unknown style type :type',array(':type'=>$value['type']));
|
||||
}
|
||||
}
|
||||
|
||||
static::$_rendered = TRUE;
|
||||
return $foutput.static::$_spacer.$soutput;
|
||||
}
|
||||
|
||||
public static function add($item,$prepend=FALSE,$x='') {
|
||||
if (static::$_rendered)
|
||||
throw new Kohana_Exception('Already rendered?');
|
||||
|
||||
return parent::add($item,$prepend);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -11,7 +11,7 @@
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
* @uses Style
|
||||
*/
|
||||
class lnApp_Sort {
|
||||
abstract class lnApp_Sort {
|
||||
/**
|
||||
* Sort a multi dimensional array.
|
||||
*
|
||||
@ -20,86 +20,71 @@ class lnApp_Sort {
|
||||
* @param boolean Whether to reverse sort.
|
||||
* @return array Sorted multi demension array.
|
||||
*/
|
||||
public static function masort(&$data,$sortby,$rev=0) {
|
||||
// if the array to sort is null or empty
|
||||
if (! $data)
|
||||
public static function MAsort(&$data,$sortby,$rev=0) {
|
||||
// if the array to sort is null or empty, or our sortby is bad
|
||||
if (! preg_match('/^([a-zA-Z0-9_]+(\([a-zA-Z0-9_,]*\)(->[a-zA-Z0-9])?)?,?)+$/',$sortby) || ! $data)
|
||||
return;
|
||||
|
||||
static $MASORT_CACHE = array();
|
||||
|
||||
if (empty($MASORT_CACHE[$sortby])) {
|
||||
$code = "\$c=0;\n";
|
||||
|
||||
foreach (explode(',',$sortby) as $key) {
|
||||
$code .= "if (is_object(\$a) || is_object(\$b)) {\n";
|
||||
|
||||
$code .= " if (is_array(\$a->$key)) {\n";
|
||||
$code .= " asort(\$a->$key);\n";
|
||||
$code .= " \$aa = array_shift(\$a->$key);\n";
|
||||
$code .= " } else\n";
|
||||
$code .= " \$aa = \$a->$key;\n";
|
||||
|
||||
$code .= " if (is_array(\$b->$key)) {\n";
|
||||
$code .= " asort(\$b->$key);\n";
|
||||
$code .= " \$bb = array_shift(\$b->$key);\n";
|
||||
$code .= " } else\n";
|
||||
$code .= " \$bb = \$b->$key;\n";
|
||||
|
||||
$code .= " if (\$aa != \$bb)";
|
||||
if ($rev)
|
||||
$code .= " return (\$aa < \$bb ? 1 : -1);\n";
|
||||
else
|
||||
$code .= " return (\$aa > \$bb ? 1 : -1);\n";
|
||||
|
||||
$code .= "} else {\n";
|
||||
|
||||
$code .= " \$a = array_change_key_case(\$a);\n";
|
||||
$code .= " \$b = array_change_key_case(\$b);\n";
|
||||
|
||||
$key = strtolower($key);
|
||||
|
||||
$code .= " if ((! isset(\$a['$key'])) && isset(\$b['$key'])) return 1;\n";
|
||||
$code .= " if (isset(\$a['$key']) && (! isset(\$b['$key']))) return -1;\n";
|
||||
|
||||
$code .= " if ((isset(\$a['$key'])) && (isset(\$b['$key']))) {\n";
|
||||
$code .= " if (is_array(\$a['$key'])) {\n";
|
||||
$code .= " asort(\$a['$key']);\n";
|
||||
$code .= " \$aa = array_shift(\$a['$key']);\n";
|
||||
$code .= " } else\n";
|
||||
$code .= " \$aa = \$a['$key'];\n";
|
||||
|
||||
$code .= " if (is_array(\$b['$key'])) {\n";
|
||||
$code .= " asort(\$b['$key']);\n";
|
||||
$code .= " \$bb = array_shift(\$b['$key']);\n";
|
||||
$code .= " } else\n";
|
||||
$code .= " \$bb = \$b['$key'];\n";
|
||||
|
||||
$code .= " if (\$aa != \$bb)\n";
|
||||
$code .= " if (is_numeric(\$aa) && is_numeric(\$bb)) {\n";
|
||||
|
||||
if ($rev)
|
||||
$code .= " return (\$aa < \$bb ? 1 : -1);\n";
|
||||
else
|
||||
$code .= " return (\$aa > \$bb ? 1 : -1);\n";
|
||||
|
||||
$code .= " } else {\n";
|
||||
|
||||
if ($rev)
|
||||
$code .= " if ( (\$c = strcasecmp(\$bb,\$aa)) != 0 ) return \$c;\n";
|
||||
else
|
||||
$code .= " if ( (\$c = strcasecmp(\$aa,\$bb)) != 0 ) return \$c;\n";
|
||||
|
||||
$code .= " }\n";
|
||||
$code .= " }\n";
|
||||
$code .= "}\n";
|
||||
|
||||
$code = '$c=0;';
|
||||
|
||||
foreach (explode(',',$sortby) as $key) {
|
||||
$code .= 'if (is_object($a) || is_object($b)) {';
|
||||
foreach (array('a','b') as $x) {
|
||||
$code .= 'if (is_array($'.$x.'->'.$key.')) {';
|
||||
$code .= 'asort($'.$x.'->'.$key.');';
|
||||
$code .= '$x'.$x.' = array_shift($'.$x.'->'.$key.');';
|
||||
$code .= '} else';
|
||||
$code .= '$x'.$x.' = $'.$x.'->'.$key.';';
|
||||
}
|
||||
|
||||
$code .= 'return $c;';
|
||||
|
||||
$MASORT_CACHE[$sortby] = create_function('$a, $b',$code);
|
||||
|
||||
$code .= 'if ($xa != $xb)';
|
||||
if ($rev)
|
||||
$code .= 'return ($xa < $xb ? 1 : -1);';
|
||||
else
|
||||
$code .= 'return ($xa > $xb ? 1 : -1);';
|
||||
|
||||
$code .= '} else {';
|
||||
|
||||
foreach (array('a','b') as $x)
|
||||
$code .= '$'.$x.' = array_change_key_case($'.$x.');';
|
||||
|
||||
$key = strtolower($key);
|
||||
|
||||
$code .= 'if ((! isset($a[\''.$key.'\'])) && isset($b[\''.$key.'\'])) return 1;';
|
||||
$code .= 'if (isset($a[\''.$key.'\']) && (! isset($b[\''.$key.'\']))) return -1;';
|
||||
|
||||
$code .= 'if ((isset($a[\''.$key.'\'])) && (isset($b[\''.$key.'\']))) {';
|
||||
foreach (array('a','b') as $x) {
|
||||
$code .= 'if (is_array($'.$x.'[\''.$key.'\'])) {';
|
||||
$code .= 'asort($'.$x.'[\''.$key.'\']);';
|
||||
$code .= '$x'.$x.' = array_shift($'.$x.'[\''.$key.'\']);';
|
||||
$code .= '} else';
|
||||
$code .= '$x'.$x.' = $'.$x.'[\''.$key.'\'];';
|
||||
}
|
||||
|
||||
$code .= 'if ($xa != $xb)';
|
||||
$code .= 'if (is_numeric($xa) && is_numeric($xb)) {';
|
||||
|
||||
if ($rev)
|
||||
$code .= 'return ($xa < $xb ? 1 : -1);';
|
||||
else
|
||||
$code .= 'return ($xa > $xb ? 1 : -1);';
|
||||
|
||||
$code .= '} else {';
|
||||
|
||||
if ($rev)
|
||||
$code .= 'if (($c = strcasecmp($xb,$xa)) != 0) return $c;';
|
||||
else
|
||||
$code .= 'if (($c = strcasecmp($xa,$xb)) != 0) return $c;';
|
||||
|
||||
$code .= '}}}';
|
||||
}
|
||||
|
||||
uasort($data,$MASORT_CACHE[$sortby]);
|
||||
|
||||
$code .= 'return $c;';
|
||||
|
||||
$result = create_function('$a, $b',$code);
|
||||
|
||||
uasort($data,$result);
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -10,10 +10,11 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_Style extends HTMLRender {
|
||||
abstract class lnApp_Style extends HTMLRender {
|
||||
protected static $_data = array();
|
||||
protected static $_spacer = "\n";
|
||||
protected static $_required_keys = array('type','data');
|
||||
protected static $_unique_vals = array('file'=>'type');
|
||||
|
||||
/**
|
||||
* Return an instance of this class
|
||||
@ -30,25 +31,24 @@ class lnApp_Style extends HTMLRender {
|
||||
* @see HTMLRender::render()
|
||||
*/
|
||||
protected function render() {
|
||||
$output = '';
|
||||
$foutput = $soutput = '';
|
||||
$mediapath = Route::get(static::$_media_path);
|
||||
|
||||
$i = 0;
|
||||
foreach (static::$_data as $value) {
|
||||
if ($i++)
|
||||
$output .= static::$_spacer;
|
||||
|
||||
switch ($value['type']) {
|
||||
case 'file':
|
||||
$output .= HTML::style($mediapath->uri(array('file'=>$value['data'])),
|
||||
$foutput .= HTML::style($mediapath->uri(array('file'=>$value['data'])),
|
||||
array('media'=>(! empty($value['media'])) ? $value['media'] : 'screen'),TRUE);
|
||||
break;
|
||||
case 'stdin':
|
||||
$soutput .= sprintf("<style type=\"text/css\">%s</style>",$value['data']);
|
||||
break;
|
||||
default:
|
||||
throw new Kohana_Exception('Unknown style type :type',array(':type'=>$value['type']));
|
||||
}
|
||||
}
|
||||
|
||||
return $output;
|
||||
return $foutput.static::$_spacer.$soutput;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class lnApp_SystemMessage extends HTMLRender {
|
||||
abstract class lnApp_SystemMessage extends HTMLRender {
|
||||
protected static $_data = array();
|
||||
protected static $_spacer = '<table><tr class="spacer"><td> </td></tr></table>';
|
||||
protected static $_required_keys = array('title','body','type');
|
||||
@ -69,7 +69,7 @@ class lnApp_SystemMessage extends HTMLRender {
|
||||
/**
|
||||
* Render an image for the System Message
|
||||
*/
|
||||
private static function image($type,$raw=false,$big=false,$alt='') {
|
||||
public static function image($type,$raw=false,$big=false,$alt='') {
|
||||
$mediapath = Route::get(static::$_media_path);
|
||||
|
||||
switch ($type) {
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_ACTLOG extends ORMTSM {
|
||||
class Model_ACTLOG extends TSM_ORM {
|
||||
protected $_table_name = 'ACTLOG';
|
||||
protected $_primary_key = 'DATE_TIME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_ASSOCIATION extends ORMTSM {
|
||||
class Model_ASSOCIATION extends TSM_ORM {
|
||||
protected $_table_name = 'ASSOCIATIONS';
|
||||
protected $_primary_key = 'DOMAIN_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -16,7 +16,7 @@ class Model_Auth_UserDefault extends Model_Auth_User {
|
||||
|
||||
protected function _initialize() {
|
||||
// Set out DB connection configuration.
|
||||
$this->_db_group = Kohana::config('config.client_type');
|
||||
$this->_db_group = Kohana::$config->load('config')->client_type;
|
||||
|
||||
parent::_initialize();
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_CLIENTOPT extends ORMTSM {
|
||||
class Model_CLIENTOPT extends TSM_ORM {
|
||||
protected $_table_name = 'CLIENTOPTS';
|
||||
protected $_primary_key = 'OPTIONSET_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_COPYGROUP_AR extends ORMTSM {
|
||||
class Model_COPYGROUP_AR extends TSM_ORM {
|
||||
protected $_table_name = 'AR_COPYGROUPS';
|
||||
protected $_primary_key = 'DOMAIN_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_COPYGROUP_BU extends ORMTSM {
|
||||
class Model_COPYGROUP_BU extends TSM_ORM {
|
||||
protected $_table_name = 'BU_COPYGROUPS';
|
||||
protected $_primary_key = 'DOMAIN_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
* @note This is model is using the plural name, as storage pools have an attribute with the singular name
|
||||
*/
|
||||
class Model_DEVCLASSES extends ORMTSM {
|
||||
class Model_DEVCLASSES extends TSM_ORM {
|
||||
protected $_table_name = 'DEVCLASSES';
|
||||
protected $_primary_key = 'DEVCLASS_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_DOMAIN extends ORMTSM {
|
||||
class Model_DOMAIN extends TSM_ORM {
|
||||
protected $_table_name = 'DOMAINS';
|
||||
protected $_primary_key = 'DOMAIN_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_DRIVE extends ORMTSM {
|
||||
class Model_DRIVE extends TSM_ORM {
|
||||
protected $_table_name = 'DRIVES';
|
||||
protected $_primary_key = 'DRIVE_NAME';
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_EVENT extends ORMTSM {
|
||||
class Model_EVENT extends TSM_ORM {
|
||||
protected $_table_name = 'EVENTS';
|
||||
protected $_primary_key = 'NODE_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
@ -19,13 +19,13 @@ class Model_EVENT extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'SCHEDULED_START'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M H:i')),
|
||||
array('TSM_ORM::date',array(':value','d-M H:i')),
|
||||
),
|
||||
'ACTUAL_START'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M H:i')),
|
||||
array('TSM_ORM::date',array(':value','d-M H:i')),
|
||||
),
|
||||
'COMPLETED'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M H:i')),
|
||||
array('TSM_ORM::date',array(':value','d-M H:i')),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_FILESPACE extends ORMTSM {
|
||||
class Model_FILESPACE extends TSM_ORM {
|
||||
protected $_table_name = 'FILESPACES';
|
||||
protected $_primary_key = 'FILESPACE_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
@ -44,7 +44,7 @@ class Model_FILESPACE extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'BACKUP_END'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_LIBRARY extends ORMTSM {
|
||||
class Model_LIBRARY extends TSM_ORM {
|
||||
protected $_table_name = 'LIBRARIES';
|
||||
protected $_primary_key = 'LIBRARY_NAME';
|
||||
protected $_sorting = array(
|
||||
@ -110,7 +110,7 @@ class Model_LIBRARY extends ORMTSM {
|
||||
if (! isset($CACHE[__METHOD__][$ptype]))
|
||||
foreach ($this->storagepoolstype($ptype) as $spo)
|
||||
foreach ($ainout as $cinout)
|
||||
foreach (Kohana::config('config.tsmvolstatus') as $cstatus) {
|
||||
foreach (Kohana::$config->load('config')->tsmvolstatus as $cstatus) {
|
||||
if (! isset($CACHE[__METHOD__][$spo->POOLTYPE][$cinout][$cstatus]))
|
||||
$CACHE[__METHOD__][$spo->POOLTYPE][$cinout][$cstatus] = array();
|
||||
|
||||
@ -131,7 +131,7 @@ class Model_LIBRARY extends ORMTSM {
|
||||
static $CACHE = array();
|
||||
|
||||
if (! isset($CACHE[__METHOD__]))
|
||||
foreach (ORM::factory('volhistory')->where('TYPE','IN',Kohana::config('config.tsmdbtypes'))->find_all() as $vho)
|
||||
foreach (ORM::factory('volhistory')->where('TYPE','IN',Kohana::$config->load('config')->tsmdbtypes)->find_all() as $vho)
|
||||
$CACHE[__METHOD__][$vho->LIBVOLUME->LIBRARY_NAME ? 'IN' : 'OUT'][] = $vho;
|
||||
|
||||
return isset($CACHE[__METHOD__][$inout]) ? $CACHE[__METHOD__][$inout] : array();
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_LIBVOLUME extends ORMTSM {
|
||||
class Model_LIBVOLUME extends TSM_ORM {
|
||||
protected $_table_name = 'LIBVOLUMES';
|
||||
protected $_primary_key = 'HOME_ELEMENT';
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_MEDIA extends ORMTSM {
|
||||
class Model_MEDIA extends TSM_ORM {
|
||||
protected $_table_name = 'MEDIA';
|
||||
protected $_primary_key = 'VOLUME_NAME';
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_MGMTCLASS extends ORMTSM {
|
||||
class Model_MGMTCLASS extends TSM_ORM {
|
||||
protected $_table_name = 'MGMTCLASSES';
|
||||
protected $_primary_key = 'DOMAIN_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_NODE extends ORMTSM {
|
||||
class Model_NODE extends TSM_ORM {
|
||||
protected $_table_name = 'NODES';
|
||||
protected $_primary_key = 'NODE_NAME';
|
||||
protected $_sorting = array(
|
||||
@ -86,13 +86,13 @@ class Model_NODE extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'REG_TIME'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
'PWSET_TIME'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
'LASTACC_TIME'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
'LASTSESS_SENT'=>array(
|
||||
array('number_format',array(':value',0)),
|
||||
@ -207,7 +207,7 @@ class Model_NODE extends ORMTSM {
|
||||
public function getAllStoragePoolsType($ptype) {
|
||||
$result = array();
|
||||
|
||||
foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype)
|
||||
foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype)
|
||||
$result = array_merge($result,$this->getStoragePoolsType($btype,$ptype));
|
||||
|
||||
return $result;
|
||||
@ -240,7 +240,7 @@ class Model_NODE extends ORMTSM {
|
||||
public function getStorageTypeVols($ptype,$spo='') {
|
||||
$result = array();
|
||||
|
||||
foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype)
|
||||
foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype)
|
||||
$result = array_merge($result,$this->getStorageModeVols($ctype,$ptype,$spo));
|
||||
|
||||
return $result;
|
||||
@ -262,7 +262,7 @@ class Model_NODE extends ORMTSM {
|
||||
public function getStorageTypeFiles($ptype,$spo='') {
|
||||
$count = 0;
|
||||
|
||||
foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype)
|
||||
foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype)
|
||||
$count += $this->getStorageModeFiles($btype,$ptype,$spo);
|
||||
|
||||
return $count;
|
||||
@ -284,7 +284,7 @@ class Model_NODE extends ORMTSM {
|
||||
public function getStorageTypeData($ptype,$spo='') {
|
||||
$count = 0;
|
||||
|
||||
foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype)
|
||||
foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype)
|
||||
$count += $this->getStorageModeData($btype,$ptype,$spo);
|
||||
|
||||
return $count;
|
||||
|
@ -10,7 +10,7 @@
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
* @node This has been renamed to OCC from OCCUPANCY, as DB2/FILESPACES has an OCCUPANCY column
|
||||
*/
|
||||
class Model_OCC extends ORMTSM {
|
||||
class Model_OCC extends TSM_ORM {
|
||||
protected $_table_name = 'OCCUPANCY';
|
||||
protected $_primary_key = 'NODE_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_PATH extends ORMTSM {
|
||||
class Model_PATH extends TSM_ORM {
|
||||
protected $_table_name = 'PATHS';
|
||||
protected $_primary_key = 'DEVICE';
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_SCHEDULE_CLIENT extends ORMTSM {
|
||||
class Model_SCHEDULE_CLIENT extends TSM_ORM {
|
||||
protected $_table_name = 'CLIENT_SCHEDULES';
|
||||
protected $_primary_key = 'SCHEDULE_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
@ -22,7 +22,7 @@ class Model_SCHEDULE_CLIENT extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'STARTTIME'=>array(
|
||||
array('ORMTSM::date',array(':value','h:m')),
|
||||
array('TSM_ORM::date',array(':value','h:m')),
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_STGPOOL extends ORMTSM {
|
||||
class Model_STGPOOL extends TSM_ORM {
|
||||
protected $_table_name = 'STGPOOLS';
|
||||
protected $_primary_key = 'STGPOOL_NAME';
|
||||
protected $_sorting = array(
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_SUMMARY extends ORMTSM {
|
||||
class Model_SUMMARY extends TSM_ORM {
|
||||
protected $_table_name = 'SUMMARY';
|
||||
protected $_primary_key = 'ACTIVITY'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
@ -20,10 +20,10 @@ class Model_SUMMARY extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'START_TIME'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M H:i')),
|
||||
array('TSM_ORM::date',array(':value','d-M H:i')),
|
||||
),
|
||||
'END_TIME'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M H:i')),
|
||||
array('TSM_ORM::date',array(':value','d-M H:i')),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_VOLHISTORY extends ORMTSM {
|
||||
class Model_VOLHISTORY extends TSM_ORM {
|
||||
protected $_table_name = 'VOLHISTORY';
|
||||
protected $_primary_key = 'VOLUME_NAME';
|
||||
protected $_sorting = array(
|
||||
@ -25,7 +25,7 @@ class Model_VOLHISTORY extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'DATE_TIME'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
);
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_VOLUME extends ORMTSM {
|
||||
class Model_VOLUME extends TSM_ORM {
|
||||
protected $_table_name = 'VOLUMES';
|
||||
protected $_primary_key = 'VOLUME_NAME';
|
||||
protected $_sorting = array(
|
||||
@ -27,10 +27,10 @@ class Model_VOLUME extends ORMTSM {
|
||||
|
||||
protected $_display_filters = array(
|
||||
'LAST_READ_DATE'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
'LAST_WRITE_DATE'=>array(
|
||||
array('ORMTSM::date',array(':value','d-M-Y')),
|
||||
array('TSM_ORM::date',array(':value','d-M-Y')),
|
||||
),
|
||||
);
|
||||
|
||||
@ -63,7 +63,7 @@ class Model_VOLUME extends ORMTSM {
|
||||
}
|
||||
|
||||
public function recycle() {
|
||||
return Kohana::config('config.tsmtapeage') < $this->age() ? TRUE : FALSE;
|
||||
return Kohana::$config->load('config')->tsmtapeage < $this->age() ? TRUE : FALSE;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class Model_VOLUMEUSAGE extends ORMTSM {
|
||||
class Model_VOLUMEUSAGE extends TSM_ORM {
|
||||
protected $_table_name = 'VOLUMEUSAGE';
|
||||
protected $_primary_key = 'NODE_NAME'; // We need a primary key to detect that the object is loaded.
|
||||
protected $_sorting = array(
|
||||
|
@ -3,14 +3,14 @@
|
||||
/**
|
||||
* This class overrides Kohana's ORM
|
||||
*
|
||||
* @package lnApp/Modifications
|
||||
* @package PTA/Modifications
|
||||
* @category Classes
|
||||
* @category Helpers
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class ORM extends Kohana_ORM {
|
||||
abstract class ORM extends Kohana_ORM {
|
||||
protected $_table_names_plural = FALSE;
|
||||
protected $_model_names_plural = FALSE;
|
||||
private $_object_formated = array();
|
||||
@ -58,7 +58,7 @@ class ORM extends Kohana_ORM {
|
||||
$value = $this->__get($column);
|
||||
|
||||
// If some of our fields need to be formated for display purposes.
|
||||
if ($this->_loaded AND ! $this->_formated AND $this->_display_filters)
|
||||
if (! $this->_formated AND $this->_display_filters)
|
||||
$this->_format();
|
||||
|
||||
if (isset($this->_object_formated[$column]))
|
||||
|
@ -1,4 +1,4 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
class sort extends lnApp_Sort {}
|
||||
class Sort extends lnApp_Sort {}
|
||||
?>
|
||||
|
@ -11,11 +11,11 @@
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class SystemMessage extends lnApp_SystemMessage {
|
||||
static public function TSM_Error($error,$sql) {
|
||||
static public function TSM($type,$error,$sql=NULL) {
|
||||
SystemMessage::add(array(
|
||||
'title'=>_('Error while talking to TSM'),
|
||||
'body'=>_('Running SQL').': <b>'.$sql.'</b><br/><br/>'.(is_array($error) ? implode('<br/>',$error) : $error),
|
||||
'type'=>'error',
|
||||
'title'=>_('While talking to TSM'),
|
||||
'body'=>($sql ? _('Running SQL').': <b>'.$sql.'</b><br/><br/>' : '').(is_array($error) ? implode('<br/>',$error) : $error),
|
||||
'type'=>$type,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
@ -11,12 +11,19 @@
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
class TSM {
|
||||
static $_online = FALSE;
|
||||
|
||||
public function set($username,$password,Database_TSM_Result $server) {
|
||||
// @todo Consider encrypting this
|
||||
Session::instance()->set(Kohana::config('auth.session_key'),$username);
|
||||
Session::instance()->set(Kohana::$config->load('auth')->session_key,$username);
|
||||
Session::instance()->set('password',$password);
|
||||
|
||||
Session::instance()->set('SERVER',$server);
|
||||
|
||||
return TSM::$_online = TRUE;
|
||||
}
|
||||
|
||||
public static function online() {
|
||||
return TSM::$_online;
|
||||
}
|
||||
|
||||
public static function instance() {
|
||||
@ -24,7 +31,7 @@ class TSM {
|
||||
}
|
||||
|
||||
public static function name() {
|
||||
return Session::instance()->get('SERVER')->rewind()->get('SERVER_NAME');
|
||||
return Session::instance()->get('SERVER')->get('SERVER_NAME');
|
||||
}
|
||||
|
||||
public static function version() {
|
||||
|
@ -9,7 +9,7 @@
|
||||
* @copyright (c) 2010 Deon George
|
||||
* @license http://dev.leenooks.net/license.html
|
||||
*/
|
||||
class Valid extends Kohana_Valid {
|
||||
abstract class Valid extends Kohana_Valid {
|
||||
/**
|
||||
* Checks if a field matches the value of another field, if it is set.
|
||||
* Field is ignored if it is blank.
|
||||
@ -20,7 +20,7 @@ class Valid extends Kohana_Valid {
|
||||
* @return boolean
|
||||
*/
|
||||
public static function matches_ifset($array, $field, $match)
|
||||
{
|
||||
{
|
||||
return isset($array[$match]) ? ($array[$field] === $array[$match]) : TRUE;
|
||||
}
|
||||
}
|
||||
|
@ -4,6 +4,7 @@
|
||||
* PTA Configuration - Authentication Driver
|
||||
*
|
||||
* @package PTA
|
||||
* @subpackage Authentication
|
||||
* @category Configuration
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
|
@ -1,9 +1,9 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* lnApp Configuration - Cache Driver
|
||||
* PTA Configuration - Cache Driver
|
||||
*
|
||||
* @package lnApp
|
||||
* @package PTA
|
||||
* @subpackage Cache
|
||||
* @category Configuration
|
||||
* @author Deon George
|
||||
@ -11,13 +11,22 @@
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
|
||||
return array
|
||||
(
|
||||
'file' => array
|
||||
(
|
||||
return array(
|
||||
'apc' => array(
|
||||
'driver' => 'apc',
|
||||
'default_expire' => 3600,
|
||||
),
|
||||
|
||||
'file' => array(
|
||||
'driver' => 'file',
|
||||
'cache_dir' => Kohana::$cache_dir ? Kohana::$cache_dir : '/dev/shm/lnapp',
|
||||
'default_expire' => 3600,
|
||||
)
|
||||
'ignore_on_delete' => array(
|
||||
'.gitignore',
|
||||
'.git',
|
||||
'.htaccess',
|
||||
'.svn'
|
||||
)
|
||||
),
|
||||
);
|
||||
?>
|
||||
|
@ -13,7 +13,7 @@
|
||||
return array(
|
||||
'cache_type' => 'file',
|
||||
'client' => '/opt/tivoli/tsm/client/ba/bin/dsmadmc',
|
||||
'client_type' => 'db2',
|
||||
'client_type' => 'dsmadmc',
|
||||
'client_errorlogname' => '/tmp/pta-tsm-errorlog.log',
|
||||
'date_format' => 'd-m-Y',
|
||||
'tsmdatatypes' => array('Bkup'=>'BACKUP','Arch'=>'ARCHIVE'),
|
||||
@ -28,9 +28,10 @@ return array(
|
||||
),
|
||||
'method_security' => TRUE, // Enables Method Security. Setting to false means any method can be run without authentication
|
||||
'site' => array(
|
||||
'mode' => Kohana::PRODUCTION,
|
||||
),
|
||||
'site_debug' => FALSE,
|
||||
'site_mode' => array(
|
||||
)
|
||||
'site_name' => 'phpTSMadmin',
|
||||
'theme' => 'yaml',
|
||||
);
|
||||
?>
|
||||
|
20
application/config/debug.php
Normal file
@ -0,0 +1,20 @@
|
||||
<?php defined('SYSPATH') or die('No direct access allowed.');
|
||||
|
||||
/**
|
||||
* PTA Configuration - Debug Settings
|
||||
*
|
||||
* @package PTA
|
||||
* @subpackage Debug
|
||||
* @category Configuration
|
||||
* @author Deon George
|
||||
* @copyright (c) 2010 phpTSMadmin Development Team
|
||||
* @license http://phptsmadmin.sf.net/license.html
|
||||
*/
|
||||
|
||||
return array
|
||||
(
|
||||
'ajax'=>FALSE, // AJAX actions can only be run by ajax calls if set to FALSE
|
||||
'etag'=>FALSE, // Force generating ETAGS
|
||||
'task_sim'=>FALSE, // Simulate running tasks
|
||||
);
|
||||
?>
|
4
application/media/js/jquery-1.6.4.min.js
vendored
Normal file
4551
application/media/js/jquery.jstree-1.0rc3.js
Normal file
BIN
application/media/js/jquery.jstree.themes/apple/bg.jpg
Normal file
After Width: | Height: | Size: 331 B |
BIN
application/media/js/jquery.jstree.themes/apple/d.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
application/media/js/jquery.jstree.themes/apple/dot_for_ie.gif
Normal file
After Width: | Height: | Size: 43 B |
61
application/media/js/jquery.jstree.themes/apple/style.css
Normal file
@ -0,0 +1,61 @@
|
||||
/*
|
||||
* jsTree apple theme 1.0
|
||||
* Supported features: dots/no-dots, icons/no-icons, focused, loading
|
||||
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
|
||||
*/
|
||||
|
||||
.jstree-apple > ul { background:url("bg.jpg") left top repeat; }
|
||||
.jstree-apple li,
|
||||
.jstree-apple ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
|
||||
.jstree-apple li { background-position:-90px 0; background-repeat:repeat-y; }
|
||||
.jstree-apple li.jstree-last { background:transparent; }
|
||||
.jstree-apple .jstree-open > ins { background-position:-72px 0; }
|
||||
.jstree-apple .jstree-closed > ins { background-position:-54px 0; }
|
||||
.jstree-apple .jstree-leaf > ins { background-position:-36px 0; }
|
||||
|
||||
.jstree-apple a { border-radius:4px; -moz-border-radius:4px; -webkit-border-radius:4px; text-shadow:1px 1px 1px white; }
|
||||
.jstree-apple .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 3px 0 1px; text-shadow:1px 1px 1px silver; }
|
||||
.jstree-apple .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 3px 0 1px; }
|
||||
.jstree-apple a .jstree-icon { background-position:-56px -20px; }
|
||||
.jstree-apple a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
|
||||
|
||||
.jstree-apple.jstree-focused { background:white; }
|
||||
|
||||
.jstree-apple .jstree-no-dots li,
|
||||
.jstree-apple .jstree-no-dots .jstree-leaf > ins { background:transparent; }
|
||||
.jstree-apple .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
|
||||
.jstree-apple .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
|
||||
|
||||
.jstree-apple .jstree-no-icons a .jstree-icon { display:none; }
|
||||
|
||||
.jstree-apple .jstree-search { font-style:italic; }
|
||||
|
||||
.jstree-apple .jstree-no-icons .jstree-checkbox { display:inline-block; }
|
||||
.jstree-apple .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
|
||||
.jstree-apple .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
|
||||
.jstree-apple .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
|
||||
.jstree-apple .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
|
||||
.jstree-apple .jstree-checked > a > .checkbox:hover { background-position:-38px -37px; }
|
||||
.jstree-apple .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
|
||||
.jstree-apple .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
|
||||
|
||||
#vakata-dragged.jstree-apple ins { background:transparent !important; }
|
||||
#vakata-dragged.jstree-apple .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
|
||||
#vakata-dragged.jstree-apple .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
|
||||
#jstree-marker.jstree-apple { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
|
||||
|
||||
.jstree-apple a.jstree-search { color:aqua; }
|
||||
.jstree-apple .jstree-locked a { color:silver; cursor:default; }
|
||||
|
||||
#vakata-contextmenu.jstree-apple-context,
|
||||
#vakata-contextmenu.jstree-apple-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
|
||||
#vakata-contextmenu.jstree-apple-context li { }
|
||||
#vakata-contextmenu.jstree-apple-context a { color:black; }
|
||||
#vakata-contextmenu.jstree-apple-context a:hover,
|
||||
#vakata-contextmenu.jstree-apple-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
|
||||
#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a,
|
||||
#vakata-contextmenu.jstree-apple-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
|
||||
#vakata-contextmenu.jstree-apple-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
|
||||
#vakata-contextmenu.jstree-apple-context li ul { margin-left:-4px; }
|
||||
|
||||
/* TODO: IE6 support - the `>` selectors */
|
BIN
application/media/js/jquery.jstree.themes/apple/throbber.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
application/media/js/jquery.jstree.themes/classic/d.gif
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
application/media/js/jquery.jstree.themes/classic/d.png
Normal file
After Width: | Height: | Size: 7.4 KiB |
BIN
application/media/js/jquery.jstree.themes/classic/dot_for_ie.gif
Normal file
After Width: | Height: | Size: 43 B |
77
application/media/js/jquery.jstree.themes/classic/style.css
Normal file
@ -0,0 +1,77 @@
|
||||
/*
|
||||
* jsTree classic theme 1.0
|
||||
* Supported features: dots/no-dots, icons/no-icons, focused, loading
|
||||
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
|
||||
*/
|
||||
|
||||
.jstree-classic li,
|
||||
.jstree-classic ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
|
||||
.jstree-classic li { background-position:-90px 0; background-repeat:repeat-y; }
|
||||
.jstree-classic li.jstree-last { background:transparent; }
|
||||
.jstree-classic .jstree-open > ins { background-position:-72px 0; }
|
||||
.jstree-classic .jstree-closed > ins { background-position:-54px 0; }
|
||||
.jstree-classic .jstree-leaf > ins { background-position:-36px 0; }
|
||||
|
||||
.jstree-classic .jstree-hovered { background:#AABBCC; border:0px solid #FFFFFF; padding:0 2px 0 1px; }
|
||||
.jstree-classic .jstree-clicked { background:#E6E6E8; border:0px solid #FFFFFF; padding:0 2px 0 1px; }
|
||||
.jstree-classic a .jstree-icon { background-position:-56px -19px; }
|
||||
.jstree-classic .jstree-open > a .jstree-icon { background-position:-56px -36px; }
|
||||
.jstree-classic a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
|
||||
|
||||
/* .jstree-classic.jstree-focused { background:#FCFCFE; } */
|
||||
|
||||
.jstree-classic .jstree-no-dots li,
|
||||
.jstree-classic .jstree-no-dots .jstree-leaf > ins { background:transparent; }
|
||||
.jstree-classic .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
|
||||
.jstree-classic .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
|
||||
|
||||
.jstree-classic .jstree-no-icons a .jstree-icon { display:none; }
|
||||
|
||||
.jstree-classic .jstree-search { font-style:italic; }
|
||||
|
||||
.jstree-classic .jstree-no-icons .jstree-checkbox { display:inline-block; }
|
||||
.jstree-classic .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
|
||||
.jstree-classic .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
|
||||
.jstree-classic .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
|
||||
.jstree-classic .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
|
||||
.jstree-classic .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
|
||||
.jstree-classic .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
|
||||
.jstree-classic .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
|
||||
|
||||
#vakata-dragged.jstree-classic ins { background:transparent !important; }
|
||||
#vakata-dragged.jstree-classic .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
|
||||
#vakata-dragged.jstree-classic .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
|
||||
#jstree-marker.jstree-classic { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
|
||||
|
||||
.jstree-classic a.jstree-search { color:aqua; }
|
||||
.jstree-classic .jstree-locked a { color:silver; cursor:default; }
|
||||
|
||||
#vakata-contextmenu.jstree-classic-context,
|
||||
#vakata-contextmenu.jstree-classic-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
|
||||
#vakata-contextmenu.jstree-classic-context li { }
|
||||
#vakata-contextmenu.jstree-classic-context a { color:black; }
|
||||
#vakata-contextmenu.jstree-classic-context a:hover,
|
||||
#vakata-contextmenu.jstree-classic-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
|
||||
#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a,
|
||||
#vakata-contextmenu.jstree-classic-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
|
||||
#vakata-contextmenu.jstree-classic-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
|
||||
#vakata-contextmenu.jstree-classic-context li ul { margin-left:-4px; }
|
||||
|
||||
/* IE6 BEGIN */
|
||||
.jstree-classic li,
|
||||
.jstree-classic ins,
|
||||
#vakata-dragged.jstree-classic .jstree-invalid,
|
||||
#vakata-dragged.jstree-classic .jstree-ok,
|
||||
#jstree-marker.jstree-classic { _background-image:url("d.gif"); }
|
||||
.jstree-classic .jstree-open ins { _background-position:-72px 0; }
|
||||
.jstree-classic .jstree-closed ins { _background-position:-54px 0; }
|
||||
.jstree-classic .jstree-leaf ins { _background-position:-36px 0; }
|
||||
.jstree-classic .jstree-open a ins.jstree-icon { _background-position:-56px -36px; }
|
||||
.jstree-classic .jstree-closed a ins.jstree-icon { _background-position:-56px -19px; }
|
||||
.jstree-classic .jstree-leaf a ins.jstree-icon { _background-position:-56px -19px; }
|
||||
#vakata-contextmenu.jstree-classic-context ins { _display:none; }
|
||||
#vakata-contextmenu.jstree-classic-context li { _zoom:1; }
|
||||
.jstree-classic .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
|
||||
.jstree-classic .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
|
||||
.jstree-classic .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
|
||||
/* IE6 END */
|
BIN
application/media/js/jquery.jstree.themes/classic/throbber.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
BIN
application/media/js/jquery.jstree.themes/default-rtl/d.gif
Normal file
After Width: | Height: | Size: 2.8 KiB |
BIN
application/media/js/jquery.jstree.themes/default-rtl/d.png
Normal file
After Width: | Height: | Size: 7.3 KiB |
BIN
application/media/js/jquery.jstree.themes/default-rtl/dots.gif
Normal file
After Width: | Height: | Size: 132 B |
@ -0,0 +1,84 @@
|
||||
/*
|
||||
* jsTree default-rtl theme 1.0
|
||||
* Supported features: dots/no-dots, icons/no-icons, focused, loading
|
||||
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
|
||||
*/
|
||||
|
||||
.jstree-default-rtl li,
|
||||
.jstree-default-rtl ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
|
||||
.jstree-default-rtl li { background-position:-90px 0; background-repeat:repeat-y; }
|
||||
.jstree-default-rtl li.jstree-last { background:transparent; }
|
||||
.jstree-default-rtl .jstree-open > ins { background-position:-72px 0; }
|
||||
.jstree-default-rtl .jstree-closed > ins { background-position:-54px 0; }
|
||||
.jstree-default-rtl .jstree-leaf > ins { background-position:-36px 0; }
|
||||
|
||||
.jstree-default-rtl .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
|
||||
.jstree-default-rtl .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
|
||||
.jstree-default-rtl a .jstree-icon { background-position:-56px -19px; }
|
||||
.jstree-default-rtl a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
|
||||
|
||||
.jstree-default-rtl.jstree-focused { background:#ffffee; }
|
||||
|
||||
.jstree-default-rtl .jstree-no-dots li,
|
||||
.jstree-default-rtl .jstree-no-dots .jstree-leaf > ins { background:transparent; }
|
||||
.jstree-default-rtl .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
|
||||
.jstree-default-rtl .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
|
||||
|
||||
.jstree-default-rtl .jstree-no-icons a .jstree-icon { display:none; }
|
||||
|
||||
.jstree-default-rtl .jstree-search { font-style:italic; }
|
||||
|
||||
.jstree-default-rtl .jstree-no-icons .jstree-checkbox { display:inline-block; }
|
||||
.jstree-default-rtl .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
|
||||
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
|
||||
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
|
||||
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
|
||||
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
|
||||
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
|
||||
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
|
||||
|
||||
#vakata-dragged.jstree-default-rtl ins { background:transparent !important; }
|
||||
#vakata-dragged.jstree-default-rtl .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
|
||||
#vakata-dragged.jstree-default-rtl .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
|
||||
#jstree-marker.jstree-default-rtl { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
|
||||
|
||||
.jstree-default-rtl a.jstree-search { color:aqua; }
|
||||
.jstree-default-rtl .jstree-locked a { color:silver; cursor:default; }
|
||||
|
||||
#vakata-contextmenu.jstree-default-rtl-context,
|
||||
#vakata-contextmenu.jstree-default-rtl-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context li { }
|
||||
#vakata-contextmenu.jstree-default-rtl-context a { color:black; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context a:hover,
|
||||
#vakata-contextmenu.jstree-default-rtl-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a,
|
||||
#vakata-contextmenu.jstree-default-rtl-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context li ul { margin-left:-4px; }
|
||||
|
||||
/* IE6 BEGIN */
|
||||
.jstree-default-rtl li,
|
||||
.jstree-default-rtl ins,
|
||||
#vakata-dragged.jstree-default-rtl .jstree-invalid,
|
||||
#vakata-dragged.jstree-default-rtl .jstree-ok,
|
||||
#jstree-marker.jstree-default-rtl { _background-image:url("d.gif"); }
|
||||
.jstree-default-rtl .jstree-open ins { _background-position:-72px 0; }
|
||||
.jstree-default-rtl .jstree-closed ins { _background-position:-54px 0; }
|
||||
.jstree-default-rtl .jstree-leaf ins { _background-position:-36px 0; }
|
||||
.jstree-default-rtl a ins.jstree-icon { _background-position:-56px -19px; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context ins { _display:none; }
|
||||
#vakata-contextmenu.jstree-default-rtl-context li { _zoom:1; }
|
||||
.jstree-default-rtl .jstree-undetermined a .jstree-checkbox { _background-position:-18px -19px; }
|
||||
.jstree-default-rtl .jstree-checked a .jstree-checkbox { _background-position:-36px -19px; }
|
||||
.jstree-default-rtl .jstree-unchecked a .jstree-checkbox { _background-position:0px -19px; }
|
||||
/* IE6 END */
|
||||
|
||||
/* RTL part */
|
||||
.jstree-default-rtl .jstree-hovered, .jstree-default-rtl .jstree-clicked { padding:0 1px 0 2px; }
|
||||
.jstree-default-rtl li { background-image:url("dots.gif"); background-position: 100% 0px; }
|
||||
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox { background-position:-36px -19px; margin-left:2px; }
|
||||
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox { background-position:0px -19px; margin-left:2px; }
|
||||
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox { background-position:-18px -19px; margin-left:2px; }
|
||||
.jstree-default-rtl .jstree-checked > a > .jstree-checkbox:hover { background-position:-36px -37px; }
|
||||
.jstree-default-rtl .jstree-unchecked > a > .jstree-checkbox:hover { background-position:0px -37px; }
|
||||
.jstree-default-rtl .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-18px -37px; }
|
After Width: | Height: | Size: 1.8 KiB |
BIN
application/media/js/jquery.jstree.themes/default/d.gif
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
application/media/js/jquery.jstree.themes/default/d.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
74
application/media/js/jquery.jstree.themes/default/style.css
Normal file
@ -0,0 +1,74 @@
|
||||
/*
|
||||
* jsTree default theme 1.0
|
||||
* Supported features: dots/no-dots, icons/no-icons, focused, loading
|
||||
* Supported plugins: ui (hovered, clicked), checkbox, contextmenu, search
|
||||
*/
|
||||
|
||||
.jstree-default li,
|
||||
.jstree-default ins { background-image:url("d.png"); background-repeat:no-repeat; background-color:transparent; }
|
||||
.jstree-default li { background-position:-90px 0; background-repeat:repeat-y; }
|
||||
.jstree-default li.jstree-last { background:transparent; }
|
||||
.jstree-default .jstree-open > ins { background-position:-72px 0; }
|
||||
.jstree-default .jstree-closed > ins { background-position:-54px 0; }
|
||||
.jstree-default .jstree-leaf > ins { background-position:-36px 0; }
|
||||
|
||||
.jstree-default .jstree-hovered { background:#e7f4f9; border:1px solid #d8f0fa; padding:0 2px 0 1px; }
|
||||
.jstree-default .jstree-clicked { background:#beebff; border:1px solid #99defd; padding:0 2px 0 1px; }
|
||||
.jstree-default a .jstree-icon { background-position:-56px -19px; }
|
||||
.jstree-default a.jstree-loading .jstree-icon { background:url("throbber.gif") center center no-repeat !important; }
|
||||
|
||||
.jstree-default.jstree-focused { background:#ffffee; }
|
||||
|
||||
.jstree-default .jstree-no-dots li,
|
||||
.jstree-default .jstree-no-dots .jstree-leaf > ins { background:transparent; }
|
||||
.jstree-default .jstree-no-dots .jstree-open > ins { background-position:-18px 0; }
|
||||
.jstree-default .jstree-no-dots .jstree-closed > ins { background-position:0 0; }
|
||||
|
||||
.jstree-default .jstree-no-icons a .jstree-icon { display:none; }
|
||||
|
||||
.jstree-default .jstree-search { font-style:italic; }
|
||||
|
||||
.jstree-default .jstree-no-icons .jstree-checkbox { display:inline-block; }
|
||||
.jstree-default .jstree-no-checkboxes .jstree-checkbox { display:none !important; }
|
||||
.jstree-default .jstree-checked > a > .jstree-checkbox { background-position:-38px -19px; }
|
||||
.jstree-default .jstree-unchecked > a > .jstree-checkbox { background-position:-2px -19px; }
|
||||
.jstree-default .jstree-undetermined > a > .jstree-checkbox { background-position:-20px -19px; }
|
||||
.jstree-default .jstree-checked > a > .jstree-checkbox:hover { background-position:-38px -37px; }
|
||||
.jstree-default .jstree-unchecked > a > .jstree-checkbox:hover { background-position:-2px -37px; }
|
||||
.jstree-default .jstree-undetermined > a > .jstree-checkbox:hover { background-position:-20px -37px; }
|
||||
|
||||
#vakata-dragged.jstree-default ins { background:transparent !important; }
|
||||
#vakata-dragged.jstree-default .jstree-ok { background:url("d.png") -2px -53px no-repeat !important; }
|
||||
#vakata-dragged.jstree-default .jstree-invalid { background:url("d.png") -18px -53px no-repeat !important; }
|
||||
#jstree-marker.jstree-default { background:url("d.png") -41px -57px no-repeat !important; text-indent:-100px; }
|
||||
|
||||
.jstree-default a.jstree-search { color:aqua; }
|
||||
.jstree-default .jstree-locked a { color:silver; cursor:default; }
|
||||
|
||||
#vakata-contextmenu.jstree-default-context,
|
||||
#vakata-contextmenu.jstree-default-context li ul { background:#f0f0f0; border:1px solid #979797; -moz-box-shadow: 1px 1px 2px #999; -webkit-box-shadow: 1px 1px 2px #999; box-shadow: 1px 1px 2px #999; }
|
||||
#vakata-contextmenu.jstree-default-context li { }
|
||||
#vakata-contextmenu.jstree-default-context a { color:black; }
|
||||
#vakata-contextmenu.jstree-default-context a:hover,
|
||||
#vakata-contextmenu.jstree-default-context .vakata-hover > a { padding:0 5px; background:#e8eff7; border:1px solid #aecff7; color:black; -moz-border-radius:2px; -webkit-border-radius:2px; border-radius:2px; }
|
||||
#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a,
|
||||
#vakata-contextmenu.jstree-default-context li.jstree-contextmenu-disabled a:hover { color:silver; background:transparent; border:0; padding:1px 4px; }
|
||||
#vakata-contextmenu.jstree-default-context li.vakata-separator { background:white; border-top:1px solid #e0e0e0; margin:0; }
|
||||
#vakata-contextmenu.jstree-default-context li ul { margin-left:-4px; }
|
||||
|
||||
/* IE6 BEGIN */
|
||||
.jstree-default li,
|
||||
.jstree-default ins,
|
||||
#vakata-dragged.jstree-default .jstree-invalid,
|
||||
#vakata-dragged.jstree-default .jstree-ok,
|
||||
#jstree-marker.jstree-default { _background-image:url("d.gif"); }
|
||||
.jstree-default .jstree-open ins { _background-position:-72px 0; }
|
||||
.jstree-default .jstree-closed ins { _background-position:-54px 0; }
|
||||
.jstree-default .jstree-leaf ins { _background-position:-36px 0; }
|
||||
.jstree-default a ins.jstree-icon { _background-position:-56px -19px; }
|
||||
#vakata-contextmenu.jstree-default-context ins { _display:none; }
|
||||
#vakata-contextmenu.jstree-default-context li { _zoom:1; }
|
||||
.jstree-default .jstree-undetermined a .jstree-checkbox { _background-position:-20px -19px; }
|
||||
.jstree-default .jstree-checked a .jstree-checkbox { _background-position:-38px -19px; }
|
||||
.jstree-default .jstree-unchecked a .jstree-checkbox { _background-position:-2px -19px; }
|
||||
/* IE6 END */
|
BIN
application/media/js/jquery.jstree.themes/default/throbber.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
@ -14,10 +14,10 @@
|
||||
<td>OS</td>
|
||||
<td>Last Access</td>
|
||||
<td>Last IP Addr</td>
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<td><?php echo $ctype[0]; ?></td>
|
||||
<?php } ?>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type) { ?>
|
||||
<td colspan="3" class="right"><?php echo $type; ?>(Vol/Fil/Dat)</td>
|
||||
<?php } ?>
|
||||
</tr>
|
||||
@ -28,10 +28,10 @@
|
||||
<td class="data"><?php echo $no->platform(); ?></td>
|
||||
<td class="data"><?php echo $no->display('LASTACC_TIME'); ?></td>
|
||||
<td class="data"><?php echo $no->display('TCP_ADDRESS'); ?></td>
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<td class="data"><?php echo $no->hasData($btype) ? 'Y' : 'N'; ?></td>
|
||||
<?php } ?>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type) { ?>
|
||||
<td class="data-right"><?php echo count($no->getStorageTypeVols($type)); ?></td>
|
||||
<td class="data-right"><?php echo $no->getStorageTypeFiles($type); ?></td>
|
||||
<td class="data-right"><?php echo $no->getStorageTypeData($type); ?></td>
|
||||
@ -68,11 +68,11 @@
|
||||
<td class="right">Files</td>
|
||||
<td class="right">MB</td>
|
||||
</tr>
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<tr class="subhead">
|
||||
<td colspan="15"><?php echo $btype; ?></td>
|
||||
</tr>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type) { ?>
|
||||
<tr class="subhead">
|
||||
<td> </td>
|
||||
<td colspan="14"><?php echo $type; ?></td>
|
||||
@ -125,11 +125,11 @@
|
||||
<td class="right">Nodes</td>
|
||||
<td class="right">Location</td>
|
||||
</tr>
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<tr class="subhead">
|
||||
<td colspan="14"><?php echo $btype; ?></td>
|
||||
</tr>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type) { ?>
|
||||
<tr class="subhead">
|
||||
<td> </td>
|
||||
<td colspan="13"><?php echo $type; ?></td>
|
||||
|
@ -82,7 +82,7 @@
|
||||
<td class="data" colspan="8"><?php echo count($lo->readonlyvol()); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan="2">¹ Stale Storage Pool Volumes (<span class="data"><?php echo Kohana::config('config.tsmtapeage'); ?></span> days)</td>
|
||||
<td colspan="2">¹ Stale Storage Pool Volumes (<span class="data"><?php echo Kohana::$config->load('config')->tsmtapeage; ?></span> days)</td>
|
||||
<td class="data" colspan="8"><?php echo count($lo->stalevol()); ?></td>
|
||||
</tr>
|
||||
<tr>
|
||||
@ -101,7 +101,7 @@
|
||||
<tr>
|
||||
<td colspan="2">Storage Type</td>
|
||||
<?php foreach (array('IN','OUT') as $inout) { ?>
|
||||
<?php foreach (Kohana::config('config.tsmvolstatus') as $status) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmvolstatus as $status) { ?>
|
||||
<td class="right"><?php printf('%s: %s',$inout,$status); ?></td>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
@ -113,7 +113,7 @@
|
||||
<td colspan="3"> </td>
|
||||
<?php } ?>
|
||||
</tr>
|
||||
<?php $i=0; foreach (Kohana::config('config.tsmdbtypes') as $type) { ?>
|
||||
<?php $i=0; foreach (Kohana::$config->load('config')->tsmdbtypes as $type) { ?>
|
||||
<tr class="<?php echo $i++%2 ? 'odd' : 'even'; ?>">
|
||||
<td> </td>
|
||||
<td><?php echo $type; ?></td>
|
||||
@ -123,11 +123,11 @@
|
||||
<?php } ?>
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type) { ?>
|
||||
<tr class="<?php echo $i++%2 ? 'odd' : 'even'; ?>">
|
||||
<td class="data" colspan="2"><?php echo $type; ?></td>
|
||||
<?php foreach (array('IN','OUT') as $inout) { ?>
|
||||
<?php foreach (Kohana::config('config.tsmvolstatus') as $status) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmvolstatus as $status) { ?>
|
||||
<td class="data-right"><?php echo count($lo->volstype($type,$inout,$status)); ?></td>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
@ -137,7 +137,7 @@
|
||||
<td> </td>
|
||||
<td><?php echo $spo; ?></td>
|
||||
<?php foreach (array('IN','OUT') as $inout) { ?>
|
||||
<?php foreach (Kohana::config('config.tsmvolstatus') as $status) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmvolstatus as $status) { ?>
|
||||
<td class="right"><?php echo count($spo->libvolstype($inout,$status)); ?></td>
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
|
@ -13,7 +13,7 @@
|
||||
<td>File Space</td>
|
||||
<td>Last Date</td>
|
||||
<td class="right">Utilisation</td>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type)
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type)
|
||||
if (count($pools = $node->getStoragePoolsType('Bkup',$type)))
|
||||
foreach ($pools as $pool_name) { ?>
|
||||
<td class="right"><?php echo $pool_name; ?> <span style="vertical-align: super; font-size: 60%;"><?echo $type; ?></span></td>
|
||||
@ -24,7 +24,7 @@
|
||||
<td class="data"><?php echo $fso->display('FILESPACE_NAME'); ?></td>
|
||||
<td class="data"><?php echo $fso->display('BACKUP_END'); ?></td>
|
||||
<td class="data-right"><?php echo number_format($fso->utilsation(),2); ?></td>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type)
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type)
|
||||
if (count($pools = $node->getStoragePoolsType('Bkup',$type)))
|
||||
foreach ($pools as $pool_name) { ?>
|
||||
<td class="data-right"><?php echo number_format($fso->pool_logical_util($pool_name,'Bkup'),2); ?> (<?php echo $fso->pool_numvols($pool_name,'BACKUP'); ?>)</td>
|
||||
@ -50,7 +50,7 @@
|
||||
<td class="right">Files</td>
|
||||
<td class="right">MB</td>
|
||||
</tr>
|
||||
<?php $i=0; foreach (Kohana::config('config.tsmpooltypes') as $type) { ?>
|
||||
<?php $i=0; foreach (Kohana::$config->load('config')->tsmpooltypes as $type) { ?>
|
||||
<tr class="<?php echo $i++%2 ? 'odd' : 'even'; ?>">
|
||||
<td class="data" colspan="2"><?php echo $type; ?></td>
|
||||
<td class="data-right"><?php echo count($node->getStorageTypeVols($type)); ?></td>
|
||||
@ -82,7 +82,7 @@
|
||||
</tr>
|
||||
<tr>
|
||||
<td>File Space</td>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type)
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type)
|
||||
if (count($pools = $node->getStoragePoolsType('Arch',$type)))
|
||||
foreach ($pools as $pool_name) { ?>
|
||||
<td class="right"><?php echo $pool_name; ?> <span style="vertical-align: super; font-size: 60%;"><?echo $type; ?></span></td>
|
||||
@ -91,7 +91,7 @@
|
||||
<?php $i=0;foreach ($node->FILESPACE->find_all() as $fso) { ?>
|
||||
<tr class="<?php echo $i++%2 ? 'odd' : 'even'; ?>">
|
||||
<td class="data"><?php echo $fso->display('FILESPACE_NAME'); ?></td>
|
||||
<?php foreach (Kohana::config('config.tsmpooltypes') as $type)
|
||||
<?php foreach (Kohana::$config->load('config')->tsmpooltypes as $type)
|
||||
if (count($pools = $node->getStoragePoolsType('Arch',$type)))
|
||||
foreach ($pools as $pool_name) { ?>
|
||||
<td class="data-right"><?php echo number_format($fso->pool_logical_util($pool_name,'Arch'),2); ?> (<?php echo $fso->pool_numvols($pool_name,'ARCHIVE'); ?>)</td>
|
||||
|
@ -1,5 +1,5 @@
|
||||
<table width="100%">
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<tr>
|
||||
<td style="width: 100%; vertical-align: top;">
|
||||
<table class="box-full">
|
||||
|
@ -189,7 +189,7 @@
|
||||
<td class="right">Errors R/W</td>
|
||||
<td class="right">Util %</td>
|
||||
<td class="right">Reclaim</td>
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<td class="right"><?php echo 'FS '.$btype; ?></td>
|
||||
<td class="right"><?php echo 'Node '.$btype; ?></td>
|
||||
<?php } ?>
|
||||
@ -204,7 +204,7 @@
|
||||
<td class="data-right"><?php printf('%s/%s',$vo->READ_ERRORS,$vo->WRITE_ERRORS); ?></td>
|
||||
<td class="data-right"><?php echo $vo->display('EST_CAPACITY_MB'); ?></td>
|
||||
<td class="data-right"><?php echo $vo->display('PCT_RECLAIM'); ?></td>
|
||||
<?php foreach (Kohana::config('config.tsmdatatypes') as $btype => $ctype) { ?>
|
||||
<?php foreach (Kohana::$config->load('config')->tsmdatatypes as $btype => $ctype) { ?>
|
||||
<td class="data-right"><?php echo $vo->getFSOnVol($ctype); ?></td>
|
||||
<td class="data-right"><?php echo $vo->getNodesOnVol($ctype); ?></td>
|
||||
<?php } ?>
|
||||
|