Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F120834254
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
31 KB
Referenced Files
None
Subscribers
None
View Options
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
Details
Attached
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)
Attached To
Mode
rWAP webadmin
Attached
Detach File
Event Timeline