fmsystem-commits
[Top][All Lists]
Advanced

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

[Fmsystem-commits] [12742] bkbooking: bugfix


From: Kjell Arne Espedal
Subject: [Fmsystem-commits] [12742] bkbooking: bugfix
Date: Thu, 12 Feb 2015 13:48:57 +0000

Revision: 12742
          http://svn.sv.gnu.org/viewvc/?view=rev&root=fmsystem&revision=12742
Author:   kjell
Date:     2015-02-12 13:48:57 +0000 (Thu, 12 Feb 2015)
Log Message:
-----------
bkbooking: bugfix 

Modified Paths:
--------------
    branches/stavangerkommune/booking/inc/class.boapplication.inc.php
    branches/stavangerkommune/booking/inc/class.boevent.inc.php
    branches/stavangerkommune/booking/inc/class.uievent.inc.php

Modified: branches/stavangerkommune/booking/inc/class.boapplication.inc.php
===================================================================
--- branches/stavangerkommune/booking/inc/class.boapplication.inc.php   
2015-02-12 13:26:23 UTC (rev 12741)
+++ branches/stavangerkommune/booking/inc/class.boapplication.inc.php   
2015-02-12 13:48:57 UTC (rev 12742)
@@ -1,232 +1,237 @@
 <?php
-phpgw::import_class('booking.bocommon');
-
-class booking_boapplication extends booking_bocommon
-{
-       function __construct()
+       phpgw::import_class('booking.bocommon');
+       
+       class booking_boapplication extends booking_bocommon
        {
-               parent::__construct();
-               $this->activity_bo = CreateObject('booking.boactivity');
-               $this->organization_bo = CreateObject('booking.boorganization');
-               $this->so = CreateObject('booking.soapplication');
-       }
+               function __construct()
+               {
+                       parent::__construct();
+            $this->activity_bo = CreateObject('booking.boactivity');
+            $this->organization_bo = CreateObject('booking.boorganization');
+                       $this->so = CreateObject('booking.soapplication');
+               }
 
-       function send_notification($application, $created=false, 
$assocciated=false)
-       {
-               if (!(isset($GLOBALS['phpgw_info']['server']['smtp_server']) && 
$GLOBALS['phpgw_info']['server']['smtp_server']))
-                       return;
-               $send = CreateObject('phpgwapi.send');
+               function send_notification($application, $created=false, 
$assocciated=false)
+               {
+                       if 
(!(isset($GLOBALS['phpgw_info']['server']['smtp_server']) && 
$GLOBALS['phpgw_info']['server']['smtp_server']))
+                               return;
+                       $send = CreateObject('phpgwapi.send');
 
-               $config = CreateObject('phpgwapi.config','booking');
-               $config->read();
-               $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
-               $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
+                       $config = CreateObject('phpgwapi.config','booking');
+                       $config->read();
+                       $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
+                       $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
 
-               $subject = $config->config_data['application_mail_subject'];
+                       $subject = 
$config->config_data['application_mail_subject'];
 
-               $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uiapplication.show&id='.$application['id'].'&secret='.$application['secret'];
+                       $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uiapplication.show&id='.$application['id'].'&secret='.$application['secret'];
 
-               if ($created) {
-                       $body = 
"<pre>".$config->config_data['application_mail_created']."</pre>";
-                       $body .= '<p><a href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></p>';
+                       if ($created) {
+                               $body = 
"<pre>".$config->config_data['application_mail_created']."</pre>";
+                               $body .= '<p><a href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></p>';
 
-               } elseif ($application['status'] == 'PENDING') {
-                       $body = "<p>Din søknad i 
".$config->config_data['application_mail_systemname']." om leie/lån er 
".lang($application['status']);
-                       $body .= 
"</p><pre>".$config->config_data['application_mail_pending']."</pre>";
-                       $body .= '<p><a href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></p>';
-                       if ($application['comment'] != '') {
-                               $body .= '<p>Kommentar fra saksbehandler:<br 
/>'.$application['comment'].'</p>';
-                       }
-               } elseif ($application['status'] == 'ACCEPTED') {
-                       $accepted = $this->so->get_accepted($application['id']);
-                       $adates = "";
-                       foreach ($accepted as $key => $date) {
-                               if($key === 0)
-                                       $adates .= implode(" - ",$date)."\n";
-                               else
-                                       $adates .= "\t".implode(" - 
",$date)."\n";
-                       }
-                       $rejected = $this->so->get_rejected($application['id']);
-                       $rdates = "";
-                       foreach ($rejected as $key => $date) {
-                               if($key === 0)
-                                       $rdates .= implode(" - ",$date)."\n";
-                               else
-                                       $rdates .= "\t".implode(" - 
",$date)."\n";
-                       }
+                       } elseif ($application['status'] == 'PENDING') {
+                               $body = "<p>Din søknad i 
".$config->config_data['application_mail_systemname']." om leie/lån er 
".lang($application['status']); 
+                               $body .= 
"</p><pre>".$config->config_data['application_mail_pending']."</pre>";
+                               $body .= '<p><a href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></p>';
+                               if ($application['comment'] != '') {
+                                       $body .= '<p>Kommentar fra 
saksbehandler:<br />'.$application['comment'].'</p>';
+                               }
+                       } elseif ($application['status'] == 'ACCEPTED') {
+                               $accepted = 
$this->so->get_accepted($application['id']);                                
+                               $adates = "";
+                               foreach ($accepted as $key => $date) {
+                                               if($key === 0)
+                                                       $adates .= implode(" - 
",$date)."\n";
+                                               else                            
                
+                                                       $adates .= 
"\t".implode(" - ",$date)."\n";
+                               }
+                               $rejected = 
$this->so->get_rejected($application['id']);                                
+                               $rdates = "";
+                               foreach ($rejected as $key => $date) {
+                                               if($key === 0)
+                                                       $rdates .= implode(" - 
",$date)."\n";
+                                               else                            
                
+                                                       $rdates .= 
"\t".implode(" - ",$date)."\n";
+                               }
 
-                       $body = "<p>Din søknad i 
".$config->config_data['application_mail_systemname']." om leie/lån er 
".lang($application['status']);
-                       $body .= 
'</p><pre>'.$config->config_data['application_mail_accepted'].'<br /><a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></pre>';
-                       $body .= "<pre>Godkjent: ".$adates."</pre>";
-                       $body .= "<pre>Avvist: ".$rdates."</pre>";
+                               $body = "<p>Din søknad i 
".$config->config_data['application_mail_systemname']." om leie/lån er 
".lang($application['status']); 
+                               $body .= 
'</p><pre>'.$config->config_data['application_mail_accepted'].'<br /><a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></pre>';
+                               $body .= "<pre>Godkjent: ".$adates."</pre>";
+                               $body .= "<pre>Avvist: ".$rdates."</pre>";
 
-                       if ($application['comment'] != '') {
-                               $body .= "<p>Kommentar fra saksbehandler:<br 
/>".$application['comment']."</p>";
-                       }
+                               if ($application['comment'] != '') {
+                                       $body .= "<p>Kommentar fra 
saksbehandler:<br />".$application['comment']."</p>";
+                               }
 
-                       $buildingemail = 
$this->get_tilsyn_email($application['building_name']);
-                       if ($buildingemail['email1'] != '' || 
$buildingemail['email2'] != '' || $buildingemail['email3'] != '') {
-                               $resourcename = 
implode(",",$this->get_resource_name($application['resources']));
-                               $bsubject = 
$config->config_data['application_mail_subject'].": En søknad om leie/lån av 
".$resourcename." på ".$application['building_name']." er godkjent";
-                               $bbody = "<p>".$application['contact_name']." 
sin søknad  om leie/lån av ".$resourcename." på 
".$application['building_name']."</p>";
-                               $bbody .= "<p>Den ".$adates."er Godkjent</p>";
-                               $bbody .= "<p><b>Ekstra informasjon fra 
søker:</b><br />".$application['equipment']."</p>";
+                               $buildingemail = 
$this->get_tilsyn_email($application['building_name']);
+                               if ($buildingemail['email1'] != '' || 
$buildingemail['email2'] != '' || $buildingemail['email3'] != '') {
+                                       $resourcename = 
implode(",",$this->get_resource_name($application['resources']));
+                                       $bsubject = 
$config->config_data['application_mail_subject'].": En søknad om leie/lån av 
".$resourcename." på ".$application['building_name']." er godkjent";
+                                       $bbody = 
"<p>".$application['contact_name']." sin søknad  om leie/lån av 
".$resourcename." på ".$application['building_name']."</p>"; 
+                                       $bbody .= "<p>Den ".$adates."er 
Godkjent</p>";
+                    $bbody .= "<p><b>Ekstra informasjon fra søker:</b><br 
/>".$application['equipment']."</p>";
 
-                               foreach ($buildingemail as $bemail)
-                               {
-                                       try
+                                       foreach ($buildingemail as $bemail)
                                        {
-                                               $send->msg('email', $bemail, 
$bsubject, $bbody, '', '', '', $from, '', 'html');
-                                       }
-                                       catch (phpmailerException $e)
-                                       {
+                                               try
+                                               {
+                                                       $send->msg('email', 
$bemail, $bsubject, $bbody, '', '', '', $from, '', 'html');
+                                               }
+                                               catch (phpmailerException $e)
+                                               {
                                                // TODO: Inform user if 
something goes wrong
+                                               }
+
                                        }
+                               }
+                       } elseif ($application['status'] == 'REJECTED') {
+                               $body = "<p>Din søknad i 
".$config->config_data['application_mail_systemname']." om leie/lån er 
".lang($application['status']); 
+                               $body .= 
'</p><pre>'.$config->config_data['application_mail_rejected'].' <a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></pre>';
+                               if ($application['comment'] != '') {
+                                       $body .= '<p>Kommentar fra 
saksbehandler:<br />'.$application['comment'].'</p>';
+                               }
+                       } else {
+                $subject = 
$config->config_data['application_comment_mail_subject'];
+                $body = 
"<pre><p>".$config->config_data['application_comment_added_mail']."</p>";
+                $body .= '<p>Kommentar fra saksbehandler:<br 
/>'.$application['comment'].'</p></pre>';
+                $body .= '<p><a href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></p>';
+            }
+                       $body .= 
"<p>".$config->config_data['application_mail_signature']."</p>";
 
-                               }
+                       try
+                       {
+                               $send->msg('email', 
$application['contact_email'], $subject, $body, '', '', '', $from, '', 'html');
                        }
-               } elseif ($application['status'] == 'REJECTED') {
-                       $body = "<p>Din søknad i 
".$config->config_data['application_mail_systemname']." om leie/lån er 
".lang($application['status']);
-                       $body .= 
'</p><pre>'.$config->config_data['application_mail_rejected'].' <a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></pre>';
-                       if ($application['comment'] != '') {
-                               $body .= '<p>Kommentar fra saksbehandler:<br 
/>'.$application['comment'].'</p>';
+                       catch (phpmailerException $e)
+                       {
+                               // TODO: Inform user if something goes wrong
                        }
-               } else {
-                       $subject = 
$config->config_data['application_comment_mail_subject'];
-                       $body = 
"<pre><p>".$config->config_data['application_comment_added_mail']."</p>";
-                       $body .= '<p>Kommentar fra saksbehandler:<br 
/>'.$application['comment'].'</p></pre>';
-                       $body .= '<p><a href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].': søknad 
#'.$application['id'].'</a></p>';
                }
-               $body .= 
"<p>".$config->config_data['application_mail_signature']."</p>";
 
-               try
-               {
-                       $send->msg('email', $application['contact_email'], 
$subject, $body, '', '', '', $from, '', 'html');
-               }
-               catch (phpmailerException $e)
-               {
-                       // TODO: Inform user if something goes wrong
-               }
-       }
+        /**
+         * @ Send message about comment on application to case officer.
+         */
+        function send_admin_notification($application, $message = null)
+        {
+            if (!(isset($GLOBALS['phpgw_info']['server']['smtp_server']) && 
$GLOBALS['phpgw_info']['server']['smtp_server']))
+                return;
+            $send = CreateObject('phpgwapi.send');
 
-       /**
-        * @ Send message about comment on application to case officer.
-        */
-       function send_admin_notification($application, $message = null)
-       {
-               if (!(isset($GLOBALS['phpgw_info']['server']['smtp_server']) && 
$GLOBALS['phpgw_info']['server']['smtp_server']))
-                       return;
-               $send = CreateObject('phpgwapi.send');
+            $config = CreateObject('phpgwapi.config', 'booking');
+            $config->read();
 
-               $config = CreateObject('phpgwapi.config', 'booking');
-               $config->read();
+            $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
 
-               $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
+            $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
 
-               $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
+            $subject = 
$config->config_data['application_comment_mail_subject_caseofficer'];
 
-               $subject = 
$config->config_data['application_comment_mail_subject_caseofficer'];
+            $mailadresses = $config->config_data['emails'];
+            $mailadresses = explode("\n", $mailadresses);
 
-               $mailadresses = $config->config_data['emails'];
-               $mailadresses = explode("\n", $mailadresses);
+            if ($GLOBALS['phpgw_info']['server']['webserver_url'] != '' && 
isset($config->config_data['external_site_address']))
+                $link = $external_site_address . 
$GLOBALS['phpgw_info']['server']['webserver_url'] . 
'/index.php?menuaction=booking.uiapplication.show&id=' . $application['id'];
+            else
+                $link = $external_site_address . 
'/index.php?menuaction=booking.uiapplication.show&id=' . $application['id'];
 
-               if ($GLOBALS['phpgw_info']['server']['webserver_url'] != '' && 
isset($config->config_data['external_site_address']))
-                       $link = $external_site_address . 
$GLOBALS['phpgw_info']['server']['webserver_url'] . 
'/index.php?menuaction=booking.uiapplication.show&id=' . $application['id'];
-               else
-                       $link = $external_site_address . 
'/index.php?menuaction=booking.uiapplication.show&id=' . $application['id'];
+            $activity = 
$this->activity_bo->read_single($application['activity_id']);
 
-               $activity = 
$this->activity_bo->read_single($application['activity_id']);
+            if (strlen($application['customer_organization_number']) == 9) {
+                $orgid = 
$this->organization_bo->so->get_orgid($application['customer_organization_number']);
+                $organization = $this->organization_bo->read_single($orgid);
+                $body = '<b>Kommentar fra ' . $organization['name'] . '</b><br 
/>' . $message . '<br /><br/>';
+            } else {
+                $body = '<b>Kommentar fra 
'.$application['contact_name'].'</b><br />'.$message.'<br /><br/>';
+            }
 
-               if (strlen($application['customer_organization_number']) == 9) {
-                       $orgid = 
$this->organization_bo->so->get_orgid($application['customer_organization_number']);
-                       $organization = 
$this->organization_bo->read_single($orgid);
-                       $body = '<b>Kommentar fra ' . $organization['name'] . 
'</b><br />' . $message . '<br /><br/>';
-               } else {
-                       $body = '<b>Kommentar fra 
'.$application['contact_name'].'</b><br />'.$message.'<br /><br/>';
-               }
+            $body .= '<b>Bygg: </b>'.$application['building_name'].'<br />';
+            $body .= '<b>Aktivitet: </b>'.$activity['name'].'<br /><br />';
+            $body .= '<b>Kontaktperson:</b> 
'.$application['contact_name'].'<br />';
+            $body .= '<b>Epost:</b> '.$application['contact_email'].'<br />';
+            $body .= '<b>Telefon:</b> '.$application['contact_phone'].'<br 
/><br />';
+            $body .= '<a href="'.$link.'">Lenke til søknad</a><br /><br />';
 
-               $body .= '<b>Bygg: </b>'.$application['building_name'].'<br />';
-               $body .= '<b>Aktivitet: </b>'.$activity['name'].'<br /><br />';
-               $body .= '<b>Kontaktperson:</b> 
'.$application['contact_name'].'<br />';
-               $body .= '<b>Epost:</b> '.$application['contact_email'].'<br 
/>';
-               $body .= '<b>Telefon:</b> '.$application['contact_phone'].'<br 
/><br />';
-               $body .= '<a href="'.$link.'">Lenke til søknad</a><br /><br />';
+            foreach ($mailadresses as $adr)
+            {
+                try
+                {
+                    $send->msg('email', $adr, $subject, $body, '', '', '', 
$from, '', 'html');
+                }
+                catch (phpmailerException $e)
+                {
+                    // TODO: Inform user if something goes wrong
+                }
+            }
+        }
 
-               foreach ($mailadresses as $adr)
+
+        /**
+               * Returns an array of application ids from applications 
assocciated with buildings
+               * which the given user has access to
+               *
+               * @param int $user_id
+               */
+               public function accessable_applications($user_id)
                {
-                       try
-                       {
-                               $send->msg('email', $adr, $subject, $body, '', 
'', '', $from, '', 'html');
-                       }
-                       catch (phpmailerException $e)
-                       {
-                               // TODO: Inform user if something goes wrong
-                       }
-               }
-       }
+                       $applications = array();
+                       $this->db = & $GLOBALS['phpgw']->db;
 
-
-       /**
-        * Returns an array of application ids from applications assocciated 
with buildings
-        * which the given user has access to
-        *
-        * @param int $user_id
-        */
-       public function accessable_applications($user_id)
-       {
-               $applications = array();
-               $this->db = & $GLOBALS['phpgw']->db;
-
-               $sql = "select distinct ap.id
+#                      $sql = "select distinct ap.id
+#                                      from bb_application ap
+#                                      inner join bb_application_resource ar 
on ar.application_id = ap.id
+#                                      inner join bb_resource re on re.id = 
ar.resource_id
+#                                      inner join bb_building bu on bu.id = 
re.building_id";
+                       $sql = "select distinct ap.id
                                        from bb_application ap
                                        inner join bb_application_resource ar 
on ar.application_id = ap.id
                                        inner join bb_resource re on re.id = 
ar.resource_id
                                        inner join bb_building bu on bu.id = 
re.building_id
                                        inner join bb_permission pe on 
pe.object_id = bu.id and pe.object_type = 'building'
                                        where pe.subject_id = ".$user_id;
-               $this->db->query($sql);
-               $result = $this->db->resultSet;
+                       $this->db->query($sql);
+                       $result = $this->db->resultSet;
 
-               foreach($result as $r)
-               {
-                       $applications[] = $r['id'];
+                       foreach($result as $r)
+                       {
+                               $applications[] = $r['id'];
+                       }
+
+                       return $applications;
                }
 
-               return $applications;
-       }
+               public function read_dashboard_data($for_case_officer_id = 
array(null,null)) {
+                       $params = $this->build_default_read_params();
 
-       public function read_dashboard_data($for_case_officer_id = 
array(null,null)) {
-               $params = $this->build_default_read_params();
+                       if (!isset($params['filters'])) $params['filters'] = 
array();
+                       $where_clauses = !isset($params['filters']['where']) ? 
array() : (array)$params['filters']['where'];
+                       
+                       if (!is_null($for_case_officer_id[0])) {
+                               $where_clauses[] = 
"(%%table%%.display_in_dashboard = 1 AND %%table%%.case_officer_id = 
".intval($for_case_officer_id[1]).')';
+                       } else {
+                               $where_clauses[] = "(%%table%%.case_officer_id 
= ".intval($for_case_officer_id[1]).')';
+                       }
+                       
+                       if ($building_id = phpgw::get_var('filter_building_id', 
'int', 'GET', false)) {
+                               $where_clauses[] = "(%%table%%.id IN (SELECT 
DISTINCT a.id FROM bb_application a, bb_application_resource ar, bb_resource r 
WHERE ar.application_id = a.id AND ar.resource_id = r.id AND r.building_id = 
".intval($building_id)."))";
+                       }
+                       
+                       if ( $status = phpgw::get_var('status') != '') {
+                    $params['filters']['status'] = phpgw::get_var('status');   
    
+                       }
 
-               if (!isset($params['filters'])) $params['filters'] = array();
-               $where_clauses = !isset($params['filters']['where']) ? array() 
: (array)$params['filters']['where'];
+                       $params['filters']['where'] = $where_clauses;
 
-               if (!is_null($for_case_officer_id[0])) {
-                       $where_clauses[] = "(%%table%%.display_in_dashboard = 1 
AND %%table%%.case_officer_id = ".intval($for_case_officer_id[1]).')';
-               } else {
-                       $where_clauses[] = "(%%table%%.case_officer_id = 
".intval($for_case_officer_id[1]).')';
+                       return $this->so->read($params);
                }
 
-               if ($building_id = phpgw::get_var('filter_building_id', 'int', 
'GET', false)) {
-                       $where_clauses[] = "(%%table%%.id IN (SELECT DISTINCT 
a.id FROM bb_application a, bb_application_resource ar, bb_resource r WHERE 
ar.application_id = a.id AND ar.resource_id = r.id AND r.building_id = 
".intval($building_id)."))";
-               }
-
-               if ( $status = phpgw::get_var('status') != '') {
-                       $params['filters']['status'] = phpgw::get_var('status');
-               }
-
-               $params['filters']['where'] = $where_clauses;
-
-               return $this->so->read($params);
        }
 
-}
-
-class booking_boapplication_association extends booking_bocommon
-{
-       function __construct()
+       class booking_boapplication_association extends booking_bocommon
        {
-               parent::__construct();
-               $this->so = new booking_soapplication_association();
+               function __construct()
+               {
+                       parent::__construct();
+                       $this->so = new booking_soapplication_association();
+               }
        }
-}

Modified: branches/stavangerkommune/booking/inc/class.boevent.inc.php
===================================================================
--- branches/stavangerkommune/booking/inc/class.boevent.inc.php 2015-02-12 
13:26:23 UTC (rev 12741)
+++ branches/stavangerkommune/booking/inc/class.boevent.inc.php 2015-02-12 
13:48:57 UTC (rev 12742)
@@ -1,500 +1,150 @@
 <?php
-phpgw::import_class('booking.uicommon');
-phpgw::import_class('phpgwapi.send');
+phpgw::import_class('booking.bocommon_authorized');
 
-class booking_uievent extends booking_uicommon
+class booking_boevent extends booking_bocommon_authorized
 {
-    public $public_functions = array
-    (
-        'index'                        =>      true,
-        'add'                  =>      true,
-        'edit'                 =>      true,
-        'delete'                       =>      true,
-        'info'                 =>      true,
-        'toggle_show_inactive' =>      true,
-    );
+    const ROLE_ADMIN = 'organization_admin';
 
-    protected $customer_id;
-
-    public function __construct()
+    function __construct()
     {
         parent::__construct();
-        $this->bo = CreateObject('booking.boevent');
-        $this->customer_id = CreateObject('booking.customer_identifier');
-        $this->activity_bo = CreateObject('booking.boactivity');
-        $this->agegroup_bo = CreateObject('booking.boagegroup');
-        $this->audience_bo = CreateObject('booking.boaudience');
-        $this->organization_bo = CreateObject('booking.boorganization');
-        $this->resource_bo = CreateObject('booking.boresource');
-        self::set_active_menu('booking::applications::events');
-        $this->fields = array('activity_id', 'description',
-            'resources', 'cost', 'application_id',
-            'building_id', 'building_name',
-            'contact_name', 'contact_email', 'contact_phone',
-            'from_', 'to_', 'active', 'audience', 'reminder',
-            'is_public', 'sms_total', 'customer_internal');
+        $this->so = CreateObject('booking.soevent');
     }
-
-    public function index()
+    /**
+     * @see booking_bocommon_authorized
+     */
+    protected function get_subject_roles($for_object = null, 
$initial_roles=array())
     {
-        if(phpgw::get_var('phpgw_return_as') == 'json') {
-            return $this->index_json();
-        }
-        self::add_javascript('booking', 'booking', 'datatable.js');
-        phpgwapi_yui::load_widget('datatable');
-        phpgwapi_yui::load_widget('paginator');
-        $data = array(
-            'form' => array(
-                'toolbar' => array(
-                    'item' => array(
-                        array(
-                            'type' => 'link',
-                            'value' => lang('New event'),
-                            'href' => self::link(array('menuaction' => 
'booking.uievent.add'))
-                        ),
-                        array('type' => 'filter',
-                            'name' => 'buildings',
-                            'text' => lang('Building').':',
-                            'list' => $this->bo->so->get_buildings(),
-                        ),
-                        array('type' => 'filter',
-                            'name' => 'activities',
-                            'text' => lang('Activity').':',
-                            'list' => 
$this->bo->so->get_activities_main_level(),
-                        ),
-                        array('type' => 'text',
-                            'name' => 'query'
-                        ),
-                        array(
-                            'type' => 'submit',
-                            'name' => 'search',
-                            'value' => lang('Search')
-                        ),
-                        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' => 
'booking.uievent.index', 'phpgw_return_as' => 'json')),
-                'field' => array(
-                    array(
-                        'key' => 'id',
-                        'label' => lang('ID'),
-                        'formatter' => 'YAHOO.booking.formatLink'
-                    ),
-                    array(
-                        'key' => 'description',
-                        'label' => lang('Event'),
-                    ),
-                    array(
-                        'key' => 'activity_name',
-                        'label' => lang('Activity'),
-                    ),
-                    array(
-                        'key' => 'customer_organization_name',
-                        'label' => lang('Organization'),
-                    ),
-                    array(
-                        'key' => 'contact_name',
-                        'label' => lang('Contact'),
-                    ),
-                    array(
-                        'key' => 'building_name',
-                        'label' => lang('Building')
-                    ),
-                    array(
-                        'key' => 'from_',
-                        'label' => lang('From')
-                    ),
-                    array(
-                        'key' => 'to_',
-                        'label' => lang('To')
-                    ),
-                    array(
-                        'key' => 'active',
-                        'label' => lang('Active')
-                    ),
-                    array(
-                        'key' => 'link',
-                        'hidden' => true
-                    )
-                )
-            )
-        );
-        self::render_template('datatable', $data);
-    }
+        if ($this->current_app() == 'bookingfrontend') {
+            $bouser = CreateObject('bookingfrontend.bouser');
 
-    public function index_json()
-
-    {
-        if(isset($_SESSION['showall']))
-        {
-            unset($filters['building_name']);
-            unset($filters['activity_id']);
-        } else {
-            $testdata =  phpgw::get_var('buildings', 'int', 'REQUEST', null);
-            if ($testdata != 0) {
-                $filters['building_name'] = 
$this->bo->so->get_building(phpgw::get_var('buildings', 'int', 'REQUEST', 
null));
-            } else {
-                unset($filters['building_name']);
+            if (is_array($for_object) && 
$for_object['customer_organization_number']) {
+                $org = 
$this->so->get_org($for_object['customer_organization_number']);
+                $for_object['customer_organization_id'] = $org['id'];
+                $for_object['customer_organization_name'] = $org['name'];
             }
-            $testdata2 =  phpgw::get_var('activities', 'int', 'REQUEST', null);
-            if ($testdata2 != 0) {
-                $filters['activity_id'] = 
$this->bo->so->get_activities(phpgw::get_var('activities', 'int', 'REQUEST', 
null));
-            } else {
-                unset($filters['activity_id']);
-            }
-        }
 
-        $params = array(
-            'start' => phpgw::get_var('startIndex', 'int', 'REQUEST', 0),
-            'results' => phpgw::get_var('results', 'int', 'REQUEST', null),
-            'query'    => phpgw::get_var('query'),
-            'sort'     => phpgw::get_var('sort'),
-            'dir'      => phpgw::get_var('dir'),
-            'filters' => $filters
-        );
-        $events = $this->bo->so->read($params);
+            $org_id = is_array($for_object) ? 
$for_object['customer_organization_id'] : (!is_null($for_object) ? $for_object 
: null);
 
-        foreach($events['results'] as &$event)
-        {
-            $event['from_'] = pretty_timestamp($event['from_']);
-            $event['to_'] = pretty_timestamp($event['to_']);
+            if ($bouser->is_organization_admin($org_id)) {
+                $initial_roles[] = array('role' => self::ROLE_ADMIN);
+            }
         }
-
-        array_walk($events["results"], array($this, "_add_links"), 
"booking.uievent.edit");
-        return $this->yui_results($events);
+        return parent::get_subject_roles($for_object, $initial_roles);
     }
 
-    private function _combine_dates($from_, $to_)
+    /**
+     * @see bocommon_authorized
+     */
+    protected function get_object_role_permissions(array $forObject, 
$defaultPermissions)
     {
-        return array('from_' => $from_, 'to_' => $to_);
-    }
+        if ($this->current_app() == 'booking') {
+            $defaultPermissions[booking_sopermission::ROLE_DEFAULT] = array
+            (
+                'read'                 => true,
+                'delete'       => true,
+                'write'        => true,
+                'create'       => true,
+            );
+        }
 
-    protected function get_customer_identifier() {
-        return $this->customer_id;
-    }
+        if ($this->current_app() == 'bookingfrontend') {
+            $defaultPermissions[self::ROLE_ADMIN] = array
+            (
+                'write' => 
array_fill_keys(array('active','description','from_','to_','contact_name','contact_email',
+                    
'contact_phone','activity_name','audience','agegroups','is_public'), true),
+            );
+        }
 
-    protected function extract_customer_identifier(&$data) {
-        $this->get_customer_identifier()->extract_form_data($data);
+        return $defaultPermissions;
     }
 
-    protected function validate_customer_identifier(&$data) {
-        return $this->get_customer_identifier()->validate($data);
-    }
+    /**
+     * @see bocommon_authorized
+     */
+    protected function get_collection_role_permissions($defaultPermissions)
+    {
+        if ($this->current_app() == 'booking')
+        {
+            $defaultPermissions[booking_sopermission::ROLE_DEFAULT]['create'] 
= true;
+            $defaultPermissions[booking_sopermission::ROLE_DEFAULT]['write'] = 
true;
+        }
 
-    protected function install_customer_identifier_ui(&$entity) {
-        $this->get_customer_identifier()->install($this, $entity);
+        return $defaultPermissions;
     }
 
-    protected function validate(&$entity) {
-        $errors = array_merge($this->validate_customer_identifier($entity), 
$this->bo->validate($entity));
-        return $errors;
+    public function get_permissions(array $entity)
+    {
+        return parent::get_permissions($entity);
     }
 
-    protected function extract_form_data($defaults = array()) {
-        $entity = array_merge($defaults, extract_values($_POST, 
$this->fields));
-        $this->agegroup_bo->extract_form_data($entity);
-        $this->extract_customer_identifier($entity);
-        return $entity;
+    public function complete_expired(&$events) {
+        $this->so->complete_expired($events);
     }
 
-    protected function extract_and_validate($defaults = array()) {
-        $entity = $this->extract_form_data($defaults);
-        $errors = $this->validate($entity);
-        return array($entity, $errors);
+    public function find_expired() {
+        return $this->so->find_expired();
     }
 
-    protected function add_comment(&$event, $comment, $type = 'comment') {
-        $event['comments'][] = array(
-            'time'=> 'now',
-            'author'=>$this->current_account_fullname(),
-            'comment'=>$comment,
-            'type' => $type
-        );
-    }
-
-    protected function 
create_sendt_mail_notification_comment_text($event,$errors)
+    /**
+     * @ Send message about cancelation/modification on event to users of 
building.
+     */
+    function send_notification($type, $event, $mailadresses, $orgdate = null)
     {
-        $data = array();
+        if (!(isset($GLOBALS['phpgw_info']['server']['smtp_server']) && 
$GLOBALS['phpgw_info']['server']['smtp_server']))
+            return;
+        $send = CreateObject('phpgwapi.send');
 
-        foreach($errors['allocation'][0] as $e)
-        {
-            foreach($event['resources'] as $res)
-            {
-                $time = 
$this->bo->so->get_overlap_time_info($res,$e,'allocation');
+        $config        = CreateObject('phpgwapi.config','booking');
+        $config->read();
 
-                $from_ = new DateTime($time['from']);
-                $to_ = new DateTime($time['to']);
-                $date = $from_->format('d-m-Y');
-                $start = $from_->format('H:i');
-                $end = $to_->format('H:i');
+        $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
 
-                $resource = $this->bo->so->get_resource_info($res);
-                $_mymail = $this->bo->so->get_contact_mail($e,'allocation');
+        $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
 
-                $a = $_mymail[0];
-                if(array_key_exists($a,$data))
-                {
-                    $data[$a][] = array('date' => $date, 'building' => 
$event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end );
-                }
-                else
-                {
-                    $data[$a] =  array( array('date' => $date, 'building' => 
$event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end ));
-                }
-                if ($_mymail[1])
-                {
-                    $b = $_mymail[1];
-                    if(array_key_exists($a,$data))
-                    {
-                        $data[$b][] = array('date' => $date, 'building' => 
$event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end );
-                    }
-                    else
-                    {
-                        $data[$b] =  array( array('date' => $date, 'building' 
=> $event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end ));
-                    }
-                }
-            }
-        }
+//        $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uiapplication.add&building_id=';
+//        $link .= 
$event['building_id'].'&building_name='.urlencode($event['building_name']).'&from_[]=';
+//        $link .= 
urlencode($event['from_']).'&to_[]='.urlencode($event['to_']).'&resource='.implode(",",$event['resources']);
 
-        foreach($errors['booking'][0] as $e)
-        {
-            foreach($event['resources'] as $res)
-            {
-                $time = 
$this->bo->so->get_overlap_time_info($res,$e,'booking');
-
-                $from_ = new DateTime($time['from']);
-                $to_ = new DateTime($time['to']);
-                $date = $from_->format('d-m-Y');
-                $start = $from_->format('H:i');
-                $end = $to_->format('H:i');
-
-                $resource = $this->bo->so->get_resource_info($res);
-                $_mymail = $this->bo->so->get_contact_mail($e,'booking');
-
-                $a = $_mymail[0];
-                if(array_key_exists($a,$data))
-                {
-                    $data[$a][] = array('date' => $date, 'building' => 
$event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end );
-                }
-                else
-                {
-                    $data[$a] =  array( array('date' => $date, 'building' => 
$event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end ));
-                }
-                if ($_mymail[1])
-                {
-                    $b = $_mymail[1];
-                    if(array_key_exists($a,$data))
-                    {
-                        $data[$b][] = array('date' => $date, 'building' => 
$event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end );
-                    }
-                    else
-                    {
-                        $data[$b] =  array( array('date' => $date, 'building' 
=> $event['building_name'], 'resource' => $resource['name'], 'start' => $start, 
'end' => $end ));
-                    }
-                }
-
-            }
+        $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uibuilding.schedule&id=';
+        $link .= $event['building_id'].'&date='.substr($event['from_'], 0, 10);
+        $body = "";
+        $subject = "";
+        if (!$type) {
+            $subject .= $config->config_data['event_canceled_mail_subject'];
+            $body .= "<p>".$config->config_data['event_canceled_mail'];
+        } else {
+            $subject .= $config->config_data['event_edited_mail_subject'];
+            $body .= "<p>".$config->config_data['event_edited_mail'];
         }
-        return $data;
-    }
 
-    public function add()
-    {
-        $errors = array();
-        $event = array('customer_internal' => 0);
-        if($_SERVER['REQUEST_METHOD'] == 'POST')
-        {
-
-            array_set_default($_POST, 'from_', array());
-            array_set_default($_POST, 'to_', array());
-            $event['dates'] = array_map(array(self, '_combine_dates'), 
$_POST['from_'], $_POST['to_']);
-
-            array_set_default($_POST, 'resources', array());
-            $event['active'] = '1';
-            $event['completed'] = '0';
-
-            array_set_default($event, 'audience', array());
-            array_set_default($event, 'agegroups', array());
-            $event['secret'] = $this->generate_secret();
-            $event['is_public'] = 1;
-            $event['building_name'] = $_POST['building_name'];
-
-            if ($_POST['organization_name'] || $_POST['org_id2']) {
-                if ($_POST['organization_name']) {
-                    $event['customer_organization_name'] = 
$_POST['organization_name'];
-                    $event['customer_organization_id'] = 
$_POST['organization_id'];
-                    $organization = 
$this->organization_bo->read_single(intval(phpgw::get_var('organization_id', 
'POST')));
-                } else {
-                    $orgid = $this->bo->so->get_org($_POST['org_id2']);
-                    $event['org_id2'] = $_POST['org_id2'];
-                    $event['customer_organization_name'] = $orgid['name'];
-                    $event['customer_organization_id'] = $orgid['id'];
-                    $organization = 
$this->organization_bo->read_single(intval($orgid['id']));
-                }
-
-                if ($organization['customer_internal'] == 0) {
-                    $_POST['customer_identifier_type'] = 
$organization['customer_identifier_type'];
-                    $_POST['customer_internal'] = 
$organization['customer_internal'];
-                    if (strlen($organization['customer_organization_number']) 
== 9) {
-                        $_POST['customer_organization_number'] = 
$organization['customer_organization_number'];
-                    } else {
-                        $errors['organization_number'] = lang('The 
organization number is wrong or not present');
-                    }
-                } else {
-                    $_POST['customer_identifier_type'] = 'organization_number';
-                    $_POST['customer_internal'] = 
$organization['customer_internal'];
-                    if ((strlen($organization['customer_number']) == 6) || 
(strlen($organization['customer_number']) == 5)) {
-                        $_POST['customer_organization_number'] = 
$organization['customer_number'];
-                    } else {
-                        $errors['resource_number'] = lang('The resource number 
is wrong or not present');
-                    }
-                }
-                if ($organization['contacts'][0]['name'] != '') {
-                    $_POST['contact_name'] = 
$organization['contacts'][0]['name'];
-                    $_POST['contact_email'] = 
$organization['contacts'][0]['email'];
-                    $_POST['contact_phone'] = 
$organization['contacts'][0]['phone'];
-                } else {
-                    $_POST['contact_name'] = 
$organization['contacts'][1]['name'];
-                    $_POST['contact_email'] = 
$organization['contacts'][1]['email'];
-                    $_POST['contact_phone'] = 
$organization['contacts'][1]['phone'];
-                }
-            }
-            if (!$_POST['application_id'])
-            {
-                $temp_errors = array();
-                foreach( $event['dates'] as $checkdate)
-                {
-                    $event['from_'] = $checkdate['from_'];
-                    $_POST['from_'] = $checkdate['from_'];
-                    $event['to_'] = $checkdate['to_'];
-                    $_POST['to_'] = $checkdate['to_'];
-                    list($event, $errors) = 
$this->extract_and_validate($event);
-                    $time_from = split(" ",$_POST['from_']);
-                    $time_to = split(" ",$_POST['to_']);
-                    if ($time_from[0] == $time_to[0])
-                    {
-                        if ($time_from[1] >= $time_to[1])
-                        {
-                            $errors['time'] = lang('Time is set wrong');
-                        }
-                    }
-                    if ($errors != array()) {
-                        $temp_errors = $errors;
-                    }
-                }
-                $errors = $temp_errors;
-            }
-            else
-            {
-                list($event, $errors) = $this->extract_and_validate($event);
-                $time_from = split(" ",$_POST['from_']);
-                $time_to = split(" ",$_POST['to_']);
-                if ($time_from[0] == $time_to[0]) {
-                    if ($time_from[1] >= $time_to[1])
-                    {
-                        $errors['time'] = lang('Time is set wrong');
-                    }
-                }
-            }
-
-            if ($_POST['cost'] != 0 and 
!$event['customer_organization_number'] and !$event['customer_ssn']) {
-                $errors['invoice_data'] = lang('There is set a cost, but no 
invoice data is filled inn');
-            }
-            if(($_POST['organization_name'] != '' or $_POST['org_id2'] != '') 
and isset($errors['contact_name'])) {
-                $errors['contact_name'] = lang('Organization is missing 
booking charge');
-            }
-            if(!$errors['event'] && !$errors['from_'] && !$errors['time'] && 
!$errors['invoice_data'] && !$errors['resource_number'] && 
!$errors['organization_number'] && !$errors['contact_name'] && !$errors['cost'] 
&& !$errors['activity_id'])
-            {
-                if (!$_POST['application_id'])
-                {
-                    $allids = array();
-                    foreach( $event['dates'] as $checkdate)
-                    {
-                        $event['from_'] = $checkdate['from_'];
-                        $event['to_'] = $checkdate['to_'];
-
-                        unset($event['comments']);
-                        if (count($event['dates']) < 2)
-                        {
-                            $this->add_comment($event, lang('Event was 
created'));
-                            $receipt = $this->bo->add($event);
-                        }
-                        else
-                        {
-                            $this->add_comment($event, lang('Multiple Events 
was created'));
-                            $receipt = $this->bo->add($event);
-                            $allids[] = array($receipt['id']);
-                        }
-                    }
-                    if ($allids)
-                    {
-                        $this->bo->so->update_comment($allids);
-                        $this->bo->so->update_id_string();
-                    }
-                }
-                else
-                {
-                    $this->add_comment($event, lang('Event was created'));
-                    $receipt = $this->bo->add($event);
-                    $this->bo->so->update_id_string();
-                }
-                $this->redirect(array('menuaction' => 'booking.uievent.edit', 
'id'=>$receipt['id'], 'secret'=>$event['secret'], 'warnings'=>$errors));
-            }
+        if ($_POST['org_from'] < $event['from_'] && $_POST['org_to'] == 
$event['to_']) {
+            $event['from_'] = $_POST['org_from'];
+            $event['to_'] = $event['from_'];
+            $freetime = pretty_timestamp($event['from_']).' til 
'.pretty_timestamp($event['to_']);
         }
-        if ($errors['event']) {
-            $errors['warning'] = lang('NB! No data will be saved, if you 
navigate away you will loose all.');
+        elseif ($_POST['org_from'] == $event['from_'] && $_POST['org_to'] > 
$event['to_']) {
+            $event['from_'] = $event['to_'];
+            $event['to_'] = $_POST['org_to'];
+            $freetime = pretty_timestamp($event['from_']).' til 
'.pretty_timestamp($event['to_']);
         }
-        $default_dates = array_map(array(self, '_combine_dates'), '','');
-        array_set_default($event, 'dates', $default_dates);
-
-        if (!phpgw::get_var('from_report', 'POST'))
-        {
-            $this->flash_form_errors($errors);
+        elseif ($_POST['org_from'] < $event['from_'] && $_POST['org_to'] > 
$event['to_']) {
+            $freetime = pretty_timestamp($_POST['org_from']).' til 
'.pretty_timestamp($event['from_'])." og \n";
+            $freetime .= pretty_timestamp($event['to_']).' til 
'.pretty_timestamp($_POST['org_to']);
+        } else {
+            $freetime = pretty_timestamp($event['from_']).' til 
'.pretty_timestamp($event['to_'])."\n";
         }
 
-        self::add_javascript('booking', 'booking', 'event.js');
-        array_set_default($event, 'resources', array());
-        $event['resources_json'] = json_encode(array_map('intval', 
$event['resources']));
-        $event['cancel_link'] = self::link(array('menuaction' => 
'booking.uievent.index'));
-        array_set_default($event, 'cost', '0');
-        $activities = $this->activity_bo->fetch_activities();
-        $activities = $activities['results'];
-        $agegroups = $this->agegroup_bo->fetch_age_groups();
-        $agegroups = $agegroups['results'];
-        $audience = $this->audience_bo->fetch_target_audience();
-        $audience = $audience['results'];
+        $body .= '</p><p>'.$event['customer_organization_name'].' har 
avbestilt tid i '.$event['building_name'].':<br />';
+        $body .= implode(", 
",$this->so->get_resources(implode(",",$event['resources']))).' den '.$freetime;
+        $body .= ' - <a href="'.$link.'">'.lang('Check calendar').'</a></p>';
+        $body .= 
"<p>".$config->config_data['application_mail_signature']."</p>";
 
-        $this->install_customer_identifier_ui($event);
-
-        $this->add_template_helpers();
-        self::render_template('event_new', array('event' => $event, 
'activities' => $activities, 'agegroups' => $agegroups, 'audience' => 
$audience));
-    }
-
-    private function send_mailnotification($receiver, $subject, $body)
-    {
-        $send = CreateObject('phpgwapi.send');
-
-        $config        = CreateObject('phpgwapi.config','booking');
-        $config->read();
-        $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
-
-        if (strlen(trim($body)) == 0)
+        foreach ($mailadresses as $adr)
         {
-            echo "failed\n";
-            return false;
-        }
-
-        if (strlen($receiver) > 0)
-        {
-            echo "$receiver - mail\n";
             try
             {
-                $send->msg('email', $receiver, $subject, $body, '', '', '', 
$from, '', 'html');
+                $send->msg('email', $adr, $subject, $body, '', '', '', $from, 
'', 'html');
             }
             catch (phpmailerException $e)
             {
@@ -503,331 +153,81 @@
         }
     }
 
-    public function edit()
+    /**
+     * @ Send message about cancelation/modification on event to admins of 
building.
+     */
+    function send_admin_notification($type, $event, $message = null, $orgdate 
= null)
     {
-        $id = intval(phpgw::get_var('id', 'GET'));
-        $event = $this->bo->read_single($id);
-        $building_info = $this->bo->so->get_building_info($id);
-        $event['building_id'] = $building_info['id'];
-        $event['building_name'] = $building_info['name'];
+        if (!(isset($GLOBALS['phpgw_info']['server']['smtp_server']) && 
$GLOBALS['phpgw_info']['server']['smtp_server']))
+            return;
+        $send = CreateObject('phpgwapi.send');
+
         $config        = CreateObject('phpgwapi.config','booking');
         $config->read();
 
+        $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
+
         $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
-        $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uibuilding.schedule&id='.$event['building_id']."&date=".substr($event['from_'],0,-9);
-        $errors = array();
-        $customer = array();
 
-        if ($event['customer_identifier_type'])
-        {
-            $customer['customer_identifier_type'] = 
$event['customer_identifier_type'];
-            $customer['customer_ssn'] = $event['customer_ssn'];
-            $customer['customer_organization_number'] = 
$event['customer_organization_number'];
-            $customer['customer_internal'] = $event['customer_internal'];
-            $orginfo = 
$this->bo->so->get_org($event['customer_organization_number']);
-            $customer['customer_organization_id'] = $orginfo['id'];
-            $customer['customer_organization_name'] = $orginfo['name'];
+        if (!$type) {
+            $subject = $config->config_data['event_canceled_mail_subject'];
         } else {
-            $customer['customer_organization_name'] = 
$event['customer_organization_name'];
-            $customer['customer_organization_id'] = 
$event['customer_organization_id'];
-            $organization = 
$this->organization_bo->read_single($event['customer_organization_id']);
-            $customer['customer_identifier_type'] = 'organization_number';
-            $customer['customer_ssn'] = $organization['customer_internal'];
-            $customer['customer_organization_number'] = 
$organization['organization_number'];
-            $customer['customer_internal'] = 
$organization['customer_internal'];
+            $subject = $config->config_data['event_edited_mail_subject'];
         }
 
-        list($event, $errors) = $this->extract_and_validate($event);
+        $body = '<b>Beksjed fra 
'.$event['customer_organization_name'].'</b><br />'.$message.'<br /><br/>';
+        $body .= '<b>Kontaktperson:</b> '.$event['contact_name'].'<br />';
+        $body .= '<b>Epost:</b> '.$event['contact_email'].'<br />';
+        $body .= '<b>Telefon:</b> '.$event['contact_phone'].'<br /><br />';
+        $body .= '<br /><b>Epost som er sendt til brukere av Hallen:</b><br 
/>';
 
-        if ($event['customer_organization_number']) {
-            $orginfo = 
$this->bo->so->get_org($event['customer_organization_number']);
-            $event['customer_organization_id'] = $orginfo['id'];
-            $event['customer_organization_name'] = $orginfo['name'];
-        }
+        $mailadresses = $config->config_data['emails'];
+        $mailadresses = explode("\n",$mailadresses);
 
-        if($_SERVER['REQUEST_METHOD'] == 'POST') {
-            if (!$_POST['organization_name']) {
-                $event['customer_organization_name'] = Null;
-                $event['customer_organization_id'] = Null;
-            }
-            array_set_default($_POST, 'resources', array());
+        $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uibuilding.schedule&id=';
+        $link .= $event['building_id'].'&date='.substr($event['from_'], 0, 10);
 
-            if ($_POST['organization_name']) {
-                $event['customer_organization_name'] = 
$_POST['organization_name'];
-                $event['customer_organization_id'] = $_POST['organization_id'];
-                $organization = 
$this->organization_bo->read_single(intval(phpgw::get_var('organization_id', 
'POST')));
-
-                if ($organization['customer_internal'] == 0) {
-                    $event['customer_identifier_type'] = 
$organization['customer_identifier_type'];
-                    $event['customer_internal'] = 
$organization['customer_internal'];
-                    if (strlen($organization['customer_organization_number']) 
== 9) {
-                        $event['customer_organization_number'] = 
$organization['customer_organization_number'];
-                    } else {
-                        $errors['organization_number'] = lang('The 
organization number is wrong or not present');
-                    }
-                } else {
-                    $event['customer_identifier_type'] = 'organization_number';
-                    $event['customer_internal'] = 
$organization['customer_internal'];
-                    if ((strlen($organization['customer_number']) == 6) || 
(strlen($organization['customer_number']) == 5)) {
-                        $event['customer_organization_number'] = 
$organization['customer_number'];
-                    } else {
-                        $errors['resource_number'] = lang('The resource number 
is wrong or not present');
-                    }
-                }
-            } elseif ($_POST['customer_identifier_type'] == 'ssn') {
-                $event['customer_identifier_type'] = 'ssn';
-                $event['customer_ssn'] = $_POST['customer_ssn'];
-
-            } elseif ($_POST['customer_identifier_type'] == 
'organization_number') {
-                $event['customer_identifier_type'] = 'organization_number';
-                $event['customer_organization_number'] = 
$_POST['customer_organization_number'];
-            }
-
-            if ($_POST['cost'] != 0 and 
!$event['customer_organization_number'] and !$event['customer_ssn']) {
-                $errors['invoice_data'] = lang('There is set a cost, but no 
invoice data is filled inn');
-            }
-
-            if (!$errors['event'] and !$errors['resource_number'] and 
!$errors['organization_number'] and !$errors['invoice_data'] && 
!$errors['contact_name'] && !$errors['cost']) {
-                if ((phpgw::get_var('sendtorbuilding', 'POST') || 
phpgw::get_var('sendtocontact', 'POST') || phpgw::get_var('sendtocollision', 
'POST')) && phpgw::get_var('active', 'POST')) {
-
-                    if (phpgw::get_var('sendtocollision', 'POST') || 
phpgw::get_var('sendtocontact', 'POST') || phpgw::get_var('sendtorbuilding', 
'POST')) {
-                        $maildata = 
$this->create_sendt_mail_notification_comment_text($event, $errors);
-
-                        if (phpgw::get_var('sendtocollision', 'POST')) {
-                            $comment_text_log = "<span style='color: green;'>" 
. lang('Message sent about the changes in the reservations') . ':</span><br />';
-                            $res = array();
-                            $resname = '';
-                            foreach ($event['resources'] as $resid) {
-                                $res = 
$this->bo->so->get_resource_info($resid);
-                                $resname .= $res['name'] . ', ';
-                            }
-                            $comment_text_log .= $event['building_name'] . " 
(" . substr($resname, 0, -2) . ") " . pretty_timestamp($event['from_']) . " - " 
. pretty_timestamp($event['to_']);
-                            $this->add_comment($event, $comment_text_log);
-                        }
-                        if (phpgw::get_var('sendtocollision', 'POST')) {
-
-                            $subject = 
$config->config_data['event_conflict_mail_subject'];
-                            $body = "<p>" . 
$config->config_data['event_mail_conflict_contact_active_collision'] . "<br 
/>\n" . phpgw::get_var('mail', 'POST') . "\n";
-                            $body .= '<br /><a href="' . $link . '">Link til ' 
. $config->config_data['application_mail_systemname'] . '</a></p>';
-                            $body .= "<p>" . 
$config->config_data['application_mail_signature'] . "</p>";
-                            $mail_sendt_to = '';
-                            foreach (array_keys($maildata) as $mail) {
-                                $mailbody = '';
-                                $comment_text_log = "Reserverasjoner som har 
blitt overskrevet: \n";
-                                $mail_sendt_to = $mail_sendt_to . ' ' . $mail;
-                                foreach ($maildata[$mail] as $data) {
-                                    $comment_text_log .= $data['date'] . ', ' 
. $data['building'] . ', ' . $data['resource'] . ', Kl. ' . $data['start'] . ' 
- ' . $data['end'] . " \n";
-                                }
-                                $mailbody .= $body . "<pre>" . 
$comment_text_log . "</pre>";
-                                $this->send_mailnotification($mail, $subject, 
$mailbody);
-                            }
-                            if (strpos($mail_sendt_to, '@') !== False) {
-                                $comment = "<p>Melding om konflikt er sendt 
til" . $mail_sendt_to . "<br />\n" . phpgw::get_var('mail', 'POST') . "</p>";
-                                $this->add_comment($event, $comment);
-                            }
-                        }
-                        if (phpgw::get_var('sendtocontact', 'POST')) {
-                            $subject = 
$config->config_data['event_change_mail_subject'];
-                            $body = "<p>" . 
$config->config_data['event_change_mail'] . "<br />\n" . phpgw::get_var('mail', 
'POST');
-                            $body .= '<br /><a href="' . $link . '">Link til ' 
. $config->config_data['application_mail_systemname'] . '</a></p>';
-                            
$this->send_mailnotification($event['contact_email'], $subject, $body);
-                            $comment = $comment_text_log . '<br />Denne er 
sendt til ' . $event['contact_email'];
-                            $this->add_comment($event, $comment);
-                        }
-                        if (phpgw::get_var('sendtorbuilding', 'POST')) {
-
-                            $subject = 
$config->config_data['event_mail_building_subject'];
-
-                            $body = "<p>" . 
$config->config_data['event_mail_building'] . "<br />\n" . 
phpgw::get_var('mail', 'POST') . "</p>";
-
-                            if ($event['customer_organization_name']) {
-                                $username = 
$event['customer_organization_name'];
-                            } else {
-                                $username = $event['contact_name'];
-                            }
-                            $res = array();
-                            $resname = '';
-                            foreach ($event['resources'] as $resid) {
-                                $res = 
$this->bo->so->get_resource_info($resid);
-                                $resname .= $res['name'] . ', ';
-                            }
-                            $resources = $event['building_name'] . " (" . 
substr($resname, 0, -2) . ") " . pretty_timestamp($event['from_']) . " - " . 
pretty_timestamp($event['to_']);
-
-                            $body .= '<p>' . $username . ' har fått innvilget 
et arrangement i ' . $resources . ".";
-                            $body .= '<br /><a href="' . $link . '">Link til ' 
. $config->config_data['application_mail_systemname'] . '</a></p>';
-                            $body .= "<p>" . 
$config->config_data['application_mail_signature'] . "</p>";
-
-                            $sendt = 0;
-                            $mail_sendt_to = '';
-                            if ($event['contact_email']) {
-                                $sendt++;
-                                $mail_sendt_to = $mail_sendt_to . ' ' . 
$event['contact_email'];
-                                
$this->send_mailnotification($event['contact_email'], $subject, $body);
-                            }
-                            if ($building_info['email']) {
-                                $sendt++;
-                                $mail_sendt_to = $mail_sendt_to . ' ' . 
$building_info['email'];
-                                
$this->send_mailnotification($building_info['email'], $subject, $body);
-                            }
-                            if ($building_info['tilsyn_email']) {
-                                $sendt++;
-                                $mail_sendt_to = $mail_sendt_to . ' ' . 
$building_info['tilsyn_email'];
-                                
$this->send_mailnotification($building_info['tilsyn_email'], $subject, $body);
-                            }
-                            if ($building_info['tilsyn_email2']) {
-                                $sendt++;
-                                $mail_sendt_to = $mail_sendt_to . ' ' . 
$building_info['tilsyn_email2'];
-                                
$this->send_mailnotification($building_info['sendtorbuilding_email2'], 
$subject, $body);
-                            }
-                            if ($_POST['sendtorbuilding_email1']) {
-                                $sendt++;
-                                $mail_sendt_to = $mail_sendt_to . ' ' . 
$_POST['sendtorbuilding_email1'];
-                                
$this->send_mailnotification($_POST['sendtorbuilding_email1'], $subject, $body);
-                            }
-                            if ($_POST['sendtorbuilding_email2']) {
-                                $sendt++;
-                                $mail_sendt_to = $mail_sendt_to . ' ' . 
$_POST['sendtorbuilding_email2'];
-                                
$this->send_mailnotification($_POST['sendtorbuilding_email2'], $subject, $body);
-                            }
-                            if ($sendt <= 0) {
-                                $errors['mailtobuilding'] = lang('Unable to 
send warning, No mailadresses found');
-                            } else {
-                                $comment_text_log = phpgw::get_var('mail', 
'POST');
-                                $comment = 'Melding om endring er sendt til 
ansvarlig for bygg: ' . $mail_sendt_to . '<br />' . $comment_text_log;
-                                $this->add_comment($event, $comment);
-                            }
-                        }
-                    }
-                }
-                if (!phpgw::get_var('active', 'POST')) {
-
-                    $subject = 
$config->config_data['event_canceled_mail_subject'];
-                    $body = 
$config->config_data['event_canceled_mail']."\n".phpgw::get_var('mail', 'POST');
-
-                    if ($event['customer_organization_name']) {
-                        $comment_text_log = 
$event['customer_organization_name'];
-                    } else {
-                        $comment_text_log = $event['contact_name'];
-                    }
-                    $comment_text_log = $comment_text_log.' sitt arrangement i 
'.$event['building_name'].' '.date('d-m-Y H:i', strtotime($event['from_']))." 
har blitt kansellert.";
-
-                    $body .= "<br />\n".$comment_text_log;
-                    $body = html_entity_decode($body);
-
-                    $sendt = 0;
-                    $mail_sendt_to = '';
-                    if($building_info['email']) {
-                        $sendt++;
-                        $mail_sendt_to = $mail_sendt_to.' 
'.$building_info['email'];
-                        $this->send_mailnotification($building_info['email'], 
$subject, $body);
-                    }
-                    if ($building_info['tilsyn_email']) {
-                        $sendt++;
-                        $mail_sendt_to = $mail_sendt_to.' 
'.$building_info['tilsyn_email'];
-                        
$this->send_mailnotification($building_info['tilsyn_email'], $subject, $body);
-
-                    }
-                    if ($building_info['tilsyn_email2']) {
-                        $sendt++;
-                        $mail_sendt_to = $mail_sendt_to.' 
'.$building_info['tilsyn_email2'];
-                        
$this->send_mailnotification($building_info['tilsyn_email2'], $subject, $body);
-                    }
-                    if ($_POST['sendtorbuilding_email1']) {
-                        $sendt++;
-                        $mail_sendt_to = $mail_sendt_to.' 
'.$_POST['sendtorbuilding_email1'];
-                        
$this->send_mailnotification($_POST['sendtorbuilding_email1'], $subject, $body);
-
-                    }
-                    if ($_POST['sendtorbuilding_email2']) {
-                        $sendt++;
-                        $mail_sendt_to = $mail_sendt_to.' 
'.$_POST['sendtorbuilding_email2'];
-                        
$this->send_mailnotification($_POST['sendtorbuilding_email2'], $subject, $body);
-                    }
-                    if ($sendt <= 0) {
-                        $errors['mailtobuilding'] = lang('Unable to send 
warning, No mailadresses found');
-                    }
-                    else
-                    {
-                        $comment = '<span style="color:red;">Dette 
arrangemenet er kanselert</span>. Denne er sendt til '.$mail_sendt_to.'<br 
/>'.phpgw::get_var('mail', 'POST');
-                        $this->add_comment($event,$comment);
-                    }
-                }
-                $receipt = $this->bo->update($event);
-                $this->redirect(array('menuaction' => 'booking.uievent.edit', 
'id' => $event['id']));
-            }
+        if (!$type) {
+            $body .= $config->config_data['event_canceled_mail_subject'];
+            $body .= "<p>".$config->config_data['event_canceled_mail'];
+        } else {
+            $body .= $config->config_data['event_edited_mail_subject'];
+            $body .= "<p>".$config->config_data['event_edited_mail'];
         }
 
-        if($errors['allocation'])
-        {
-            $errors['allocation'] = lang('Event created, Overlaps with 
existing allocation, Remember to send a notification');
+        if ($_POST['org_from'] < $event['from_'] && $_POST['org_to'] == 
$event['to_']) {
+            $event['from_'] = $_POST['org_from'];
+            $event['to_'] = $event['from_'];
+            $freetime = pretty_timestamp($event['from_']).' til 
'.pretty_timestamp($event['to_']);
         }
-        elseif($errors['booking'])
-        {
-            $errors['booking'] = lang('Event created, Overlaps with existing 
booking, Remember to send a notification');
+        elseif ($_POST['org_from'] == $event['from_'] && $_POST['org_to'] > 
$event['to_']) {
+            $event['from_'] = $event['to_'];
+            $event['to_'] = $_POST['org_to'];
+            $freetime = pretty_timestamp($event['from_']).' til 
'.pretty_timestamp($event['to_']);
         }
-        $this->flash_form_errors($errors);
-        if ($customer['customer_identifier_type'])
-        {
-            $event['customer_identifier_type'] = 
$customer['customer_identifier_type'];
-            $event['customer_ssn'] = $customer['customer_ssn'];
-            $event['customer_organization_number'] = 
$customer['customer_organization_number'];
-            $event['customer_internal'] = $customer['customer_internal'];
-        }
-
-        self::add_javascript('booking', 'booking', 'event.js');
-        $event['resources_json'] = json_encode(array_map('intval', 
$event['resources']));
-        $event['application_link'] = self::link(array('menuaction' => 
'booking.uiapplication.show', 'id'=> $event['application_id']));
-        $event['cancel_link'] = self::link(array('menuaction' => 
'booking.uievent.index'));
-        $activities = $this->activity_bo->fetch_activities();
-        $activities = $activities['results'];
-#                      $comments = array_reverse($event['comments']);
-        $comments = $this->bo->so->get_ordered_comments($id);
-        $agegroups = $this->agegroup_bo->fetch_age_groups();
-        $agegroups = $agegroups['results'];
-        $audience = $this->audience_bo->fetch_target_audience();
-        $audience = $audience['results'];
-        $this->install_customer_identifier_ui($event);
-        $this->add_template_helpers();
-        self::render_template('event_edit', array('event' => $event, 
'activities' => $activities, 'agegroups' => $agegroups, 'audience' => 
$audience, 'comments' => $comments));
-    }
-
-    public function delete()
-    {
-        $event_id = phpgw::get_var('event_id', 'GET');
-        $application_id = phpgw::get_var('application_id', 'GET');
-
-        if ($GLOBALS['phpgw']->acl->check('admin', phpgwapi_acl::ADD, 
'booking')) {
-            $this->bo->so->delete_event($event_id);
-        }
-        if (isset($application_id)) {
-            $this->redirect(array('menuaction' => 
'booking.uiapplication.show', 'id'=>$application_id));
+        elseif ($_POST['org_from'] < $event['from_'] && $_POST['org_to'] > 
$event['to_']) {
+            $freetime = pretty_timestamp($_POST['org_from']).' til 
'.pretty_timestamp($event['from_'])." og \n";
+            $freetime .= pretty_timestamp($event['to_']).' til 
'.pretty_timestamp($_POST['org_to']);
         } else {
-            $this->redirect(array('menuaction' => 'booking.uievent.index'));
+            $freetime = pretty_timestamp($event['from_']).' til 
'.pretty_timestamp($event['to_'])."\n";
         }
 
-    }
+        $body .= '</p><p>'.$event['customer_organization_name'].' har 
avbestilt tid i '.$event['building_name'].':<br />';
+        $body .= implode(", 
",$this->so->get_resources(implode(",",$event['resources']))).' den '.$freetime;
+        $body .= ' - <a href="'.$link.'">'.lang('Check calendar').'</a></p>';
+        $body .= 
"<p>".$config->config_data['application_mail_signature']."</p>";
 
-    public function info()
-    {
-        $event = $this->bo->read_single(intval(phpgw::get_var('id', 'GET')));
-        $resources = 
$this->resource_bo->so->read(array('filters'=>array('id'=>$event['resources']), 
'sort'=>'name'));
-        $event['resources'] = $resources['results'];
-        $res_names = array();
-        foreach($event['resources'] as $res)
+        foreach ($mailadresses as $adr)
         {
-            $res_names[] = $res['name'];
+            try
+            {
+                $send->msg('email', $adr, $subject, $body, '', '', '', $from, 
'', 'html');
+            }
+            catch (phpmailerException $e)
+            {
+                // TODO: Inform user if something goes wrong
+            }
         }
-        $event['resource'] = phpgw::get_var('resource', 'GET');
-        $event['resource_info'] = join(', ', $res_names);
-        $event['building_link'] = self::link(array('menuaction' => 
'booking.uibuilding.show', 'id' => $event['resources'][0]['building_id']));
-        $event['org_link'] = self::link(array('menuaction' => 
'booking.uiorganization.show', 'id' => $event['organization_id']));
-        $event['add_link'] = self::link(array('menuaction' => 
'booking.uibooking.add', 'allocation_id'=>$event['id'], 
'from_'=>$event['from_'], 'to_'=>$event['to_'], 
'resource'=>$event['resource']));
-        $event['when'] = pretty_timestamp($event['from_']).' - 
'.pretty_timestamp($event['to_']);
-
-        $event['edit_link'] = self::link(array('menuaction' => 
'booking.uievent.edit', 'id' => $event['id']));
-
-        self::render_template('event_info', array('event'=>$event));
-        $GLOBALS['phpgw']->xslttpl->set_output('wml'); // Evil hack to disable 
page chrome
     }
 
 }

Modified: branches/stavangerkommune/booking/inc/class.uievent.inc.php
===================================================================
--- branches/stavangerkommune/booking/inc/class.uievent.inc.php 2015-02-12 
13:26:23 UTC (rev 12741)
+++ branches/stavangerkommune/booking/inc/class.uievent.inc.php 2015-02-12 
13:48:57 UTC (rev 12742)
@@ -1,26 +1,506 @@
-
 <?php
-phpgw::import_class('booking.uievent');
+phpgw::import_class('booking.uicommon');
+phpgw::import_class('phpgwapi.send');
 
-class bookingfrontend_uievent extends booking_uievent
+class booking_uievent extends booking_uicommon
 {
        public $public_functions = array
        (
-               'info'                          =>      true,
-               'report_numbers'        =>      true,
-               'cancel'                        =>      true,
-               'edit'              =>  true,
+               'index'                 =>      true,
+               'add'                   =>      true,
+               'edit'                  =>      true,
+               'delete'                        =>      true,
+               'info'                  =>      true,
+               'toggle_show_inactive'  =>      true,
        );
 
+       protected $customer_id;
+
        public function __construct()
        {
                parent::__construct();
+               $this->bo = CreateObject('booking.boevent');
+               $this->customer_id = 
CreateObject('booking.customer_identifier');
+               $this->activity_bo = CreateObject('booking.boactivity');
+               $this->agegroup_bo = CreateObject('booking.boagegroup');
+               $this->audience_bo = CreateObject('booking.boaudience');
+               $this->organization_bo = CreateObject('booking.boorganization');
                $this->resource_bo = CreateObject('booking.boresource');
-               $this->building_bo = CreateObject('booking.bobuilding');
-               $this->organization_bo = CreateObject('booking.boorganization');
-               $this->booking_bo = CreateObject('booking.bobooking');
+               self::set_active_menu('booking::applications::events');
+               $this->fields = array('activity_id', 'description',
+                       'resources', 'cost', 'application_id',
+                       'building_id', 'building_name',
+                       'contact_name', 'contact_email', 'contact_phone',
+                       'from_', 'to_', 'active', 'audience', 'reminder',
+                       'is_public', 'sms_total', 'customer_internal');
        }
 
+       public function index()
+       {
+               if(phpgw::get_var('phpgw_return_as') == 'json') {
+                       return $this->index_json();
+               }
+               self::add_javascript('booking', 'booking', 'datatable.js');
+               phpgwapi_yui::load_widget('datatable');
+               phpgwapi_yui::load_widget('paginator');
+               $data = array(
+                       'form' => array(
+                               'toolbar' => array(
+                                       'item' => array(
+                                               array(
+                                                       'type' => 'link',
+                                                       'value' => lang('New 
event'),
+                                                       'href' => 
self::link(array('menuaction' => 'booking.uievent.add'))
+                                               ),
+                                               array('type' => 'filter',
+                                                       'name' => 'buildings',
+                                                       'text' => 
lang('Building').':',
+                                                       'list' => 
$this->bo->so->get_buildings(),
+                                               ),
+                                               array('type' => 'filter',
+                                                       'name' => 'activities',
+                                                       'text' => 
lang('Activity').':',
+                                                       'list' => 
$this->bo->so->get_activities_main_level(),
+                                               ),
+                                               array('type' => 'text',
+                                                       'name' => 'query'
+                                               ),
+                                               array(
+                                                       'type' => 'submit',
+                                                       'name' => 'search',
+                                                       'value' => 
lang('Search')
+                                               ),
+                                               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' => 
'booking.uievent.index', 'phpgw_return_as' => 'json')),
+                               'field' => array(
+                                       array(
+                                               'key' => 'id',
+                                               'label' => lang('ID'),
+                                               'formatter' => 
'YAHOO.booking.formatLink'
+                                       ),
+                                       array(
+                                               'key' => 'description',
+                                               'label' => lang('Event'),
+                                       ),
+                                       array(
+                                               'key' => 'activity_name',
+                                               'label' => lang('Activity'),
+                                       ),
+                                       array(
+                                               'key' => 
'customer_organization_name',
+                                               'label' => lang('Organization'),
+                                       ),
+                                       array(
+                                               'key' => 'contact_name',
+                                               'label' => lang('Contact'),
+                                       ),
+                                       array(
+                                               'key' => 'building_name',
+                                               'label' => lang('Building')
+                                       ),
+                                       array(
+                                               'key' => 'from_',
+                                               'label' => lang('From')
+                                       ),
+                                       array(
+                                               'key' => 'to_',
+                                               'label' => lang('To')
+                                       ),
+                                       array(
+                                               'key' => 'active',
+                                               'label' => lang('Active')
+                                       ),
+                                       array(
+                                               'key' => 'link',
+                                               'hidden' => true
+                                       )
+                               )
+                       )
+               );
+               self::render_template('datatable', $data);
+       }
+
+       public function index_json()
+
+       {
+               if(isset($_SESSION['showall']))
+               {
+                       unset($filters['building_name']);
+                       unset($filters['activity_id']);
+               } else {
+                       $testdata =  phpgw::get_var('buildings', 'int', 
'REQUEST', null);
+                       if ($testdata != 0) {
+                               $filters['building_name'] = 
$this->bo->so->get_building(phpgw::get_var('buildings', 'int', 'REQUEST', 
null));
+                       } else {
+                               unset($filters['building_name']);
+                       }
+                       $testdata2 =  phpgw::get_var('activities', 'int', 
'REQUEST', null);
+                       if ($testdata2 != 0) {
+                               $filters['activity_id'] = 
$this->bo->so->get_activities(phpgw::get_var('activities', 'int', 'REQUEST', 
null));
+                       } else {
+                               unset($filters['activity_id']);
+                       }
+               }
+
+               $params = array(
+                       'start' => phpgw::get_var('startIndex', 'int', 
'REQUEST', 0),
+                       'results' => phpgw::get_var('results', 'int', 
'REQUEST', null),
+                       'query' => phpgw::get_var('query'),
+                       'sort'  => phpgw::get_var('sort'),
+                       'dir'   => phpgw::get_var('dir'),
+                       'filters' => $filters
+               );
+               $events = $this->bo->so->read($params);
+
+               foreach($events['results'] as &$event)
+               {
+                       $event['from_'] = pretty_timestamp($event['from_']);
+                       $event['to_'] = pretty_timestamp($event['to_']);
+               }
+
+               array_walk($events["results"], array($this, "_add_links"), 
"booking.uievent.edit");
+               return $this->yui_results($events);
+       }
+
+       private function _combine_dates($from_, $to_)
+       {
+               return array('from_' => $from_, 'to_' => $to_);
+       }
+
+       protected function get_customer_identifier() {
+               return $this->customer_id;
+       }
+
+       protected function extract_customer_identifier(&$data) {
+               $this->get_customer_identifier()->extract_form_data($data);
+       }
+
+       protected function validate_customer_identifier(&$data) {
+               return $this->get_customer_identifier()->validate($data);
+       }
+
+       protected function install_customer_identifier_ui(&$entity) {
+               $this->get_customer_identifier()->install($this, $entity);
+       }
+
+       protected function validate(&$entity) {
+               $errors = 
array_merge($this->validate_customer_identifier($entity), 
$this->bo->validate($entity));
+               return $errors;
+       }
+
+       protected function extract_form_data($defaults = array()) {
+               $entity = array_merge($defaults, extract_values($_POST, 
$this->fields));
+               $this->agegroup_bo->extract_form_data($entity);
+               $this->extract_customer_identifier($entity);
+               return $entity;
+       }
+
+       protected function extract_and_validate($defaults = array()) {
+               $entity = $this->extract_form_data($defaults);
+               $errors = $this->validate($entity);
+               return array($entity, $errors);
+       }
+
+       protected function add_comment(&$event, $comment, $type = 'comment') {
+               $event['comments'][] = array(
+                       'time'=> 'now',
+                       'author'=>$this->current_account_fullname(),
+                       'comment'=>$comment,
+                       'type' => $type
+               );
+       }
+
+       protected function 
create_sendt_mail_notification_comment_text($event,$errors)
+       {
+               $data = array();
+
+               foreach($errors['allocation'][0] as $e)
+               {
+                       foreach($event['resources'] as $res)
+                       {
+                               $time = 
$this->bo->so->get_overlap_time_info($res,$e,'allocation');
+
+                               $from_ = new DateTime($time['from']);
+                               $to_ = new DateTime($time['to']);
+                               $date = $from_->format('d-m-Y');
+                               $start = $from_->format('H:i');
+                               $end = $to_->format('H:i');
+
+                               $resource = 
$this->bo->so->get_resource_info($res);
+                               $_mymail = 
$this->bo->so->get_contact_mail($e,'allocation');
+
+                               $a = $_mymail[0];
+                               if(array_key_exists($a,$data))
+                               {
+                                       $data[$a][] = array('date' => $date, 
'building' => $event['building_name'], 'resource' => $resource['name'], 'start' 
=> $start, 'end' => $end );
+                               }
+                               else
+                               {
+                                       $data[$a] =  array( array('date' => 
$date, 'building' => $event['building_name'], 'resource' => $resource['name'], 
'start' => $start, 'end' => $end ));
+                               }
+                               if ($_mymail[1])
+                               {
+                                       $b = $_mymail[1];
+                                       if(array_key_exists($a,$data))
+                                       {
+                                               $data[$b][] = array('date' => 
$date, 'building' => $event['building_name'], 'resource' => $resource['name'], 
'start' => $start, 'end' => $end );
+                                       }
+                                       else
+                                       {
+                                               $data[$b] =  array( 
array('date' => $date, 'building' => $event['building_name'], 'resource' => 
$resource['name'], 'start' => $start, 'end' => $end ));
+                                       }
+                               }
+                       }
+               }
+
+               foreach($errors['booking'][0] as $e)
+               {
+                       foreach($event['resources'] as $res)
+                       {
+                               $time = 
$this->bo->so->get_overlap_time_info($res,$e,'booking');
+
+                               $from_ = new DateTime($time['from']);
+                               $to_ = new DateTime($time['to']);
+                               $date = $from_->format('d-m-Y');
+                               $start = $from_->format('H:i');
+                               $end = $to_->format('H:i');
+
+                               $resource = 
$this->bo->so->get_resource_info($res);
+                               $_mymail = 
$this->bo->so->get_contact_mail($e,'booking');
+
+                               $a = $_mymail[0];
+                               if(array_key_exists($a,$data))
+                               {
+                                       $data[$a][] = array('date' => $date, 
'building' => $event['building_name'], 'resource' => $resource['name'], 'start' 
=> $start, 'end' => $end );
+                               }
+                               else
+                               {
+                                       $data[$a] =  array( array('date' => 
$date, 'building' => $event['building_name'], 'resource' => $resource['name'], 
'start' => $start, 'end' => $end ));
+                               }
+                               if ($_mymail[1])
+                               {
+                                       $b = $_mymail[1];
+                                       if(array_key_exists($a,$data))
+                                       {
+                                               $data[$b][] = array('date' => 
$date, 'building' => $event['building_name'], 'resource' => $resource['name'], 
'start' => $start, 'end' => $end );
+                                       }
+                                       else
+                                       {
+                                               $data[$b] =  array( 
array('date' => $date, 'building' => $event['building_name'], 'resource' => 
$resource['name'], 'start' => $start, 'end' => $end ));
+                                       }
+                               }
+
+                       }
+               }
+               return $data;
+       }
+
+       public function add()
+       {
+               $errors = array();
+               $event = array('customer_internal' => 0);
+               if($_SERVER['REQUEST_METHOD'] == 'POST')
+               {
+
+                       array_set_default($_POST, 'from_', array());
+                       array_set_default($_POST, 'to_', array());
+                       $event['dates'] = array_map(array(self, 
'_combine_dates'), $_POST['from_'], $_POST['to_']);
+
+                       array_set_default($_POST, 'resources', array());
+                       $event['active'] = '1';
+                       $event['completed'] = '0';
+
+                       array_set_default($event, 'audience', array());
+                       array_set_default($event, 'agegroups', array());
+                       $event['secret'] = $this->generate_secret();
+                       $event['is_public'] = 1;
+                       $event['building_name'] = $_POST['building_name'];
+
+                       if ($_POST['organization_name'] || $_POST['org_id2']) {
+                               if ($_POST['organization_name']) {
+                                       $event['customer_organization_name'] = 
$_POST['organization_name'];
+                                       $event['customer_organization_id'] = 
$_POST['organization_id'];
+                                       $organization = 
$this->organization_bo->read_single(intval(phpgw::get_var('organization_id', 
'POST')));
+                               } else {
+                                       $orgid = 
$this->bo->so->get_org($_POST['org_id2']);
+                                       $event['org_id2'] = $_POST['org_id2'];
+                                       $event['customer_organization_name'] = 
$orgid['name'];
+                                       $event['customer_organization_id'] = 
$orgid['id'];
+                                       $organization = 
$this->organization_bo->read_single(intval($orgid['id']));
+                               }
+
+                               if ($organization['customer_internal'] == 0) {
+                                       $_POST['customer_identifier_type'] = 
$organization['customer_identifier_type'];
+                                       $_POST['customer_internal'] = 
$organization['customer_internal'];
+                                       if 
(strlen($organization['customer_organization_number']) == 9) {
+                                               
$_POST['customer_organization_number'] = 
$organization['customer_organization_number'];
+                                       } else {
+                                               $errors['organization_number'] 
= lang('The organization number is wrong or not present');
+                                       }
+                               } else {
+                                       $_POST['customer_identifier_type'] = 
'organization_number';
+                                       $_POST['customer_internal'] = 
$organization['customer_internal'];
+                                       if 
((strlen($organization['customer_number']) == 6) || 
(strlen($organization['customer_number']) == 5)) {
+                                               
$_POST['customer_organization_number'] = $organization['customer_number'];
+                                       } else {
+                                               $errors['resource_number'] = 
lang('The resource number is wrong or not present');
+                                       }
+                               }
+                               if ($organization['contacts'][0]['name'] != '') 
{
+                                       $_POST['contact_name'] = 
$organization['contacts'][0]['name'];
+                                       $_POST['contact_email'] = 
$organization['contacts'][0]['email'];
+                                       $_POST['contact_phone'] = 
$organization['contacts'][0]['phone'];
+                               } else {
+                                       $_POST['contact_name'] = 
$organization['contacts'][1]['name'];
+                                       $_POST['contact_email'] = 
$organization['contacts'][1]['email'];
+                                       $_POST['contact_phone'] = 
$organization['contacts'][1]['phone'];
+                               }
+                       }
+                       if (!$_POST['application_id'])
+                       {
+                               $temp_errors = array();
+                               foreach( $event['dates'] as $checkdate)
+                               {
+                                       $event['from_'] = $checkdate['from_'];
+                                       $_POST['from_'] = $checkdate['from_'];
+                                       $event['to_'] = $checkdate['to_'];
+                                       $_POST['to_'] = $checkdate['to_'];
+                                       list($event, $errors) = 
$this->extract_and_validate($event);
+                                       $time_from = split(" ",$_POST['from_']);
+                                       $time_to = split(" ",$_POST['to_']);
+                                       if ($time_from[0] == $time_to[0])
+                                       {
+                                               if ($time_from[1] >= 
$time_to[1])
+                                               {
+                                                       $errors['time'] = 
lang('Time is set wrong');
+                                               }
+                                       }
+                                       if ($errors != array()) {
+                                               $temp_errors = $errors;
+                                       }
+                               }
+                               $errors = $temp_errors;
+                       }
+                       else
+                       {
+                               list($event, $errors) = 
$this->extract_and_validate($event);
+                               $time_from = split(" ",$_POST['from_']);
+                               $time_to = split(" ",$_POST['to_']);
+                               if ($time_from[0] == $time_to[0]) {
+                                       if ($time_from[1] >= $time_to[1])
+                                       {
+                                               $errors['time'] = lang('Time is 
set wrong');
+                                       }
+                               }
+                       }
+
+                       if ($_POST['cost'] != 0 and 
!$event['customer_organization_number'] and !$event['customer_ssn']) {
+                               $errors['invoice_data'] = lang('There is set a 
cost, but no invoice data is filled inn');
+                       }
+                       if(($_POST['organization_name'] != '' or 
$_POST['org_id2'] != '') and isset($errors['contact_name'])) {
+                               $errors['contact_name'] = lang('Organization is 
missing booking charge');
+                       }
+                       if(!$errors['event'] && !$errors['from_'] && 
!$errors['time'] && !$errors['invoice_data'] && !$errors['resource_number'] && 
!$errors['organization_number'] && !$errors['contact_name'] && !$errors['cost'] 
&& !$errors['activity_id'])
+                       {
+                               if (!$_POST['application_id'])
+                               {
+                                       $allids = array();
+                                       foreach( $event['dates'] as $checkdate)
+                                       {
+                                               $event['from_'] = 
$checkdate['from_'];
+                                               $event['to_'] = 
$checkdate['to_'];
+
+                                               unset($event['comments']);
+                                               if (count($event['dates']) < 2)
+                                               {
+                                                       
$this->add_comment($event, lang('Event was created'));
+                                                       $receipt = 
$this->bo->add($event);
+                                               }
+                                               else
+                                               {
+                                                       
$this->add_comment($event, lang('Multiple Events was created'));
+                                                       $receipt = 
$this->bo->add($event);
+                                                       $allids[] = 
array($receipt['id']);
+                                               }
+                                       }
+                                       if ($allids)
+                                       {
+                                               
$this->bo->so->update_comment($allids);
+                                               
$this->bo->so->update_id_string();
+                                       }
+                               }
+                               else
+                               {
+                                       $this->add_comment($event, lang('Event 
was created'));
+                                       $receipt = $this->bo->add($event);
+                                       $this->bo->so->update_id_string();
+                               }
+                               $this->redirect(array('menuaction' => 
'booking.uievent.edit', 'id'=>$receipt['id'], 'secret'=>$event['secret'], 
'warnings'=>$errors));
+                       }
+               }
+               if ($errors['event']) {
+                       $errors['warning'] = lang('NB! No data will be saved, 
if you navigate away you will loose all.');
+               }
+               $default_dates = array_map(array(self, '_combine_dates'), 
'','');
+               array_set_default($event, 'dates', $default_dates);
+
+               if (!phpgw::get_var('from_report', 'POST'))
+               {
+                       $this->flash_form_errors($errors);
+               }
+
+               self::add_javascript('booking', 'booking', 'event.js');
+               array_set_default($event, 'resources', array());
+               $event['resources_json'] = json_encode(array_map('intval', 
$event['resources']));
+               $event['cancel_link'] = self::link(array('menuaction' => 
'booking.uievent.index'));
+               array_set_default($event, 'cost', '0');
+               $activities = $this->activity_bo->fetch_activities();
+               $activities = $activities['results'];
+               $agegroups = $this->agegroup_bo->fetch_age_groups();
+               $agegroups = $agegroups['results'];
+               $audience = $this->audience_bo->fetch_target_audience();
+               $audience = $audience['results'];
+
+               $this->install_customer_identifier_ui($event);
+
+               $this->add_template_helpers();
+               self::render_template('event_new', array('event' => $event, 
'activities' => $activities, 'agegroups' => $agegroups, 'audience' => 
$audience));
+       }
+
+       private function send_mailnotification($receiver, $subject, $body)
+       {
+               $send = CreateObject('phpgwapi.send');
+
+               $config = CreateObject('phpgwapi.config','booking');
+               $config->read();
+               $from = isset($config->config_data['email_sender']) && 
$config->config_data['email_sender'] ? $config->config_data['email_sender'] : 
"noreply<address@hidden'phpgw_info']['server']['hostname']}>";
+
+               if (strlen(trim($body)) == 0)
+               {
+                       return false;
+               }
+
+               if (strlen($receiver) > 0)
+               {
+                       try
+                       {
+                               $send->msg('email', $receiver, $subject, $body, 
'', '', '', $from, '', 'plain');
+                       }
+                       catch (phpmailerException $e)
+                       {
+                               // TODO: Inform user if something goes wrong
+                       }
+               }
+       }
+
        public function edit()
        {
                $id = intval(phpgw::get_var('id', 'GET'));
@@ -28,9 +508,11 @@
                $building_info = $this->bo->so->get_building_info($id);
                $event['building_id'] = $building_info['id'];
                $event['building_name'] = $building_info['name'];
-               $bouser = CreateObject('bookingfrontend.bouser');
                $config = CreateObject('phpgwapi.config','booking');
                $config->read();
+
+               $external_site_address = 
isset($config->config_data['external_site_address']) && 
$config->config_data['external_site_address'] ? 
$config->config_data['external_site_address'] : 
$GLOBALS['phpgw_info']['server']['webserver_url'];
+               $link = 
$external_site_address.'/bookingfrontend/?menuaction=bookingfrontend.uibuilding.schedule&id='.$event['building_id']."&date=".substr($event['from_'],0,-9);
                $errors = array();
                $customer = array();
 
@@ -52,69 +534,249 @@
                        $customer['customer_organization_number'] = 
$organization['organization_number'];
                        $customer['customer_internal'] = 
$organization['customer_internal'];
                }
-               if ($config->config_data['split_pool'] == 'yes')
-               {
-                       $split = 1;
-               } else {
-                       $split = 0;
-               }
-               $resources = $event['resources'];
-               
$activity=$this->organization_bo->so->get_resource_activity($resources);
-               $mailadresses = $this->building_users($event['building_id'], 
$split, $activity);
 
-               
if(!$bouser->is_organization_admin($customer['customer_organization_id'])) {
-                       $date = substr($event['from_'], 0, 10);
-                       $this->redirect(array('menuaction' => 
'bookingfrontend.uibuilding.schedule', 'id'=> $event['building_id'], 'date' => 
$date));
-               }
+               list($event, $errors) = $this->extract_and_validate($event);
 
-               $currres = $event['resources'];
-
-//            list($event, $errors) = $this->extract_and_validate($event);
-
                if ($event['customer_organization_number']) {
                        $orginfo = 
$this->bo->so->get_org($event['customer_organization_number']);
                        $event['customer_organization_id'] = $orginfo['id'];
                        $event['customer_organization_name'] = $orginfo['name'];
                }
 
-               $orgdate = array();
-               foreach ($event['dates'] as $odate) {
-                       if(substr($odate['from_'],0,10) == 
substr($event['from_'],0,10)) {
-                               $orgdate['from'] = $odate['from_'];
-                               $orgdate['to'] = $odate['to_'];
-                       }
-               }
-
                if($_SERVER['REQUEST_METHOD'] == 'POST')
                {
-                       $test = $this->bo->read_single($event['id']);
-                       $event['from_'] = 
substr($_POST['org_from'],0,11).$_POST['from_'].":00";
-                       $event['to_'] = 
substr($_POST['org_to'],0,11).$_POST['to_'].":00";
+                       if (!$_POST['organization_name']) {
+                               $event['customer_organization_name'] = Null;
+                               $event['customer_organization_id'] = Null;
+                       }
                        array_set_default($_POST, 'resources', array());
 
-                       if ($event['from_'] < $test['from_'] || $event['to_'] > 
$test['to_']) {
-                               $errors['out_of_range'] = lang("You can't 
extend the event, for that contact administrator");
+                       if ($_POST['organization_name']) {
+                               $event['customer_organization_name'] = 
$_POST['organization_name'];
+                               $event['customer_organization_id'] = 
$_POST['organization_id'];
+                               $organization = 
$this->organization_bo->read_single(intval(phpgw::get_var('organization_id', 
'POST')));
+
+                               if ($organization['customer_internal'] == 0) {
+                                       $event['customer_identifier_type'] = 
$organization['customer_identifier_type'];
+                                       $event['customer_internal'] = 
$organization['customer_internal'];
+                                       if 
(strlen($organization['customer_organization_number']) == 9) {
+                                               
$event['customer_organization_number'] = 
$organization['customer_organization_number'];
+                                       } else {
+                                               $errors['organization_number'] 
= lang('The organization number is wrong or not present');
+                                       }
+                               } else {
+                                       $event['customer_identifier_type'] = 
'organization_number';
+                                       $event['customer_internal'] = 
$organization['customer_internal'];
+                                       if 
((strlen($organization['customer_number']) == 6) || 
(strlen($organization['customer_number']) == 5)) {
+                                               
$event['customer_organization_number'] = $organization['customer_number'];
+                                       } else {
+                                               $errors['resource_number'] = 
lang('The resource number is wrong or not present');
+                                       }
+                               }
+                       } elseif ($_POST['customer_identifier_type'] == 'ssn') {
+                               $event['customer_identifier_type'] = 'ssn';
+                               $event['customer_ssn'] = $_POST['customer_ssn'];
+
+                       } elseif ($_POST['customer_identifier_type'] == 
'organization_number') {
+                               $event['customer_identifier_type'] = 
'organization_number';
+                               $event['customer_organization_number'] = 
$_POST['customer_organization_number'];
                        }
 
-                       if (sizeof($currres) != sizeof($_POST['resources'])) {
-                               $errors['resource_number'] = lang("You can't 
change resources to the event, for that contact administrator");
+                       if ($_POST['cost'] != 0 and 
!$event['customer_organization_number'] and !$event['customer_ssn']) {
+                               $errors['invoice_data'] = lang('There is set a 
cost, but no invoice data is filled inn');
                        }
-
-                       if(!$errors['event'] and !$errors['resource_number'] 
and !$errors['organization_number'] and !$errors['invoice_data']  && 
!$errors['contact_name'] && !$errors['out_of_range'])
+                       if(!$errors['event'] and !$errors['resource_number'] 
and !$errors['organization_number'] and !$errors['invoice_data']  && 
!$errors['contact_name'] && !$errors['cost'])
                        {
+                               if (( phpgw::get_var('sendtorbuilding', 'POST') 
|| phpgw::get_var('sendtocontact', 'POST') || phpgw::get_var('sendtocollision', 
'POST')) && phpgw::get_var('active', 'POST'))
+                               {
 
-                               if ($event['from_'] > $test['from_'] || 
$event['to_'] < $test['to_']) {
+                                       if(phpgw::get_var('sendtocollision', 
'POST') || phpgw::get_var('sendtocontact', 'POST') || 
phpgw::get_var('sendtorbuilding', 'POST'))
+                                       {
+                                               $maildata = 
$this->create_sendt_mail_notification_comment_text($event,$errors);
 
-                                       $this->bo->send_notification(true, 
$event, $mailadresses, $orgdate);
+                                               
if(phpgw::get_var('sendtocollision', 'POST'))
+                                               {
+                                                       $comment_text_log = 
"<span style='color: green;'>".lang('Message sent about the changes in the 
reservations').':</span><br />';
+                                                       $res = array();
+                                                       $resname= '';
+                                                       foreach 
($event['resources'] as $resid) {
+                                                               $res = 
$this->bo->so->get_resource_info($resid);
+                                                               $resname .= 
$res['name'].', ';
+                                                       }
+                                                       $comment_text_log .= 
$event['building_name']." (".substr($resname,0,-2).") 
".pretty_timestamp($event['from_'])." - ".pretty_timestamp($event['to_']);
+                                                       
$this->add_comment($event, $comment_text_log);
+                                               }
+                                               
if(phpgw::get_var('sendtocollision', 'POST'))
+                                               {
+
+                                                       $subject = 
$config->config_data['event_conflict_mail_subject'];
+                                                       $body = 
"<p>".$config->config_data['event_mail_conflict_contact_active_collision']."\n".phpgw::get_var('mail',
 'POST')."\n";
+                                                       $body .= '<br /><a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].'</a></p>';
+                                                       $body .= 
"<p>".$config->config_data['application_mail_signature']."</p>";
+                                                       $mail_sendt_to = '';
+                                                       foreach 
(array_keys($maildata) as $mail)
+                                                       {
+                                                               $mailbody = '';
+                                                               
$comment_text_log = "Reserverasjoner som har blitt overskrevet: \n";
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$mail;
+                                                               
foreach($maildata[$mail] as $data)
+                                                               {
+                                                                       
$comment_text_log .= $data['date'].', '.$data['building'].', 
'.$data['resource'].', Kl. '.$data['start'].' - '.$data['end']." \n";
+                                                               }
+                                                               $mailbody .= 
$body."<pre>".$comment_text_log."</pre>";
+                                                               
$this->send_mailnotification($mail, $subject, $mailbody);
+                                                       }
+                                                       if 
(strpos($mail_sendt_to,'@') !== False)
+                                                       {
+                                                               $comment = 
"<p>Melding om konflikt er sendt til".$mail_sendt_to."<br 
/>\n".phpgw::get_var('mail', 'POST')."</p>";
+                                                               
$this->add_comment($event,$comment);
+                                                       }
+                                               }
+                                               
if(phpgw::get_var('sendtocontact', 'POST'))
+                                               {
+                                                       $subject = 
$config->config_data['event_change_mail_subject'];
+                                                       $body = 
"<p>".$config->config_data['event_change_mail']."\n".phpgw::get_var('mail', 
'POST');
+                                                       $body .= '<br /><a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].'</a></p>';
+                                                       
$this->send_mailnotification($event['contact_email'], $subject, $body);
+                                                       $comment = 
$comment_text_log.'<br />Denne er sendt til '.$event['contact_email'];
+                                                       
$this->add_comment($event,$comment);
+                                               }
+                                               
if(phpgw::get_var('sendtorbuilding', 'POST'))
+                                               {
+
+                                                       $subject = 
$config->config_data['event_mail_building_subject'];
+
+                                                       $body = 
"<p>".$config->config_data['event_mail_building']."<br 
/>\n".phpgw::get_var('mail', 'POST')."</p>";
+
+                                                       if 
($event['customer_organization_name']) {
+                                                               $username = 
$event['customer_organization_name'];
+                                                       } else {
+                                                               $username = 
$event['contact_name'];
+                                                       }
+                                                       $res = array();
+                                                       $resname= '';
+                                                       foreach 
($event['resources'] as $resid) {
+                                                               $res = 
$this->bo->so->get_resource_info($resid);
+                                                               $resname .= 
$res['name'].', ';
+                                                       }
+                                                       $resources = 
$event['building_name']." (".substr($resname,0,-2).") 
".pretty_timestamp($event['from_'])." - ".pretty_timestamp($event['to_']);
+
+                                                       $body  .= 
'<p>'.$username.' har fått innvilget et arrangement i '.$resources.".";
+                                                       $body .= '<br /><a 
href="'.$link.'">Link til 
'.$config->config_data['application_mail_systemname'].'</a></p>';
+                                                       $body .= 
"<p>".$config->config_data['application_mail_signature']."</p>";
+
+                                                       $sendt = 0;
+                                                       $mail_sendt_to = '';
+                                                       
if($event['contact_email']) {
+                                                               $sendt++;
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$event['contact_email'];
+                                                               
$this->send_mailnotification($event['contact_email'], $subject, $body);
+                                                       }
+                                                       
if($building_info['email']) {
+                                                               $sendt++;
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$building_info['email'];
+                                                               
$this->send_mailnotification($building_info['email'], $subject, $body);
+                                                       }
+                                                       if 
($building_info['tilsyn_email']) {
+                                                               $sendt++;
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$building_info['tilsyn_email'];
+                                                               
$this->send_mailnotification($building_info['tilsyn_email'], $subject, $body);
+                                                       }
+                                                       if 
($building_info['tilsyn_email2']) {
+                                                               $sendt++;
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$building_info['tilsyn_email2'];
+                                                               
$this->send_mailnotification($building_info['sendtorbuilding_email2'], 
$subject, $body);
+                                                       }
+                                                       if 
($_POST['sendtorbuilding_email1']) {
+                                                               $sendt++;
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$_POST['sendtorbuilding_email1'];
+                                                               
$this->send_mailnotification($_POST['sendtorbuilding_email1'], $subject, $body);
+                                                       }
+                                                       if 
($_POST['sendtorbuilding_email2']) {
+                                                               $sendt++;
+                                                               $mail_sendt_to 
= $mail_sendt_to.' '.$_POST['sendtorbuilding_email2'];
+                                                               
$this->send_mailnotification($_POST['sendtorbuilding_email2'], $subject, $body);
+                                                       }
+                                                       if ($sendt <= 0) {
+                                                               
$errors['mailtobuilding'] = lang('Unable to send warning, No mailadresses 
found');
+                                                       }
+                                                       else
+                                                       {
+                                                               
$comment_text_log = phpgw::get_var('mail', 'POST');
+                                                               $comment = 
'Melding om endring er sendt til ansvarlig for bygg: '.$mail_sendt_to.'<br 
/>'.$comment_text_log;
+                                                               
$this->add_comment($event,$comment);
+                                                       }
+                                               }
+                                       }
+                                       if (!phpgw::get_var('active', 'POST')) {
+
+                                               $subject = 
$config->config_data['event_canceled_mail_subject'];
+                                               $body = 
$config->config_data['event_canceled_mail']."\n".phpgw::get_var('mail', 'POST');
+
+                                               if 
($event['customer_organization_name']) {
+                                                       $comment_text_log = 
$event['customer_organization_name'];
+                                               } else {
+                                                       $comment_text_log = 
$event['contact_name'];
+                                               }
+                                               $comment_text_log = 
$comment_text_log.' sitt arrangement i '.$event['building_name'].' 
'.date('d-m-Y H:i', strtotime($event['from_']))." har blitt kansellert.";
+
+                                               $body .= "<br 
/>\n".$comment_text_log;
+                                               $body = 
html_entity_decode($body);
+
+                                               $sendt = 0;
+                                               $mail_sendt_to = '';
+                                               if($building_info['email']) {
+                                                       $sendt++;
+                                                       $mail_sendt_to = 
$mail_sendt_to.' '.$building_info['email'];
+                                                       
$this->send_mailnotification($building_info['email'], $subject, $body);
+                                               }
+                                               if 
($building_info['tilsyn_email']) {
+                                                       $sendt++;
+                                                       $mail_sendt_to = 
$mail_sendt_to.' '.$building_info['tilsyn_email'];
+                                                       
$this->send_mailnotification($building_info['tilsyn_email'], $subject, $body);
+
+                                               }
+                                               if 
($building_info['tilsyn_email2']) {
+                                                       $sendt++;
+                                                       $mail_sendt_to = 
$mail_sendt_to.' '.$building_info['tilsyn_email2'];
+                                                       
$this->send_mailnotification($building_info['tilsyn_email2'], $subject, $body);
+                                               }
+                                               if 
($_POST['sendtorbuilding_email1']) {
+                                                       $sendt++;
+                                                       $mail_sendt_to = 
$mail_sendt_to.' '.$_POST['sendtorbuilding_email1'];
+                                                       
$this->send_mailnotification($_POST['sendtorbuilding_email1'], $subject, $body);
+
+                                               }
+                                               if 
($_POST['sendtorbuilding_email2']) {
+                                                       $sendt++;
+                                                       $mail_sendt_to = 
$mail_sendt_to.' '.$_POST['sendtorbuilding_email2'];
+                                                       
$this->send_mailnotification($_POST['sendtorbuilding_email2'], $subject, $body);
+                                               }
+                                               if ($sendt <= 0) {
+                                                       
$errors['mailtobuilding'] = lang('Unable to send warning, No mailadresses 
found');
+                                               }
+                                               else
+                                               {
+                                                       $comment = '<span 
style="color:red;">Dette arrangemenet er kanselert</span>. Denne er sendt til 
'.$mail_sendt_to.'<br />'.phpgw::get_var('mail', 'POST');
+                                                       
$this->add_comment($event,$comment);
+                                               }
+//                                             $receipt = 
$this->bo->update($event);
+//                                             
$this->redirect(array('menuaction' => 'booking.uievent.edit', 
'id'=>$event['id']));
+                                       }
                                }
-                               $message = '';
-                               $this->bo->send_admin_notification(true, 
$event, $message, $orgdate);
-                               $this->bo->update($event);
-                               $date = substr($event['from_'], 0, 10);
-                               $this->redirect(array('menuaction' => 
'bookingfrontend.uibuilding.schedule', 'id'=> $event['building_id'], 'date' => 
$date));
+                               $receipt = $this->bo->update($event);
+                               $this->redirect(array('menuaction' => 
'booking.uievent.edit', 'id'=>$event['id']));
                        }
                }
 
+               if($errors['allocation'])
+               {
+                       $errors['allocation'] = lang('Event created, Overlaps 
with existing allocation, Remember to send a notification');
+               }
+               elseif($errors['booking'])
+               {
+                       $errors['booking'] = lang('Event created, Overlaps with 
existing booking, Remember to send a notification');
+               }
                $this->flash_form_errors($errors);
                if ($customer['customer_identifier_type'])
                {
@@ -124,12 +786,13 @@
                        $event['customer_internal'] = 
$customer['customer_internal'];
                }
 
-               $date = substr($event['from_'], 0, 10);
                self::add_javascript('booking', 'booking', 'event.js');
                $event['resources_json'] = json_encode(array_map('intval', 
$event['resources']));
-               $event['cancel_link'] = self::link(array('menuaction' => 
'bookingfrontend.uibuilding.schedule', 'id'=> $event['building_id'], 'date' => 
$date));
+               $event['application_link'] = self::link(array('menuaction' => 
'booking.uiapplication.show', 'id'=> $event['application_id']));
+               $event['cancel_link'] = self::link(array('menuaction' => 
'booking.uievent.index'));
                $activities = $this->activity_bo->fetch_activities();
                $activities = $activities['results'];
+#                      $comments = array_reverse($event['comments']);
                $comments = $this->bo->so->get_ordered_comments($id);
                $agegroups = $this->agegroup_bo->fetch_age_groups();
                $agegroups = $agegroups['results'];
@@ -137,240 +800,44 @@
                $audience = $audience['results'];
                $this->install_customer_identifier_ui($event);
                $this->add_template_helpers();
-
                self::render_template('event_edit', array('event' => $event, 
'activities' => $activities, 'agegroups' => $agegroups, 'audience' => 
$audience, 'comments' => $comments));
        }
-
-       public function cancel()
+       public function delete()
        {
-               $config = CreateObject('phpgwapi.config','booking');
-               $config->read();
+               $event_id = phpgw::get_var('event_id', 'GET');
+               $application_id = phpgw::get_var('application_id', 'GET');
 
-               $event = $this->bo->read_single(intval(phpgw::get_var('id', 
'GET')));
-               $bouser = CreateObject('bookingfrontend.bouser');
-               $errors = array();
-
-               date_default_timezone_set("Europe/Oslo");
-               $currdate = new DateTime(phpgw::get_var('date'));
-               $cdate = $currdate->format('Y-m-d H:m:s');
-               if ($config->config_data['user_can_delete_events'] != 'yes')
-               {
-                       $can_delete_events = 0;
-
-               } else {
-                       $can_delete_events = 1;
+               if ($GLOBALS['phpgw']->acl->check('admin', phpgwapi_acl::ADD, 
'booking')) {
+                       $this->bo->so->delete_event($event_id);
                }
-               if ($event['customer_organization_number']) {
-                       $orginfo = 
$this->bo->so->get_org($event['customer_organization_number']);
-                       $event['customer_organization_id'] = $orginfo['id'];
-                       $event['customer_organization_name'] = $orginfo['name'];
-               }
-
-               if ($config->config_data['split_pool'] == 'yes')
-               {
-                       $split = 1;
+               if (isset($application_id)) {
+                       $this->redirect(array('menuaction' => 
'booking.uiapplication.show', 'id'=>$application_id));
                } else {
-                       $split = 0;
+                       $this->redirect(array('menuaction' => 
'booking.uievent.index'));
                }
 
-               $resources = $event['resources'];
-               
$activity=$this->organization_bo->so->get_resource_activity($resources);
-               $mailadresses = $this->building_users($event['building_id'], 
$split, $activity);
-               $extra_mailadresses = $this->resource_users($resources);
-               $mailadresses = array_merge($mailadresses, $extra_mailadresses);
-
-               if($_SERVER['REQUEST_METHOD'] == 'POST')
-               {
-                       if($cdate < $event['to_']) {
-                               
if($bouser->is_organization_admin($event['customer_organization_id'])) {
-                                       $this->bo->send_notification(false, 
$event, $mailadresses);
-                                       
$this->bo->send_admin_notification(false, $event, $_POST['message']);
-                                       if ($can_delete_events) {
-                                               
$this->bo->so->delete_event($event['id']);
-                                       } else {
-                                               $event['active'] = 0;
-                                               $this->bo->update($event);
-                                       }
-                                       $date = substr($event['from_'], 0, 10);
-                                       $this->redirect(array('menuaction' => 
'bookingfrontend.uibuilding.schedule', 'id' =>$event['building_id'], 'date' => 
$date));
-
-                               } else {
-                                       $errors['not_admin'] = lang("You can't 
cancel events");
-                               }
-                       } else {
-                               $errors['started'] = lang("You can't cancel 
event that has started, for help contacts site admin");
-                       }
-               }
-               $this->flash_form_errors($errors);
-               $date = substr($event['from_'], 0, 10);
-               self::add_javascript('booking', 'booking', 'event.js');
-               $event['resources_json'] = json_encode(array_map('intval', 
$event['resources']));
-               $event['cancel_link'] = self::link(array('menuaction' => 
'bookingfrontend.uibuilding.schedule', 'id'=> $event['building_id'], 'date' => 
$date));
-               $activities = $this->activity_bo->fetch_activities();
-               $activities = $activities['results'];
-               $this->install_customer_identifier_ui($event);
-               $this->add_template_helpers();
-
-               self::render_template('event_delete', array('event' => $event, 
'activities' => $activities, 'can_delete_events' => $can_delete_events));
        }
-
-       public function building_users($building_id, $type=false, 
$activities=array()) {
-               $contacts = array();
-               $organizations = 
$this->organization_bo->find_building_users($building_id, $type, $activities);
-               foreach($organizations['results'] as $key => $org)
-               {
-                       if ($org['email'] != '' && strstr($org['email'], '@')) {
-                               if (!in_array($org['email'], $contacts)) {
-                                       $contacts[] = $org['email'];
-                               }
-                       }
-                       if ($org['contacts'][0]['email'] != '' && 
strstr($org['contacts'][0]['email'], '@')) {
-                               if (!in_array($org['contacts'][0]['email'], 
$contacts)) {
-                                       $contacts[] = 
$org['contacts'][0]['email'];
-                               }
-                       }
-                       if ($org['contacts'][1]['email'] != '' && 
strstr($org['contacts'][1]['email'], '@')) {
-                               if (!in_array($org['contacts'][1]['email'], 
$contacts)) {
-                                       $contacts[] = 
$org['contacts'][1]['email'];
-                               }
-                       }
-                       $grp_con = 
$this->booking_bo->so->get_group_contacts_of_organization($org['id']);
-                       foreach ($grp_con as $grp) {
-                               if (!in_array($grp['email'], $contacts) && 
strstr($grp['email'], '@')) {
-                                       $contacts[] = $grp['email'];
-                               }
-                       }
-               }
-               return $contacts;
-       }
-
-       public function resource_users($resources) {
-               $contacts = array();
-               $orglist = array();
-               foreach($resources as $res){
-                       $cres = $this->resource_bo->read_single($res);
-                       if($cres['organizations_ids'] != '') {
-                               $orglist .= $cres['organizations_ids'].',';
-                       }
-               }
-               $orgs = explode(",", rtrim($orglist, ","));
-               $organizations = 
$this->organization_bo->so->read(array('filters'=>array('id'=>$orgs), 
'sort'=>'name'));
-               foreach($organizations['results'] as $key => $org)
-               {
-                       if ($org['email'] != '' && strstr($org['email'], '@')) {
-                               if (!in_array($org['email'], $contacts)) {
-                                       $contacts[] = $org['email'];
-                               }
-                       }
-                       if ($org['contacts'][0]['email'] != '' && 
strstr($org['contacts'][0]['email'], '@')) {
-                               if (!in_array($org['contacts'][0]['email'], 
$contacts)) {
-                                       $contacts[] = 
$org['contacts'][0]['email'];
-                               }
-                       }
-                       if ($org['contacts'][1]['email'] != '' && 
strstr($org['contacts'][1]['email'], '@')) {
-                               if (!in_array($org['contacts'][1]['email'], 
$contacts)) {
-                                       $contacts[] = 
$org['contacts'][1]['email'];
-                               }
-                       }
-                       $grp_con = 
$this->booking_bo->so->get_group_contacts_of_organization($org['id']);
-                       foreach ($grp_con as $grp) {
-                               if (!in_array($grp['email'], $contacts) && 
strstr($grp['email'], '@')) {
-                                       $contacts[] = $grp['email'];
-                               }
-                       }
-               }
-               return $contacts;
-       }
-
        public function info()
        {
-               $config = CreateObject('phpgwapi.config','booking');
-               $config->read();
-               if ($config->config_data['user_can_delete_bookings'] != 'yes')
-               {
-                       $user_can_delete_bookings = 0;
-
-               } else {
-                       $user_can_delete_bookings = 1;
-               }
                $event = $this->bo->read_single(intval(phpgw::get_var('id', 
'GET')));
-               unset($event['comments']);
                $resources = 
$this->resource_bo->so->read(array('filters'=>array('id'=>$event['resources']), 
'sort'=>'name'));
-               if ($event['customer_organization_number'] != '')
-               {
-                       $orginfo = 
$this->bo->so->get_org($event['customer_organization_number']);
-                       if ($orginfo != array()) {
-                               $event['customer_organization_id'] = 
$orginfo['id'];
-                               $event['customer_organization_name'] = 
$orginfo['name'];
-                               $orginfo['link'] = 
self::link(array('menuaction' => 'bookingfrontend.uiorganization.show', 'id' => 
$orginfo['id']));
-                       }
-               } else {
-                       $orginfo = array();
-               }
-
                $event['resources'] = $resources['results'];
                $res_names = array();
                foreach($event['resources'] as $res)
                {
                        $res_names[] = $res['name'];
                }
+               $event['resource'] = phpgw::get_var('resource', 'GET');
                $event['resource_info'] = join(', ', $res_names);
-               $event['building_link'] = self::link(array('menuaction' => 
'bookingfrontend.uibuilding.show', 'id' => 
$event['resources'][0]['building_id']));
+               $event['building_link'] = self::link(array('menuaction' => 
'booking.uibuilding.show', 'id' => $event['resources'][0]['building_id']));
+               $event['org_link'] = self::link(array('menuaction' => 
'booking.uiorganization.show', 'id' => $event['organization_id']));
+               $event['add_link'] = self::link(array('menuaction' => 
'booking.uibooking.add', 'allocation_id'=>$event['id'], 
'from_'=>$event['from_'], 'to_'=>$event['to_'], 
'resource'=>$event['resource']));
                $event['when'] = pretty_timestamp($event['from_']).' - 
'.pretty_timestamp($event['to_']);
-               $bouser = CreateObject('bookingfrontend.bouser');
-               
if($bouser->is_organization_admin($event['customer_organization_id']))
-               {
-                       $event['edit_link'] = self::link(array('menuaction' => 
'bookingfrontend.uievent.edit', 'id' => $event['id']));
-                       $event['cancel_link'] = self::link(array('menuaction' 
=> 'bookingfrontend.uievent.cancel', 'id' => $event['id']));
-               }
 
-               self::render_template('event_info', 
array('event'=>$event,'orginfo' => $orginfo, 'user_can_delete_bookings' => 
$user_can_delete_bookings));
+               $event['edit_link'] = self::link(array('menuaction' => 
'booking.uievent.edit', 'id' => $event['id']));
+
+               self::render_template('event_info', array('event'=>$event));
                $GLOBALS['phpgw']->xslttpl->set_output('wml'); // Evil hack to 
disable page chrome
        }
 
-       public function report_numbers()
-       {
-               $step = 1;
-               $id = intval(phpgw::get_var('id', 'GET'));
-               $event = $this->bo->read_single($id);
-               $agegroups = $this->agegroup_bo->fetch_age_groups();
-               $agegroups = $agegroups['results'];
-
-               $building_info = $this->bo->so->get_building_info($id);
-               $building = 
$this->building_bo->read_single($building_info['id']);
-
-               if ($event['secret'] != phpgw::get_var('secret', 'GET'))
-               {
-                       $step = -1; // indicates that an error message should 
be displayed in the template
-                       self::render_template('report_numbers', 
array('event_object' => $event, 'agegroups' => $agegroups, 'building' => 
$building, 'step' => $step));
-                       return false;
-               }
-
-               if($_SERVER['REQUEST_METHOD'] == 'POST')
-               {
-                       //reformatting the post variable to fit the booking 
object
-                       $temp_agegroup = array();
-                       $sexes = array('male', 'female');
-                       foreach($sexes as $sex)
-                       {
-                               $i = 0;
-                               foreach(phpgw::get_var($sex, 'POST') as 
$agegroup_id => $value)
-                               {
-                                       $temp_agegroup[$i]['agegroup_id'] = 
$agegroup_id;
-                                       $temp_agegroup[$i][$sex] = $value;
-                                       $i++;
-                               }
-                       }
-
-                       $event['agegroups'] = $temp_agegroup;
-                       $event['reminder'] = 2; // status set to delivered
-                       $errors = $this->bo->validate($event);
-                       if(!$errors)
-                       {
-                               $receipt = $this->bo->update($event);
-                               $step++;
-                       }
-               }
-               self::render_template('report_numbers', array('event_object' => 
$event, 'agegroups' => $agegroups, 'building' => $building, 'step' => $step));
-       }
 }




reply via email to

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