Page MenuHomePhorge

No OneTemporary

Authored By
Unknown
Size
31 KB
Referenced Files
None
Subscribers
None
diff --git a/public_html/include/kolab_admin_output.php b/public_html/include/kolab_admin_output.php
index 711bf70..686bb95 100644
--- a/public_html/include/kolab_admin_output.php
+++ b/public_html/include/kolab_admin_output.php
@@ -1,161 +1,168 @@
<?php
class kolab_admin_output
{
private $tpl_vars = array();
private $env = array();
private $objects = array();
private $commands = array();
private $labels = array();
private $skin;
public function __construct($skin = null)
{
$this->skin = $skin ? $skin : 'default';
$this->init();
}
public function init()
{
require_once 'lib/Smarty/Smarty.class.php';
$SMARTY = new Smarty;
$SMARTY->template_dir = 'skins/' . $this->skin . '/templates';
$SMARTY->compile_dir = 'cache';
$SMARTY->debugging = false;
$this->tpl = $SMARTY;
}
public function send($template = null)
{
if ($this->is_ajax()) {
echo $this->send_json();
}
else {
$this->send_tpl($template);
}
}
private function send_json()
{
header('Content-Type: application/json');
$response = array(
'objects' => $this->objects,
'env' => array(),
);
foreach ($this->env as $name => $value) {
$response['env'][$name] = $value;
}
foreach ($this->commands as $command) {
$cname = array_shift($command);
$args = array();
foreach ($command as $arg) {
$args[] = json_encode($arg);
}
$commands[] = sprintf('kadm.%s(%s);', $cname, implode(',', $args));
}
if (!empty($commands)) {
$response['exec'] = implode("\n", $commands);
}
$this->labels = array_unique($this->labels);
foreach ($this->labels as $label) {
$response['labels'][$label] = kolab_admin_task::translate($label);
}
return json_encode($response);
}
private function send_tpl($template)
{
if (!$template) {
return;
}
foreach ($this->tpl_vars as $name => $value) {
$this->tpl->assign($name, $value);
}
$script = '';
if (!empty($this->env)) {
$script[] = 'kadm.env = ' . json_encode($this->env) . ';';
}
$this->labels = array_unique($this->labels);
if (!empty($this->labels)) {
foreach ($this->labels as $label) {
$labels[$label] = kolab_admin_task::translate($label);
}
$script[] = 'kadm.tdef(' . json_encode($labels) . ');';
}
foreach ($this->commands as $command) {
$cname = array_shift($command);
$args = array();
foreach ($command as $arg) {
$args[] = json_encode($arg);
}
$script[] = sprintf('kadm.%s(%s);', $cname, implode(',', $args));
}
$this->tpl->assign('skin_path', 'skins/' . $this->skin . '/');
if ($script) {
$script = "<script type=\"text/javascript\">\n" . implode("\n", $script) . "\n</script>";
$this->tpl->assign('script', $script);
}
$this->tpl->display($template . '.html');
}
public function is_ajax()
{
return !empty($_REQUEST['remote']);
}
public function assign($name, $value)
{
$this->tpl_vars[$name] = $value;
}
public function set_env($name, $value)
{
$this->env[$name] = $value;
}
public function set_object($name, $content, $is_template = false)
{
if ($is_template) {
- ob_start();
- $this->send_tpl($content);
- $content = ob_get_contents();
- ob_end_clean();
+ $content = $this->get_template($content);
}
$this->objects[$name] = $content;
}
+ public function get_template($name)
+ {
+ ob_start();
+ $this->send_tpl($name);
+ $content = ob_get_contents();
+ ob_end_clean();
+
+ return $content;
+ }
+
public function command()
{
$this->commands[] = func_get_args();
}
public function add_translation()
{
$this->labels = array_merge($this->labels, func_get_args());
}
public static function escape($str)
{
}
}
diff --git a/public_html/include/kolab_admin_task.php b/public_html/include/kolab_admin_task.php
index c49fda3..5f984ef 100644
--- a/public_html/include/kolab_admin_task.php
+++ b/public_html/include/kolab_admin_task.php
@@ -1,291 +1,295 @@
<?php
class kolab_admin_task
{
/**
* @var kolab_admin_output
*/
protected $output;
/**
* @var kolab_admin_api
*/
protected $api;
protected $ajax_only = false;
protected $page_title = 'Kolab Admin Panel';
protected $menu = array();
static $translation = array();
public function __construct()
{
$this->config_init();
$this->output_init();
$this->api_init();
session_start();
$this->auth();
}
private function locale_init()
{
$aliases = array(
'de' => 'de_DE',
'en' => 'en_US',
'pl' => 'pl_PL',
);
// UI language
$langs = !empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? $_SERVER['HTTP_ACCEPT_LANGUAGE'] : '';
$langs = explode(',', $langs);
if (!empty($_SESSION['user']) && !empty($_SESSION['user']['language'])) {
array_unshift($langs, $_SESSION['user']['language']);
}
while ($lang = array_shift($langs)) {
$lang = explode(';', $lang);
$lang = $lang[0];
$lang = str_replace('-', '_', $lang);
if (file_exists(INSTALL_PATH . "/locale/$lang.php")) {
$language = $lang;
break;
}
if (isset($aliases[$lang]) && ($alias = $aliases[$lang])
&& file_exists(INSTALL_PATH . "/locale/$alias.php")
) {
$language = $alias;
break;
}
}
$LANG = array();
@include INSTALL_PATH . '/locale/en_US.php';
if (isset($language)) {
@include INSTALL_PATH . "/locale/$language.php";
setlocale(LC_ALL, $language . '.utf8', 'en_US.utf8');
}
else {
setlocale(LC_ALL, 'en_US.utf8');
}
self::$translation = $LANG;
}
private function config_init()
{
include_once INSTALL_PATH . '/config/config.php';
$this->config = $CONFIG;
}
private function output_init()
{
$skin = $this->config_get('skin', 'default');
$this->output = new kolab_admin_output($skin);
}
private function api_init()
{
$url = $this->config_get('api_url', '');
$this->api = new kolab_admin_api($url);
}
private function auth()
{
if (isset($_POST['login'])) {
$login = $this->get_input('login', 'POST');
if ($login['username']) {
$result = $this->api->login($login['username'], $login['password']);
if ($result) {
$this->api->set_session_token($result['token']);
// find user settings
$res = $this->api->get('user.info', array('user' => $login['username']));
$res = $res->get();
if (is_array($res) && ($res = array_shift($res))) {
$result['language'] = $res['preferredlanguage'];
$result['fullname'] = $res['cn'];
}
$_SESSION['user'] = $result;
header('Location: ?');
die;
}
else {
$this->output->command('display_message', 'loginerror', 'error');
}
}
}
else if (!empty($_SESSION['user']) && !empty($_SESSION['user']['token'])) {
$this->api->set_session_token($_SESSION['user']['token']);
return;
}
}
private function action_logout()
{
if (!empty($_SESSION['user']) && !empty($_SESSION['user']['token'])) {
$this->api->logout();
}
unset($_SESSION['user']);
if ($this->output->is_ajax()) {
$this->output->command('main_logout');
}
else {
$this->output->assign('login', $this->get_input('login', 'POST'));
$this->output->add_translation('loginerror');
$this->output->send('login');
}
exit;
}
public function run()
{
// Initialize locales
$this->locale_init();
// Run security checks
$this->input_checks();
if (empty($_SESSION['user']) || empty($_SESSION['user']['token'])) {
$this->action_logout();
}
$action = $this->get_input('action', 'GET');
if ($action) {
$method = 'action_' . $action;
if (method_exists($this, $method)) {
$this->$method();
}
}
else if (method_exists($this, 'action_default')) {
$this->action_default();
}
}
public function input_checks()
{
$ajax = $this->output->is_ajax();
// Check AJAX-only tasks
if ($this->ajax_only && !$ajax) {
$this->raise_error(500, 'Invalid request type!');
}
// CSRF prevention
$token = $ajax ? kolab_utils::request_header('X-KAP-Request') : $this->get_input('token');
$task = $this->get_task();
if ($task != 'main' && $token != $_SESSION['user']['token']) {
$this->raise_error(403, 'Invalid request data!');
}
}
public function raise_error($code, $msg)
{
// @TODO: log
if ($this->output->is_ajax()) {
header("HTTP/1.0 $code $msg");
die;
}
$this->output->assign('error_code', $code);
$this->output->assign('error_message', $msg);
$this->output->send('error');
exit;
}
public function send()
{
$template = $this->get_task();
if ($this->page_title) {
$this->output->assign('pagetitle', $this->page_title);
}
$this->output->send($template);
exit;
}
public function get_task()
{
$class_name = get_class($this);
if (preg_match('/^kolab_admin_task_([a-z]+)$/', $class_name, $m)) {
return $m[1];
}
}
public function config_get($name, $fallback = null)
{
return isset($this->config[$name]) ? $this->config[$name] : $fallback;
}
public static function translate()
{
$args = func_get_args();
if (is_array($args[0])) {
$args = $args[0];
}
$label = $args[0];
if (isset(self::$translation[$label])) {
$content = trim(self::$translation[$label]);
}
else {
$content = $label;
}
for ($i = 1, $len = count($args); $i < $len; $i++) {
$content = str_replace('$'.$i, $args[$i], $content);
}
return $content;
}
public static function get_input($name, $type = null, $allow_html = false)
{
return kolab_utils::get_input($name, $type = null, $allow_html = false);
}
public function menu()
{
if (empty($this->menu)) {
return '';
}
$task = $this->get_task();
foreach ($this->menu as $idx => $label) {
if (strpos($idx, '.')) {
$action = $idx;
$class = preg_replace('/\.[a-z_-]+$/', '', $idx);
}
else {
$action = $task . '.' . $idx;
$class = $idx;
}
$menu[$idx] = sprintf('<li class="%s"><a href="#%s" '
.'onclick="return kadm.command(\'%s\', \'\', this)">%s</a></li>',
$class, $idx, $action, $this->translate($label));
}
return '<ul>' . implode("\n", $menu) . '</ul>';
}
+ public function watermark($name)
+ {
+ $this->output->command('set_watermark', $name);
+ }
}
diff --git a/public_html/include/kolab_form.php b/public_html/include/kolab_form.php
index dcbf0e0..4c67533 100644
--- a/public_html/include/kolab_form.php
+++ b/public_html/include/kolab_form.php
@@ -1,127 +1,132 @@
<?php
class kolab_form
{
const INPUT_TEXT = 1;
const INPUT_PASSWORD = 2;
const INPUT_TEXTAREA = 3;
const INPUT_CHECKBOX = 4;
const INPUT_RADIO = 5;
const INPUT_BUTTON = 6;
const INPUT_SUBMIT = 7;
private $attribs = array();
private $elements = array();
private $sections = array();
public function __construct($attribs = array())
{
$this->attribs = $attribs;
}
public function add_section($index, $legend)
{
$this->sections[$index] = $legend;
}
public function add_element($attribs, $section = null)
{
if (!empty($section)) {
$attribs['section'] = $section;
}
$this->elements[] = $attribs;
}
public function output()
{
$content = '';
if (!empty($this->sections)) {
foreach ($this->sections as $set_idx => $set) {
$rows = array();
foreach ($this->elements as $element) {
if (empty($element['section']) || $element['section'] != $set_idx) {
continue;
}
$rows[] = $this->form_row($element);
}
if (!empty($rows)) {
$content .= "\n" . kolab_html::fieldset(array(
'legend' => $set,
'content' => kolab_html::table(array('body' => $rows, 'class' => 'form'))
));
}
}
}
$rows = array();
foreach ($this->elements as $element) {
if (!empty($element['section'])) {
continue;
}
$rows[] = $this->form_row($element);
}
if (!empty($rows)) {
$content = kolab_html::table(array('body' => $rows, 'class' => 'form'));
}
return kolab_html::form($this->attribs, $content);
}
private function form_row($element)
{
$cells = array(
0 => array(
'class' => 'label',
'body' => $element['label'],
),
1 => array(
'class' => 'value',
'body' => $this->get_element($element),
),
- 2 => array(
- 'class' => 'description',
- 'body' => $element['description'],
- ),
);
return array('cells' => $cells);
}
private function get_element($attribs)
{
$type = isset($attribs['type']) ? $attribs['type'] : 0;
switch ($type) {
case self::INPUT_TEXT:
case self::INPUT_PASSWORD:
+ // INPUT type
$attribs['type'] = $type == self::INPUT_PASSWORD ? 'password' : 'text';
+ // INPUT size
+ if (empty($attribs['size'])) {
+ $attribs['size'] = 40;
+ if (!empty($attribs['maxlength'])) {
+ $attribs['size'] = $attribs['maxlength'] > 10 ? 40 : 10;
+ }
+ }
+
$content = kolab_html::input($attribs);
break;
case self::INPUT_TEXTAREA:
$content = kolab_html::textarea($attribs);
break;
default:
if (is_array($attribs)) {
$content = isset($attribs['value']) ? $attribs['value'] : '';
}
else {
$content = $attribs;
}
}
return $content;
}
}
diff --git a/public_html/include/tasks/group.php b/public_html/include/tasks/group.php
index 10e2619..4979d3b 100644
--- a/public_html/include/tasks/group.php
+++ b/public_html/include/tasks/group.php
@@ -1,53 +1,52 @@
<?php
class kolab_admin_task_group extends kolab_admin_task
{
protected $ajax_only = true;
protected $menu = array(
'add' => 'group.add',
- 'list' => 'group.list',
);
public function action_default()
{
$this->output->set_object('content', '');
$this->output->set_object('task_navigation', $this->menu());
}
public function action_list()
{
// $content = 'test output from users.list';
$result = $this->api->post('groups.list');
$result = (array) $result->get();
/*
foreach ($result as $idx => $item) {
if (!is_array($item) || empty($item['uid'])) {
unset($result[$idx]);
continue;
}
$result[$idx] = sprintf('<li><a href="#" onclick="kadm.command(\'user.info\', \'%s\')">%s</a></li>',
$idx, $item['uid']);
}
$result = '<ul id="userlist">' . implode("\n", $result) . '</ul>';
*/
$this->output->set_object('content', $result);
}
public function action_info()
{
/*
$id = $this->get_input('id', 'POST');
$result = $this->api->get('user.info', array('user' => $id));
$user = $result->get($id);
$this->output->set_object('content', print_r($user, true));
*/
}
public function group_add()
{
}
}
diff --git a/public_html/include/tasks/main.php b/public_html/include/tasks/main.php
index 57dc88d..36e27b2 100644
--- a/public_html/include/tasks/main.php
+++ b/public_html/include/tasks/main.php
@@ -1,25 +1,28 @@
<?php
class kolab_admin_task_main extends kolab_admin_task
{
protected $menu = array(
'user.default' => 'menu.users',
'group.default' => 'menu.groups',
'domain.default' => 'menu.domains',
'about.default' => 'menu.about',
);
public function action_default()
{
// assign token
$this->output->set_env('token', $_SESSION['user']['token']);
+ // add watermark content
+ $this->output->set_env('watermark', $this->output->get_template('watermark'));
+
// assign default set of translations
- $this->output->add_translation('loading', 'servererror');
+ $this->output->add_translation('loading', 'servererror', 'search');
$this->output->assign('main_menu', $this->menu());
$this->output->assign('user', $_SESSION['user']);
}
}
diff --git a/public_html/include/tasks/user.php b/public_html/include/tasks/user.php
index e2fe4a9..5cdb73c 100644
--- a/public_html/include/tasks/user.php
+++ b/public_html/include/tasks/user.php
@@ -1,111 +1,215 @@
<?php
class kolab_admin_task_user extends kolab_admin_task
{
protected $ajax_only = true;
protected $menu = array(
'add' => 'user.add',
- 'list' => 'user.list',
);
public function action_default()
{
$this->output->set_object('content', 'user', true);
$this->output->set_object('task_navigation', $this->menu());
+
+ $this->action_list();
}
public function action_list()
{
$result = $this->api->post('users.list');
$result = (array) $result->get();
$rows = $head = array();
- $cols = array('name', 'actions', 'test');
+ $cols = array('name');
$i = 0;
- foreach ($cols as $col) {
- $body = $col != 'actions' ? $this->translate('user.' . $col) : '';
- $head[0]['cells'][] = array('class' => $col, 'body' => $body);
- }
+ // table header
+ $head[0]['cells'][] = array('class' => 'name', 'body' => $this->translate('user.name'));
if (!empty($result)) {
foreach ($result as $idx => $item) {
if (!is_array($item) || empty($item['uid'])) {
continue;
}
$i++;
$cells = array();
$cells[] = array('class' => 'name', 'body' => kolab_html::escape($item['uid']),
'onclick' => "kadm.command('user.info', '$idx')");
- $cells[] = array('class' => 'links', 'body' => '<a>test</a>');
- $cells[] = array('class' => 'links', 'body' => 'test sdf sdf sd fs df sdf sd f');
$rows[] = array('id' => $i, 'class' => 'selectable', 'cells' => $cells);
}
}
else {
$rows[] = array('cells' => array(
- 0 => array('class' => 'empty-body', 'colspan' => count($cols),
- 'body' => $this->translate('user.norecords')
+ 0 => array('class' => 'empty-body', 'body' => $this->translate('user.norecords')
)));
}
$table = kolab_html::table(array('id' => 'userlist', 'class' => 'list',
'head' => $head, 'body' => $rows));
- $this->output->set_object('task_content', $table);
+
+ $this->watermark('taskcontent');
+ $this->output->set_object('userlist', $table);
}
public function action_info()
{
$id = $this->get_input('id', 'POST');
$result = $this->api->get('user.info', array('user' => $id));
-
$user = $result->get($id);
$form = new kolab_form();
$fields = array(
'personal' => array(
'label' => 'user.personal',
'fields' => array(
'givenname' => array(
- 'label' => 'user.givenname',
- 'description' => '',
+ 'label' => 'user.givenname',
+ 'description' => 'user.givenname.desc',
+ 'required' => true,
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'initials' => array(
+ 'label' => 'user.initials',
+ 'description' => 'user.initials.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
),
'sn' => array(
- 'label' => 'user.surname',
- 'description' => '',
+ 'label' => 'user.surname',
+ 'description' => 'user.surname.desc',
+ 'required' => true,
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'title' => array(
+ 'label' => 'user.title',
+ 'description' => 'user.title.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 10,
),
+ ),
+ ),
+ 'system' => array(
+ 'label' => 'user.system',
+ 'fields' => array(
'mail' => array(
'label' => 'user.email',
'description' => 'user.email.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ ),
+ ),
+ 'config' => array(
+ 'label' => 'user.config',
+ 'fields' => array(
+ 'cyrus-userquota' => array(
+ 'label' => 'user.quota',
+ 'description' => 'user.quota.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 10,
+ ),
+ 'kolabFreeBusyFuture' => array(
+ 'label' => 'user.fbinterval',
+ 'description' => 'user.fbinterval.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 5,
+ ),
+ ),
+ ),
+ 'contact' => array(
+ 'label' => 'user.contact',
+ 'fields' => array(
+ 'telephoneNumber' => array(
+ 'label' => 'user.phone',
+ 'description' => 'user.phone.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'facsimileTelephoneNumber' => array(
+ 'label' => 'user.fax',
+ 'description' => 'user.fax.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'o' => array(
+ 'label' => 'user.org',
+ 'description' => 'user.org.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'ou' => array(
+ 'label' => 'user.orgunit',
+ 'description' => 'user.orgunit.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'roomNumber' => array(
+ 'label' => 'user.room',
+ 'description' => 'user.room.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 10,
+ ),
+ 'street' => array(
+ 'label' => 'user.street',
+ 'description' => 'user.street.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'l' => array(
+ 'label' => 'user.city',
+ 'description' => 'user.city.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 50,
+ ),
+ 'postOfficeBox' => array(
+ 'label' => 'user.postbox',
+ 'description' => 'user.postbox.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 20,
+ ),
+ 'postalCode' => array(
+ 'label' => 'user.postcode',
+ 'description' => 'user.postcode.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 10,
+ ),
+ 'c' => array(
+ 'label' => 'user.country',
+ 'description' => 'user.country.desc',
+ 'type' => kolab_form::INPUT_TEXT,
+ 'maxlength' => 2,
),
),
),
);
foreach ($fields as $section_idx => $section) {
$form->add_section($section_idx, kolab_html::escape($this->translate($section['label'])));
foreach ($section['fields'] as $idx => $field) {
$field['section'] = $section_idx;
$field['value'] = kolab_html::escape($user[$idx]);
$field['label'] = kolab_html::escape($this->translate($field['label']));
$field['description'] = kolab_html::escape($this->translate($field['description']));
$form->add_element($field);
}
}
- $this->output->set_object('content', $form->output());
+ $this->output->set_object('taskcontent', $form->output());
}
public function user_add()
{
}
private function user_types()
{
$result = $this->api->post('user_types.list');
}
}
diff --git a/public_html/locale/en_US.php b/public_html/locale/en_US.php
index a5a2d18..30c7073 100644
--- a/public_html/locale/en_US.php
+++ b/public_html/locale/en_US.php
@@ -1,29 +1,51 @@
<?php
$LANG['username'] = 'Username';
$LANG['password'] = 'Password';
$LANG['loading'] = 'Loading...';
$LANG['error'] = 'Error';
$LANG['servererror'] = 'Server Error!';
+
$LANG['search'] = 'Search';
+$LANG['search.criteria'] = 'Search criteria';
+$LANG['search.reset'] = 'Reset';
+$LANG['search.field'] = 'Field';
$LANG['menu.users'] = 'Users';
$LANG['menu.groups'] = 'Groups';
+$LANG['menu.domains'] = 'Domains';
$LANG['menu.about'] = 'About';
$LANG['menu.kolab'] = 'Kolab';
$LANG['menu.kolabsys'] = 'Kolab Systems';
$LANG['menu.technology'] = 'Technology';
-$LANG['user.list'] = 'List';
-$LANG['user.add'] = 'Add';
+$LANG['user.add'] = 'Add User';
$LANG['user.name'] = 'Name';
$LANG['user.norecords'] = 'No user records found!';
+$LANG['user.personal'] = 'Personal';
+$LANG['user.system'] = 'System';
+$LANG['user.config'] = 'Configuration';
+$LANG['user.contact'] = 'Contact';
$LANG['user.surname'] = 'Surname';
$LANG['user.givenname'] = 'Given name';
$LANG['user.email'] = 'Email';
-$LANG['user.personal'] = 'Personal Information';
+$LANG['user.initials'] = 'Middle name';
+$LANG['user.title'] = 'Title';
+$LANG['user.country'] = 'Country';
+$LANG['user.phone'] = 'Phone number';
+$LANG['user.fax'] = 'Fax number';
+$LANG['user.room'] = 'Room number';
+$LANG['user.street'] = 'Street';
+$LANG['user.city'] = 'City';
+$LANG['user.postbox'] = 'Postal box';
+$LANG['user.postcode'] = 'Postal code';
+$LANG['user.org'] = 'Organization';
+$LANG['user.orgunit'] = 'Organizational Unit';
+$LANG['user.quota'] = 'Quota';
+$LANG['user.fbinterval'] = 'Free-Busy interval';
+
+$LANG['domain.add'] = 'Add Domain';
-$LANG['group.list'] = 'List';
-$LANG['group.add'] = 'Add';
+$LANG['group.add'] = 'Add Group';
$LANG['loginerror'] = 'Incorrect username or password!';
diff --git a/public_html/skins/default/images/README b/public_html/skins/default/images/README
new file mode 100644
index 0000000..7f94f09
--- /dev/null
+++ b/public_html/skins/default/images/README
@@ -0,0 +1,3 @@
+logout.png Cologne (CC)
+error.png Humility (GPL)
+info.png Humility (GPL)
diff --git a/public_html/skins/default/images/buttons.png b/public_html/skins/default/images/buttons.png
new file mode 100644
index 0000000..5cf64e5
Binary files /dev/null and b/public_html/skins/default/images/buttons.png differ
diff --git a/public_html/skins/default/images/logo-big.png b/public_html/skins/default/images/logo-big.png
new file mode 100644
index 0000000..d8733a3
Binary files /dev/null and b/public_html/skins/default/images/logo-big.png differ
diff --git a/public_html/skins/default/templates/watermark.html b/public_html/skins/default/templates/watermark.html
new file mode 100644
index 0000000..1229f20
--- /dev/null
+++ b/public_html/skins/default/templates/watermark.html
@@ -0,0 +1,3 @@
+<div class="watermark">
+ <img src="{$skin_path}images/logo-big.png" alt="" />
+</div>
diff --git a/public_html/skins/default/ui.js b/public_html/skins/default/ui.js
new file mode 100644
index 0000000..f9e6a08
--- /dev/null
+++ b/public_html/skins/default/ui.js
@@ -0,0 +1,27 @@
+
+function search_reset()
+{
+ var input = $('#searchinput');
+
+ input.val(kadm.t('search'));
+}
+
+function search_details()
+{
+ var div = $('div.searchdetails', $('#search'));
+
+ if (!div.is(':visible'))
+ div.slideDown(200);
+ else
+ div.slideUp(200);
+}
+
+function search_click()
+{
+
+}
+
+function search_key()
+{
+
+}

File Metadata

Mime Type
text/x-diff
Expires
Fri, Apr 24, 1:01 PM (1 w, 1 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18868811
Default Alt Text
(31 KB)

Event Timeline