⚝
One Hat Cyber Team
⚝
Your IP:
216.73.216.97
Server IP:
41.128.143.86
Server:
Linux host.raqmix.cloud 6.8.0-1025-azure #30~22.04.1-Ubuntu SMP Wed Mar 12 15:28:20 UTC 2025 x86_64
Server Software:
Apache
PHP Version:
8.3.23
Buat File
|
Buat Folder
Eksekusi
Dir :
~
/
usr
/
share
/
psa-horde
/
kronolith
/
View File Name :
attendees.php
* Copyright 2004-2007 Stuart Binge
* * See the enclosed file COPYING for license information (GPL). If you * did not receive this file, see http://www.horde.org/licenses/gpl. */ require_once __DIR__ . '/lib/Application.php'; Horde_Registry::appInit('kronolith'); if (Kronolith::showAjaxView()) { Horde::url('', true)->redirect(); } // Get the current attendees array from the session cache. $attendees = $session->get('kronolith', 'attendees', Horde_Session::TYPE_ARRAY); $resources = $session->get('kronolith', 'resources', Horde_Session::TYPE_ARRAY); $editAttendee = null; // Get the action ID and value. This specifies what action the user initiated. $actionID = Horde_Util::getFormData('actionID'); if (Horde_Util::getFormData('clearAll')) { $actionID = 'clear'; } $actionValue = Horde_Util::getFormData('actionValue'); // Perform the specified action, if there is one. switch ($actionID) { case 'add': // Add new attendees and/or resources. Multiple attendees can be seperated // on a single line by whitespace and/or commas. Resources are added one // at a time (at least for now). $newAttendees = trim(Horde_Util::getFormData('newAttendees')); $newResource = trim(Horde_Util::getFormData('resourceselect')); $newAttendees = Kronolith::parseAttendees($newAttendees); if ($newAttendees) { $session->set('kronolith', 'attendees', $attendees + $newAttendees); } // Any new resources? if (!empty($newResource)) { /* Get the requested resource */ $resource = Kronolith::getDriver('Resource')->getResource($newResource); /* Do our best to see what the response will be. Note that this * response is only guarenteed once the event is saved. */ $event = Kronolith::getDriver()->getEvent(); $event->start = new Horde_Date(Horde_Util::getFormData('startdate')); $event->end = new Horde_Date(Horde_Util::getFormData('enddate')); $event->start->setTimezone(date_default_timezone_get()); $event->end->setTimezone(date_default_timezone_get()); $response = $resource->getResponse($event); $resources[$resource->getId()] = array( 'attendance' => Kronolith::PART_REQUIRED, 'response' => $response, 'name' => $resource->get('name'), ); $session->set('kronolith', 'resources', $resources); } if (Horde_Util::getFormData('addNewClose')) { echo Horde::wrapInlineScript(array('window.close();')); exit; } break; case 'edit': // Edit the specified attendee. $actionValue = Horde_String::lower($actionValue); if (isset($attendees[$actionValue])) { if (empty($attendees[$actionValue]['name'])) { $editAttendee = $actionValue; } elseif (strpos($actionValue, '@') === false) { $editAttendee = $attendees[$actionValue]['name']; } else { $tmp = new Horde_Mail_Rfc822_Address($actionValue); $tmp->personal = $attendees[$actionValue]['name']; $editAttendee = strval($tmp); } unset($attendees[$actionValue]); $session->set('kronolith', 'attendees', $attendees); } break; case 'remove': // Remove the specified attendee. $actionValue = Horde_String::lower($actionValue); if (isset($attendees[$actionValue])) { unset($attendees[$actionValue]); $session->set('kronolith', 'attendees', $attendees); } break; case 'removeResource': // Remove the specified resource if (isset($resources[$actionValue])) { unset($resources[$actionValue]); $session->set('kronolith', 'resources', $resources); } break; case 'changeResourceResp': //@TODO: What else to do here? Disallow if responsetype is auto? list($partval, $partname) = explode(' ', $actionValue, 2); if (isset($resources[$partname])) { $resources[$partname]['response'] = $partval; $session->set('kronolith', 'resources', $resources); } break; case 'changeatt': // Change the attendance status of an attendee list($partval, $partname) = explode(' ', $actionValue, 2); $partname = Horde_String::lower($partname); if (isset($attendees[$partname])) { $attendees[$partname]['attendance'] = $partval; $session->set('kronolith', 'attendees', $attendees); } break; case 'changeResourceAtt': // Change attendance status of a resource list($partval, $partname) = explode(' ', $actionValue, 2); $partname = Horde_String::lower($partname); if (isset($resources[$partname])) { $resources[$partname]['attendance'] = $partval; $session->set('kronolith', 'resources', $resources); } break; case 'changeresp': // Change the response status of an attendee list($partval, $partname) = explode(' ', $actionValue, 2); $partname = Horde_String::lower($partname); if (isset($attendees[$partname])) { $attendees[$partname]['response'] = $partval; $session->set('kronolith', 'attendees', $attendees); } break; case 'dismiss': // Close the attendee window. if ($browser->hasFeature('javascript')) { echo Horde::wrapInlineScript(array('window.close();')); exit; } if ($url = Horde::verifySignedUrl(Horde_Util::getFormData('url'))) { $url = new Horde_Url($url, true); } else { $date = new Horde_Date(Horde_Util::getFormData('startdate')); $url = Horde::url($prefs->getValue('defaultview') . '.php', true) ->add('date', $date->dateString()); } // Make sure URL is unique. $url->unique()->redirect(); case 'clear': // Remove all the attendees and resources. $session->remove('kronolith', 'attendees'); $session->remove('kronolith', 'resources'); break; } /* Get list of resources for select list, and remove those we already added */ if (!empty($conf['resource']['driver'])) { $allResources = Kronolith::getDriver('Resource')->listResources(Horde_Perms::READ, array(), 'name'); foreach (array_keys($resources) as $id) { unset($allResources[$id]); } } else { $allResources = array(); } // Get the current Free/Busy view; default to the 'day' view if none specified. $view = Horde_Util::getFormData('view', 'Day'); // Pre-format our delete image/link. $delimg = Horde::img('delete.png', _("Remove Attendee")); $ident = $injector->getInstance('Horde_Core_Factory_Identity')->create(); $identities = $ident->getAll('id'); $vars = Horde_Variables::getDefaultVariables(); $tabs = new Horde_Core_Ui_Tabs(null, $vars); $tabs->addTab(_("Day"), new Horde_Url('javascript:switchView(\'Day\')'), 'Day'); $tabs->addTab(_("Work Week"), new Horde_Url('javascript:switchView(\'Workweek\')'), 'Workweek'); $tabs->addTab(_("Week"), new Horde_Url('javascript:switchView(\'Week\')'), 'Week'); $tabs->addTab(_("Month"), new Horde_Url('javascript:switchView(\'Month\')'), 'Month'); $attendee_view = &Kronolith_FreeBusy_View::singleton($view); // Add the creator as a required attendee in the Free/Busy display $cal = @unserialize($prefs->getValue('fb_cals')); if (!is_array($cal)) { $cal = null; } // If the free/busy calendars preference is empty, default to the user's // default_share preference, and if that's empty, to their username. if (!$cal) { $cal = 'internal_' . $prefs->getValue('default_share'); if (!$cal) { $cal = 'internal_' . $GLOBALS['registry']->getAuth(); } $cal = array($cal); } try { $vfb = Kronolith_FreeBusy::generate($cal, null, null, true, $GLOBALS['registry']->getAuth()); $attendee_view->addRequiredMember($vfb); } catch (Exception $e) { $notification->push(sprintf(_("Error retrieving your free/busy information: %s"), $e->getMessage())); } // Add the Free/Busy information for each attendee. foreach ($session->get('kronolith', 'attendees', Horde_Session::TYPE_ARRAY) as $email => $status) { if (strpos($email, '@') !== false && ($status['attendance'] == Kronolith::PART_REQUIRED || $status['attendance'] == Kronolith::PART_OPTIONAL)) { try { $vfb = Kronolith_FreeBusy::get($email); $organizer = $vfb->getAttribute('ORGANIZER'); if (empty($organizer)) { $vfb->setAttribute('ORGANIZER', 'mailto:' . $email, array(), false); } if ($status['attendance'] == Kronolith::PART_REQUIRED) { $attendee_view->addRequiredMember($vfb); } else { $attendee_view->addOptionalMember($vfb); } } catch (Exception $e) { $notification->push( sprintf(_("Error retrieving free/busy information for %s: %s"), $email, $e->getMessage())); } } } // Add Free/Busy for resources if (count($resources)) { $driver = Kronolith::getDriver('Resource'); foreach ($resources as $r_id => $resource) { try { $r = $driver->getResource($r_id); } catch (Horde_Exception_NotFound $e) { continue; } try { $vfb = $r->getFreeBusy(null, null, true); if ($resource['attendance'] == Kronolith::PART_REQUIRED) { $attendee_view->addRequiredResourceMember($vfb); } else { $attendee_view->addOptionalResourceMember($vfb); } } catch (Horde_Exception $e) { $notification->push( sprintf(_("Error retrieving free/busy information for %s: %s"), $r_id, $e->getMessage())); } } } $date = new Horde_Date(Horde_Util::getFormData('startdate', date('Ymd') . '000000')); $end = new Horde_Date(Horde_Util::getFormData('enddate', date('Ymd') . '000000')); $vfb_html = $attendee_view->render($date); $injector->getInstance('Horde_Core_Factory_Imple')->create('Kronolith_Ajax_Imple_ContactAutoCompleter', array( 'id' => 'newAttendees' )); $title = _("Edit attendees"); $page_output->sidebar = $page_output->topbar = false; $page_output->header(array( 'title' => $title )); require KRONOLITH_TEMPLATES . '/javascript_defs.php'; $notification->notify(array('listeners' => 'status')); require KRONOLITH_TEMPLATES . '/attendees/attendees.inc'; $page_output->footer();