fmsystem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Fmsystem-commits] [9106] registration


From: Sigurd Nes
Subject: [Fmsystem-commits] [9106] registration
Date: Mon, 09 Apr 2012 17:07:12 +0000

Revision: 9106
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=9106
Author:   sigurdne
Date:     2012-04-09 17:07:12 +0000 (Mon, 09 Apr 2012)
Log Message:
-----------
registration

Modified Paths:
--------------
    trunk/registration/inc/class.bopending.inc.php
    trunk/registration/inc/class.boreg.inc.php
    trunk/registration/inc/class.sopending.inc.php
    trunk/registration/inc/class.soreg.inc.php
    trunk/registration/inc/class.uicommon.inc.php
    trunk/registration/inc/class.uipending.inc.php
    trunk/registration/inc/hook_logout.inc.php
    trunk/registration/js/yahoo/pending.index.js
    trunk/registration/main.php
    trunk/registration/setup/default_records.inc.php
    trunk/registration/setup/setup.inc.php
    trunk/registration/setup/tables_current.inc.php
    trunk/registration/setup/tables_update.inc.php
    trunk/registration/templates/base/common.xsl
    trunk/registration/templates/base/pending_users.xsl
    trunk/registration/templates/base/user_edit.xsl

Added Paths:
-----------
    trunk/registration/js/yahoo/common.js

Modified: trunk/registration/inc/class.bopending.inc.php
===================================================================
--- trunk/registration/inc/class.bopending.inc.php      2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/inc/class.bopending.inc.php      2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -295,7 +295,7 @@
 HTML;
                                        try
                                        {
-                                               $info['email'] = 
'address@hidden';
+//                                             $info['email'] = 
'address@hidden';
                                                $rcpt = 
$smtp->msg('email',$info['email'],$subject,nl2br($body),'','','',$noreply,'','html');
                                        }
                                        catch(Exception $e)
@@ -306,8 +306,12 @@
                                        if($rcpt)
                                        {
                                                
phpgwapi_cache::message_set("Confirmation sent to {$info['email']}", 'message');
+                                               $so->delete_reg_info($reg_id);
                                        }
-                                       $so->delete_reg_info($reg_id);
+                                       else
+                                       {
+                                               
phpgwapi_cache::message_set("Confirmation NOT sent to {$info['email']}", 
'error');
+                                       }
                                }
                        }
                }
@@ -351,9 +355,8 @@
                        return $receipt;
                }
 
-               function delete()
+               function delete($id)
                {
-                       //$location_code = 
phpgw::get_var('location_code','string','GET');
-                       //$this->so->delete($location_code);
+                       $this->so->delete($id);
                }
        }

Modified: trunk/registration/inc/class.boreg.inc.php
===================================================================
--- trunk/registration/inc/class.boreg.inc.php  2012-04-04 12:05:27 UTC (rev 
9105)
+++ trunk/registration/inc/class.boreg.inc.php  2012-04-09 17:07:12 UTC (rev 
9106)
@@ -313,7 +313,6 @@
                //
                function lostpw2()
                {
-//                     global $reg_id;
                        $reg_id = phpgw::get_var('reg_id');
 
                        $so = createobject('registration.soreg');
@@ -337,11 +336,11 @@
                //
                function lostpw3()
                {
-//                     global $r_reg;
                        $r_reg = phpgw::get_var('r_reg');
 
                        $lid = 
$GLOBALS['phpgw']->session->appsession('loginid','registration');
-                       if(!$lid) {
+                       if(!$lid)
+                       {
                          $error[] = lang('Wrong session');
                        }
 
@@ -354,6 +353,18 @@
                        {
                            $errors[] = lang('You must enter a password');
                        }
+                       else
+                       {
+                               $account        = new phpgwapi_user();
+                               try
+                               {
+                                       
$account->validate_password($r_reg['passwd']);
+                               }
+                               catch(Exception $e)
+                               {
+                                       $errors[] = $e->getMessage();
+                               }
+                       }
 
                        if(! is_array($errors))
                        {

Modified: trunk/registration/inc/class.sopending.inc.php
===================================================================
--- trunk/registration/inc/class.sopending.inc.php      2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/inc/class.sopending.inc.php      2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -60,9 +60,9 @@
 
                        $ordermethod = " ORDER BY {$order} {$sort}";
 
-                       $where= 'WHERE';
-                       $filtermethod = '';
 
+                       $filtermethod = 'WHERE reg_info IS NOT NULL';
+                       $where= 'AND';
                        switch ($status_id)
                        {
                                case '1':
@@ -167,18 +167,47 @@
                        {
                                throw new 
Exception("registration_sopending::update_pending_user() - missing 'id' in 
valueset");
                        }
-
                        $ret = false;
                        $this->db->transaction_begin();
-                       if (isset($values['location']) && $values['location'])
+//                     if (isset($values['location']) && $values['location'])
                        {
                                $this->db->query("SELECT reg_info FROM 
phpgw_reg_accounts WHERE reg_id = '{$values['id']}'",__LINE__,__FILE__);
                                if ($this->db->next_record())
                                {
                                        $reg_info = 
unserialize(base64_decode($this->db->f('reg_info')));
                                        $reg_info['location_code'] = 
implode('-', $values['location']);
+                                       
+                                       if($values['account_permissions'] && 
is_array($values['account_permissions']))
+                                       {
+                                               foreach 
($values['account_permissions'] as $_app => $_selected)
+                                               {
+                                                       if($_selected)
+                                                       {
+                                                               
$reg_info['account_permissions'][] =  $_app;
+                                                       }
+                                               
+                                               }
+                                               unset($_app);
+                                               unset($_selected);
+                                       }
+                                       if($values['account_permissions_admin'] 
&& is_array($values['account_permissions_admin']))
+                                       {
+                                               foreach 
($values['account_permissions_admin'] as $_app => $_selected)
+                                               {
+                                                       if($_selected)
+                                                       {
+                                                               
$reg_info['account_permissions_admin'][] =  $_app;
+                                                       }
+                                               
+                                               }
+                                               unset($_app);
+                                               unset($_selected);
+                                       }
+                                       
+                                       $reg_info['account_groups'] = 
$values['account_groups'] ? $values['account_groups'] : array();
+
+                                       $this->db->query("UPDATE 
phpgw_reg_accounts SET reg_info='" . base64_encode(serialize($reg_info)) . "' 
WHERE reg_id='{$values['id']}'",__LINE__,__FILE__);
                                }
-                               $this->db->query("UPDATE phpgw_reg_accounts SET 
 reg_info='" . base64_encode(serialize($reg_info)) . "' WHERE 
reg_id='{$values['id']}'",__LINE__,__FILE__);
                        }
 
                        $value_set['reg_approved']      = $values['approve'];
@@ -188,4 +217,9 @@
                        $this->db->transaction_commit();
                        return $ret;
                }
+
+               public function delete($id)
+               {
+                       $this->db->query("DELETE FROM phpgw_reg_accounts WHERE 
reg_id = '{$id}'",__LINE__,__FILE__);
+               }
        }

Modified: trunk/registration/inc/class.soreg.inc.php
===================================================================
--- trunk/registration/inc/class.soreg.inc.php  2012-04-04 12:05:27 UTC (rev 
9105)
+++ trunk/registration/inc/class.soreg.inc.php  2012-04-09 17:07:12 UTC (rev 
9106)
@@ -48,7 +48,7 @@
                        else
                        {
                                // To prevent race conditions, reserve the 
account_lid
-                               $this->db->query("insert into 
phpgw_reg_accounts values ('','$account_lid','','" . time() . 
"')",__LINE__,__FILE__);
+                               $this->db->query("INSERT INTO 
phpgw_reg_accounts (reg_id, reg_lid, reg_info, reg_dla) VALUES 
('','$account_lid', NULL,'" . time() . "')",__LINE__,__FILE__);
                                $this->db->transaction_commit();
                                
$GLOBALS['phpgw']->session->appsession('loginid','registration',$account_lid);
                                return false;
@@ -122,13 +122,14 @@
                        // Remember md5 string sent by mail
                        //
                        $reg_id = md5(time() . $account_lid . 
$GLOBALS['phpgw']->common->randomstring(32));
-                       $this->db->query("INSERT INTO phpgw_reg_accounts VALUES 
('$reg_id','$account_lid','','" . time() . "')",__LINE__,__FILE__);
+                       $this->db->query("INSERT INTO phpgw_reg_accounts 
(reg_id, reg_lid, reg_info, reg_dla) VALUES ('$reg_id','$account_lid',NULL,'" . 
time() . "')",__LINE__,__FILE__);
 
                        //
                        // Send the mail that will allow to change the password
                        //
 
                        $user_id = 
$GLOBALS['phpgw']->accounts->name2id($account_lid);
+
                        $account_info = 
$GLOBALS['phpgw']->accounts->get($user_id);
 
                        $contacts = CreateObject('phpgwapi.contacts');
@@ -164,6 +165,12 @@
                                'email' => 
$comms[$account_info->person_id]['work email']
                        );
 
+                       if(!$info['email'])
+                       {
+                               
$GLOBALS['phpgw']->preferences->set_account_id($user_id, true);
+                               $info['email'] = 
isset($GLOBALS['phpgw']->preferences->data['property']['email']) && 
$GLOBALS['phpgw']->preferences->data['property']['email'] ? 
$GLOBALS['phpgw']->preferences->data['property']['email'] : '';
+                       }
+
                        if ($info['email'])
                        {
                                $smtp = createobject('phpgwapi.send');
@@ -180,7 +187,15 @@
                                $subject = $this->config['subject_lostpw'] ? 
lang($this->config['subject_lostpw']) : lang('Account password retrieval');
                                $noreply = $this->config['mail_nobody'] ? ('No 
reply <' . $this->config['mail_nobody'] . '>') : ('No reply <noreply@' . 
$GLOBALS['phpgw_info']['server']['hostname'] . '>');
 
-                               
$smtp->msg('email',$info['email'],$subject,$GLOBALS['phpgw']->template->fp('out','message'),'','','',$noreply,'',
 'html');
+                               try
+                               {
+                                       
$smtp->msg('email',$info['email'],$subject,$GLOBALS['phpgw']->template->fp('out','message'),'','','',$noreply,'',
 'html');
+                               }
+                               catch(Exception $e)
+                               {
+                                        $error = $e->getMessage();
+                               //       $error = 
$GLOBALS['phpgw']->template->fp('out','message');
+                               }
                        }
                        else
                        {
@@ -248,6 +263,35 @@
                        
                        $group_id =  $default_group_id ? $default_group_id : 
$GLOBALS['phpgw']->accounts->name2id('default');
 
+                       $groups = isset($fields['account_groups']) && 
$fields['account_groups'] ? $fields['account_groups'] : array();
+                       if($group_id && !in_array($group_id , $groups))
+                       {
+                               $groups = array_merge ($groups, 
array($group_id));
+                       }
+
+
+                       $apps_admin = $fields['account_permissions_admin'] ? 
$fields['account_permissions_admin'] : array();
+                       $acls = array();
+
+                       $acls[] = array
+                       (
+                               'appname'       => 'preferences',
+                               'location'      => 'changepassword',
+                               'rights'        => 1
+                       );
+
+                       foreach ($apps_admin as $app_admin)
+                       {
+                               $acls[] = array
+                               (
+                                       'appname'       => $app_admin,
+                                       'location'      => 'admin',
+                                       'rights'        => phpgwapi_acl::ADD
+                               );                      
+                       }
+
+                       $apps = $fields['account_permissions'] ? 
$fields['account_permissions'] : array();
+
                        $contacts   = createobject('phpgwapi.contacts');
 
                        $primary = array
@@ -328,7 +372,7 @@
                                        $account->expires = -1;
                                }
 
-                               $account_id =  
$GLOBALS['phpgw']->accounts->create($account, array($group_id), array(), 
array(), $contact_data);
+                               $account_id =  
$GLOBALS['phpgw']->accounts->create($account, $groups, $acls, $apps, 
$contact_data);
                                if($account_id)
                                {
                                        
$GLOBALS['phpgw']->log->write(array('text'=>'I-Notification, user created 
%1','p1'=> $account_lid));

Modified: trunk/registration/inc/class.uicommon.inc.php
===================================================================
--- trunk/registration/inc/class.uicommon.inc.php       2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/inc/class.uicommon.inc.php       2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -159,7 +159,7 @@
                        
self::add_stylesheet('phpgwapi/js/yahoo/paginator/assets/skins/sam/paginator.css');
                        
self::add_stylesheet('phpgwapi/js/yahoo/treeview/assets/skins/sam/treeview.css');
                        
//self::add_stylesheet('registration/templates/base/css/base.css');
-                       self::add_javascript('controller', 'yahoo', 
'common.js');//Use this one for now
+                       self::add_javascript('registration', 'yahoo', 
'common.js');//Use this one for now
                        $this->tmpl_search_path = array();
                        array_push($this->tmpl_search_path, PHPGW_SERVER_ROOT . 
'/phpgwapi/templates/base');
                        array_push($this->tmpl_search_path, PHPGW_SERVER_ROOT . 
'/phpgwapi/templates/' . $GLOBALS['phpgw_info']['server']['template_set']);

Modified: trunk/registration/inc/class.uipending.inc.php
===================================================================
--- trunk/registration/inc/class.uipending.inc.php      2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/inc/class.uipending.inc.php      2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -28,12 +28,7 @@
 
        phpgw::import_class('phpgwapi.yui');
        phpgw::import_class('registration.uicommon');
-/*
-       include_class('registration', 'check_list', 'inc/model/');
-       include_class('registration', 'date_generator', 'inc/component/');
-       include_class('registration', 'status_checker', 'inc/helper/');
-       include_class('registration', 'date_helper', 'inc/helper/');
-*/     
+
        class registration_uipending extends registration_uicommon
        {
                var $cat_id;
@@ -45,6 +40,7 @@
                var $currentapp;
                var $type_id;
                var $location_code;
+               var $config;
        
                private $so_control_area;
                private $so_control;
@@ -66,6 +62,10 @@
                
                        $this->bo                                       = 
CreateObject('registration.bopending',true);
                        $this->bocommon                         = 
CreateObject('property.bocommon');
+                       $c = createobject('phpgwapi.config','registration');
+                       $c->read();
+                       $this->config = $c->config_data;
+
                        $this->start                            = 
$this->bo->start;
                        $this->query                            = 
$this->bo->query;
                        $this->sort                                     = 
$this->bo->sort;
@@ -185,9 +185,6 @@
                                phpgwapi_yui::load_widget('paginator');
 
                                self::add_javascript('registration', 'yahoo', 
'pending.index.js');
-//                             self::add_javascript('registration', 
'registration', 'jquery.js');
-//                             self::add_javascript('registration', 
'registration', 'ajax.js');
-
                                
self::render_template_xsl(array('pending_users', 'common'), $data);
                        }       
                }
@@ -213,9 +210,17 @@
                                        }
                                }
 
+
+                               $values['account_permissions']                  
= phpgw::get_var('account_permissions');
+                               $values['account_permissions_admin']    = 
phpgw::get_var('account_permissions_admin');
+                               $values['account_groups']                       
        = phpgw::get_var('account_groups');
+
                                $values = 
$this->bocommon->collect_locationdata($values,$insert_record);
 
                                $values['id'] = $id;
+
+//_debug_array($account_permissions);
+//_debug_array($account_permissions_admin);
 //_debug_array($values);die();
                                if($this->bo->update_pending_user($values))
                                {
@@ -236,6 +241,12 @@
                                $GLOBALS['phpgw']->redirect_link('/index.php', 
array('menuaction' => 'registration.uipending.index'));
                        }
 
+                       if (isset($_POST['delete']) && $id) // The user has 
pressed the delete button
+                       {
+                               $this->bo->delete($id);
+                               $GLOBALS['phpgw']->redirect_link('/index.php', 
array('menuaction' => 'registration.uipending.index'));
+                       }
+
                        if($id)
                        {
                                $user = $bo->get_pending_user($id);
@@ -275,13 +286,115 @@
                                'entity_data'   => false
                                ));
 
+                       /* groups */
+                       $group_list = array();
 
+                       $all_groups 
=$GLOBALS['phpgw']->accounts->get_list('groups');
+
+                       //FIXME!!
+                       /*
+                       if(!$GLOBALS['phpgw']->acl->check('run', 
phpgwapi_acl::READ, 'admin'))
+                       {
+                               $available_apps = 
$GLOBALS['phpgw_info']['apps'];
+                               $valid_groups = array();
+                               foreach($available_apps as $_app => $dummy)
+                               {
+                                       
if($GLOBALS['phpgw']->acl->check('admin', phpgwapi_acl::ADD, $_app))
+                                       {
+                                               $valid_groups   = 
array_merge($valid_groups,$GLOBALS['phpgw']->acl->get_ids_for_location('run', 
phpgwapi_acl::READ, $_app));
+                                       }
+                               }
+
+                               $valid_groups = array_unique($valid_groups);
+                       }
+                       else
+                       {
+                               $valid_groups = array_keys($all_groups);
+                       }
+                       */
+
+                       $valid_groups = array_keys($all_groups);
+
+                       $user['reg_info']['account_groups'] = 
isset($user['reg_info']['account_groups']) && 
$user['reg_info']['account_groups'] ? $user['reg_info']['account_groups'] : 
array();
+                       if($this->config['default_group_id'] && 
!in_array($this->config['default_group_id'] , 
$user['reg_info']['account_groups']))
+                       {
+                               $user['reg_info']['account_groups'] = 
array_merge ($user['reg_info']['account_groups'], 
array($this->config['default_group_id']));
+                       }
+
+                       foreach ( $all_groups as $group )
+                       {
+                               $group_list[] = array
+                               (
+                                       'account_id'    => $group->id,
+                                       'account_lid'   => $group->__toString(),
+                                       'i_am_admin'    => in_array($group->id, 
$valid_groups) ? 1 : 0,
+                                       'checked'               => 
in_array($group->id, $user['reg_info']['account_groups']) ? 1 : 0
+                               );
+                       }
+
+
+                       /* create list of available apps */
+
+                       $available_apps = $GLOBALS['phpgw_info']['apps'];
+                       asort($available_apps);
+
+                       if(!$GLOBALS['phpgw']->acl->check('run', 
phpgwapi_acl::READ, 'admin'))
+                       {
+                               $valid_apps = 
$GLOBALS['phpgw']->acl->get_app_list_for_id('admin', phpgwapi_acl::ADD, 
$GLOBALS['phpgw_info']['user']['account_id']);
+                       }
+                       else
+                       {
+                               $valid_apps = array_keys($available_apps);
+                       }
+
+                       foreach ( $available_apps as $key => $application )
+                       {
+                               if ($application['enabled'] && 
$application['status'] != 3)
+                               {
+                                       $perm_display[] = array
+                                       (
+                                               'app_name'                      
=> $key,
+                                               'translated_name'       => 
lang($key)
+                                       );
+                               }
+                       }
+                       asort($perm_display);
+
+                       $app_list = array();
+                       foreach ( $perm_display as $perm )
+                       {
+                               $app_list[] = array
+                               (
+                                       'app_title'                             
=> $perm['translated_name'],
+                                       'checkbox_name'                 => 
"account_permissions[{$perm['app_name']}]",
+                                       'checked'                               
=> in_array($perm['app_name'], $user['reg_info']['account_permissions']) ? 1 : 
0,
+                                       'checkbox_name_admin'   => 
"account_permissions_admin[{$perm['app_name']}]",
+                                       'checked_admin'                 => 
in_array($perm['app_name'], $user['reg_info']['account_permissions_admin']) ? 1 
: 0,
+                                       'i_am_admin'                    => 
in_array($perm['app_name'], $valid_apps) ? 1 : 0,
+                               );
+                       }
+
+//_debug_array($app_list);die();
+
+                       $tabs = array
+                       (
+                               'main'          => array('label' => 
lang('user'), 'link' => '#main'),
+                               'groups'        => array('label' => 
lang('groups'), 'link' => '#groups'),
+                               'apps'          => array('label' => 
lang('applications'), 'link' => '#apps'),
+                       );
+                       $active_tab = 'main';
+
+                       phpgwapi_yui::tabview_setup('edit_user_tabview');
+
                        $data = array
                        (
+                               'tabs'                                  => 
phpgwapi_yui::tabview_generate($tabs, $active_tab),
                                'value_id'                              => $id,
                                'user_data'                             => 
$user_data,
                                'location_data'                 => 
$location_data,
-                               'value_approved'                => 
$user['reg_approved']
+                               'value_approved'                => 
$user['reg_approved'],
+                               'app_list'                              => 
$app_list,
+                               'group_list'                    => $group_list,
                        );
 
                        $GLOBALS['phpgw_info']['flags']['app_header'] = 
lang('registration') . '::' . lang('edit user');
@@ -309,7 +422,7 @@
                        $results['sort'] = 'location_code';
                        $results['dir'] = $this->bo->sort ? $this->bo->sort : 
'ASC';
                                        
-                       array_walk($results['results'], array($this, 
'add_links'), array($type));
+//                     array_walk($results['results'], array($this, 
'add_links'), array($type));
                                                
                        return $this->yui_results($results);
                }

Modified: trunk/registration/inc/hook_logout.inc.php
===================================================================
--- trunk/registration/inc/hook_logout.inc.php  2012-04-04 12:05:27 UTC (rev 
9105)
+++ trunk/registration/inc/hook_logout.inc.php  2012-04-09 17:07:12 UTC (rev 
9106)
@@ -17,8 +17,13 @@
        $c = createobject('phpgwapi.config','registration');
        $c->read();
 
-       if(!$c->config_data['activate_account'] == 'pending_approval')
+       if($c->config_data['activate_account'] == 'pending_approval')
        {
                $GLOBALS['phpgw']->db->query("DELETE FROM phpgw_reg_accounts 
WHERE reg_dla <= '"
+               . (time() - 7200) . "' AND reg_info IS 
NULL",__LINE__,__FILE__);        
+       }
+       else
+       {
+               $GLOBALS['phpgw']->db->query("DELETE FROM phpgw_reg_accounts 
WHERE reg_dla <= '"
                . (time() - 7200) . "'",__LINE__,__FILE__);
        }

Added: trunk/registration/js/yahoo/common.js
===================================================================
--- trunk/registration/js/yahoo/common.js                               (rev 0)
+++ trunk/registration/js/yahoo/common.js       2012-04-09 17:07:12 UTC (rev 
9106)
@@ -0,0 +1,776 @@
+YAHOO.namespace('portico');
+
+YAHOO.portico.js_alias_method_chain = function(constructor_func, func_name, 
new_feature_name, feature_impl_func) {
+       constructor_func.prototype[func_name+'_without_'+new_feature_name] = 
constructor_func.prototype[func_name];
+       constructor_func.prototype[func_name+'_with_'+new_feature_name] = 
feature_impl_func;
+       constructor_func.prototype[func_name] = 
constructor_func.prototype[func_name+'_with_'+new_feature_name];
+};
+
+YAHOO.portico.lang = function(section, config) {
+       config = config || {};
+       if (YAHOO && YAHOO.portico && YAHOO.portico.i18n && 
YAHOO.portico.i18n[section]) {
+               YAHOO.portico.i18n[section](config);
+       }
+       return config;
+};
+
+/** Hook widgets to translations **/
+YAHOO.portico.js_alias_method_chain(YAHOO.widget.Calendar, 'init', 'i18n', 
function(id, container, config) {
+       YAHOO.portico.lang('Calendar', config);
+       return this.init_without_i18n(id, container, config);
+});
+
+YAHOO.portico.js_alias_method_chain(YAHOO.widget.DataTable, '_initConfigs', 
'i18n', function(config) {
+       YAHOO.portico.lang('DataTable', config);
+       return this._initConfigs_without_i18n(config);
+});
+
+function y2k(number) { return (number < 1000) ? number + 1900 : number; }
+YAHOO.portico.weeknumber = function(when) {
+       var year = when.getFullYear();
+       var month = when.getMonth();
+       var day = when.getDate();
+
+       var newYear = new Date(year,0,1);
+       var modDay = newYear.getDay();
+       if (modDay == 0) modDay=6; else modDay--;
+
+       var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) 
- Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1;
+
+  if (modDay < 4 ) {
+       var weeknum = Math.floor((daynum+modDay-1)/7)+1;
+  } else {
+       var weeknum = Math.floor((daynum+modDay-1)/7);
+       if (weeknum == 0) {
+         year--;
+         var prevNewYear = new Date(year,0,1);
+         var prevmodDay = prevNewYear.getDay();
+         if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--;
+         if (prevmodDay < 4) weeknum = 53; else weeknum = 52;
+       }
+  }
+  return + weeknum;
+}
+
+parseISO8601 = function (string) {
+       var regexp = "(([0-9]{4})(-([0-9]{1,2})(-([0-9]{1,2}))))?( 
)?(([0-9]{1,2}):([0-9]{1,2}))?";
+       var d = string.match(new RegExp(regexp));
+       var year = d[2] ? (d[2] * 1) : 0;
+       date = new Date(year, (d[4]||1)-1, d[6]||0);
+       if(d[9])
+               date.setHours(d[9]);
+       if(d[10])
+               date.setMinutes(d[10]);
+       return date;
+};
+
+YAHOO.portico.serializeForm = function(formID) {
+       var form = YAHOO.util.Dom.get(formID);
+       var values = [];
+       for(var i=0; i < form.elements.length; i++) {
+               var e = form.elements[i];
+               if(e.type=='checkbox' || e.type=='radio') {
+                       if(e.checked) {
+                               values.push(e.name + '=' + 
encodeURIComponent(e.value));
+                       }
+               } 
+               else if(e.name) {
+                       values.push(e.name + '=' + encodeURIComponent(e.value));
+               }
+       }
+       return values.join('&');
+};
+
+YAHOO.portico.fillForm = function(formID, params) {
+       var form = YAHOO.util.Dom.get(formID);
+       var values = [];
+       for(var i=0; i < form.elements.length; i++) {
+               var e = form.elements[i];
+               if((e.type=='checkbox' || e.type=='radio') && params[e.name]) {
+                       e.checked = true;
+               } 
+               else if(e.name && params[e.name] != undefined) {
+                       e.value = params[e.name];
+                       if(e._update) { // Is this connected to a date picker?
+                               e._update();
+                       }
+               }
+       }
+       return values.join('&');
+};
+
+YAHOO.portico.parseQS = function(qs) {
+       qs = qs.replace(/\+/g, ' ');
+       var args = qs.split('&');
+       var params = {};
+       for (var i = 0; i < args.length; i++) {
+               var pair = args[i].split('=');
+               var name = decodeURIComponent(pair[0]);
+               var value = (pair.length==2) ? decodeURIComponent(pair[1]) : 
name;
+               params[name] = value;
+       }
+       return params;
+}
+
+YAHOO.portico.formatLink = function(elCell, oRecord, oColumn, oData) { 
+       var name = oRecord.getData(oColumn.key);
+       var link = oRecord.getData('link');
+       elCell.innerHTML = '<a href="' + link + '">' + name + '</a>'; 
+};
+
+YAHOO.portico.formatGenericLink = function(elCell, oRecord, oColumn, oData)
+{
+       var data = oRecord.getData(oColumn.key);
+       //console.log(data['href']);
+       var link = data['href'];
+       var name = data['label'];
+       
+       elCell.innerHTML = '<a href="' + link + '">' + name + '</a>';
+};
+
+/*
+YAHOO.portico.formatGenericLink = function() {
+       var links = [];
+       var nOfLinks = arguments.length;
+
+       for (var i=0; i < nOfLinks; i++) { links[i] = arguments[i]; }
+       
+       return function(elCell, oRecord, oColumn, oData)
+       {
+               var nOfLinks = links.length;
+               var data = oRecord.getData(oColumn.key);
+               
+               var linksHtml = '';
+               if (nOfLinks > 0) {
+                       //Use specified link names
+                       for (var i=0; i < nOfLinks; i++) {
+                               if (data[i])
+                               {
+                                       linksHtml += '<div><a href="' + data[i] 
+ '">' + links[i] + '</a></div>';
+                               }
+                       }
+               } else {
+                       //Get label from embedded data
+                       if (data['href'] != undefined && data['label'] != 
undefined) {
+                               linksHtml += '<div><a href="' + data['href'] + 
'">' + data['label'] + '</a></div>';
+                       } else if(data['href'] == undefined && data['label'] != 
undefined) {
+                               linksHtml += '<div>'+data['label']+'</div>';
+                       }
+               }
+               
+               elCell.innerHTML = linksHtml;
+       };
+};
+*/
+YAHOO.portico.autocompleteHelper = function(url, field, hidden, container, 
label_attr) {
+       label_attr = label_attr || 'name';
+       var myDataSource = new YAHOO.util.DataSource(url);
+       myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+       myDataSource.connXhrMode = "queueRequests";
+       myDataSource.responseSchema = {
+               resultsList: "ResultSet.Result",
+               fields: [label_attr, 'id']
+       };
+       myDataSource.maxCacheEntries = 5; 
+       var ac = new YAHOO.widget.AutoComplete(field, container, myDataSource);
+       ac.queryQuestionMark = false;
+       ac.resultTypeList = false;
+       ac.forceSelection = true;
+       ac.itemSelectEvent.subscribe(function(sType, aArgs) {
+               YAHOO.util.Dom.get(hidden).value = aArgs[2].id;
+       });
+       return ac;
+};
+
+YAHOO.portico.setupInlineTablePaginator = function(container) {
+       var paginatorConfig = {
+               rowsPerPage: 10,
+               alwaysVisible: false,
+               template: "{PreviousPageLink} 
<strong>{CurrentPageReport}</strong> {NextPageLink}",
+               pageReportTemplate: "Showing items {startRecord} - {endRecord} 
of {totalRecords}",
+               containers: [YAHOO.util.Dom.get(container)]
+       };
+       
+       YAHOO.portico.lang('setupPaginator', paginatorConfig);
+       var pag = new YAHOO.widget.Paginator(paginatorConfig);
+   pag.render();
+       return pag;
+};
+
+YAHOO.portico.inlineTableHelper = function(container, url, colDefs, options, 
disablePagination) {
+       var Dom = YAHOO.util.Dom;
+       
+       var container = Dom.get(container);
+       if(!disablePagination) {
+               var paginatorContainer = 
container.appendChild(document.createElement('div'));
+               var dataTableContainer = 
container.appendChild(document.createElement('div'));
+       }
+       else {
+               dataTableContainer = container;
+       }
+       options = options || {};
+       options.dynamicData = true;
+       
+       if(!disablePagination) {
+               options.paginator = 
YAHOO.portico.setupInlineTablePaginator(paginatorContainer);
+               url += '&results=' + options.paginator.getRowsPerPage() + '&';
+       }
+       var myDataSource = new YAHOO.util.DataSource(url);
+       myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+       myDataSource.connXhrMode = "queueRequests";
+       myDataSource.responseSchema = {
+               resultsList: "ResultSet.Result",
+               metaFields : { totalResultsAvailable: 
"ResultSet.totalResultsAvailable", actions: 'Actions' }
+       };
+       
+       var myDataTable = new YAHOO.widget.DataTable(dataTableContainer, 
colDefs, myDataSource, options);
+       
+       myDataTable.handleDataReturnPayload = function(oRequest, oResponse, 
oPayload) {
+          oPayload.totalRecords = oResponse.meta.totalResultsAvailable;
+          return oPayload;
+   }
+       
+       myDataTable.doBeforeLoadData = function(nothing, data) {
+               if (!data.meta.actions) return data;
+               
+               actions = data.meta.actions;
+               
+               for (var key in actions) {
+                       var actionLink = document.createElement('a');
+                       actionLink.href = actions[key].href.replace(/&amp;/gi, 
'&');
+                       actionLink.innerHTML = actions[key].text;
+                       YAHOO.util.Dom.insertAfter(actionLink, container);
+               };
+               
+               return data;
+       };
+       return {dataTable: myDataTable, dataSource: myDataSource};
+};
+
+YAHOO.portico.inlineImages = function(container, url, options)
+{
+       options = options || {};
+       var myDataSource = new YAHOO.util.DataSource(url);
+       myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+       myDataSource.connXhrMode = "queueRequests";
+       myDataSource.responseSchema = {
+               resultsList: "ResultSet.Result",
+               metaFields : { totalResultsAvailable: 
"ResultSet.totalResultsAvailable", actions: 'Actions' }
+       };
+       
+       myDataSource.sendRequest('', {success: function(sRequest, oResponse, 
oPayload) {
+               var dlImages = new 
YAHOO.util.Element(document.createElement('dl'));
+               dlImages.addClass('proplist images');
+               
+               var displayContainer = false;
+               
+               for(var key in oResponse.results) { 
+                       displayContainer = true;
+                       var imgEl = 
dlImages.appendChild(document.createElement('dd')).appendChild(document.createElement('img'));
+                       var captionEl = 
dlImages.appendChild(document.createElement('dt'));
+                       imgEl.src = 
oResponse.results[key].src.replace(/&amp;/gi, '&');
+                       
captionEl.appendChild(document.createTextNode(oResponse.results[key].description));
+               }
+               
+               if (displayContainer)
+               {
+                       new YAHOO.util.Element(container).appendChild(dlImages);
+               } else {
+                       new YAHOO.util.Element(container).setStyle('display', 
'none');
+               }
+       }});
+};
+
+YAHOO.portico.radioTableHelper = function(container, url, name, selection) {
+       return YAHOO.portico.checkboxTableHelper(container, url, name, 
selection, {type: 'radio'});
+};
+
+YAHOO.portico.checkboxTableHelper = function(container, url, name, selection, 
options) {
+       options = YAHOO.lang.isObject(options) ? options : {};
+       
+       options = YAHOO.lang.merge(
+               {type: 'checkbox', selectionFieldOptions: {}, nameFieldOptions: 
{}, defaultChecked: false}, 
+               options
+       );
+       
+       var type = options['type'] || 'checkbox';
+       selection = selection || [];
+       var myDataSource = new YAHOO.util.DataSource(url);
+       myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;
+       myDataSource.connXhrMode = "queueRequests";
+       myDataSource.responseSchema = {
+               resultsList: "ResultSet.Result",
+               metaFields : { totalResultsAvailable: 
"ResultSet.totalResultsAvailable" }
+       };
+       
+       var lang = {LBL_NAME: 'Name'};
+       YAHOO.portico.lang('common', lang);
+       
+       var changeListener = false;
+       
+       if (options.onSelectionChanged) {
+               changeListener = function(e) {
+                       var selectedItems = [];
+                       var items = 
YAHOO.util.Dom.getElementsBy(function(i){return i.checked;}, 'input', 
container);
+                       
+                       YAHOO.util.Dom.batch(items, function(e, selectedItems) {
+                               selectedItems.push(e.value);
+                       }, selectedItems);
+                       
+                       options.onSelectionChanged(selectedItems);
+               };
+       }
+       
+       var checkboxFormatter = function(elCell, oRecord, oColumn, oData) { 
+               var checked = false;
+               var newInput; 
+               for(var i=0; i < selection.length; i++) {
+                       if (selection[i] == oData) {
+                               checked = true;
+                               break;
+                       }
+               }
+               
+               newInput = document.createElement('input');
+               newInput.setAttribute('type', type);
+               newInput.setAttribute('name', name);
+               newInput.setAttribute('value', oData);
+               if (checked || options.defaultChecked) {
+                       newInput.setAttribute('checked', 'checked');
+                       newInput.setAttribute('defaultChecked', true); //Needed 
for IE compatibility
+               }
+               
+               if (changeListener != false) {
+                       //Using 'click' event on IE as the change event does 
not work as expected there.
+                       YAHOO.util.Event.addListener(newInput, (YAHOO.env.ua.ie 
> 0 ? 'click' : 'change'), changeListener);
+               }
+               
+               elCell.appendChild(newInput);
+               
+       };
+       var colDefs = [
+               YAHOO.lang.merge({key: "id", formatter: checkboxFormatter, 
label: ''}, options.selectionFieldOptions),
+               YAHOO.lang.merge({key: "name", label: lang['LBL_NAME'], 
sortable: true}, options.nameFieldOptions)
+       ];
+       
+       if (options['additional_fields'] && 
YAHOO.lang.isArray(options['additional_fields'])) {
+               for (var i=0; i < options['additional_fields'].length; i++) {
+                       colDefs.push(options['additional_fields'][i]);
+               }
+       }
+       
+       var myDataTable = new YAHOO.widget.DataTable(container, colDefs, 
myDataSource, {
+          sortedBy: {key: 'name', dir: YAHOO.widget.DataTable.CLASS_ASC}
+       });
+};
+
+YAHOO.portico.setupDatePickers = function() { 
+       YAHOO.util.Dom.getElementsByClassName('date-picker', null, null, 
YAHOO.portico.setupDatePickerHelper, [true, false]);
+       YAHOO.util.Dom.getElementsByClassName('time-picker', null, null, 
YAHOO.portico.setupDatePickerHelper, [false, true]);
+       YAHOO.util.Dom.getElementsByClassName('datetime-picker', null, null, 
YAHOO.portico.setupDatePickerHelper, [true, true]);
+};
+
+YAHOO.portico.setupDatePickerHelper = function(field, args) {
+       if (!YAHOO.portico.setupDatePickerHelper.groups) {
+               YAHOO.portico.setupDatePickerHelper.groups = {};
+       }
+       
+       var groups = YAHOO.portico.setupDatePickerHelper.groups;
+       var Dom = YAHOO.util.Dom;
+       
+       if(field._converted)
+               return;
+       field._converted = true;
+       var date = args[0];
+       var time = args[1];
+       var Dom = YAHOO.util.Dom;
+       var Event = YAHOO.util.Event;
+       var oCalendarMenu = new YAHOO.widget.Overlay(Dom.generateId(), { 
visible: false});
+       var oButton = new YAHOO.widget.Button({type: "menu", id: 
Dom.generateId(), menu: oCalendarMenu, container: field});
+       
+       oButton.with_time = time;
+       oButton.with_date = date;
+       
+       var lang = {LBL_CHOOSE_DATE: 'Choose a date'};
+       YAHOO.portico.lang('setupDatePickerHelper', lang);
+       
+       oButton._calendarMenu = oCalendarMenu;
+       oButton._input = field._input = Dom.getElementsBy(function(){return 
true;}, 'input', field)[0];
+       
+       oButton.hasDateSection = function() { return this.with_date; };
+       oButton.hasTimeSection = function() { return this.with_time; };
+       
+       oButton.fireUpdateEvent = function() {
+               if (oButton.on_update) {
+                       oButton.on_update.func.call(oButton.on_update.context, 
oButton);
+               }
+       };
+       
+       oButton.on("appendTo", function () {
+               this._calendarMenu.setBody(" ");
+               this._calendarMenu.body.id = Dom.generateId();
+       });
+       if(!date)
+               oButton.setStyle('display', 'none');
+       //oButton._input.setAttribute('type', 'hidden');
+       oButton._input.style.display = 'none';
+       if(oButton._input.value)
+               oButton._date = parseISO8601(oButton._input.value);
+       else
+               oButton._date = new Date(1, 1, 1);
+       oButton._input._update = function() {
+               if(oButton._input.value)
+                       oButton._date = parseISO8601(oButton._input.value);
+               else
+                       oButton._date = new Date(1, 1, 1);
+               oButton._update(false);
+       };
+       oButton._update = function(fire_update_event) {
+               var year = this._date.getFullYear();
+               var month = this._date.getMonth() + 1;
+               var day = this._date.getDate();
+               var hours = this._date.getHours();
+               var minutes = this._date.getMinutes();
+               var month = month < 10 ? '0' + month : '' + month;
+               var day = day < 10 ? '0' + day : '' + day;
+               var hours = hours < 10 ? '0' + hours : '' + hours;
+               var minutes = minutes  < 10 ? '0' + minutes : '' + minutes;
+               var dateValue = year + '-' + month + '-' + day;
+               var timeValue = hours + ':' + minutes;
+               if(year == 1901) {
+                       this.set('label', lang.LBL_CHOOSE_DATE);
+               } else {
+                       this.set('label', dateValue);
+               }
+               if(time) {
+                       this._hours.set('value', parseInt(hours, 10));
+                       this._minutes.set('value', parseInt(minutes, 10));
+                       this._hours.update();
+                       this._minutes.update();
+               }
+               if(year != 1901 && date && time)
+                       this._input.value = dateValue + ' ' + timeValue;
+               else if (year != 1901 && date)
+                       this._input.value = dateValue;
+               else if(!date && time)
+                       this._input.value = timeValue;
+               
+               if (fire_update_event) {
+                       oButton.fireUpdateEvent();
+               }
+       };
+       
+       oButton.getDate = function() {
+               return this._date;
+       };
+
+       oButton.on("click", function () {
+               YAHOO.widget.DateMath.WEEK_ONE_JAN_DATE = 4;
+               var oCalendar = new YAHOO.widget.Calendar(Dom.generateId(), 
this._calendarMenu.body.id, {START_WEEKDAY: 1,SHOW_WEEK_HEADER:true});
+               oCalendar._button = this;
+               if(this._date.getFullYear() == 1901) {
+                       var d = new Date();
+                       oCalendar.cfg.setProperty("pagedate", (d.getMonth()+1) 
+ "/" + d.getFullYear());
+               } else {
+                       oCalendar.select(this._date);
+                       oCalendar.cfg.setProperty("pagedate", 
(this._date.getMonth()+1) + "/" + this._date.getFullYear());
+               }
+               
+               oCalendar.render();
+               // Hide date picker on ESC
+               Event.on(this._calendarMenu.element, "keydown", function 
(p_oEvent) {
+                       if (Event.getCharCode(p_oEvent) === 27) {
+                               this._calendarMenu.hide();
+                               this.focus();
+                       }
+               }, null, this);
+               oCalendar.selectEvent.subscribe(function (p_sType, p_aArgs) {
+                       if (p_aArgs) {
+                               var aDate = p_aArgs[0][0];
+                               this._date.setFullYear(aDate[0]);
+                               this._date.setMonth(aDate[1]-1);
+                               this._date.setDate(aDate[2]);
+                               this._update(true);
+                               //this._input.value = value;
+                       }
+                       this._calendarMenu.hide();
+               }, this, true);
+       });
+       if(time) {
+               oButton._hours = new YAHOO.portico.InputNumberRange({min: 0, 
max:23});
+               oButton._minutes = new YAHOO.portico.InputNumberRange({min: 0, 
max:59});
+               
+               oButton._hours.on('updateEvent', function() {
+                       oButton._date.setHours(this.get('value'));
+                       oButton._update(true);
+               });
+               
+               oButton._minutes.on('updateEvent', function() {
+                       oButton._date.setMinutes(this.get('value'));
+                       oButton._update(true);
+               });
+               
+               oButton.on("appendTo", function () {
+                       var timePicker = 
Dom.get(field).appendChild(document.createElement('span'));
+                       Dom.addClass(timePicker, 'time-picker-inputs');
+                       timePicker.appendChild(document.createTextNode(' '));
+                       oButton._hours.render(timePicker);
+                       timePicker.appendChild(document.createTextNode(' : '));
+                       oButton._minutes.render(timePicker);
+                       oButton._update(false);
+               });
+       }
+       oButton._update(false);
+       
+       var id = Dom.getAttribute(oButton._input, 'id');
+       var matches = /^([a-zA-Z][\w0-9\-_.:]+)_(from|to)$/.exec(id);
+       
+       var group_name = matches ? matches[1] : false;
+       var from_to = matches ? matches[2] : false;
+       
+       if (group_name && from_to && oButton.hasDateSection()) {
+               if (!groups[group_name]) { groups[group_name] = {}; }
+               
+               groups[group_name][from_to] = oButton;
+
+               if (groups[group_name]['from'] && groups[group_name]['to']) {
+                       groups[group_name]['from'].on_update = {
+                               context: groups[group_name]['to'], 
+                               func: function(fromDateButton) {
+                                       var fromDate = fromDateButton.getDate();
+                                       var currentYear = 
this._date.getFullYear();
+                                       
+                                       if (this._date.getFullYear() == 1901) {
+                                               
this._date.setFullYear(fromDate.getFullYear());
+                                               
this._date.setMonth(fromDate.getMonth());
+                                               
this._date.setDate(fromDate.getDate());
+                                       } else if (fromDate.getFullYear() <= 
this._date.getFullYear() && fromDate.getMonth() <= this._date.getMonth() && 
fromDate.getDate() <= this._date.getDate()) {
+                                               //this._date.
+                                       }
+                               
+                                       this._update(false);
+                               }
+                       };
+                       
+                       delete groups[group_name];
+               }
+       }
+};
+
+// Executed on all portico.uicommon-based pages
+YAHOO.util.Event.addListener(window, "load", function() {
+       YAHOO.portico.setupDatePickers(); 
+});
+var showIfNotEmpty = function(event, fieldname) {
+       if (document.getElementById(fieldname).value.length > 1) {
+               YAHOO.util.Dom.replaceClass(fieldname + "_edit", "hideit", 
"showit");
+       } else {
+               YAHOO.util.Dom.replaceClass(fieldname + "_edit", "showit", 
"hideit");
+       }
+};
+
+YAHOO.portico.rtfEditorHelper = function(textarea_id, options) {
+       options = YAHOO.lang.merge({width:522, height:300}, (options || {}));
+       var descEdit = new YAHOO.widget.SimpleEditor(textarea_id, {
+               height: options.height+'px',
+               width: options.width+'px',
+               dompath: true,
+               animate: true,
+               handleSubmit: true
+       });
+       descEdit.render();
+       return descEdit;
+};
+
+YAHOO.portico.postToUrl = function(path, params, method) {
+       method = method || "post"; // Set method to post by default, if not 
specified.
+       var form = document.createElement("form");
+       form.setAttribute("method", method);
+       form.setAttribute("action", path);
+
+       for(var key in params) {
+               var hiddenField = document.createElement("input");
+               hiddenField.setAttribute("type", "hidden");
+               hiddenField.setAttribute("name", params[key][0]);
+               hiddenField.setAttribute("value", params[key][1]);
+               form.appendChild(hiddenField);
+       }
+       document.body.appendChild(form);        // Not entirely sure if this is 
necessary
+       form.submit();
+};
+
+(function(){
+       var Dom = YAHOO.util.Dom,
+               Event = YAHOO.util.Event,
+               Panel = YAHOO.widget.Panel,
+               Lang = YAHOO.lang;
+
+       var CSS_PREFIX = 'portico_number_range_';
+ 
+       var InputNumberRange = function(oConfigs) {
+               InputNumberRange.superclass.constructor.call(this, 
document.createElement('span'), oConfigs);
+               this.createEvent('updateEvent');
+               this.refresh(['id'],true);
+       };
+
+       YAHOO.portico.InputNumberRange = InputNumberRange;
+
+       Lang.extend(InputNumberRange, YAHOO.util.Element, {
+               initAttributes: function (oConfigs) { 
+                       InputNumberRange.superclass.initAttributes.call(this, 
oConfigs);
+                       
+                       var container = this.get('element');
+               
+                       this.setAttributeConfig('inputEl', {
+                               readOnly: true,
+                               value: 
container.appendChild(document.createElement('span'))
+                       });
+       
+                       this.setAttributeConfig('id', {
+                               writeOnce: true,
+                               validator: function (value) {
+                                       return 
/^[a-zA-Z][\w0-9\-_.:]*$/.test(value);
+                               },
+                               value: Dom.generateId(),
+                               method: function (value) {
+                                       this.get('inputEl').id = value;
+                               }
+                       });
+       
+                       this.setAttributeConfig('value', {
+                               value: 0,
+                               validator: Lang.isNumber
+                 });
+               
+                       this.setAttributeConfig('input', {
+                               value: null
+                 });
+               
+                       this.setAttributeConfig('min', {
+                               validator: Lang.isNumber,
+                               value: 100
+                 });
+               
+                       this.setAttributeConfig('max', {
+                               validator: Lang.isNumber,
+                               value: 0
+                       });
+               
+                       this.setAttributeConfig('input_length', {
+                               validator: Lang.isNumber,
+                               value: null
+                       });
+               },
+       
+               destroy: function () { 
+                       var el = this.get('element');
+                       Event.purgeElement(el, true);
+                       el.parentNode.removeChild(el);
+               },
+               
+               _padValue: function(value)
+               {
+                       value = value.toString('10');
+                       var padding = this.get('input_length') - value.length;
+                       if (padding > 0) {
+                               return ((new Array(padding+1).join('0')) + 
value);
+                       }
+                       return value;
+               },
+               
+               _updateValue: function() {
+                       var input = this.get('input');
+                       var value;
+                       
+                       if (input.value.length > 0) {
+                               value = parseInt(input.value, 10);
+                       } else {
+                               value = 0;
+                       }
+                               
+                       if (isNaN(value)) { 
+                               value = this.get('min');
+                       }
+                       
+                       if (value < this.get('min')) {
+                               value = this.get('min');
+                       }
+                       
+                       if (value > this.get('max')) {
+                               value = this.get('max');
+                       }
+                       
+                       this.set('value', value);
+               },
+               
+               _fireUpdateEvent: function()
+               {
+                       this._updateValue();
+                       this.update();
+                       
+                       this.fireEvent('updateEvent');
+               },
+               
+               update: function() {
+                       if (!this.get('input')) { return; }
+                       this.get('input').value = 
this._padValue(this.get('value'));
+               },
+               
+               render: function (parentEl) {
+                       parentEl = Dom.get(parentEl);
+               
+                       if (!parentEl) {
+                               YAHOO.log('Missing mandatory argument in 
YAHOO.portico.InputNumberRange.render:  parentEl','error','Field');
+                               return null;
+                 }
+               
+                       var containerEl = this.get('element');
+                       this.addClass(CSS_PREFIX + 'container');
+               
+                       var inputEl = this.get('inputEl');
+                       Dom.addClass(inputEl, CSS_PREFIX + 'input');
+               
+                       this._renderInputEl(inputEl);
+               
+                       parentEl.appendChild(containerEl); //Appends to 
document to show the component
+               },
+               
+               _renderInputEl: function (containerEl) { 
+                       var input = 
containerEl.appendChild(document.createElement('input'));
+               
+                       if (!this.get('input_length')) {
+                               this.set('input_length', 
this.get('max').toString().length);
+                       }
+               
+                       var size = this.get('input_length');
+                       input.setAttribute('size', size);
+                       input.setAttribute('maxlength', size);
+                       
+                       if (YAHOO.env.ua.ie > 6) {
+                               YAHOO.util.Dom.setStyle(input, 'width', '2em');
+                       }
+                       
+                       input.value = this._padValue(this.get('value'));
+               
+                       this.set('input', input);
+               
+                       Event.on(input,'keyup', function (oArgs) {
+                               this._updateValue();
+                               }, this, true);
+               
+                       Event.on(input, 'change', function(oArgs) {
+                               this._fireUpdateEvent();
+                       }, this, true);
+                       
+                       oForm = input.form;
+                       
+                       if (oForm) {
+                               Event.on(oForm, "submit", function() {
+                                       this._fireUpdateEvent();
+                               }, null, this);
+                       }
+                       
+               }
+       });
+
+})();

Modified: trunk/registration/js/yahoo/pending.index.js
===================================================================
--- trunk/registration/js/yahoo/pending.index.js        2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/js/yahoo/pending.index.js        2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -4,7 +4,7 @@
        formatLinkPending = function(elCell, oRecord, oColumn, oData)
        {
                var id = oRecord.getData(oColumn.key);
-               elCell.innerHTML = '<a href="' + edit_Url + '&id=' + id + 
'">Link</a>'; 
+               elCell.innerHTML = '<a href="' + edit_Url + '&id=' + id + '">' 
+ lang['edit'] + '</a>'; 
        };
 
 

Modified: trunk/registration/main.php
===================================================================
--- trunk/registration/main.php 2012-04-04 12:05:27 UTC (rev 9105)
+++ trunk/registration/main.php 2012-04-09 17:07:12 UTC (rev 9106)
@@ -35,6 +35,31 @@
                'noapi'         => true         // this stops header.inc.php to 
include phpgwapi/inc/function.inc.php
     );
     
+
+       $legal_anonymous_access = array
+       (
+               'registration' => array
+               (
+                       'uireg' => array
+                       (
+                               'step1'                         => true,
+                               'tos'                           => true,
+                               'ready_to_activate'     => true,
+                               'email_sent_lostpw'     => true
+                       ),
+                       'boreg' => array
+                       (
+                               'step1'                         => true,
+                               'step2'                         => true,
+                               'step4'                         => true,
+                               'lostpw1'                       => true,
+                               'lostpw2'                       => true,
+                               'lostpw3'                       => true
+                       )
+               )
+       );
+
+
     $GLOBALS['phpgw_info']['flags']['session_name'] = 'registration_session';
        $GLOBALS['phpgw_remote_user_fallback'] = 'sql';
        include_once('../header.inc.php');
@@ -208,7 +233,22 @@
        }
        $GLOBALS[$class] = CreateObject("{$app}.{$class}");
 
-       $invalid_data = false; //FIXME consider whether this should be computed 
as in the main index.php
+       $invalid_data = false;
+
+       if(!isset($legal_anonymous_access[$app][$class][$method]))
+       {
+               $invalid_data = true;
+
+               $GLOBALS['phpgw']->log->message(array(
+                       'text' => "W-BadmenuactionVariable, attempted to access 
private method as anonymous: {$app}.{$class}.{$method}",
+                       'line' => __LINE__,
+                       'file' => __FILE__
+               ));
+               $GLOBALS['phpgw']->log->commit();
+               echo "This method is not alloved from this application as 
anonymous: {$app}.{$class}.{$method}";
+
+       }
+
        if ( !$invalid_data 
                && is_object($GLOBALS[$class])
                && isset($GLOBALS[$class]->public_functions) 
@@ -234,4 +274,4 @@
                        $GLOBALS['phpgw']->common->phpgw_footer();
                }
        }
-
+       $GLOBALS['phpgw']->common->phpgw_footer();

Modified: trunk/registration/setup/default_records.inc.php
===================================================================
--- trunk/registration/setup/default_records.inc.php    2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/setup/default_records.inc.php    2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -26,4 +26,3 @@
        $GLOBALS['phpgw_setup']->oProc->query ("INSERT INTO phpgw_config 
(config_app, config_name, config_value) VALUES 
('registration','activate_account','email')");
        $GLOBALS['phpgw_setup']->oProc->query ("INSERT INTO phpgw_config 
(config_app, config_name, config_value) VALUES 
('registration','username_is','choice')");
        $GLOBALS['phpgw_setup']->oProc->query ("INSERT INTO phpgw_config 
(config_app, config_name, config_value) VALUES 
('registration','password_is','choice')");
-?>

Modified: trunk/registration/setup/setup.inc.php
===================================================================
--- trunk/registration/setup/setup.inc.php      2012-04-04 12:05:27 UTC (rev 
9105)
+++ trunk/registration/setup/setup.inc.php      2012-04-09 17:07:12 UTC (rev 
9106)
@@ -16,7 +16,7 @@
 
        /* Basic information about this app */
        $setup_info['registration']['name']                     = 
'registration';
-       $setup_info['registration']['version']          = '0.8.3';
+       $setup_info['registration']['version']          = '0.8.4';
        $setup_info['registration']['app_order']        = '90';
        $setup_info['registration']['enable']           = 2;
        $setup_info['registration']['app_group']        = 'other';

Modified: trunk/registration/setup/tables_current.inc.php
===================================================================
--- trunk/registration/setup/tables_current.inc.php     2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/setup/tables_current.inc.php     2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -21,7 +21,7 @@
                        'fd' => array(
                                'reg_id' => array('type' => 'varchar', 
'precision' => 32,'nullable' => False),
                                'reg_lid' => array('type' => 'varchar', 
'precision' => 255,'nullable' => False),
-                               'reg_info' => array('type' => 'text','nullable' 
=> False),
+                               'reg_info' => array('type' => 'text','nullable' 
=> true),
                                'reg_dla' => array('type' => 'int', 'precision' 
=> 4,'nullable' => False),
                                'reg_approved' => array('type' => 'int', 
'precision' => 2,'nullable' => true)
                        ),

Modified: trunk/registration/setup/tables_update.inc.php
===================================================================
--- trunk/registration/setup/tables_update.inc.php      2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/setup/tables_update.inc.php      2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -46,3 +46,17 @@
                        return 
$GLOBALS['setup_info']['registration']['currentver'];
                }
        }
+
+       $test[] = '0.8.3';
+       function registration_upgrade0_8_3()
+       {
+               $GLOBALS['phpgw_setup']->oProc->m_odb->transaction_begin();
+
+               
$GLOBALS['phpgw_setup']->oProc->AlterColumn('phpgw_reg_accounts','reg_info',array('type'
 => 'text','nullable' => True));
+
+               if($GLOBALS['phpgw_setup']->oProc->m_odb->transaction_commit())
+               {
+                       $GLOBALS['setup_info']['registration']['currentver'] = 
'0.8.4';
+                       return 
$GLOBALS['setup_info']['registration']['currentver'];
+               }
+       }       

Modified: trunk/registration/templates/base/common.xsl
===================================================================
--- trunk/registration/templates/base/common.xsl        2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/templates/base/common.xsl        2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -7,23 +7,23 @@
 <![CDATA[
 
 /**
- * Javascript for the controller module.  Holds datasource init functions and 
form helpers.
+ * Javascript for the regitration module.  Holds datasource init functions and 
form helpers.
  *
- * Functions and objects within this file are kept in the YAHOO.controller 
namespace.
+ * Functions and objects within this file are kept in the YAHOO.portico 
namespace.
  */
 
-       YAHOO.namespace('controller');
+       YAHOO.namespace('portico');
 
        // Holds data source setup funtions
-       YAHOO.controller.setupDatasource = new Array();
+       YAHOO.portico.setupDatasource = new Array();
 
        //Holds all data sources
-       YAHOO.controller.datatables = new Array();
+       YAHOO.portico.datatables = new Array();
 
        counter = 0;
        // Adds data source setup funtions
        function setDataSource(source_url, column_defs, form_id, filter_ids, 
container_id, paginator_id, datatable_id,rel_id, editor_action, 
disable_left_click) {
-               YAHOO.controller.setupDatasource.push(
+               YAHOO.portico.setupDatasource.push(
                        function() {
                                this.url = source_url;
                                this.columns = column_defs;
@@ -56,8 +56,8 @@
                
selected_datatable.getDataSource().sendRequest('',{success:loaded, 
scope:selected_datatable});
                
                //... traverse all datatables and refresh related (to the 
selected) data tables
-               for(var i=0; i<YAHOO.controller.datatables.length; i++){
-                       var datatable = YAHOO.controller.datatables[i];
+               for(var i=0; i<YAHOO.portico.datatables.length; i++){
+                       var datatable = YAHOO.portico.datatables[i];
 
                        for(var j=0;j<selected_datatable.related.length;j++){
                                var curr_related = 
selected_datatable.related[j];
@@ -128,7 +128,7 @@
                this.table.editor_action = this.properties.editor_action;
 
                //... push the data table on a stack
-               YAHOO.controller.datatables.push(this.table);
+               YAHOO.portico.datatables.push(this.table);
 
                //... ?
                this.table.handleDataReturnPayload = function(oRequest, 
oResponse, oPayload) {
@@ -369,10 +369,10 @@
        // Set up data sources when the document has loaded
        YAHOO.util.Event.addListener(window, "load", function() {
                var i = 0; 
-               while(YAHOO.controller.setupDatasource.length > 0){
+               while(YAHOO.portico.setupDatasource.length > 0){
                        //... create a variable name, assign set up function to 
that variable and instantiate properties
-                       variableName = "YAHOO.controller.datasource" + i;
-                       eval(variableName + " = 
YAHOO.controller.setupDatasource.shift()");
+                       variableName = "YAHOO.portico.datasource" + i;
+                       eval(variableName + " = 
YAHOO.portico.setupDatasource.shift()");
                        var source_properties = eval("new " + variableName + 
"()");
 
 ]]>
@@ -402,7 +402,7 @@
                        <?php
                                $populate = phpgw::get_var('populate_form');
                                if(isset($populate)){?>
-                                       var qs = 
YAHOO.controller.serializeForm(source_properties.form);
+                                       var qs = 
YAHOO.portico.serializeForm(source_properties.form);
                                        this.wrapper.source.liveData = 
this.wrapper.url + qs + '&';
                                        this.wrapper.source.sendRequest('', 
{success: function(sRequest, oResponse, oPayload) {
                                                
this.wrapper.table.onDataReturnInitializeTable(sRequest, oResponse, 
this.wrapper.paginator);
@@ -464,7 +464,7 @@
                                myDlg.show();
                        };
 
-                       var storeColumnsUrl = YAHOO.controller.storeColumnsUrl;
+                       var storeColumnsUrl = YAHOO.portico.storeColumnsUrl;
                        var hideDlg = function(e) {
                                this.hide();
                                // After we've hidden the dialog we send a post 
call to store the columns the user has selected

Modified: trunk/registration/templates/base/pending_users.xsl
===================================================================
--- trunk/registration/templates/base/pending_users.xsl 2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/templates/base/pending_users.xsl 2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -30,6 +30,9 @@
 </xsl:template>
 
 <xsl:template name="pending_users" xmlns:php="http://php.net/xsl";>
+       <script type="text/javascript">
+               var lang = <xsl:value-of select="php:function('js_lang', 
'edit')"/>;
+       </script>
        <!-- IMPORTANT!!! Loads YUI javascript -->
        <xsl:call-template name="common"/>
 
@@ -103,9 +106,9 @@
 
 <xsl:template name="datasource-definition" xmlns:php="http://php.net/xsl";>
        <script>
-               YAHOO.namespace('controller');
+               YAHOO.namespace('portico');
         
-               YAHOO.controller.columnDefs = [
+               YAHOO.portico.columnDefs = [
                                <xsl:for-each select="//datatable/field">
                                        {
                                                key: "<xsl:value-of 
select="key"/>",
@@ -125,7 +128,7 @@
                        ];
 
                var main_source = '<xsl:value-of select="source"/>';
-               var main_columnDefs = YAHOO.controller.columnDefs;
+               var main_columnDefs = YAHOO.portico.columnDefs;
                var main_form = 'queryForm';
                var main_filters = ['status_id', 'responsibility_roles_list'];
                var main_container = 'datatable-container';

Modified: trunk/registration/templates/base/user_edit.xsl
===================================================================
--- trunk/registration/templates/base/user_edit.xsl     2012-04-04 12:05:27 UTC 
(rev 9105)
+++ trunk/registration/templates/base/user_edit.xsl     2012-04-09 17:07:12 UTC 
(rev 9106)
@@ -2,16 +2,19 @@
 <!-- item  -->
 
 <xsl:template match="data" xmlns:php="http://php.net/xsl";>
-
 <xsl:call-template name="yui_phpgw_i18n"/>
 <div class="identifier-header">
 <h1><img src="{img_go_home}" /> 
                <xsl:value-of select="php:function('lang', 'edit user')" />
 </h1>
 </div>
+       <div class="yui-navset yui-navset-top" id="edit_user_tabview">
+               <xsl:value-of disable-output-escaping="yes" select="tabs" />
+
+                       <form action="#" method="post" name="form">
        <div class="yui-content">
-               <div id="details">
-                       <form action="#" method="post" name="form">
+               <div id="main">
+
                                <input type="hidden" name="id" value = 
"{value_id}">
                                </input>
                                <table>
@@ -56,17 +59,159 @@
                                                </td>
                                        </tr>
                                </table>
+               </div>
+                                               <div id="groups">
+                                                       <h2><xsl:value-of 
select="php:function('lang', 'groups')" /></h2>
+                                                       <ul class="group_list">
+                                                               
<xsl:apply-templates select="group_list" />
+                                                       </ul>
+                                               </div>
+                                               <div id="apps">
+                                                       <h2><xsl:value-of 
select="php:function('lang', 'applications')" /></h2>
+                                                       <table class="app_list">
+                                                               <thead>
+                                                                       <tr>
+                                                                               
<th>
+                                                                               
        <xsl:value-of select="php:function('lang', 'Application')" />
+                                                                               
</th>
+                                                                               
<th>
+                                                                               
        <xsl:value-of select="php:function('lang', 'User access')" />
+                                                                               
</th>
+                                                                               
<th>
+                                                                               
        <xsl:value-of select="php:function('lang', 'Admin')" />
+                                                                               
</th>
+                                                                       </tr>
+                                                               </thead>
+                                                               <tbody>
+                                                                       
<xsl:apply-templates select="app_list" />
+                                                               </tbody>
+                                                       </table>
+                                               </div>
+
+                       </div>
                                <div class="form-buttons">
                                        <xsl:variable 
name="lang_save"><xsl:value-of select="php:function('lang', 'save')" 
/></xsl:variable>
                                        <xsl:variable 
name="lang_cancel"><xsl:value-of select="php:function('lang', 'cancel')" 
/></xsl:variable>
+                                       <xsl:variable 
name="lang_delete"><xsl:value-of select="php:function('lang', 'delete')" 
/></xsl:variable>
                                        <input type="submit" name="save" 
value="{$lang_save}" title = "{$lang_save}" />
+                                       <input type="submit" name="delete" 
value="{$lang_delete}" title = "{$lang_delete}" />
                                        <input type="submit" name="cancel" 
value="{$lang_cancel}" title = "{$lang_cancel}" />
                                </div>
-                       </form>                 
-               </div>
+
+                       </form>
        </div>
 </xsl:template>
        
+<!-- BEGIN group_list -->
+       <xsl:template match="group_list">
+               <li>
+                       <xsl:attribute name="class">
+                               <xsl:choose>
+                                       <xsl:when test="position() mod 2 = 0">
+                                               <xsl:text>row_off</xsl:text>
+                                       </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:text>row_on</xsl:text>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+                       </xsl:attribute>
+                       <xsl:choose>
+                               <xsl:when test="i_am_admin = 1">
+                                       <input type="checkbox" 
id="account_groups{account_id}" name="account_groups[]" value="{account_id}">
+                                               <xsl:if test="checked = 1">
+                                                       <xsl:attribute 
name="checked" value="checked" />
+                                               </xsl:if>
+                                       </input>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <input type="checkbox" readonly='true'>
+                                               <xsl:if test="checked = 1">
+                                                       <xsl:attribute 
name="checked" value="checked" />
+                                               </xsl:if>
+                                       </input>
+                                       <input type="hidden" 
id="account_groups{account_id}" name="account_groups[]">
+                                               <xsl:if test="checked = 1">
+                                                       <xsl:attribute 
name="value">
+                                                               <xsl:value-of 
select="account_id"/>
+                                                       </xsl:attribute>
+                                               </xsl:if>
+                                       </input>
+                               </xsl:otherwise>
+                       </xsl:choose>
+
+                       <xsl:value-of select="account_lid"/>
+               </li>
+       </xsl:template>
+
+<!-- BEGIN app_list -->
+
+       <xsl:template match="app_list">
+               <tr>
+                       <xsl:attribute name="class">
+                               <xsl:choose>
+                                       <xsl:when test="position() mod 2 = 0">
+                                               <xsl:text>row_off</xsl:text>
+                                       </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:text>row_on</xsl:text>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+                       </xsl:attribute>
+                       <td>
+                               <xsl:value-of select="app_title"/>
+
+                       </td>
+                       <xsl:choose>
+                               <xsl:when test="i_am_admin = 1">
+                                       <td>
+                                               <input type="checkbox" 
id="{checkbox_name}" name="{checkbox_name}" value="1">
+                                                       <xsl:if test="checked = 
1">
+                                                               <xsl:attribute 
name="checked" value="checked" />
+                                                       </xsl:if>
+                                               </input>
+                                       </td>
+                                       <td>
+                                               <input type="checkbox" 
id="{checkbox_name_admin}" name="{checkbox_name_admin}" value="2">
+                                                       <xsl:if 
test="checked_admin = 1">
+                                                               <xsl:attribute 
name="checked" value="checked" />
+                                                       </xsl:if>
+                                               </input>
+                                       </td>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <td>
+                                               <input type="checkbox" 
readonly='true'>
+                                                       <xsl:if test="checked = 
1">
+                                                               <xsl:attribute 
name="checked" value="checked" />
+                                                       </xsl:if>
+                                               </input>
+                                               <input type="hidden" 
id="{checkbox_name}" name="{checkbox_name}">
+                                                       <xsl:if test="checked = 
1">
+                                                               <xsl:attribute 
name="value">
+                                                                       
<xsl:text>1</xsl:text>
+                                                               </xsl:attribute>
+                                                       </xsl:if>
+                                               </input>
+                                       </td>
+                                       <td>
+                                               <input type="checkbox" 
readonly='true'>
+                                                       <xsl:if 
test="checked_admin = 1">
+                                                               <xsl:attribute 
name="checked" value="checked" />
+                                                       </xsl:if>
+                                               </input>
+                                               <input type="hidden" 
id="{checkbox_name_admin}" name="{checkbox_name_admin}">
+                                                       <xsl:if 
test="checked_admin = 1">
+                                                               <xsl:attribute 
name="value">
+                                                                       
<xsl:text>2</xsl:text>
+                                                               </xsl:attribute>
+                                                       </xsl:if>
+                                               </input>
+                                       </td>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </tr>
+       </xsl:template>
+
 <xsl:template match="options">
        <option value="{id}">
                <xsl:if test="selected != 0">




reply via email to

[Prev in Thread] Current Thread [Next in Thread]