fmsystem-commits
[Top][All Lists]
Advanced

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

[Fmsystem-commits] [17152] booking/bookingfrontend: add delegates to org


From: sigurdne
Subject: [Fmsystem-commits] [17152] booking/bookingfrontend: add delegates to organizations
Date: Fri, 13 Oct 2017 13:51:21 -0400 (EDT)

Revision: 17152
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=17152
Author:   sigurdne
Date:     2017-10-13 13:51:21 -0400 (Fri, 13 Oct 2017)
Log Message:
-----------
booking/bookingfrontend: add delegates to organizations

Modified Paths:
--------------
    trunk/booking/inc/class.bocommon.inc.php
    trunk/booking/inc/class.menu.inc.php
    trunk/booking/inc/class.uigroup.inc.php
    trunk/booking/inc/class.uiorganization.inc.php
    trunk/booking/setup/phpgw_no.lang
    trunk/booking/setup/setup.inc.php
    trunk/booking/setup/tables_current.inc.php
    trunk/booking/setup/tables_update.inc.php
    trunk/bookingfrontend/inc/class.bouser.inc.php
    trunk/bookingfrontend/inc/class.uiorganization.inc.php
    trunk/bookingfrontend/inc/custom/default/Altinn2_Bergen_kommune.php
    trunk/bookingfrontend/inc/custom/default/MinId.php
    trunk/bookingfrontend/templates/base/organization.xsl

Added Paths:
-----------
    trunk/booking/inc/class.bodelegate.inc.php
    trunk/booking/inc/class.sodelegate.inc.php
    trunk/booking/inc/class.sopermission_delegate.inc.php
    trunk/booking/inc/class.uidelegate.inc.php
    trunk/booking/js/booking/delegate_new.js
    trunk/booking/templates/base/delegate.xsl
    trunk/booking/templates/base/delegate_edit.xsl
    trunk/bookingfrontend/inc/class.uidelegate.inc.php
    trunk/bookingfrontend/templates/base/delegate.xsl
    trunk/bookingfrontend/templates/base/delegate_edit.xsl

Modified: trunk/booking/inc/class.bocommon.inc.php
===================================================================
--- trunk/booking/inc/class.bocommon.inc.php    2017-10-12 15:01:32 UTC (rev 
17151)
+++ trunk/booking/inc/class.bocommon.inc.php    2017-10-13 17:51:21 UTC (rev 
17152)
@@ -87,8 +87,12 @@
 
                        if (!isset($_SESSION['showall']))
                        {
-                               if (!isset($filters['application_id']))
+                               if(!empty($filters['active']) && 
$filters['active'] == "-1")
                                {
+                                       unset($filters['active']);
+                               }
+                               else if (!isset($filters['application_id']))
+                               {
                                        $filters['active'] = "1";
                                }
                        }
@@ -130,8 +134,12 @@
 
                        if (!isset($_SESSION['showall']))
                        {
-                               if 
(!isset($params['filters']['application_id']))
+                               if(!empty($params['filters']['active']) && 
$params['filters']['active'] == "-1")
                                {
+                                       unset($params['filters']['active']);
+                               }
+                               else if 
(!isset($params['filters']['application_id']))
+                               {
                                        $params['filters']['active'] = "1";
                                }
                        }

Added: trunk/booking/inc/class.bodelegate.inc.php
===================================================================
--- trunk/booking/inc/class.bodelegate.inc.php                          (rev 0)
+++ trunk/booking/inc/class.bodelegate.inc.php  2017-10-13 17:51:21 UTC (rev 
17152)
@@ -0,0 +1,87 @@
+<?php
+       phpgw::import_class('booking.bocommon_authorized');
+
+       class booking_bodelegate extends booking_bocommon_authorized
+       {
+
+               function __construct()
+               {
+                       parent::__construct();
+                       $this->so = CreateObject('booking.sodelegate');
+                       $this->org_bo = CreateObject('booking.boorganization');
+               }
+
+               /**
+                * @see bocommon_authorized
+                */
+               protected function include_subject_parent_roles( array 
$for_object = null )
+               {
+                       $parent_roles = null;
+                       $parent_org = null;
+
+                       if (is_array($for_object))
+                       {
+                               if (!isset($for_object['organization_id']))
+                               {
+                                       throw new 
InvalidArgumentException('Cannot initialize object parent roles unless 
organization_id is provided');
+                               }
+
+                               $parent_org = 
$this->org_bo->read_single($for_object['organization_id']);
+                       }
+
+                       //Note that a null value for $parent_org is acceptable. 
That only signifies
+                       //that any roles specified for any organization are 
returned rather than the roles 
+                       //for a specific organization
+                       $parent_roles['organization'] = 
$this->org_bo->get_subject_roles($parent_org);
+
+                       return $parent_roles;
+               }
+
+               /**
+                * @see bocommon_authorized
+                */
+               protected function get_object_role_permissions( $forObject, 
$defaultPermissions )
+               {
+                       if ($this->current_app() == 'booking')
+                       {
+                               
$defaultPermissions[booking_sopermission::ROLE_DEFAULT] = array
+                                       (
+                                       'read' => true,
+                                       'delete' => true,
+                                       'write' => true,
+                                       'create' => true,
+                               );
+
+                               
$defaultPermissions['parent_role_permissions']['organization'] = array();
+                       }
+
+                       if ($this->current_app() == 'bookingfrontend')
+                       {
+                               
$defaultPermissions['parent_role_permissions']['organization'][booking_boorganization::ROLE_ADMIN]
 = array
+                                       (
+                                       'write' => true,
+                                       'create' => true,
+                               );
+                       }
+
+                       return $defaultPermissions;
+               }
+
+               /**
+                * @see bocommon_authorized
+                */
+               protected function get_collection_role_permissions( 
$defaultPermissions )
+               {
+                       if ($this->current_app() == 'booking')
+                       {
+                               
$defaultPermissions[booking_sopermission::ROLE_DEFAULT]['create'] = true;
+                       }
+
+                       if ($this->current_app() == 'bookingfrontend')
+                       {
+                               
$defaultPermissions['parent_role_permissions']['organization'][booking_boorganization::ROLE_ADMIN]['create']
 = true;
+                       }
+
+                       return $defaultPermissions;
+               }
+       }
\ No newline at end of file

Modified: trunk/booking/inc/class.menu.inc.php
===================================================================
--- trunk/booking/inc/class.menu.inc.php        2017-10-12 15:01:32 UTC (rev 
17151)
+++ trunk/booking/inc/class.menu.inc.php        2017-10-13 17:51:21 UTC (rev 
17152)
@@ -151,6 +151,12 @@
                                                        'text' => 
lang('Groups'),
                                                        'url' => 
$GLOBALS['phpgw']->link('/index.php', array('menuaction' => 
'booking.uigroup.index')),
                                                        'image' => 
array('property', 'location_tenant'),
+                                               ),
+                                               'delegates' => array
+                                                       (
+                                                       'text' => 
lang('delegates'),
+                                                       'url' => 
$GLOBALS['phpgw']->link('/index.php', array('menuaction' => 
'booking.uidelegate.index')),
+                                                       'image' => 
array('property', 'location_tenant'),
                                                )
                                        )
                                ),

Added: trunk/booking/inc/class.sodelegate.inc.php
===================================================================
--- trunk/booking/inc/class.sodelegate.inc.php                          (rev 0)
+++ trunk/booking/inc/class.sodelegate.inc.php  2017-10-13 17:51:21 UTC (rev 
17152)
@@ -0,0 +1,92 @@
+<?php
+       phpgw::import_class('booking.socommon');
+
+       class booking_sodelegate extends booking_socommon
+       {
+
+               function __construct()
+               {
+                       parent::__construct('bb_delegate', array(
+                               'id' => array('type' => 'int'),
+                               'active' => array('type' => 'int', 'required' 
=> true),
+                               'organization_id' => array('type' => 'int', 
'required' => true),
+                               'name' => array('type' => 'string', 'query' => 
true, 'required' => true),
+                               'email' => array('type' => 'string', 
'sf_validator' => createObject('booking.sfValidatorEmail', array(), array(
+                                               'invalid' => '%field% is 
invalid'))),
+                               'ssn' => array('type' => 'string', 'required' 
=> true),
+                               'phone' => array('type' => 'string', 'query' => 
true, 'required' => true),
+                               'organization_name' => array('type' => 'string',
+                                       'query' => true,
+                                       'join' => array(
+                                               'table' => 'bb_organization',
+                                               'fkey' => 'organization_id',
+                                               'key' => 'id',
+                                               'column' => 'name'
+                                       )),
+                               )
+                       );
+                       $this->account = 
$GLOBALS['phpgw_info']['user']['account_id'];
+               }
+
+               function get_metainfo( $id )
+               {
+                       $this->db->limit_query("SELECT bb_delegate.first_name 
|| ' ' || last_name AS name"
+                               . " bb_organization.name AS organization, 
bb_organization.district,"
+                               . " bb_organization.city, 
bb_delegate.description"
+                               . " FROM bb_delegate, bb_organization AS 
bb_organization"
+                               . " WHERE 
bb_delegate.organization_id=bb_organization.id AND bb_delegate.id=" . 
intval($id), 0, __LINE__, __FILE__, 1);
+                       if (!$this->db->next_record())
+                       {
+                               return False;
+                       }
+                       return array('name' => $this->db->f('name', false),
+                               'organization' => $this->db->f('organization', 
false),
+                               'district' => $this->db->f('district', false),
+                               'city' => $this->db->f('city', false),
+                               'description' => $this->db->f('description', 
false));
+               }
+
+               protected function preValidate( &$entity )
+               {
+                       $id = (int) $entity['id'];
+                       if (empty($entity['ssn']))
+                       {
+                               $this->db->query("SELECT ssn FROM bb_delegate 
WHERE id = {$id}", __LINE__, __FILE__);
+                               $this->db->next_record();
+                               $entity['ssn'] = $this->db->f('ssn');
+                       }
+               }
+
+
+               protected function doValidate( $entity, booking_errorstack 
$errors )
+               {
+
+                       $ssn= $entity['ssn'];
+
+                       if ( !preg_match('/^{(.*)}(.*)$/', $ssn, $m) || 
count($m) != 3  ) //full string, algorhythm, hash
+                       {
+                               //raw ssn
+                               try
+                               {
+                                       $sf_validator = 
createObject('booking.sfValidatorNorwegianSSN', array(), array(
+                                       'invalid' => '%field% is invalid'));
+                                       $sf_validator->setOption('required', 
false);
+                                       $sf_validator->clean($ssn);
+                               }
+                               catch (sfValidatorError $e)
+                               {
+                                       $errors['ssn'] = 
lang(strtr($e->getMessage(), array('%field%' => 'ssn')));
+                               }
+
+                               return;
+                       }
+                       $algo = $m[1];
+                       $hash = $m[2];
+
+                       if($algo != 'SHA1')
+                       {
+                               $errors['ssn'] = lang('the ssn hash is not 
correct');
+                       }
+               }
+
+       }
\ No newline at end of file

Added: trunk/booking/inc/class.sopermission_delegate.inc.php
===================================================================
--- trunk/booking/inc/class.sopermission_delegate.inc.php                       
        (rev 0)
+++ trunk/booking/inc/class.sopermission_delegate.inc.php       2017-10-13 
17:51:21 UTC (rev 17152)
@@ -0,0 +1,7 @@
+<?php
+       phpgw::import_class('booking.sopermission');
+
+       class booking_sopermission_delegate extends booking_sopermission
+       {
+               
+       }
\ No newline at end of file

Added: trunk/booking/inc/class.uidelegate.inc.php
===================================================================
--- trunk/booking/inc/class.uidelegate.inc.php                          (rev 0)
+++ trunk/booking/inc/class.uidelegate.inc.php  2017-10-13 17:51:21 UTC (rev 
17152)
@@ -0,0 +1,346 @@
+<?php
+       phpgw::import_class('booking.uicommon');
+
+       phpgw::import_class('booking.uidocument_building');
+       phpgw::import_class('booking.uipermission_building');
+
+//     phpgw::import_class('phpgwapi.uicommon_jquery');
+
+       class booking_uidelegate extends booking_uicommon
+       {
+
+               public $public_functions = array
+                       (
+                       'index' => true,
+                       'query' => true,
+                       'show' => true,
+                       'edit' => true,
+                       'toggle_show_inactive' => true,
+               );
+               protected $module;
+
+               public function __construct()
+               {
+                       parent::__construct();
+                       $this->bo = CreateObject('booking.bodelegate');
+                       $this->activity_bo = CreateObject('booking.boactivity');
+                       
self::set_active_menu('booking::organizations::delegates');
+
+                       $this->module = "booking";
+               }
+
+               public function link_to_parent_params( $action = 'show', 
$params = array() )
+               {
+                       return array_merge(array('menuaction' => 
sprintf($this->module . '.ui%s.%s', $this->get_current_parent_type(), $action),
+                               'id' => $this->get_parent_id()), $params);
+               }
+
+               public function link_to_parent( $action = 'show', $params = 
array() )
+               {
+                       return 
$this->link($this->link_to_parent_params($action, $params));
+               }
+
+               public function get_current_parent_type()
+               {
+                       if (!$this->is_inline())
+                       {
+                               return null;
+                       }
+                       $parts = explode('_', key($a = 
$this->get_inline_params()));
+                       return $parts[1];
+               }
+
+               public function get_parent_id()
+               {
+                       $inlineParams = $this->get_inline_params();
+                       return $inlineParams['filter_organization_id'];
+               }
+
+               public function get_parent_if_inline()
+               {
+                       if (!$this->is_inline())
+                               return null;
+                       return CreateObject('booking.bo' . 
$this->get_current_parent_type())->read_single($this->get_parent_id());
+               }
+
+               public function redirect_to_parent_if_inline()
+               {
+                       if ($this->is_inline())
+                       {
+                               $this->redirect($this->link_to_parent_params());
+                       }
+
+                       return false;
+               }
+
+               public function link_to( $action, $params = array() )
+               {
+                       return $this->link($this->link_to_params($action, 
$params));
+               }
+
+               public function link_to_params( $action, $params = array() )
+               {
+                       if (isset($params['ui']))
+                       {
+                               $ui = $params['ui'];
+                               unset($params['ui']);
+                       }
+                       else
+                       {
+                               $ui = 'delegate';
+                               $this->apply_inline_params($params);
+                       }
+
+                       $action = sprintf($this->module . '.ui%s.%s', $ui, 
$action);
+                       return array_merge(array('menuaction' => $action), 
$params);
+               }
+
+               public function apply_inline_params( &$params )
+               {
+                       if ($this->is_inline())
+                       {
+                               $params['filter_organization_id'] = 
intval(phpgw::get_var('filter_organization_id'));
+                       }
+                       return $params;
+               }
+
+               public function get_inline_params()
+               {
+                       return array('filter_organization_id' => 
phpgw::get_var('filter_organization_id', 'int', 'REQUEST'));
+               }
+
+               public function is_inline()
+               {
+                       return false != 
phpgw::get_var('filter_organization_id', 'int', 'REQUEST');
+               }
+
+               public function index()
+               {
+                       if (phpgw::get_var('phpgw_return_as') == 'json')
+                       {
+                               return $this->query();
+                       }
+
+                       $data = array(
+                               'form' => array(
+                                       'toolbar' => array(
+                                               'item' => array(
+                                                       array(
+                                                               'type' => 
'link',
+                                                               'value' => 
$_SESSION['showall'] ? lang('Show only active') : lang('Show all'),
+                                                               'href' => 
self::link(array('menuaction' => $this->url_prefix . '.toggle_show_inactive'))
+                                                       ),
+                                               )
+                                       ),
+                               ),
+                               'datatable' => array(
+                                       'source' => 
self::link(array('menuaction' => $this->module . '.uidelegate.index',
+                                               'phpgw_return_as' => 'json')),
+                                       'field' => array(
+                                               array(
+                                                       'key' => 
'organization_name',
+                                                       'label' => 
lang('Organization')
+                                               ),
+                                               array(
+                                                       'key' => 'name',
+                                                       'label' => 
lang('delegate'),
+                                                       'formatter' => 
'JqueryPortico.formatLink'
+                                               ),
+                                               array(
+                                                       'key' => 'phone',
+                                                       'label' => 
lang('Phone'),
+                                               ),
+                                               array(
+                                                       'key' => 'email',
+                                                       'label' => 
lang('Email'),
+                                               ),
+                                               array(
+                                                       'key' => 'active',
+                                                       'label' => 
lang('Active'),
+                                               ),
+                                               array(
+                                                       'key' => 'link',
+                                                       'hidden' => true
+                                               )
+                                       )
+                               )
+                       );
+                       $data['datatable']['actions'][] = array();
+                       $data['datatable']['new_item'] = 
self::link(array('menuaction' => $this->module . '.uidelegate.edit'));
+
+                       self::render_template_xsl('datatable_jquery', $data);
+               }
+
+               public function query()
+               {
+                       $delegates = $this->bo->read();
+
+                       $lang_yes = lang('yes');
+                       $lang_no = lang('no');
+
+                       array_walk($delegates["results"], array($this, 
"_add_links"), $this->module . ".uidelegate.show");
+                       foreach ($delegates["results"] as &$delegate)
+                       {
+                               $delegate['active'] = $delegate['active'] == 1 
? $lang_yes : $lang_no;
+                       }
+                       $results = $this->jquery_results($delegates);
+
+                       if (is_array($parent_entity = 
$this->get_parent_if_inline()))
+                       {
+                               if 
($this->bo->allow_create(array($this->get_current_parent_type() . '_id' => 
$parent_entity['id'])))
+                               {
+                                       $results['Actions']['add'] = 
array('text' => lang('Add Group'), 'href' => $this->link_to('edit'));
+                               }
+                       }
+
+                       return $results;
+               }
+
+               public function edit()
+               {
+                       $id = phpgw::get_var('id', 'int');
+
+
+                       if ($id)
+                       {
+                               $delegate = $this->bo->read_single($id);
+                               $delegate['id'] = $id;
+                               $delegate['organization_link'] = 
$this->link_to('show', array('ui' => 'organization',
+                                       'id' => $delegate['organization_id']));
+
+                               $delegate['cancel_link'] = 
$this->link_to('show', array('id' => $id));
+
+                               if ($this->is_inline())
+                               {
+                                       $delegate['cancel_link'] = 
$this->link_to_parent();
+                               }
+                       }
+                       else
+                       {
+                               $delegate = array();
+                               $delegate['cancel_link'] = 
$this->link_to('index', array('ui' => 'organization'));
+
+                               $organization_id = 
phpgw::get_var('organization_id', 'int');
+                               if($organization_id)
+                               {
+                                       $delegate['organization_id'] = 
$organization_id;
+                                       $organization = 
CreateObject('booking.boorganization')->read_single($organization_id);
+                                       $delegate['organization_name'] = 
$organization['name'];
+                               }
+
+                               if ($this->is_inline())
+                               {
+                                       $delegate['organization_link'] = 
$this->link_to_parent();
+                                       $delegate['cancel_link'] = 
$this->link_to_parent();
+                                       $this->apply_inline_params($delegate);
+                               }
+                       }
+
+                       $delegate['organizations_link'] = 
$this->link_to('index', array('ui' => 'organization'));
+
+                       $errors = array();
+                       if ($_SERVER['REQUEST_METHOD'] == 'POST')
+                       {
+                               $delegate = array_merge($delegate, 
extract_values($_POST, array(
+                                       'name' => 'string',
+                                       'ssn' => 'string',
+                                       'email' => 'string',
+                                       'phone' => 'string',
+                                       'organization_id' => 'string',
+                                       'organization_name' => 'string',
+                                       'active' => 'int',
+                               )));
+                               if (!isset($delegate["active"]))
+                               {
+                                       $delegate['active'] = '1';
+                               }
+
+                               $errors = $this->bo->validate($delegate);
+                               if (strlen($_POST['name']) > 50)
+                               {
+                                       $errors['name'] = lang('Lengt of name 
is to long, max 50 characters long');
+                               }
+                               if (strlen($_POST['shortname']) > 11)
+                               {
+                                       $errors['shortname'] = lang('Lengt of 
shortname is to long, max 11 characters long');
+                               }
+                               if (!$errors)
+                               {
+                                       if (empty($delegate['ssn']))
+                                       {
+                                               $_delegate = 
$this->bo->read_single($id);
+                                               $delegate['ssn'] = 
$_delegate['ssn'];
+                                       }
+                                       else
+                                       {
+                                               $hash = sha1($delegate['ssn']);
+                                               $delegate['ssn'] =  '{SHA1}' . 
base64_encode($hash);
+                                       }
+
+                                       if ($id)
+                                       {
+                                               $receipt = 
$this->bo->update($delegate);
+                                       }
+                                       else
+                                       {
+                                               $receipt = 
$this->bo->add($delegate);
+                                       }
+
+                                       $this->redirect_to_parent_if_inline();
+                                       
$this->redirect($this->link_to_params('show', array('id' => $receipt['id'])));
+                               }
+                       }
+                       $this->flash_form_errors($errors);
+
+                       if (is_array($parent_entity = 
$this->get_parent_if_inline()))
+                       {
+                               $delegate[$this->get_current_parent_type() . 
'_id'] = $parent_entity['id'];
+                               $delegate[$this->get_current_parent_type() . 
'_name'] = $parent_entity['name'];
+                       }
+
+                       phpgwapi_jquery::load_widget('autocomplete');
+                       self::rich_text_editor('field_description');
+
+                       $tabs = array();
+                       $tab_text = ($id) ? 'Group Edit' : 'Group New';
+                       if (id)
+                       {
+                               $tabs['generic'] = array('label' => 
lang($tab_text), 'link' => '#delegate_edit');
+                       }
+                       $active_tab = 'generic';
+                       $delegate['tabs'] = 
phpgwapi_jquery::tabview_generate($tabs, $active_tab);
+                       $delegate['validator'] = 
phpgwapi_jquery::formvalidator_generate(array('location',
+                                       'date', 'security', 'file'));
+
+                       $delegate['ssn'] = '';//secret
+
+                       self::render_template_xsl('delegate_edit', 
array('delegate' => $delegate, 'module' => $this->module));
+               }
+
+               public function show()
+               {
+                       $delegate = $this->bo->read_single(phpgw::get_var('id', 
'int'));
+                       $delegate['organizations_link'] = 
self::link(array('menuaction' => $this->module . '.uiorganization.index'));
+                       $delegate['organization_link'] = 
self::link(array('menuaction' => $this->module . '.uiorganization.show',
+                                       'id' => $delegate['organization_id']));
+                       $delegate['edit_link'] = self::link(array('menuaction' 
=> $this->module . '.uidelegate.edit',
+                                       'id' => $delegate['id']));
+                       $delegate['cancel_link'] = 
self::link(array('menuaction' => $this->module . '.uidelegate.index'));
+
+                       $data = array(
+                               'delegate' => $delegate
+                       );
+                       $loggedin = (int)true; // FIXME: Some sort of 
authentication!
+                       $edit_self_link = self::link(array('menuaction' => 
'bookingfrontend.uidelegate.edit',
+                                       'id' => $delegate['id']));
+
+                       $tabs = array();
+                       $tabs['generic'] = array('label' => lang('delegate'), 
'link' => '#delegate');
+                       $active_tab = 'generic';
+
+                       $delegate['tabs'] = 
phpgwapi_jquery::tabview_generate($tabs, $active_tab);
+
+                       self::render_template_xsl('delegate', array('delegate' 
=> $delegate, 'loggedin' => $loggedin,
+                               'edit_self_link' => $edit_self_link));
+               }
+       }
\ No newline at end of file

Modified: trunk/booking/inc/class.uigroup.inc.php
===================================================================
--- trunk/booking/inc/class.uigroup.inc.php     2017-10-12 15:01:32 UTC (rev 
17151)
+++ trunk/booking/inc/class.uigroup.inc.php     2017-10-13 17:51:21 UTC (rev 
17152)
@@ -244,6 +244,13 @@
                                $group = array();
                                $group['cancel_link'] = $this->link_to('index', 
array('ui' => 'organization'));
 
+                               if($organization_id)
+                               {
+                                       $group['organization_id'] = 
$organization_id;
+                                       $organization = 
CreateObject('booking.boorganization')->read_single($organization_id);
+                                       $group['organization_name'] = 
$organization['name'];
+                               }
+
                                if ($this->is_inline())
                                {
                                        $group['organization_link'] = 
$this->link_to_parent();

Modified: trunk/booking/inc/class.uiorganization.inc.php
===================================================================
--- trunk/booking/inc/class.uiorganization.inc.php      2017-10-12 15:01:32 UTC 
(rev 17151)
+++ trunk/booking/inc/class.uiorganization.inc.php      2017-10-13 17:51:21 UTC 
(rev 17152)
@@ -323,6 +323,8 @@
                                        'id' => $organization['id']));
                        $organization['new_group_link'] = 
self::link(array('menuaction' => $this->module . '.uigroup.edit',
                                        'organization_id' => 
$organization['id']));
+                       $organization['new_delegate_link'] = 
self::link(array('menuaction' => $this->module . '.uidelegate.edit',
+                                       'organization_id' => 
$organization['id']));
                        $organization['cancel_link'] = 
self::link(array('menuaction' => $this->module . '.uiorganization.index'));
                        $organization['tabs'] = 
phpgwapi_jquery::tabview_generate($tabs, $active_tab);
                        $this->install_customer_identifier_ui($organization);

Added: trunk/booking/js/booking/delegate_new.js
===================================================================
--- trunk/booking/js/booking/delegate_new.js                            (rev 0)
+++ trunk/booking/js/booking/delegate_new.js    2017-10-13 17:51:21 UTC (rev 
17152)
@@ -0,0 +1,5 @@
+$(document).ready(function ()
+{
+       
JqueryPortico.autocompleteHelper('index.php?menuaction=booking.uiorganization.index&phpgw_return_as=json&',
+               'field_organization_name', 'field_organization_id', 
'organization_container');
+});

Modified: trunk/booking/setup/phpgw_no.lang
===================================================================
--- trunk/booking/setup/phpgw_no.lang   2017-10-12 15:01:32 UTC (rev 17151)
+++ trunk/booking/setup/phpgw_no.lang   2017-10-13 17:51:21 UTC (rev 17152)
@@ -708,4 +708,10 @@
 toggle show inactive   booking no      Veklse på å vise inaktive
 season edit    booking no      Endre sesong
 season show    booking no      Vis sesong
-application edit       booking no      Rediger søknad
\ No newline at end of file
+application edit       booking no      Rediger søknad
+delegates      booking no      Delegater
+delegate       booking no      Delegert til
+new delegate   booking no      Ny delegert
+please enter a delegate        booking no      Angi navn på delegert til
+please enter an email  booking no      Angi en epost
+ssn is invalid booking no      Fødselsnummeret er ikke gyldig
\ No newline at end of file

Modified: trunk/booking/setup/setup.inc.php
===================================================================
--- trunk/booking/setup/setup.inc.php   2017-10-12 15:01:32 UTC (rev 17151)
+++ trunk/booking/setup/setup.inc.php   2017-10-13 17:51:21 UTC (rev 17152)
@@ -1,6 +1,6 @@
 <?php
        $setup_info['booking']['name'] = 'booking';
-       $setup_info['booking']['version'] = '0.2.27';
+       $setup_info['booking']['version'] = '0.2.28';
        $setup_info['booking']['app_order'] = 9;
        $setup_info['booking']['enable'] = 1;
        $setup_info['booking']['app_group'] = 'office';
@@ -16,6 +16,7 @@
                'bb_resource',
                'bb_building_resource',
                'bb_group',
+               'bb_delegate',
                'bb_season',
                'bb_season_boundary',
                'bb_application',

Modified: trunk/booking/setup/tables_current.inc.php
===================================================================
--- trunk/booking/setup/tables_current.inc.php  2017-10-12 15:01:32 UTC (rev 
17151)
+++ trunk/booking/setup/tables_current.inc.php  2017-10-13 17:51:21 UTC (rev 
17152)
@@ -164,6 +164,21 @@
                        'ix' => array(),
                        'uc' => array()
                ),
+               'bb_delegate' => array(
+                       'fd' => array(
+                               'id' => array('type' => 'auto', 'nullable' => 
false),
+                               'active' => array('type' => 'int', 'nullable' 
=> False, 'precision' => 2, 'default' => 1),
+                               'organization_id' => array('type' => 'int', 
'precision' => '4', 'nullable' => False),
+                               'name' => array('type' => 'varchar', 
'precision' => '150', 'nullable' => False),
+                               'email' => array('type' => 'varchar', 
'precision' => '50', 'nullable' => True),
+                               'ssn' => array('type' => 'varchar', 'precision' 
=> '115', 'nullable' => True),
+                               'phone' => array('type' => 'varchar', 
'precision' => '50', 'nullable' => True),
+                       ),
+                       'pk' => array('id'),
+                       'fk' => array('bb_organization' => 
array('organization_id' => 'id')),
+                       'ix' => array(),
+                       'uc' => array('organization_id', 'ssn')
+               ),
                'bb_season' => array(
                        'fd' => array(
                                'id' => array('type' => 'auto', 'nullable' => 
false),

Modified: trunk/booking/setup/tables_update.inc.php
===================================================================
--- trunk/booking/setup/tables_update.inc.php   2017-10-12 15:01:32 UTC (rev 
17151)
+++ trunk/booking/setup/tables_update.inc.php   2017-10-13 17:51:21 UTC (rev 
17152)
@@ -3588,3 +3588,38 @@
                        return $GLOBALS['setup_info']['booking']['currentver'];
                }
        }
+
+
+       /**
+        * Update booking version from 0.2.27 to 0.2.28
+        *
+        */
+       $test[] = '0.2.27';
+       function booking_upgrade0_2_27()
+       {
+               $GLOBALS['phpgw_setup']->oProc->m_odb->transaction_begin();
+
+               $GLOBALS['phpgw_setup']->oProc->CreateTable(
+                       'bb_delegate', array(
+                               'fd' => array(
+                                       'id' => array('type' => 'auto', 
'nullable' => false),
+                                       'active' => array('type' => 'int', 
'nullable' => False, 'precision' => 2, 'default' => 1),
+                                       'organization_id' => array('type' => 
'int', 'precision' => '4', 'nullable' => False),
+                                       'name' => array('type' => 'varchar', 
'precision' => '150', 'nullable' => False),
+                                       'email' => array('type' => 'varchar', 
'precision' => '50', 'nullable' => True),
+                                       'ssn' => array('type' => 'varchar', 
'precision' => '115', 'nullable' => True),
+                                       'phone' => array('type' => 'varchar', 
'precision' => '50', 'nullable' => True),
+                       ),
+                               'pk' => array('id'),
+                               'fk' => array('bb_organization' => 
array('organization_id' => 'id')),
+                               'ix' => array(),
+                               'uc' => array('organization_id', 'ssn')
+                       )
+               );
+
+               if ($GLOBALS['phpgw_setup']->oProc->m_odb->transaction_commit())
+               {
+                       $GLOBALS['setup_info']['booking']['currentver'] = 
'0.2.28';
+                       return $GLOBALS['setup_info']['booking']['currentver'];
+               }
+       }

Added: trunk/booking/templates/base/delegate.xsl
===================================================================
--- trunk/booking/templates/base/delegate.xsl                           (rev 0)
+++ trunk/booking/templates/base/delegate.xsl   2017-10-13 17:51:21 UTC (rev 
17152)
@@ -0,0 +1,51 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+       <xsl:call-template name="msgbox"/>
+       <form action="" method="POST" id='form' class="pure-form 
pure-form-aligned" name="form">
+               <input type="hidden" name="tab" value=""/>
+               <div id="tab-content">
+                       <xsl:value-of disable-output-escaping="yes" 
select="delegate/tabs"/>
+                       <div id="delegate" class="booking-container">
+                               <fieldset>
+                                       <div class="pure-control-group">
+                                               <label>
+                                                       <xsl:value-of 
select="php:function('lang', 'Organization')" />
+                                               </label>
+                                               <xsl:value-of 
select="delegate/organization_name"/>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label>
+                                                       <xsl:value-of 
select="php:function('lang', 'Name')" />
+                                               </label>
+                                               <xsl:value-of 
select="delegate/name"/>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label>
+                                                       <xsl:value-of 
select="php:function('lang', 'email')" />
+                                               </label>
+                                               <xsl:value-of 
select="delegate/email"/>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label>
+                                                       <xsl:value-of 
select="php:function('lang', 'phone')" />
+                                               </label>
+                                               <xsl:value-of 
select="delegate/phone" />
+                                       </div>
+                               </fieldset>
+                       </div>
+               </div>
+               <div class="form-buttons">
+                       <a class="button pure-button pure-button-primary">
+                               <xsl:attribute name="href">
+                                       <xsl:value-of 
select="delegate/edit_link"/>
+                               </xsl:attribute>
+                               <xsl:value-of select="php:function('lang', 
'Edit')" />
+                       </a>
+                       <input type="button" class="pure-button 
pure-button-primary" name="cencel">
+                               <xsl:attribute 
name="onclick">window.location.href="<xsl:value-of 
select="delegate/cancel_link"/>"</xsl:attribute>
+                               <xsl:attribute name="value">
+                                       <xsl:value-of 
select="php:function('lang', 'Cancel')" />
+                               </xsl:attribute>
+                       </input>
+               </div>
+       </form>
+</xsl:template>

Added: trunk/booking/templates/base/delegate_edit.xsl
===================================================================
--- trunk/booking/templates/base/delegate_edit.xsl                              
(rev 0)
+++ trunk/booking/templates/base/delegate_edit.xsl      2017-10-13 17:51:21 UTC 
(rev 17152)
@@ -0,0 +1,126 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+       <xsl:call-template name="msgbox"/>
+       <form action="" method="POST" id='form' class="pure-form 
pure-form-aligned" name="form">
+               <input type="hidden" name="tab" value=""/>
+               <div id="tab-content">
+                       <xsl:value-of disable-output-escaping="yes" 
select="delegate/tabs"/>
+                       <div id="delegate_edit" class="booking-container">
+                               <fieldset>
+                                       <div class="heading">
+                                               <legend>
+                                                       <h3>
+                                                               <xsl:if 
test="not(delegate/id)">
+                                                                       
<xsl:value-of select="php:function('lang', 'New delegate')" />
+                                                               </xsl:if>
+                                                               <xsl:if 
test="delegate/id">
+                                                                       
<xsl:value-of select="php:function('lang', 'Edit delegate')" />
+                                                               </xsl:if>
+                                                       </h3>
+                                               </legend>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label for="name">
+                                                       <xsl:value-of 
select="php:function('lang', 'delegate')" />
+                                               </label>
+                                               <input id="name" name="name" 
type="text" value="{delegate/name}" >
+                                                       <xsl:attribute 
name="data-validation">
+                                                               
<xsl:text>required</xsl:text>
+                                                       </xsl:attribute>
+                                                       <xsl:attribute 
name="data-validation-error-msg">
+                                                               <xsl:value-of 
select="php:function('lang', 'Please enter a name')" />
+                                                       </xsl:attribute>
+                                               </input>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label for="field_ssn">
+                                                       <xsl:value-of 
select="php:function('lang', 'ssn')" />
+                                               </label>
+                                               <input type='text' 
id='field_ssn' name="ssn" value='{delegate/ssn}'/>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label for="field_email">
+                                                       <xsl:value-of 
select="php:function('lang', 'Email')" />
+                                               </label>
+                                               <input type='text' 
id='field_email' name="email" value='{delegate/email}' data-validation="email">
+                                                       <xsl:attribute 
name="data-validation-optional">
+                                                               
<xsl:text>true</xsl:text>
+                                                       </xsl:attribute>
+                                                       <xsl:attribute 
name="data-validation-error-msg">
+                                                               <xsl:value-of 
select="php:function('lang', 'Please enter a valid contact email')" />
+                                                       </xsl:attribute>
+                                               </input>
+                                       </div>
+                                       <div class="pure-control-group">
+                                               <label for="field_phone">
+                                                       <xsl:value-of 
select="php:function('lang', 'Phone')" />
+                                               </label>
+                                               <input type='text' 
id='field_phone' name="phone" value='{delegate/phone}'/>
+                                       </div>
+       
+                                       <div class="pure-control-group">
+                                               <label 
for="field_organization_name">
+                                                       <xsl:value-of 
select="php:function('lang', 'Organization')" />
+                                               </label>
+                                               <input 
id="field_organization_id" name="organization_id" type="hidden" 
value="{delegate/organization_id}"/>
+                                               <input name="organization_name" 
type="text" id="field_organization_name" value="{delegate/organization_name}">
+                                                       <xsl:if 
test="delegate/organization_id">
+                                                               <xsl:attribute 
name='disabled'>disabled</xsl:attribute>
+                                                       </xsl:if>
+                                                       <xsl:attribute 
name="data-validation">
+                                                               
<xsl:text>required</xsl:text>
+                                                       </xsl:attribute>
+                                                       <xsl:attribute 
name="data-validation-error-msg">
+                                                               <xsl:value-of 
select="php:function('lang', 'Please enter an organization name')" />
+                                                       </xsl:attribute>
+                                               </input>
+                                               <div 
id="organization_container"></div>
+                                       </div>
+               
+
+                                       <div class="pure-control-group">
+                                               <xsl:if test="delegate/id">
+                                                       <label 
for="field_active">
+                                                               <xsl:value-of 
select="php:function('lang', 'Active')"/>
+                                                       </label>
+                                                       <select 
id="field_active" name="active">
+                                                               <option 
value="1">
+                                                                       <xsl:if 
test="delegate/active=1">
+                                                                               
<xsl:attribute name="selected">checked</xsl:attribute>
+                                                                       
</xsl:if>
+                                                                       
<xsl:value-of select="php:function('lang', 'Active')"/>
+                                                               </option>
+                                                               <option 
value="0">
+                                                                       <xsl:if 
test="delegate/active=0">
+                                                                               
<xsl:attribute name="selected">checked</xsl:attribute>
+                                                                       
</xsl:if>
+                                                                       
<xsl:value-of select="php:function('lang', 'Inactive')"/>
+                                                               </option>
+                                                       </select>
+                                               </xsl:if>
+                                       </div>
+
+                               </fieldset>
+                       </div>
+               </div>
+               <div class="form-buttons">
+                       <xsl:if test="not(delegate/id)">
+                               <input type="submit" 
value="{php:function('lang', 'Add')}" class="button pure-button 
pure-button-primary" />
+                       </xsl:if>
+                       <xsl:if test="delegate/id">
+                               <input type="submit" 
value="{php:function('lang', 'Save')}" class="button pure-button 
pure-button-primary"/>
+                       </xsl:if>
+                       <a class="cancel pure-button pure-button-primary" 
href="{delegate/cancel_link}">
+                               <xsl:value-of select="php:function('lang', 
'Cancel')" />
+                       </a>
+               </div>
+       </form>
+       <script type="text/javascript">
+               var endpoint = '<xsl:value-of select="module" />';
+        <![CDATA[
+            $(document).ready(function() {
+                JqueryPortico.autocompleteHelper('index.php?menuaction=' + 
endpoint + '.uiorganization.index&phpgw_return_as=json&',
+                                                 'field_organization_name', 
'field_organization_id', 'organization_container');
+            });
+        ]]>
+       </script>
+</xsl:template>

Modified: trunk/bookingfrontend/inc/class.bouser.inc.php
===================================================================
--- trunk/bookingfrontend/inc/class.bouser.inc.php      2017-10-12 15:01:32 UTC 
(rev 17151)
+++ trunk/bookingfrontend/inc/class.bouser.inc.php      2017-10-13 17:51:21 UTC 
(rev 17152)
@@ -22,6 +22,7 @@
 
                public function __construct()
                {
+                       $this->db = & $GLOBALS['phpgw']->db;
                        $this->set_module();
                        $this->orgnr = $this->get_user_orgnr_from_session();
                        $this->orgname = 
$this->get_orgname_from_db($this->get_user_orgnr_from_session());
@@ -31,7 +32,6 @@
 
                protected function get_orgname_from_db( $orgnr )
                {
-                       $this->db = & $GLOBALS['phpgw']->db;
                        $this->db->limit_query("select name from 
bb_organization where organization_number ='" . $orgnr . "'", 0, __LINE__, 
__FILE__, 1);
                        if (!$this->db->next_record())
                        {

Added: trunk/bookingfrontend/inc/class.uidelegate.inc.php
===================================================================
--- trunk/bookingfrontend/inc/class.uidelegate.inc.php                          
(rev 0)
+++ trunk/bookingfrontend/inc/class.uidelegate.inc.php  2017-10-13 17:51:21 UTC 
(rev 17152)
@@ -0,0 +1,48 @@
+<?php
+       phpgw::import_class('booking.uidelegate');
+
+       class bookingfrontend_uidelegate extends booking_uidelegate
+       {
+
+               public $public_functions = array
+                       (
+                       'index' => true,
+                       'edit' => true,
+                       'show' => true,
+                       'toggle_show_inactive' => true,
+               );
+               protected $module;
+
+               public function __construct()
+               {
+                       parent::__construct();
+                       $this->module = "bookingfrontend";
+               }
+
+               public function show()
+               {
+                       $delegate = $this->bo->read_single(phpgw::get_var('id', 
'int'));
+                       $delegate['organizations_link'] = 
self::link(array('menuaction' => $this->module . '.uiorganization.index'));
+                       $delegate['organization_link'] = 
self::link(array('menuaction' => $this->module . '.uiorganization.show',
+                                       'id' => $delegate['organization_id']));
+                       $delegate['edit_link'] = self::link(array('menuaction' 
=> $this->module . '.uidelegate.edit',
+                                       'id' => $delegate['id']));
+
+                       $data = array(
+                               'delegate' => $delegate
+                       );
+
+                       $edit_self_link = self::link(array('menuaction' => 
'bookingfrontend.uidelegate.edit',
+                                       'id' => $delegate['id']));
+
+                       $bouser = CreateObject('bookingfrontend.bouser');
+                       $auth_forward = 
"?redirect_menuaction={$this->module}.uidelegate.show&redirect_id={$delegate['id']}";
+                       $delegate['login_link'] = 'login.php' . $auth_forward;
+                       $delegate['logoff_link'] = 'logoff.php' . $auth_forward;
+                       if ($bouser->is_organization_admin())
+                               $delegate['logged_on'] = true;
+
+                       self::render_template_xsl('delegate', array('delegate' 
=> $delegate, 'loggedin' => $loggedin,
+                               'edit_self_link' => $edit_self_link));
+               }
+       }
\ No newline at end of file

Modified: trunk/bookingfrontend/inc/class.uiorganization.inc.php
===================================================================
--- trunk/bookingfrontend/inc/class.uiorganization.inc.php      2017-10-12 
15:01:32 UTC (rev 17151)
+++ trunk/bookingfrontend/inc/class.uiorganization.inc.php      2017-10-13 
17:51:21 UTC (rev 17152)
@@ -68,6 +68,8 @@
                        $organization['logoff_link'] = 'logoff.php' . 
$auth_forward;
                        $organization['new_group_link'] = 
self::link(array('menuaction' => $this->module . '.uigroup.edit',
                                        'organization_id' => 
$organization['id']));
+                       $organization['new_delegate_link'] = 
self::link(array('menuaction' => $this->module . '.uidelegate.edit',
+                                       'organization_id' => 
$organization['id']));
                        if ($bouser->is_organization_admin($organization['id']))
                                $organization['logged_on'] = true;
 

Modified: trunk/bookingfrontend/inc/custom/default/Altinn2_Bergen_kommune.php
===================================================================
--- trunk/bookingfrontend/inc/custom/default/Altinn2_Bergen_kommune.php 
2017-10-12 15:01:32 UTC (rev 17151)
+++ trunk/bookingfrontend/inc/custom/default/Altinn2_Bergen_kommune.php 
2017-10-13 17:51:21 UTC (rev 17152)
@@ -129,9 +129,36 @@
                                        'name' => 'Bølleball',
                                );
                                $orgs_validate[] = 994239929;
-                               $fodsels_nr = 1;
+                               if(!$fodsels_nr)
+                               {
+                                       $fodsels_nr = 1;
+                               }
                        }
 
+                       $hash = sha1($fodsels_nr);
+                       $ssn =  '{SHA1}' . base64_encode($hash);
+
+                       $this->db->query("SELECT 
bb_organization.organization_number, bb_organization.name AS organization_name"
+                               . " FROM bb_delegate"
+                               . " JOIN  bb_organization ON 
bb_delegate.organization_id = bb_organization.id"
+                               . " WHERE bb_delegate.ssn = '{$ssn}'", 
__LINE__, __FILE__);
+
+                       while($this->db->next_record())
+                       {
+                               $organization_number = 
$this->db->f('organization_number');
+                               if(in_array($organization_number, 
$orgs_validate))
+                               {
+                                       continue;
+                               }
+
+                               $orgs[] = array(
+                                       'id' => $organization_number,
+                                       'name' => 
$this->db->f('organization_name', true),
+                               );
+                               $orgs_validate[] = $organization_number;
+
+                       }
+
                        if ($stage == 2 && $fodsels_nr && in_array($org_id, 
$orgs_validate))
                        {
                                try

Modified: trunk/bookingfrontend/inc/custom/default/MinId.php
===================================================================
--- trunk/bookingfrontend/inc/custom/default/MinId.php  2017-10-12 15:01:32 UTC 
(rev 17151)
+++ trunk/bookingfrontend/inc/custom/default/MinId.php  2017-10-13 17:51:21 UTC 
(rev 17152)
@@ -126,16 +126,44 @@
                        }
 
                        $sql = "SELECT DISTINCT orgnr FROM breg.personcurrent 
WHERE fodselsnr ='{$fodselsnr}'";
+
+                       $orgs_validate = array();
                        $results = array();
                        $db->query($sql, __LINE__, __FILE__);
                        while ($db->next_record())
                        {
+                               $organization_number = $db->f('orgnr', true);
                                $results[] = array
                                (
-                                       'orgnr' => $db->f('orgnr', true)
+                                       'orgnr' => $organization_number
                                );
+                               $orgs_validate[] = $organization_number;
                        }
 
+                       $hash = sha1($fodselsnr);
+                       $ssn =  '{SHA1}' . base64_encode($hash);
+
+                       $this->db->query("SELECT 
bb_organization.organization_number, bb_organization.name AS organization_name"
+                               . " FROM bb_delegate"
+                               . " JOIN  bb_organization ON 
bb_delegate.organization_id = bb_organization.id"
+                               . " WHERE bb_delegate.ssn = '{$ssn}'", 
__LINE__, __FILE__);
+
+                       while($this->db->next_record())
+                       {
+                               $organization_number = 
$this->db->f('organization_number');
+                               if(in_array($organization_number, 
$orgs_validate))
+                               {
+                                       continue;
+                               }
+                               $results[] = array
+                               (
+                                       'orgnr' => $organization_number
+                               );
+
+                               $orgs_validate[] = $organization_number;
+
+                       }
+
                //Testvalues
                /*
                        $results[] = array

Added: trunk/bookingfrontend/templates/base/delegate.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/delegate.xsl                           
(rev 0)
+++ trunk/bookingfrontend/templates/base/delegate.xsl   2017-10-13 17:51:21 UTC 
(rev 17152)
@@ -0,0 +1,58 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+       
+       <div class="content">
+               <ul class="pathway">
+                       <li>
+                               <a 
href="index.php?menuaction=bookingfrontend.uisearch.index">
+                                       <xsl:value-of 
select="php:function('lang', 'Home')" />
+                               </a>
+                       </li>
+                       <li>
+                               <a href="{delegate/organization_link}">
+                                       <xsl:value-of 
select="delegate/organization_name"/>
+                               </a>
+                       </li>
+                       <li>
+                               <xsl:value-of select="delegate/name"/>
+                       </li>
+               </ul>
+
+               <xsl:if test="delegate/permission/write">
+                       <span class="loggedin">
+                               <button 
onclick="window.location.href='{edit_self_link}'">
+                                       <xsl:value-of 
select="php:function('lang', 'edit')" />
+                               </button>
+                       </span>
+               </xsl:if>
+               <xsl:call-template name="msgbox"/>
+
+               <dl class="proplist">
+                       <dt>
+                               <xsl:value-of select="php:function('lang', 
'delegate')" />
+                       </dt>
+                       <dd>
+                               <xsl:value-of select="delegate/name"/>
+                       </dd>
+
+                       <dt>
+                               <xsl:value-of select="php:function('lang', 
'Organization')" />
+                       </dt>
+                       <dd>
+                               <xsl:value-of 
select="delegate/organization_name"/>
+                       </dd>
+                       <dt>
+                               <xsl:value-of select="php:function('lang', 
'email')" />
+                       </dt>
+                       <dd>
+                               <xsl:value-of select="delegate/email"/>
+                       </dd>
+                       <dt>
+                               <xsl:value-of select="php:function('lang', 
'phone')" />
+                       </dt>
+                       <dd>
+                               <xsl:value-of select="delegate/phone"/>
+                       </dd>
+
+               </dl>
+       </div>
+</xsl:template>

Added: trunk/bookingfrontend/templates/base/delegate_edit.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/delegate_edit.xsl                      
        (rev 0)
+++ trunk/bookingfrontend/templates/base/delegate_edit.xsl      2017-10-13 
17:51:21 UTC (rev 17152)
@@ -0,0 +1,165 @@
+<xsl:template match="data" xmlns:php="http://php.net/xsl";>
+       <div class="content">
+        
+               <div class="pure-g">
+                       <div class="pure-u-1">
+                               <dl class="form-col">
+                                       <dt class="heading">
+                                               <xsl:if test="not(delegate/id)">
+                                                       <xsl:value-of 
select="php:function('lang', 'New delegate')" />
+                                               </xsl:if>
+                                               <xsl:if test="delegate/id">
+                                                       <xsl:value-of 
select="php:function('lang', 'Edit delegate')" />
+                                               </xsl:if>
+                                       </dt>
+                               </dl>
+                       </div>
+               </div>
+
+               <dl class="form">
+                
+               </dl>
+
+               <xsl:call-template name="msgbox"/>
+
+               <form action="" method="POST" id="form" name="form">
+                       <div class="pure-g">
+                               <div class="pure-u-1 pure-u-md-1-3">
+                                       <dl class="form-col">
+                                               <dt>
+                                                       <label for="field_name">
+                                                               <xsl:value-of 
select="php:function('lang', 'delegate')" />
+                                                       </label>
+                                               </dt>
+                                               <dd>
+                                                       <input name="name" 
type="text" value="{delegate/name}">
+                                                               <xsl:attribute 
name="data-validation">
+                                                                       
<xsl:text>required</xsl:text>
+                                                               </xsl:attribute>
+                                                               <xsl:attribute 
name="data-validation-error-msg">
+                                                                       
<xsl:value-of select="php:function('lang', 'Please enter a delegate')" />
+                                                               </xsl:attribute>
+                                                       </input>
+                                               </dd>
+                                               <dt>
+                                                       <label for="field_ssn">
+                                                               <xsl:value-of 
select="php:function('lang', 'ssn')" />
+                                                       </label>
+                                               </dt>
+                                               <dd>
+                                                       <input name="ssn" 
type="text" value="{delegate/ssn}">
+                                                               
<!--xsl:attribute name="data-validation">
+                                                                       
<xsl:text>required</xsl:text>
+                                                               
</xsl:attribute-->
+                                                               <xsl:attribute 
name="data-validation-error-msg">
+                                                                       
<xsl:value-of select="php:function('lang', 'Please enter a ssn')" />
+                                                               </xsl:attribute>
+                                                       </input>
+                                               </dd>
+                                               <dt>
+                                                       <label 
for="field_email">
+                                                               <xsl:value-of 
select="php:function('lang', 'Email')" />
+                                                       </label>
+                                               </dt>
+                                               <dd>
+                                                       <input name="email" 
type="text" value="{delegate/email}">
+                                                               <xsl:attribute 
name="data-validation">
+                                                                       
<xsl:text>required</xsl:text>
+                                                               </xsl:attribute>
+                                                               <xsl:attribute 
name="data-validation-error-msg">
+                                                                       
<xsl:value-of select="php:function('lang', 'Please enter an email')" />
+                                                               </xsl:attribute>
+                                                       </input>
+                                               </dd>
+                                               <dt>
+                                                       <label 
for="field_phone">
+                                                               <xsl:value-of 
select="php:function('lang', 'Phone')" />
+                                                       </label>
+                                               </dt>
+                                               <dd>
+                                                       <input type='text' 
id='field_phone' name="phone" value='{delegate/phone}'/>
+                                               </dd>
+                                               <dt>
+                                                       <label 
for="field_organization">
+                                                               <xsl:value-of 
select="php:function('lang', 'Organization')" />
+                                                       </label>
+                                               </dt>
+                                               <dd>
+                                                       <div 
class="autocomplete">
+                                                               <input 
id="field_organization_id" name="organization_id" type="hidden" 
value="{delegate/organization_id}">
+                                                                       
<xsl:attribute name="data-validation">
+                                                                               
<xsl:text>required</xsl:text>
+                                                                       
</xsl:attribute>
+                                                                       
<xsl:attribute name="data-validation-error-msg">
+                                                                               
<xsl:value-of select="php:function('lang', 'Please enter an organization')" />
+                                                                       
</xsl:attribute>
+                                                               </input>
+                                                               <input 
name="organization_name" type="text" id="field_organization_name" 
value="{delegate/organization_name}">
+                                                                       
<xsl:attribute name="data-validation">
+                                                                               
<xsl:text>required</xsl:text>
+                                                                       
</xsl:attribute>
+                                                                       
<xsl:attribute name="data-validation-error-msg">
+                                                                               
<xsl:value-of select="php:function('lang', 'Please enter an organization')" />
+                                                                       
</xsl:attribute>
+                                                                       <xsl:if 
test="delegate/organization_id">
+                                                                               
<xsl:attribute name='disabled'>disabled</xsl:attribute>
+                                                                       
</xsl:if>
+                                                               </input>
+                                                               <div 
id="organization_container"/>
+                                                       </div>
+                                               </dd>
+                                               
+                                       </dl>
+                               </div>
+                               <div class="pure-u-1 pure-u-md-1-3">
+                                       <dl class="form-col">
+                                               <xsl:if test="delegate/id">
+                                                       <dt>
+                                                               <label 
for="field_active">
+                                                                       
<xsl:value-of select="php:function('lang', 'Active')"/>
+                                                               </label>
+                                                       </dt>
+                                                       <dd>
+                                                               <select 
id="field_active" name="active">
+                                                                       <option 
value="1">
+                                                                               
<xsl:if test="delegate/active=1">
+                                                                               
        <xsl:attribute name="selected">checked</xsl:attribute>
+                                                                               
</xsl:if>
+                                                                               
<xsl:value-of select="php:function('lang', 'Active')"/>
+                                                                       
</option>
+                                                                       <option 
value="0">
+                                                                               
<xsl:if test="delegate/active=0">
+                                                                               
        <xsl:attribute name="selected">checked</xsl:attribute>
+                                                                               
</xsl:if>
+                                                                               
<xsl:value-of select="php:function('lang', 'Inactive')"/>
+                                                                       
</option>
+                                                               </select>
+                                                       </dd>
+                                               </xsl:if>
+                                       </dl>
+                               </div>
+                       </div>
+                        
+                       <div class="form-buttons">
+                               <xsl:if test="not(delegate/id)">
+                                       <input type="submit" 
value="{php:function('lang', 'Add')}"/>
+                               </xsl:if>
+                               <xsl:if test="delegate/id">
+                                       <input type="submit" 
value="{php:function('lang', 'Save')}"/>
+                               </xsl:if>
+                               <a class="cancel" href="{delegate/cancel_link}">
+                                       <xsl:value-of 
select="php:function('lang', 'Cancel')" />
+                               </a>
+                       </div>
+               </form>
+       </div>
+       <script type="text/javascript">
+               var endpoint = '<xsl:value-of select="module" />';
+        <![CDATA[
+            $(document).ready(function(){
+                JqueryPortico.autocompleteHelper(phpGWLink('bookingfrontend/', 
{menuaction: endpoint+'.uiorganization.index', phpgw_return_as: 'json'} ), 
'field_organization_name', 'field_organization_id', 'organization_container');
+                
//JqueryPortico.autocompleteHelper('index.php?menuaction='+endpoint+'.uiorganization.index&phpgw_return_as=json&','field_organization_name',
 'field_organization_id','organization_container');
+            });
+        ]]>
+       </script>
+</xsl:template>

Modified: trunk/bookingfrontend/templates/base/organization.xsl
===================================================================
--- trunk/bookingfrontend/templates/base/organization.xsl       2017-10-12 
15:01:32 UTC (rev 17151)
+++ trunk/bookingfrontend/templates/base/organization.xsl       2017-10-13 
17:51:21 UTC (rev 17152)
@@ -99,6 +99,15 @@
                </a>
 
                <h3>
+                       <xsl:value-of select="php:function('lang', 
'delegates')" />
+               </h3>
+               <div id="delegates_container"/>
+
+               <a href="{organization/new_delegate_link}">
+                       <xsl:value-of select="php:function('lang', 'new 
delegate')" />
+               </a>
+
+               <h3>
                        <xsl:value-of select="php:function('lang', 'Used 
buildings')" />
                </h3>
                <div id="buildings_used_by_container"/>
@@ -106,10 +115,11 @@
 
        <script type="text/javascript">
                var organization_id = <xsl:value-of select="organization/id"/>;
-               var lang = <xsl:value-of select="php:function('js_lang', 
'Name', 'Activity', 'Contact 1', 'Contact 2')"/>;
+               var lang = <xsl:value-of select="php:function('js_lang', 
'Name', 'Activity', 'Contact 1', 'Contact 2', 'email','phone', 'active')"/>;
        
                <![CDATA[
                 var groupURL = 
'index.php?menuaction=bookingfrontend.uigroup.index&sort=name&filter_organization_id='
 + organization_id + '&phpgw_return_as=json&';
+                var delegateURL = 
'index.php?menuaction=bookingfrontend.uidelegate.index&sort=name&filter_organization_id='
 + organization_id + '&phpgw_return_as=json&filter_active=-1&';
                 var buildingURL = 
'index.php?menuaction=bookingfrontend.uibuilding.find_buildings_used_by&sort=name&organization_id='
 + organization_id + '&phpgw_return_as=json&';
                 ]]>
                 
@@ -122,9 +132,18 @@
                {key: 'primary_contact_name', label: lang['Contact 1']},
                {key: 'secondary_contact_name', label: lang['Contact 2']}
                ];
+
+               var colDefsDelegate = [
+               {key: 'name', label: lang['Name'], formatter: genericLink},
+               {key: 'email', label: lang['email']},
+               {key: 'phone', label: lang['phone']},
+               {key: 'active', label: lang['active']}
+               ];
+
                var colDefsBuilding = [{key: 'name', label: lang['Name'], 
formatter: genericLink}];
                 
                createTable('groups_container', groupURL, colDefsGroup);
+               createTable('delegates_container', delegateURL, 
colDefsDelegate);
                createTable('buildings_used_by_container', buildingURL, 
colDefsBuilding, rBuilding);
                        
        </script>




reply via email to

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