├── .github └── workflows │ ├── create-zip-release.yml │ ├── lint.yml │ ├── phpunit.yml │ └── tweet-release.yml ├── .gitignore ├── CHANGES.txt ├── README.md ├── actions └── event_manager │ ├── attendees │ ├── export.php │ └── move_to_attendees.php │ ├── day │ └── edit.php │ ├── delete_program_item.php │ ├── event │ ├── copy.php │ ├── deletefile.php │ ├── edit.php │ ├── mail.php │ ├── register.php │ ├── resend_confirmation.php │ ├── rsvp.php │ ├── unsubscribe.php │ ├── unsubscribe_confirm.php │ └── upload.php │ ├── maps │ └── data.php │ ├── registration │ ├── confirm.php │ └── pdf.php │ └── slot │ └── save.php ├── classes ├── ColdTrick │ └── EventManager │ │ ├── Access.php │ │ ├── Attendees.php │ │ ├── Bootstrap.php │ │ ├── Controllers │ │ └── Calendar.php │ │ ├── Event │ │ ├── Day.php │ │ └── Slot.php │ │ ├── Forms │ │ └── EventMail.php │ │ ├── GroupToolContainerLogicCheck.php │ │ ├── Icons.php │ │ ├── Js.php │ │ ├── Menus.php │ │ ├── Menus │ │ ├── Entity.php │ │ ├── Filter.php │ │ ├── FilterEventAttendees.php │ │ └── Site.php │ │ ├── MigrateEvents.php │ │ ├── Notifications.php │ │ ├── Notifications │ │ ├── CreateEventEventHandler.php │ │ └── CreateEventMailEventHandler.php │ │ ├── ObjectPicker.php │ │ ├── Search.php │ │ ├── Seeder.php │ │ ├── Views.php │ │ └── Widgets.php ├── Event.php ├── EventMail.php ├── EventRegistration.php └── EventRegistrationQuestion.php ├── composer.json ├── composer.lock ├── elgg-plugin.php ├── languages ├── de.php ├── en.php ├── es.php ├── fi.php ├── fr.php ├── gd.php ├── ja.php └── nl.php ├── lib └── functions.php └── views └── default ├── event_manager ├── addthisevent │ ├── button.css │ ├── button.mjs │ ├── button.php │ ├── email.css │ ├── email.php │ └── settings.js.php ├── event │ ├── attendees_list.php │ ├── files.php │ ├── pdf.php │ ├── popup.php │ ├── registration.php │ ├── rsvp.php │ ├── sidebar.php │ ├── sidebar │ │ └── attendees.php │ ├── view.php │ └── view │ │ ├── attendees.php │ │ ├── banner.php │ │ ├── contact_details.php │ │ ├── datetime.php │ │ ├── description.php │ │ ├── files.php │ │ ├── location.php │ │ └── registration.php ├── forms │ └── program │ │ ├── day.php │ │ └── slot.php ├── listing │ ├── calendar.mjs.php │ ├── calendar.php │ ├── elements │ │ └── tags.php │ ├── list.php │ └── map.php ├── maps │ └── osm │ │ ├── location.php │ │ ├── location_input.mjs │ │ ├── location_input.php │ │ ├── onthemap.mjs │ │ ├── osm.mjs │ │ └── route.php ├── program │ ├── edit.php │ ├── elements │ │ ├── day.php │ │ └── slot.php │ ├── pdf.php │ ├── pdf │ │ ├── day.php │ │ └── slot.php │ ├── view.mjs │ └── view.php ├── registration │ ├── completed.php │ ├── non_loggedin.php │ ├── question.php │ └── user_data.php └── site.css ├── forms └── event_manager │ ├── event │ ├── attendees.mjs │ ├── attendees.php │ ├── copy.php │ ├── edit.mjs │ ├── edit.php │ ├── edit │ │ ├── event_type.php │ │ └── region.php │ ├── mail.php │ ├── module.php │ ├── register.mjs │ ├── register.php │ ├── tabs │ │ ├── contact.php │ │ ├── general.php │ │ ├── location.php │ │ ├── location_search.php │ │ ├── profile.php │ │ ├── questions.php │ │ └── registration.php │ ├── unsubscribe.php │ ├── unsubscribe_confirm.php │ └── upload_file.php │ ├── registration │ └── confirm.php │ └── registrationform │ └── question.php ├── groups └── profile │ └── module │ └── event_manager.php ├── icon └── object │ ├── event.php │ └── eventregistration.php ├── object ├── event.php └── eventregistration.php ├── plugins └── event_manager │ ├── settings.mjs │ └── settings.php ├── resources ├── event │ ├── add.php │ ├── attendees.php │ ├── attending.php │ ├── edit.php │ ├── edit_program.php │ ├── live.php │ ├── mail.php │ ├── owner.php │ ├── register.php │ ├── unsubscribe │ │ ├── confirm.php │ │ └── request.php │ ├── upcoming.php │ ├── upload.php │ ├── view.php │ └── waitinglist.php └── eventregistration │ ├── completed.php │ ├── confirm.php │ └── view.php ├── river └── event_relationship │ └── create.php └── widgets ├── events ├── content.php └── edit.php └── highlighted_events ├── content.php └── edit.php /.github/workflows/create-zip-release.yml: -------------------------------------------------------------------------------- 1 | name: Create ZIP Release 2 | 3 | on: 4 | release: 5 | types: [created, edited] 6 | 7 | jobs: 8 | build: 9 | name: Build release 10 | uses: ColdTrick/.github/.github/workflows/create-zip-release.yml@master 11 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | name: Lint checks 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | lint: 7 | name: Lint checks 8 | uses: ColdTrick/.github/.github/workflows/lint.yml@master 9 | -------------------------------------------------------------------------------- /.github/workflows/phpunit.yml: -------------------------------------------------------------------------------- 1 | name: PHPUnit Plugin Tests 2 | 3 | on: [push, pull_request] 4 | 5 | jobs: 6 | phpunit: 7 | name: Run PHPUnit test suites 8 | uses: ColdTrick/.github/.github/workflows/phpunit.yml@master 9 | with: 10 | elgg_major_version: 6 11 | -------------------------------------------------------------------------------- /.github/workflows/tweet-release.yml: -------------------------------------------------------------------------------- 1 | name: Tweet about a new release 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | tweet: 9 | name: Send a Tweet 10 | uses: ColdTrick/.github/.github/workflows/tweet-release.yml@master 11 | secrets: inherit 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /vendor/ 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Event Manager 2 | ============= 3 | 4 | ![Elgg 6.0](https://img.shields.io/badge/Elgg-6.0-green.svg) 5 | ![Lint Checks](https://github.com/ColdTrick/event_manager/actions/workflows/lint.yml/badge.svg?event=push) 6 | [![Latest Stable Version](https://poser.pugx.org/coldtrick/event_manager/v/stable.svg)](https://packagist.org/packages/coldtrick/event_manager) 7 | [![License](https://poser.pugx.org/coldtrick/event_manager/license.svg)](https://packagist.org/packages/coldtrick/event_manager) 8 | 9 | Manage events, from a simple appointment to a multi day event with day programs and subscriptions 10 | 11 | Features 12 | -------- 13 | 14 | - Create site and group events 15 | - Listing of upcoming events 16 | - Maps integration 17 | - Show events on a map (using OpenStreetMaps with Leaflet.js) 18 | 19 | - Create simple or advanced events with 20 | - Registration forms 21 | - Configure a multi-day and multi-slot programs 22 | - Waiting lists 23 | - Different types of attendance 24 | - Optionally let logged-out users register 25 | - Notifications to organizer and attendees 26 | - Add files to your event 27 | - Export attendees 28 | 29 | - RSVP option to confirm attendance to an event 30 | - After RSVP, specify your personal daily program participation 31 | - Receive personal program as PDF 32 | - Add event to your personal calendar software (ical export) 33 | -------------------------------------------------------------------------------- /actions/event_manager/attendees/export.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 8 | return elgg_error_response(elgg_echo('actionunauthorized')); 9 | } 10 | 11 | $rows = elgg_call(ELGG_IGNORE_ACCESS, function() use ($rel, $event) { 12 | $rows = []; 13 | 14 | $attendees = new \ElggBatch('elgg_get_entities', [ 15 | 'relationship' => $rel, 16 | 'relationship_guid' => $event->guid, 17 | 'inverse_relationship' => false, 18 | 'limit' => false, 19 | ]); 20 | 21 | foreach ($attendees as $attendee) { 22 | $params = [ 23 | 'event' => $event, 24 | 'attendee' => $attendee, 25 | 'relationship' => $rel, 26 | ]; 27 | 28 | $rowdata = elgg_trigger_event_results('export_attendee', 'event', $params, []); 29 | if (empty($rowdata)) { 30 | continue; 31 | } 32 | 33 | $rows[] = $rowdata; 34 | } 35 | 36 | return $rows; 37 | }); 38 | 39 | if (empty($rows)) { 40 | return elgg_error_response(elgg_echo('event_manager:action:attendees:export:no_data')); 41 | } 42 | 43 | $fh = tmpfile(); 44 | 45 | fputcsv($fh, array_keys($rows[0]), ';'); 46 | 47 | foreach ($rows as $row) { 48 | $decoded_rows = array_map(function($row) { 49 | return html_entity_decode((string) $row); 50 | }, array_values($row)); 51 | 52 | fputcsv($fh, $decoded_rows, ';'); 53 | } 54 | 55 | $contents = ''; 56 | rewind($fh); 57 | while (!feof($fh)) { 58 | $contents .= fread($fh, 2048); 59 | } 60 | 61 | fclose($fh); 62 | 63 | // create export file 64 | header('Content-Type: text/csv'); 65 | header('Content-Disposition: Attachment; filename="attendees-' . elgg_get_friendly_title($event->getDisplayName()) . '.csv"'); 66 | header('Content-Length: ' . strlen($contents)); 67 | header('Pragma: public'); 68 | 69 | echo $contents; 70 | 71 | exit(); 72 | -------------------------------------------------------------------------------- /actions/event_manager/attendees/move_to_attendees.php: -------------------------------------------------------------------------------- 1 | canEdit() || (!$object instanceof \ElggUser && !$object instanceof \EventRegistration)) { 10 | return elgg_error_response(elgg_echo('actionunauthorized')); 11 | } 12 | 13 | // check if object has relation ship that can be moved 14 | $user_relationship = $event->getRelationshipByUser($object->guid); 15 | 16 | if (!in_array($user_relationship, [EVENT_MANAGER_RELATION_ATTENDING_PENDING, EVENT_MANAGER_RELATION_ATTENDING_WAITINGLIST])) { 17 | return elgg_error_response(); 18 | } 19 | 20 | // update pending slots 21 | $slots = $event->getRegisteredSlotsForEntity($object->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION_PENDING); 22 | if ($slots) { 23 | foreach ($slots as $slot) { 24 | $object->removeRelationship($slot->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION_PENDING); 25 | $object->addRelationship($slot->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION); 26 | } 27 | } 28 | 29 | // update waiting slots 30 | $slots = $event->getRegisteredSlotsForEntity($object->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION_WAITINGLIST); 31 | if ($slots) { 32 | foreach ($slots as $slot) { 33 | $object->removeRelationship($slot->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION_WAITINGLIST); 34 | $object->addRelationship($slot->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION); 35 | } 36 | } 37 | 38 | // pending / waitinglist 39 | $event->rsvp(EVENT_MANAGER_RELATION_ATTENDING, $object->guid); 40 | 41 | return elgg_ok_response('', elgg_echo('event_manager:action:move_to_attendees:success')); 42 | -------------------------------------------------------------------------------- /actions/event_manager/day/edit.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 7 | return elgg_error_response(elgg_echo('actionunauthorized')); 8 | } 9 | 10 | $guid = (int) get_input('guid'); 11 | $title = get_input('title'); 12 | $description = get_input('description'); 13 | $date = (int) get_input('date'); 14 | 15 | $edit = false; 16 | 17 | $day = elgg_call(ELGG_IGNORE_ACCESS, function() use ($guid) { 18 | // days are unavailable if event is private 19 | return get_entity($guid); 20 | }); 21 | 22 | if ($day instanceof \ColdTrick\EventManager\Event\Day) { 23 | $edit = true; 24 | } else { 25 | // create new 26 | $day = new \ColdTrick\EventManager\Event\Day(); 27 | } 28 | 29 | if (empty($day) || empty($date)) { 30 | return elgg_error_response(elgg_echo('save:fail')); 31 | } 32 | 33 | $day->title = $title; 34 | $day->description = $description; 35 | $day->container_guid = $event->guid; 36 | $day->owner_guid = $event->guid; 37 | $day->access_id = $event->access_id; 38 | 39 | if (!$day->save()) { 40 | return elgg_error_response(elgg_echo('save:fail')); 41 | } 42 | 43 | $day->date = $date; 44 | 45 | $day->addRelationship($event->guid, 'event_day_relation'); 46 | 47 | $content_title = $day->description; 48 | if (empty($content_title)) { 49 | $content_title = event_manager_format_date($day->date); 50 | } 51 | 52 | if (!$edit) { 53 | $title_anchor = elgg_view('output/url', [ 54 | 'href' => "#event_manager_event_view_program-{$day->guid}", 55 | 'text' => $content_title, 56 | 'rel' => "day_{$day->guid}", 57 | 'data-target' => "#event_manager_event_view_program-{$day->guid}", 58 | 'class' => [ 59 | 'elgg-menu-content', 60 | ], 61 | ]); 62 | $content_title = elgg_format_element('li', [ 63 | 'data-menu-item' => "event_manager_event_view_program-tab-{$day->guid}", 64 | 'class' => [ 65 | "elgg-menu-item-event-manager-event-view-program-tab-{$day->guid}", 66 | 'elgg-components-tab', 67 | ], 68 | ], $title_anchor); 69 | } 70 | 71 | $content_body = elgg_view('event_manager/program/elements/day', [ 72 | 'entity' => $day, 73 | 'details_only' => $edit, 74 | ]); 75 | 76 | if (!$edit) { 77 | $content_body = elgg_format_element('div', [ 78 | 'class' => 'elgg-content', 79 | 'id' => "event_manager_event_view_program-{$day->guid}", 80 | ], $content_body); 81 | } 82 | 83 | $result = [ 84 | 'guid' => $day->guid, 85 | 'edit' => $edit, 86 | 'content_title' => $content_title, 87 | 'content_body' => $content_body, 88 | ]; 89 | 90 | return elgg_ok_response($result); 91 | -------------------------------------------------------------------------------- /actions/event_manager/delete_program_item.php: -------------------------------------------------------------------------------- 1 | canDelete()) { 15 | return elgg_error_response(elgg_echo('entity:delete:permission_denied')); 16 | } 17 | 18 | // determine what name to show on success 19 | $display_name = $entity->getDisplayName() ?: elgg_echo('entity:delete:item'); 20 | 21 | $type = $entity->getType(); 22 | $subtype = $entity->getSubtype(); 23 | 24 | if (!$entity->delete(true, true)) { 25 | return elgg_error_response(elgg_echo('entity:delete:fail', [$display_name])); 26 | } 27 | 28 | $success_keys = [ 29 | "entity:delete:{$type}:{$subtype}:success", 30 | "entity:delete:{$type}:success", 31 | 'entity:delete:success', 32 | ]; 33 | 34 | $message = ''; 35 | if (get_input('show_success', true)) { 36 | foreach ($success_keys as $success_key) { 37 | if (elgg_language_key_exists($success_key)) { 38 | $message = elgg_echo($success_key, [$display_name]); 39 | break; 40 | } 41 | } 42 | } 43 | 44 | return elgg_ok_response('', $message); 45 | -------------------------------------------------------------------------------- /actions/event_manager/event/copy.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 12 | return elgg_error_response(elgg_echo('actionunauthorized')); 13 | } 14 | 15 | $new_owner_guid = elgg_get_logged_in_user_guid(); 16 | $new_container_guid = $old_event->getContainerGUID(); 17 | if ($old_event->getContainerEntity() instanceof \ElggUser) { 18 | $new_container_guid = elgg_get_logged_in_user_guid(); 19 | } 20 | 21 | $new_event = clone $old_event; 22 | $new_event->owner_guid = $new_owner_guid; 23 | $new_event->container_guid = $new_container_guid; 24 | 25 | $new_event->title = get_input('title', elgg_echo('event_manager:entity:copy', [$old_event->title])); 26 | $new_event->access_id = get_input('access_id', $new_event->access_id); 27 | 28 | $event_start = (int) get_input('event_start'); 29 | if ($event_start) { 30 | $event_start += (int) get_input('start_time'); 31 | $new_event->event_start = $event_start; 32 | } 33 | 34 | $event_end = (int) get_input('event_end'); 35 | if ($event_end) { 36 | $event_end += (int) get_input('end_time'); 37 | $new_event->event_end = $event_end; 38 | } 39 | 40 | unset($new_event->notification_sent_ts); 41 | 42 | $announcement_period = (int) get_input('announcement_period'); 43 | if ($announcement_period < 1) { 44 | $notification_queued_ts = time(); 45 | } else { 46 | $notification_queued_ts = Values::normalizeTime($event_start)->setTime(0, 0, 0)->modify("-{$announcement_period} weeks")->getTimestamp(); 47 | if ($notification_queued_ts <= time()) { 48 | $notification_queued_ts = time(); 49 | } 50 | } 51 | 52 | if (!empty($notification_queued_ts)) { 53 | // only set if notifications are not sent 54 | // only set for new events or if previously saved with a notification queued (to differentiate with event with the new notification logic) 55 | $new_event->announcement_period = $announcement_period; 56 | $new_event->notification_queued_ts = $notification_queued_ts; 57 | } else { 58 | unset($new_event->announcement_period); 59 | unset($new_event->notification_queued_ts); 60 | } 61 | 62 | // remove entity_view_counter stats 63 | unset($new_event->entity_view_count); 64 | 65 | if (!$new_event->save()) { 66 | return elgg_error_response(elgg_echo('unknown_error')); 67 | } 68 | 69 | foreach ($old_event->getEventDays() as $day) { 70 | $new_day = clone $day; 71 | $new_day->container_guid = $new_event->guid; 72 | $new_day->owner_guid = $new_event->guid; 73 | 74 | $new_day->save(); 75 | $new_day->addRelationship($new_event->guid, 'event_day_relation'); 76 | 77 | foreach ($day->getEventSlots() as $slot) { 78 | $new_slot = clone $slot; 79 | $new_slot->container_guid = $new_day->getContainerGUID(); 80 | $new_slot->owner_guid = $new_day->getOwnerGUID(); 81 | $new_slot->save(); 82 | $new_slot->addRelationship($new_day->guid, 'event_day_slot_relation'); 83 | } 84 | } 85 | 86 | foreach ($old_event->getRegistrationFormQuestions() as $question) { 87 | $new_question = clone $question; 88 | $new_question->container_guid = $new_event->guid; 89 | $new_question->owner_guid = $new_event->guid; 90 | $new_question->save(); 91 | $new_question->addRelationship($new_event->guid, 'event_registrationquestion_relation'); 92 | } 93 | 94 | // copy all event files 95 | $dir = new \Elgg\EntityDirLocator($old_event->guid); 96 | $source = elgg_get_data_path() . $dir; 97 | if (is_dir($source)) { 98 | $dir = new \Elgg\EntityDirLocator($new_event->guid); 99 | $dest = elgg_get_data_path() . $dir; 100 | 101 | // create new event data structure bucket 102 | mkdir($dest, 0755, true); 103 | 104 | $iterator = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($source, \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::SELF_FIRST); 105 | foreach ($iterator as $item) { 106 | if ($item->isDir()) { 107 | mkdir($dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName(), 0755, true); 108 | } else { 109 | copy($item, $dest . DIRECTORY_SEPARATOR . $iterator->getSubPathName()); 110 | } 111 | } 112 | } 113 | 114 | return elgg_ok_response('', elgg_echo('event_manager:action:event:edit:ok'), $new_event->getURL()); 115 | -------------------------------------------------------------------------------- /actions/event_manager/event/deletefile.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 9 | return elgg_error_response(elgg_echo('event_manager:event:file:notfound:text')); 10 | } 11 | 12 | $files = $event->getFiles(); 13 | 14 | foreach ($files as $index => $file) { 15 | if (strtolower($file->file) == strtolower($filename)) { 16 | $fileHandler = new \ElggFile(); 17 | $fileHandler->owner_guid = $event->guid; 18 | $fileHandler->setFilename($file->file); 19 | 20 | if (!$fileHandler->exists()) { 21 | // check old storage location 22 | $fileHandler->setFilename("files/{$file->file}"); 23 | } 24 | 25 | if ($fileHandler->delete()) { 26 | unset($files[$index]); 27 | } 28 | } 29 | } 30 | 31 | $files = array_values($files); 32 | 33 | $event->files = $files ? json_encode($files) : null; 34 | 35 | return elgg_ok_response(); 36 | -------------------------------------------------------------------------------- /actions/event_manager/event/mail.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 12 | return elgg_error_response(elgg_echo('actionunauthorized')); 13 | } 14 | 15 | if (empty($title) || empty($description) || empty($recipients)) { 16 | return elgg_error_response(elgg_echo('error:missing_data')); 17 | } 18 | 19 | $mail = new \EventMail(); 20 | $mail->container_guid = $entity->guid; 21 | 22 | $mail->title = $title; 23 | $mail->description = $description; 24 | $mail->recipients = $recipients; 25 | 26 | if (!$mail->save()) { 27 | return elgg_error_response(elgg_echo('save:fail')); 28 | } 29 | 30 | elgg_clear_sticky_form('event_manager/event/mail'); 31 | 32 | return elgg_ok_response('', elgg_echo('event_manager:action:event:mail:success'), $entity->getURL()); 33 | -------------------------------------------------------------------------------- /actions/event_manager/event/resend_confirmation.php: -------------------------------------------------------------------------------- 1 | canEdit() || (!$object instanceof \ElggUser && !$object instanceof \EventRegistration)) { 10 | return elgg_error_response(elgg_echo('actionunauthorized')); 11 | } 12 | 13 | event_manager_send_registration_validation_email($event, $object); 14 | 15 | return elgg_ok_response('', elgg_echo('event_manager:action:resend_confirmation:success')); 16 | -------------------------------------------------------------------------------- /actions/event_manager/event/rsvp.php: -------------------------------------------------------------------------------- 1 | canEdit() && !$event->canEdit()) { 26 | return elgg_echo('actionunauthorized'); 27 | } 28 | 29 | if (empty($rel)) { 30 | return elgg_error_response(elgg_echo('error:missing_data')); 31 | } 32 | 33 | if ($rel == EVENT_MANAGER_RELATION_ATTENDING) { 34 | if ($event->hasEventSpotsLeft() && $event->hasSlotSpotsLeft()) { 35 | if ($event->registration_needed && $event->hasRegistrationForm()) { 36 | return elgg_redirect_response(elgg_generate_url('default:object:event:register', [ 37 | 'guid' => $guid, 38 | ])); 39 | } else { 40 | $rsvp = $event->rsvp($rel, $user_guid); 41 | } 42 | } else { 43 | if ($event->waiting_list_enabled) { 44 | $rel = EVENT_MANAGER_RELATION_ATTENDING_WAITINGLIST; 45 | if ($event->openForRegistration()) { 46 | if ($event->registration_needed && $event->hasRegistrationForm()) { 47 | return elgg_redirect_response(elgg_generate_url('collection:object:event:waitinglist', ['guid' => $guid])); 48 | } else { 49 | $rsvp = $event->rsvp($rel, $user_guid); 50 | } 51 | } else { 52 | return elgg_error_response(elgg_echo('event_manager:event:rsvp:registration_ended')); 53 | } 54 | } else { 55 | return elgg_error_response(elgg_echo('event_manager:event:rsvp:nospotsleft')); 56 | } 57 | } 58 | } else { 59 | if ($event->$rel || ($rel == EVENT_MANAGER_RELATION_UNDO)) { 60 | $rsvp = $event->rsvp($rel, $user_guid); 61 | } else { 62 | return elgg_error_response(elgg_echo('event_manager:event:relationship:message:unavailable_relation')); 63 | } 64 | } 65 | 66 | if (!$rsvp) { 67 | return elgg_error_response(elgg_echo('event_manager:event:relationship:message:error')); 68 | } 69 | 70 | return elgg_ok_response('', elgg_echo("event_manager:event:relationship:message:{$rel}"), $forward_url); 71 | -------------------------------------------------------------------------------- /actions/event_manager/event/unsubscribe.php: -------------------------------------------------------------------------------- 1 | 'object', 20 | 'subtype' => \EventRegistration::SUBTYPE, 21 | 'owner_guid' => $entity->guid, 22 | 'limit' => 1, 23 | 'metadata_name_value_pairs' => [ 24 | 'name' => 'email', 25 | 'value' => $email, 26 | 'case_sensitive' => false, 27 | ], 28 | ]); 29 | 30 | if (empty($registrations)) { 31 | return elgg_error_response(elgg_echo('event_manager:action:unsubscribe:error:no_registration')); 32 | } 33 | 34 | $registration = $registrations[0]; 35 | 36 | $unsubscribe_link = elgg_generate_url('default:object:event:unsubscribe:confirm', [ 37 | 'guid' => $registration->guid, 38 | 'code' => event_manager_create_unsubscribe_code($registration, $entity), 39 | ]); 40 | 41 | // make a message with further instructions 42 | $subject = elgg_echo('event_manager:unsubscribe:confirm:subject', [$entity->getDisplayName()]); 43 | $message = elgg_echo('event_manager:unsubscribe:confirm:message', [ 44 | $entity->getDisplayName(), 45 | $entity->getURL(), 46 | $unsubscribe_link, 47 | ]); 48 | 49 | $email_sent = elgg_send_email(\Elgg\Email::factory([ 50 | 'to' => $registration, 51 | 'subject' => $subject, 52 | 'body' => $message, 53 | ])); 54 | 55 | if (!$email_sent) { 56 | return elgg_error_response(elgg_echo('event_manager:action:unsubscribe:error:mail')); 57 | } 58 | 59 | elgg_clear_sticky_form('event_unsubscribe'); 60 | 61 | return elgg_ok_response('', elgg_echo('event_manager:action:unsubscribe:success'), $entity->getURL()); 62 | -------------------------------------------------------------------------------- /actions/event_manager/event/unsubscribe_confirm.php: -------------------------------------------------------------------------------- 1 | rsvp(EVENT_MANAGER_RELATION_UNDO, $registration->guid)) { 20 | return elgg_error_response(elgg_echo('event_manager:action:unsubscribe_confirm:error')); 21 | } 22 | 23 | return elgg_ok_response('', elgg_echo('event_manager:action:unsubscribe_confirm:success'), $event->getURL()); 24 | -------------------------------------------------------------------------------- /actions/event_manager/event/upload.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 8 | return elgg_error_response(elgg_echo('actionunauthorized')); 9 | } 10 | 11 | if (empty($title)) { 12 | return elgg_error_response(elgg_echo('event_manager:action:event:edit:error_fields')); 13 | } 14 | 15 | // check if upload attempted and failed 16 | $uploaded_file = elgg_get_uploaded_file('file', false); 17 | if ($uploaded_file && !$uploaded_file->isValid()) { 18 | $error = elgg_get_friendly_upload_error($uploaded_file->getError()); 19 | return elgg_error_response($error); 20 | } 21 | 22 | $filesArray = $event->getFiles(); 23 | 24 | $file = new \ElggFile(); 25 | $file->owner_guid = $event->guid; 26 | $file->acceptUploadedFile($uploaded_file); 27 | 28 | $filesArray[] = [ 29 | 'title' => $title, 30 | 'file' => $file->getFilename(), 31 | 'mime' => $file->getMimeType(), 32 | 'time_uploaded' => time(), 33 | 'uploader' => elgg_get_logged_in_user_guid(), 34 | ]; 35 | 36 | $event->files = json_encode(array_values($filesArray)); 37 | 38 | return elgg_ok_response('', elgg_echo('event_manager:action:event:edit:ok')); 39 | -------------------------------------------------------------------------------- /actions/event_manager/maps/data.php: -------------------------------------------------------------------------------- 1 | 'object', 32 | 'subtype' => \Event::SUBTYPE, 33 | 'limit' => 50, 34 | 'container_guid' => ($entity instanceof \ElggGroup) ? $entity->guid : ELGG_ENTITIES_ANY_VALUE, 35 | 'wheres' => [ 36 | function (QueryBuilder $qb, $main_alias) use ($lat_min, $lat_max, $long_min, $long_max) { 37 | 38 | // cannot use between helper because of casting of values 39 | $lat_alias = $qb->joinMetadataTable($main_alias, 'guid', 'geo:lat'); 40 | $long_alias = $qb->joinMetadataTable($main_alias, 'guid', 'geo:long'); 41 | 42 | return $qb->merge([ 43 | (new WhereClause("{$lat_alias}.value >= {$lat_min}"))->prepare($qb, $main_alias), 44 | (new WhereClause("{$lat_alias}.value <= {$lat_max}"))->prepare($qb, $main_alias), 45 | (new WhereClause("{$long_alias}.value >= {$long_min}"))->prepare($qb, $main_alias), 46 | (new WhereClause("{$long_alias}.value <= {$long_max}"))->prepare($qb, $main_alias), 47 | ]); 48 | } 49 | ], 50 | 'metadata_name_value_pairs' => [ 51 | 'upcoming' => [ 52 | 'name' => 'event_start', 53 | 'value' => time(), 54 | 'operand' => '>=', 55 | ], 56 | ], 57 | 'batch' => true, 58 | ]; 59 | 60 | // resource specific options 61 | switch ($resource) { 62 | case 'live': 63 | unset($options['metadata_name_value_pairs']['upcoming']); 64 | 65 | $options['metadata_name_value_pairs'][] = [ 66 | 'name' => 'event_start', 67 | 'value' => time(), 68 | 'operand' => '<=', 69 | ]; 70 | $options['metadata_name_value_pairs'][] = [ 71 | 'name' => 'event_end', 72 | 'value' => time(), 73 | 'operand' => '>=', 74 | ]; 75 | break; 76 | case 'owner': 77 | if (!$entity instanceof \ElggUser) { 78 | return elgg_error_response(); 79 | } 80 | 81 | unset($options['metadata_name_value_pairs']['upcoming']); 82 | 83 | $options['owner_guid'] = $entity->guid; 84 | break; 85 | case 'attending': 86 | if (!$entity instanceof \ElggUser) { 87 | return elgg_error_response(); 88 | } 89 | 90 | $options['relationship'] = EVENT_MANAGER_RELATION_ATTENDING; 91 | $options['relationship_guid'] = $entity->guid; 92 | $options['inverse_relationship'] = true; 93 | break; 94 | } 95 | 96 | if (!empty($tag)) { 97 | $options['metadata_name_value_pairs'][] = [ 98 | 'name' => 'tags', 99 | 'value' => $tag, 100 | 'case_sensitive' => false, 101 | ]; 102 | } 103 | 104 | // let others extend this 105 | $params = [ 106 | 'resource' => $resource, 107 | 'guid' => $guid, 108 | 'latitude' => $latitude, 109 | 'longitude' => $longitude, 110 | 'distance_latitude' => $lat_distance, 111 | 'distance_longitude' => $long_distance, 112 | ]; 113 | $options = elgg_trigger_event_results('maps_data:options', 'event_manager', $params, $options); 114 | 115 | // fetch data 116 | $entities = elgg_get_entities($options); 117 | 118 | $result = []; 119 | foreach ($entities as $event) { 120 | $result['markers'][] = [ 121 | 'guid' => $event->guid, 122 | 'lat' => $event->getLatitude(), 123 | 'lng' => $event->getLongitude(), 124 | 'title' => $event->title, 125 | 'has_relation' => $event->getRelationshipByUser(), 126 | 'iscreator' => (($event->getOwnerGUID() == elgg_get_logged_in_user_guid()) ? 'owner' : null) 127 | ]; 128 | } 129 | 130 | return elgg_ok_response($result); 131 | -------------------------------------------------------------------------------- /actions/event_manager/registration/confirm.php: -------------------------------------------------------------------------------- 1 | openForRegistration()) { 19 | return elgg_error_response(elgg_echo('event_manager:event:rsvp:registration_ended'), $event->getURL()); 20 | } 21 | 22 | // check if we can become attending or should be on the waitinglist 23 | $relation = EVENT_MANAGER_RELATION_ATTENDING; 24 | $slot_relation = EVENT_MANAGER_RELATION_SLOT_REGISTRATION; 25 | 26 | if (!$event->hasEventSpotsLeft() || !$event->hasSlotSpotsLeft()) { 27 | if ($event->waiting_list_enabled) { 28 | $relation = EVENT_MANAGER_RELATION_ATTENDING_WAITINGLIST; 29 | $slot_relation = EVENT_MANAGER_RELATION_SLOT_REGISTRATION_WAITINGLIST; 30 | } else { 31 | return elgg_error_response(elgg_echo('event_manager:event:rsvp:nospotsleft'), $event->getURL()); 32 | } 33 | } 34 | 35 | // update all slots from pending to attending/waiting 36 | $slots = $event->getRegisteredSlotsForEntity($user->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION_PENDING); 37 | if ($slots) { 38 | foreach ($slots as $slot) { 39 | $user->removeRelationship($slot->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION_PENDING); 40 | $user->addRelationship($slot->guid, $slot_relation); 41 | } 42 | } 43 | 44 | // update event relationship to attending/waiting 45 | $event->rsvp($relation, $user->guid); 46 | 47 | return elgg_ok_response('', elgg_echo("event_manager:event:relationship:message:{$relation}"), $event->getURL()); 48 | -------------------------------------------------------------------------------- /actions/event_manager/registration/pdf.php: -------------------------------------------------------------------------------- 1 | time_created, $user_guid])->getToken(); 20 | 21 | $entity = get_entity($user_guid); 22 | if (empty($entity) || ($tempKey !== $key)) { 23 | return elgg_redirect_response(elgg_generate_url('default:object:event')); 24 | } 25 | 26 | $html = elgg_view_title(elgg_echo('event_manager:registration:yourregistration')); 27 | 28 | $html .= elgg_view('event_manager/event/pdf', ['entity' => $event]); 29 | 30 | $html .= elgg_call(ELGG_IGNORE_ACCESS, function () use ($event, $entity) { 31 | $output = elgg_view('event_manager/registration/user_data', [ 32 | 'event' => $event, 33 | 'entity' => $entity, 34 | 'show_title' => true, 35 | ]); 36 | 37 | if ($event->with_program) { 38 | $output .= elgg_view_module('main', '', elgg_view('event_manager/program/pdf', ['entity' => $event, 'user_guid' => $entity->guid])); 39 | } 40 | 41 | return $output; 42 | }); 43 | 44 | $dompdf = new Dompdf(['enable_remote' => true]); 45 | $dompdf->setPaper('A4'); 46 | $dompdf->loadHtml($html); 47 | $dompdf->render(); 48 | $dompdf->stream('registration.pdf'); 49 | 50 | exit; 51 | -------------------------------------------------------------------------------- /actions/event_manager/slot/save.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 15 | return elgg_error_response(elgg_echo('actionunauthorized')); 16 | } 17 | 18 | $edit = false; 19 | 20 | $guid = (int) get_input('guid'); 21 | $title = get_input('title'); 22 | $description = get_input('description'); 23 | 24 | $start_time_ts = (int) get_input('start_time'); 25 | 26 | $minutes = $start_time_ts % 3600; 27 | $hours = $start_time_ts - $minutes; 28 | 29 | // special handling of time for BC reasons 30 | $start_time = mktime($hours / 3600, $minutes / 60, 1, 0, 0, 0); 31 | 32 | $end_time_ts = (int) get_input('end_time'); 33 | $minutes = $end_time_ts % 3600; 34 | $hours = $end_time_ts - $minutes; 35 | $end_time = mktime($hours / 3600, $minutes / 60, 1, 0, 0, 0); 36 | 37 | $location = get_input('location'); 38 | $max_attendees = (int) get_input('max_attendees'); 39 | 40 | $slot_set = get_input('slot_set'); 41 | 42 | if (empty($title) || empty($start_time) || empty($end_time)) { 43 | return elgg_error_response(elgg_echo('event_manager:action:slot:missing_fields')); 44 | } 45 | 46 | if ($guid) { 47 | // edit existing 48 | $slot = elgg_call(ELGG_IGNORE_ACCESS, function() use ($guid) { 49 | // slots are unavailable if event is private 50 | return get_entity($guid); 51 | }); 52 | 53 | if (!$slot instanceof \ColdTrick\EventManager\Event\Slot) { 54 | return elgg_error_response(elgg_echo('event_manager:action:slot:not_found')); 55 | } 56 | 57 | $edit = true; 58 | } else { 59 | // create new 60 | $slot = new \ColdTrick\EventManager\Event\Slot(); 61 | } 62 | 63 | $slot->title = $title; 64 | $slot->description = $description; 65 | $slot->container_guid = $day->container_guid; 66 | $slot->owner_guid = $day->owner_guid; 67 | $slot->access_id = $day->access_id; 68 | $slot->start_time = $start_time; 69 | $slot->end_time = $end_time; 70 | $slot->location = $location; 71 | $slot->max_attendees = $max_attendees ?: null; 72 | 73 | if (!$slot->save()) { 74 | return elgg_error_response(elgg_echo('event_manager:action:slot:cannot_save')); 75 | } 76 | 77 | if (!empty($slot_set)) { 78 | $slot->slot_set = $slot_set; 79 | } 80 | 81 | if (!$edit) { 82 | $slot->addRelationship($day->guid, 'event_day_slot_relation'); 83 | } 84 | 85 | $result = [ 86 | 'edit' => $edit, 87 | 'guid' => $slot->guid, 88 | 'parent_guid' => $parent_guid, 89 | 'content' => elgg_view('event_manager/program/elements/slot', ['entity' => $slot]), 90 | ]; 91 | 92 | return elgg_ok_response($result, elgg_echo('event_manager:action:slot:saved')); 93 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Access.php: -------------------------------------------------------------------------------- 1 | getObject(); 19 | if (!$entity instanceof \Event) { 20 | return; 21 | } 22 | 23 | $org_attributes = $entity->getOriginalAttributes(); 24 | if (elgg_extract('access_id', $org_attributes) === null) { 25 | // access wasn't updated 26 | return; 27 | } 28 | 29 | elgg_call(ELGG_IGNORE_ACCESS, function() use ($entity) { 30 | $days = $entity->getEventDays(); 31 | if (!empty($days)) { 32 | foreach ($days as $day) { 33 | $day->access_id = $entity->access_id; 34 | $day->save(); 35 | 36 | $slots = $day->getEventSlots(); 37 | if (empty($slots)) { 38 | continue; 39 | } 40 | 41 | foreach ($slots as $slot) { 42 | $slot->access_id = $entity->access_id; 43 | $slot->save(); 44 | } 45 | } 46 | } 47 | 48 | $questions = $entity->getRegistrationFormQuestions(); 49 | if (!empty($questions)) { 50 | foreach ($questions as $question) { 51 | $question->access_id = $entity->access_id; 52 | $question->save(); 53 | } 54 | } 55 | }); 56 | } 57 | 58 | /** 59 | * Checks if plugin setting allows users to write to a container 60 | * 61 | * @param \Elgg\Event $elgg_event 'container_logic_check', 'object' 62 | * 63 | * @return void|false 64 | */ 65 | public static function containerLogicCheck(\Elgg\Event $elgg_event) { 66 | if ($elgg_event->getParam('subtype') !== 'event') { 67 | return; 68 | } 69 | 70 | $container = $elgg_event->getParam('container'); 71 | if ($container instanceof \ElggGroup) { 72 | $who_create_group_events = elgg_get_plugin_setting('who_create_group_events', 'event_manager'); // group_admin, members 73 | if (empty($who_create_group_events)) { 74 | // no one can create 75 | return false; 76 | } 77 | 78 | $user = $elgg_event->getUserParam(); 79 | $user_guid = $user instanceof \ElggUser ? $user->guid : 0; 80 | if ($who_create_group_events === 'group_admin' && !$container->canEdit($user_guid)) { 81 | return false; 82 | } 83 | 84 | // in other group case let regular checks take place 85 | } else { 86 | $who_create_site_events = elgg_get_plugin_setting('who_create_site_events', 'event_manager'); 87 | if ($who_create_site_events === 'admin_only' && !elgg_is_admin_logged_in()) { 88 | return false; 89 | } 90 | } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Attendees.php: -------------------------------------------------------------------------------- 1 | getParam('attendee'); 20 | $event = $elgg_event->getParam('event'); 21 | $rel = $elgg_event->getParam('relationship'); 22 | 23 | $base_attributes = [ 24 | 'guid' => $attendee->guid, 25 | elgg_echo('name') => $attendee->getDisplayName(), 26 | elgg_echo('email') => $attendee->email, 27 | elgg_echo('username') => $attendee->username, 28 | ]; 29 | 30 | $relation = $event->getRelationship($attendee->guid, $rel); 31 | if ($relation instanceof \ElggRelationship) { 32 | $base_attributes['registration date'] = date('d-m-Y H:i:s', $relation->time_created); 33 | } 34 | 35 | return array_merge((array) $elgg_event->getValue(), $base_attributes); 36 | } 37 | 38 | /** 39 | * Exports questiondata for event attendees 40 | * 41 | * @param \Elgg\Event $elgg_event 'export_attendee', 'event' 42 | * 43 | * @return null|array 44 | */ 45 | public static function exportQuestionData(\Elgg\Event $elgg_event): ?array { 46 | 47 | $attendee = $elgg_event->getParam('attendee'); 48 | $event = $elgg_event->getParam('event'); 49 | 50 | if (!$event->registration_needed) { 51 | return null; 52 | } 53 | 54 | $questions = $event->getRegistrationFormQuestions(); 55 | if (empty($questions)) { 56 | return null; 57 | } 58 | 59 | $question_data = []; 60 | foreach ($questions as $question) { 61 | $value = $question->getAnswerFromUser($attendee->guid)?->value; 62 | 63 | $question_data[$question->getDisplayName()] = $value; 64 | } 65 | 66 | return array_merge((array) $elgg_event->getValue(), $question_data); 67 | } 68 | 69 | /** 70 | * Exports programchoices for event attendees 71 | * 72 | * @param \Elgg\Event $elgg_event 'export_attendee', 'event' 73 | * 74 | * @return null|array 75 | */ 76 | public static function exportProgramData(\Elgg\Event $elgg_event): ?array { 77 | 78 | $attendee = $elgg_event->getParam('attendee'); 79 | $event = $elgg_event->getParam('event'); 80 | 81 | if (!$event->with_program) { 82 | return null; 83 | } 84 | 85 | $days = $event->getEventDays(); 86 | if (empty($days)) { 87 | return null; 88 | } 89 | 90 | $program_data = []; 91 | foreach ($days as $day) { 92 | $slots = $day->getEventSlots(); 93 | if (empty($slots)) { 94 | continue; 95 | } 96 | 97 | $date = event_manager_format_date($day->date); 98 | 99 | foreach ($slots as $slot) { 100 | $start = date('H:i', $slot->start_time); 101 | $end = date('H:i', $slot->end_time); 102 | 103 | $key = "Event activity: '{$slot->getDisplayName()}' $date ($start - $end)"; 104 | 105 | $count = $slot->getEntitiesFromRelationship([ 106 | 'guid' => $attendee->guid, 107 | 'relationship' => EVENT_MANAGER_RELATION_SLOT_REGISTRATION, 108 | 'inverse_relationship' => true, 109 | 'count' => true, 110 | ]); 111 | 112 | $value = $count ? 'V' : ''; 113 | 114 | $program_data[$key] = $value; 115 | } 116 | } 117 | 118 | return array_merge((array) $elgg_event->getValue(), $program_data); 119 | } 120 | } 121 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Bootstrap.php: -------------------------------------------------------------------------------- 1 | group_tools->register('event_manager'); 20 | } 21 | 22 | if (elgg_is_active_plugin('entity_tools')) { 23 | elgg_register_event_handler('supported_types', 'entity_tools', '\ColdTrick\EventManager\MigrateEvents::supportedSubtypes'); 24 | } 25 | 26 | // leafletjs 27 | elgg_register_esm('leafletjs', 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.js'); 28 | elgg_register_external_file('css', 'leafletjs', 'https://unpkg.com/leaflet@1.9.4/dist/leaflet.css', 'head'); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Controllers/Calendar.php: -------------------------------------------------------------------------------- 1 | 'object', 25 | 'subtype' => \Event::SUBTYPE, 26 | 'limit' => 999, // not wise to leave unlimited 27 | 'batch' => true, 28 | 'metadata_name_value_pairs' => [], 29 | ]; 30 | 31 | $start = get_input('start'); 32 | $end = get_input('end'); 33 | $guid = (int) get_input('guid'); 34 | $resource = get_input('resource'); 35 | $tag = get_input('tag'); 36 | 37 | if (empty($start) && empty($end)) { 38 | return elgg_ok_response(json_encode([])); 39 | } 40 | 41 | if (!empty($start)) { 42 | $events_options['metadata_name_value_pairs'][] = [ 43 | 'name' => 'event_end', 44 | 'value' => strtotime($start), 45 | 'operand' => '>=' 46 | ]; 47 | } 48 | 49 | if (!empty($end)) { 50 | $events_options['metadata_name_value_pairs'][] = [ 51 | 'name' => 'event_start', 52 | 'value' => strtotime($end), 53 | 'operand' => '<=' 54 | ]; 55 | } 56 | 57 | if (!empty($tag)) { 58 | $events_options['metadata_name_value_pairs'][] = [ 59 | 'name' => 'tags', 60 | 'value' => $tag, 61 | 'case_sensitive' => false, 62 | ]; 63 | } 64 | 65 | $entity = get_entity($guid); 66 | if ($entity instanceof \ElggGroup) { 67 | $events_options['container_guid'] = $entity->guid; 68 | } 69 | 70 | switch ($resource) { 71 | case 'owner': 72 | if (!$entity instanceof \ElggUser) { 73 | return elgg_ok_response(json_encode([])); 74 | } 75 | 76 | $events_options['owner_guid'] = $entity->guid; 77 | break; 78 | case 'attending': 79 | if (!$entity instanceof \ElggUser) { 80 | return elgg_ok_response(json_encode([])); 81 | } 82 | 83 | $events_options['relationship'] = EVENT_MANAGER_RELATION_ATTENDING; 84 | $events_options['relationship_guid'] = $entity->guid; 85 | $events_options['inverse_relationship'] = true; 86 | break; 87 | } 88 | 89 | // let others extend this 90 | $params = [ 91 | 'resource' => $resource, 92 | 'guid' => $guid, 93 | 'start' => $start, 94 | 'end' => $end, 95 | ]; 96 | $events_options = elgg_trigger_event_results('calendar_data:options', 'event_manager', $params, $events_options); 97 | 98 | // fetch data 99 | $events = elgg_get_entities($events_options); 100 | 101 | $result = []; 102 | 103 | /* @var $event \Event */ 104 | foreach ($events as $event) { 105 | $start = $event->getStartDate(); 106 | $end = $event->getEndDate('c'); 107 | 108 | $all_day = $event->isMultiDayEvent(); 109 | if ($all_day) { 110 | // needed for fullcalendar behaviour of allday events 111 | $end = date('c', strtotime($end . ' +1 day')); 112 | } 113 | 114 | $classes = []; 115 | if ($event->owner_guid === elgg_get_logged_in_user_guid()) { 116 | $classes[] = 'event-manager-event-owner'; 117 | } elseif ($event->getRelationshipByUser()) { 118 | $classes[] = 'event-manager-event-attending'; 119 | } 120 | 121 | $event_result = [ 122 | 'guid' => $event->guid, 123 | 'title' => $event->getDisplayName(), 124 | 'start' => $start, 125 | 'end' => $end, 126 | 'allDay' => $all_day, 127 | 'url' => $event->getURL(), 128 | 'className' => $classes, 129 | ]; 130 | 131 | $result[] = $event_result; 132 | } 133 | 134 | return elgg_ok_response(json_encode($result)); 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Event/Day.php: -------------------------------------------------------------------------------- 1 | attributes['subtype'] = self::SUBTYPE; 19 | } 20 | 21 | /** 22 | * Returns the slots 23 | * 24 | * @return array 25 | */ 26 | public function getEventSlots(): array { 27 | return elgg_call(ELGG_IGNORE_ACCESS, function() { 28 | return elgg_get_entities([ 29 | 'type' => 'object', 30 | 'subtype' => Slot::SUBTYPE, 31 | 'relationship_guid' => $this->guid, 32 | 'relationship' => 'event_day_slot_relation', 33 | 'inverse_relationship' => true, 34 | 'sort_by' => [ 35 | 'property' => 'start_time', 36 | 'signed' => true, 37 | ], 38 | 'limit' => false, 39 | ]); 40 | }); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Event/Slot.php: -------------------------------------------------------------------------------- 1 | attributes['subtype'] = self::SUBTYPE; 19 | } 20 | 21 | /** 22 | * Counts the number of registrations 23 | * 24 | * @return int 25 | */ 26 | public function countRegistrations(): int { 27 | return elgg_call(ELGG_IGNORE_ACCESS, function() { 28 | return elgg_count_entities([ 29 | 'relationship' => EVENT_MANAGER_RELATION_SLOT_REGISTRATION, 30 | 'relationship_guid' => $this->guid, 31 | 'inverse_relationship' => true, 32 | ]); 33 | }); 34 | } 35 | 36 | /** 37 | * Returns if the slot has a spot left 38 | * 39 | * @return boolean 40 | */ 41 | public function hasSpotsLeft(): bool { 42 | if (empty($this->max_attendees) || (($this->max_attendees - $this->countRegistrations()) > 0)) { 43 | return true; 44 | } 45 | 46 | return false; 47 | } 48 | 49 | /** 50 | * Returns the users waiting for this slot 51 | * 52 | * @param boolean $count if a count should be returned, or the entity 53 | * 54 | * @return int|array 55 | */ 56 | public function getWaitingUsers(bool $count = false): int|array { 57 | return elgg_call(ELGG_IGNORE_ACCESS, function() use ($count) { 58 | if ($count) { 59 | return $this->countEntitiesFromRelationship(EVENT_MANAGER_RELATION_SLOT_REGISTRATION_WAITINGLIST, true); 60 | } 61 | 62 | return $this->getEntitiesFromRelationship([ 63 | 'relationship' => EVENT_MANAGER_RELATION_SLOT_REGISTRATION_WAITINGLIST, 64 | 'inverse_relationship' => true, 65 | ]); 66 | }); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Forms/EventMail.php: -------------------------------------------------------------------------------- 1 | '', 26 | 'description' => '', 27 | 'recipients' => [ 28 | EVENT_MANAGER_RELATION_ATTENDING, 29 | ], 30 | 'entity' => $this->entity, 31 | ]; 32 | 33 | $sticky = elgg_get_sticky_values('event_manager/event/mail'); 34 | if (!empty($sticky)) { 35 | foreach ($sticky as $name => $value) { 36 | $vars[$name] = $value; 37 | } 38 | 39 | elgg_clear_sticky_form('event_manager/event/mail'); 40 | } 41 | 42 | return $vars; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/GroupToolContainerLogicCheck.php: -------------------------------------------------------------------------------- 1 | getEntityParam(); 20 | if (!$entity instanceof \EventRegistration) { 21 | return null; 22 | } 23 | 24 | $type = $event->getParam('type', 'icon'); 25 | $size = $event->getParam('size', 'medium'); 26 | 27 | $entity_type = 'user'; 28 | $entity_subtype = 'user'; 29 | 30 | $exts = ['svg', 'gif', 'png', 'jpg']; 31 | 32 | foreach ($exts as $ext) { 33 | foreach ([$entity_subtype, 'default'] as $subtype) { 34 | if ($ext == 'svg' && elgg_view_exists("{$type}/{$entity_type}/{$subtype}.svg")) { 35 | return elgg_get_simplecache_url("{$type}/{$entity_type}/{$subtype}.svg"); 36 | } 37 | 38 | if (elgg_view_exists("{$type}/{$entity_type}/{$subtype}/{$size}.{$ext}")) { 39 | return elgg_get_simplecache_url("{$type}/{$entity_type}/{$subtype}/{$size}.{$ext}"); 40 | } 41 | } 42 | } 43 | 44 | if (!elgg_view_exists("{$type}/default/{$size}.png")) { 45 | return null; 46 | } 47 | 48 | return elgg_get_simplecache_url("{$type}/default/{$size}.png"); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Js.php: -------------------------------------------------------------------------------- 1 | getValue(); 19 | 20 | $result['event_manager_osm_default_zoom'] = elgg_get_plugin_setting('osm_default_zoom', 'event_manager'); 21 | $result['event_manager_osm_default_location_lat'] = elgg_get_plugin_setting('osm_default_location_lat', 'event_manager'); 22 | $result['event_manager_osm_default_location_lng'] = elgg_get_plugin_setting('osm_default_location_lng', 'event_manager'); 23 | 24 | return $result; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Menus/Filter.php: -------------------------------------------------------------------------------- 1 | getValue(); 23 | 24 | $list_type = get_input('list_type', 'list'); 25 | 26 | $parent_name = "event-manager-{$list_type}"; 27 | 28 | $items[] = \ElggMenuItem::factory([ 29 | 'name' => 'event-manager-list', 30 | 'icon' => 'list', 31 | 'text' => elgg_echo('viewtype:list'), 32 | 'href' => elgg_http_add_url_query_elements(elgg_get_current_url(), [ 33 | 'list_type' => 'list', 34 | 'limit' => null, 35 | 'offset' => null, 36 | ]), 37 | 'parent_name' => $parent_name, 38 | 'priority' => 100, 39 | 'selected' => false, 40 | ]); 41 | 42 | $items[] = \ElggMenuItem::factory([ 43 | 'name' => 'event-manager-calendar', 44 | 'icon' => 'calendar-alt', 45 | 'text' => elgg_echo('event_manager:list:navigation:calendar'), 46 | 'href' => elgg_http_add_url_query_elements(elgg_get_current_url(), [ 47 | 'list_type' => 'calendar', 48 | 'limit' => null, 49 | 'offset' => null, 50 | ]), 51 | 'parent_name' => $parent_name, 52 | 'priority' => 200, 53 | 'selected' => false, 54 | ]); 55 | 56 | if (event_manager_get_maps_provider() !== 'none') { 57 | $items[] = \ElggMenuItem::factory([ 58 | 'name' => 'event-manager-map', 59 | 'icon' => 'map-marked-alt', 60 | 'text' => elgg_echo('event_manager:list:navigation:onthemap'), 61 | 'href' => elgg_http_add_url_query_elements(elgg_get_current_url(), [ 62 | 'list_type' => 'map', 63 | 'limit' => null, 64 | 'offset' => null, 65 | ]), 66 | 'parent_name' => $parent_name, 67 | 'priority' => 300, 68 | 'selected' => false, 69 | ]); 70 | } 71 | 72 | /** @var $parent_item \ElggMenuItem */ 73 | $parent_item = $items->get($parent_name); 74 | $parent_item->setHref(false); 75 | $parent_item->setParentName(false); 76 | $parent_item->setPriority(99999); 77 | $parent_item->setItemClass('event-manager-listing-sorting'); 78 | $parent_item->setChildMenuOptions([ 79 | 'display' => 'dropdown', 80 | 'data-position' => json_encode([ 81 | 'my' => 'right top', 82 | 'at' => 'right bottom', 83 | 'collision' => 'fit fit', 84 | ]), 85 | ]); 86 | 87 | return $items; 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Menus/FilterEventAttendees.php: -------------------------------------------------------------------------------- 1 | getParam('event_entity'); 21 | if (!$entity instanceof \Event) { 22 | return null; 23 | } 24 | 25 | $valid_relationships = $entity->getSupportedRelationships(); 26 | if (count($valid_relationships) === 1) { 27 | return null; 28 | } 29 | 30 | /* @var $result MenuItems */ 31 | $result = $event->getValue(); 32 | 33 | foreach ($valid_relationships as $rel => $label) { 34 | $result[] = \ElggMenuItem::factory([ 35 | 'name' => $rel, 36 | 'text' => $label, 37 | 'href' => elgg_generate_url('collection:object:event:attendees', [ 38 | 'guid' => $entity->guid, 39 | 'relationship' => $rel, 40 | ]), 41 | ]); 42 | } 43 | 44 | return $result; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Menus/Site.php: -------------------------------------------------------------------------------- 1 | getValue(); 22 | 23 | $result[] = \ElggMenuItem::factory([ 24 | 'name' => 'event', 25 | 'icon' => 'calendar-alt', 26 | 'text' => elgg_echo('event_manager:menu:title'), 27 | 'href' => elgg_generate_url('default:object:event'), 28 | ]); 29 | 30 | return $result; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/MigrateEvents.php: -------------------------------------------------------------------------------- 1 | getValue(); 22 | 23 | $result[\Event::SUBTYPE] = static::class; 24 | 25 | return $result; 26 | } 27 | 28 | /** 29 | * {@inheritdoc} 30 | */ 31 | public function canBackDate(): bool { 32 | return true; 33 | } 34 | 35 | /** 36 | * {@inheritdoc} 37 | */ 38 | public function canChangeContainer(): bool { 39 | return true; 40 | } 41 | 42 | /** 43 | * {@inheritdoc} 44 | */ 45 | public function canChangeOwner(): bool { 46 | return true; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Notifications.php: -------------------------------------------------------------------------------- 1 | getValue(); 27 | if (!$email instanceof Email) { 28 | return; 29 | } 30 | 31 | if (!$email->getSender() instanceof \EventRegistration) { 32 | return; 33 | } 34 | 35 | $site = elgg_get_site_entity(); 36 | 37 | $email->setSender($site); 38 | $email->setFrom(new Address($site->getEmailAddress(), $site->getDisplayName())); 39 | 40 | return $email; 41 | } 42 | 43 | /** 44 | * Send the notification to the mail owner and cleanup the event mail object 45 | * 46 | * @param \Elgg\Event $elgg_event 'send:after', 'notifications' 47 | * 48 | * @return void 49 | */ 50 | public static function sendAfterEventMail(\Elgg\Event $elgg_event): void { 51 | 52 | $event = $elgg_event->getParam('event'); 53 | if (!$event instanceof NotificationEvent) { 54 | return; 55 | } 56 | 57 | $entity = $event->getObject(); 58 | if (!$entity instanceof \EventMail) { 59 | return; 60 | } 61 | 62 | // remove the mail entity 63 | $entity->delete(); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Notifications/CreateEventMailEventHandler.php: -------------------------------------------------------------------------------- 1 | event->getObject(); 17 | $container = $entity->getContainerEntity(); 18 | 19 | return elgg_echo('event_manager:mail:notification:subject', [ 20 | $container->getDisplayName(), 21 | $entity->getDisplayName(), 22 | ], $recipient->getLanguage()); 23 | } 24 | 25 | /** 26 | * {@inheritdoc} 27 | */ 28 | protected function getNotificationBody(\ElggUser $recipient, string $method): string { 29 | $entity = $this->event->getObject(); 30 | $container = $entity->getContainerEntity(); 31 | 32 | return elgg_echo('event_manager:mail:notification:body', [ 33 | $entity->description, 34 | $container->getURL(), 35 | ], $recipient->getLanguage()); 36 | } 37 | 38 | /** 39 | * Return EventMail subscriptions 40 | * 41 | * {@inheritdoc} 42 | */ 43 | public function getSubscriptions(): array { 44 | return $this->event->getObject()->getMailSubscriptions(); 45 | } 46 | 47 | /** 48 | * {@inheritdoc} 49 | */ 50 | public static function isConfigurableByUser(): bool { 51 | return false; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/ObjectPicker.php: -------------------------------------------------------------------------------- 1 | getValue(); 19 | $entity = elgg_extract('entity', $vars); 20 | if (!$entity instanceof \Event) { 21 | return null; 22 | } 23 | 24 | $text = $entity->getDisplayName() . ' (' . event_manager_format_date($entity->getStartTimestamp()) . ')'; 25 | $text .= elgg_format_element('div', ['class' => 'elgg-subtext'], $entity->getExcerpt(200)); 26 | 27 | $vars['text'] = $text; 28 | 29 | return $vars; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Search.php: -------------------------------------------------------------------------------- 1 | getValue(); 20 | 21 | $defaults = [ 22 | 'metadata' => [], 23 | ]; 24 | 25 | $value = array_merge($defaults, $value); 26 | 27 | $fields = [ 28 | 'event_type', 29 | 'location', 30 | 'region', 31 | 'shortdescription', 32 | ]; 33 | 34 | $value['metadata'] = array_merge($value['metadata'], $fields); 35 | 36 | return $value; 37 | } 38 | 39 | /** 40 | * Add metadata names to be exported to Elasticsearch index 41 | * 42 | * @param \Elgg\Event $event 'export:metadata_names', 'elasticsearch'|'opensearch' 43 | * 44 | * @return void|array 45 | */ 46 | public static function exportMetadataNames(\Elgg\Event $event) { 47 | 48 | $entity = $event->getEntityParam(); 49 | if (!$entity instanceof \Event) { 50 | return; 51 | } 52 | 53 | $result = $event->getValue(); 54 | 55 | $result[] = 'event_type'; 56 | $result[] = 'location'; 57 | $result[] = 'region'; 58 | $result[] = 'shortdescription'; 59 | 60 | return $result; 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /classes/ColdTrick/EventManager/Views.php: -------------------------------------------------------------------------------- 1 | getEntityParam(); 20 | if (!empty($event->getValue()) || !$widget instanceof \ElggWidget || $widget->handler !== 'events') { 21 | return null; 22 | } 23 | 24 | switch ($widget->context) { 25 | case 'index': 26 | if ($widget->event_status === 'live') { 27 | return elgg_generate_url('collection:object:event:live'); 28 | } 29 | return elgg_generate_url('collection:object:event:upcoming'); 30 | case 'groups': 31 | if ($widget->event_status === 'live') { 32 | return elgg_generate_url('collection:object:event:live', ['guid' => $widget->getOwnerGUID()]); 33 | } 34 | return elgg_generate_url('collection:object:event:group', ['guid' => $widget->getOwnerGUID()]); 35 | } 36 | 37 | return null; 38 | } 39 | 40 | /** 41 | * Registers the widget handlers for events 42 | * 43 | * @param \Elgg\Event $event 'handlers', 'widgets' 44 | * 45 | * @return null|array 46 | */ 47 | public static function registerHandlers(\Elgg\Event $event): ?array { 48 | 49 | $container = $event->getParam('container'); 50 | if (!$container instanceof \ElggGroup) { 51 | return null; 52 | } 53 | 54 | if ($container->isToolEnabled('event_manager')) { 55 | return null; 56 | } 57 | 58 | $result = $event->getValue(); 59 | foreach ($result as $index => $widget) { 60 | if ($widget->id === 'events') { 61 | unset($result[$index]); 62 | return $result; 63 | } 64 | } 65 | 66 | return $result; 67 | } 68 | 69 | /** 70 | * Change the entity_timestamp in the content_by_tag widget to show the start date of the event 71 | * 72 | * @param \Elgg\Event $event 'view_vars', 'widgets/content_by_tag/display/[simple|slim]' 73 | * 74 | * @return null|array 75 | */ 76 | public static function contentByTagEntityTimestamp(\Elgg\Event $event): ?array { 77 | $vars = $event->getValue(); 78 | 79 | $entity = elgg_extract('entity', $vars); 80 | if (!$entity instanceof \Event) { 81 | return null; 82 | } 83 | 84 | $vars['entity_timestamp'] = $entity->getStartTimestamp(); 85 | 86 | return $vars; 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /classes/EventMail.php: -------------------------------------------------------------------------------- 1 | attributes['subtype'] = self::SUBTYPE; 19 | $this->attributes['access_id'] = ACCESS_LOGGED_IN; 20 | } 21 | 22 | /** 23 | * Get the subscriptions for the mail notification, based on the form settings 24 | * 25 | * @return array 26 | */ 27 | public function getMailSubscriptions(): array { 28 | $result = [ 29 | $this->owner_guid => ['email'], 30 | ]; 31 | 32 | /* @var $event \Event */ 33 | $event = $this->getContainerEntity(); 34 | $row_to_guid = function($row) { 35 | return (int) $row->guid; 36 | }; 37 | 38 | $recipients = $this->recipients; 39 | if (empty($recipients)) { 40 | // how is this possible? 41 | return $result; 42 | } 43 | 44 | if (!is_array($recipients)) { 45 | $recipients = [$recipients]; 46 | } 47 | 48 | foreach ($recipients as $recipient_type) { 49 | switch ($recipient_type) { 50 | case 'contacts': 51 | $guids = $event->getContacts([ 52 | 'callback' => $row_to_guid, 53 | ]); 54 | break; 55 | case EVENT_MANAGER_RELATION_ORGANIZING: 56 | // no longer a relationship 57 | $guids = $event->getOrganizers([ 58 | 'callback' => $row_to_guid, 59 | ]); 60 | break; 61 | default: 62 | // default relationships 63 | $guids = $event->getEntitiesFromRelationship([ 64 | 'relationship' => $recipient_type, 65 | 'limit' => false, 66 | 'callback' => $row_to_guid, 67 | ]); 68 | break; 69 | } 70 | 71 | foreach ($guids as $guid) { 72 | $result[$guid] = ['email']; 73 | } 74 | } 75 | 76 | return $result; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /classes/EventRegistration.php: -------------------------------------------------------------------------------- 1 | attributes['subtype'] = self::SUBTYPE; 20 | $this->attributes['access_id'] = ACCESS_PUBLIC; 21 | } 22 | 23 | /** 24 | * Allow non-user to remove their registration correctly 25 | * 26 | * {@inheritdoc} 27 | */ 28 | public function canEdit(int $user_guid = 0): bool { 29 | global $EVENT_MANAGER_UNDO_REGISTRATION; 30 | 31 | if (!empty($EVENT_MANAGER_UNDO_REGISTRATION)) { 32 | return true; 33 | } 34 | 35 | return parent::canEdit($user_guid); 36 | } 37 | 38 | /** 39 | * {@inheritdoc} 40 | */ 41 | public function getDisplayName(): string { 42 | return $this->name ?? parent::getDisplayName(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /classes/EventRegistrationQuestion.php: -------------------------------------------------------------------------------- 1 | attributes['subtype'] = self::SUBTYPE; 21 | } 22 | 23 | /** 24 | * Returns the answer given by a user 25 | * 26 | * @param int $user_guid guid of the entity 27 | * 28 | * @return null|\ElggAnnotation 29 | */ 30 | public function getAnswerFromUser(int $user_guid = 0): ?\ElggAnnotation { 31 | $annotations = elgg_get_annotations([ 32 | 'guid' => $this->guid, 33 | 'annotation_name' => 'answer_to_event_registration', 34 | 'annotation_owner_guid' => $user_guid ?: elgg_get_logged_in_user_guid(), 35 | 'limit' => 1, 36 | ]); 37 | 38 | return elgg_extract(0, $annotations); 39 | } 40 | 41 | /** 42 | * Removes the answer given by a user 43 | * 44 | * @param int $user_guid guid of the entity 45 | * 46 | * @return void 47 | */ 48 | public function deleteAnswerFromUser(int $user_guid = 0): void { 49 | $user_guid = $user_guid ?: elgg_get_logged_in_user_guid(); 50 | 51 | $this->getAnswerFromUser($user_guid)?->delete(); 52 | } 53 | 54 | /** 55 | * Updates the answer given by a user 56 | * 57 | * @param Event $event the event entity used for setting the access of the annotation correctly 58 | * @param string $new_answer the new answer 59 | * @param int $user_guid guid of the entity giving the answer 60 | * 61 | * @return void 62 | */ 63 | public function updateAnswerFromUser(\Event $event, string $new_answer, int $user_guid = 0): void { 64 | $user_guid = $user_guid ?: elgg_get_logged_in_user_guid(); 65 | 66 | $old_answer = $this->getAnswerFromUser($user_guid); 67 | if ($old_answer && get_user($user_guid)) { 68 | if (!empty($new_answer)) { 69 | $old_answer->setValue($new_answer); 70 | $old_answer->save(); 71 | } else { 72 | elgg_delete_annotation_by_id($old_answer->id); 73 | } 74 | } else { 75 | $this->annotate('answer_to_event_registration', $new_answer, $event->access_id, $user_guid); 76 | } 77 | } 78 | 79 | /** 80 | * Returns the options of this question 81 | * 82 | * @return array 83 | */ 84 | public function getOptions(): array { 85 | $field_options = []; 86 | 87 | if (!empty($this->fieldoptions)) { 88 | $field_options = elgg_string_to_array($this->fieldoptions); 89 | $field_options = array_combine(array_values($field_options), $field_options); // input radio and checkbox require non-numeric keys 90 | } 91 | 92 | return $field_options; 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "coldtrick/event_manager", 3 | "description": "Manage events, from a simple appointment to a multi day event with day programs and subscriptions", 4 | "homepage": "https://www.coldtrick.com", 5 | "type": "elgg-plugin", 6 | "keywords": ["elgg", "plugin", "events"], 7 | "license": "GPL-2.0-only", 8 | "support": { 9 | "source": "https://github.com/ColdTrick/event_manager", 10 | "issues": "https://github.com/ColdTrick/event_manager/issues" 11 | }, 12 | "require": { 13 | "dompdf/dompdf" : "~3.0.0", 14 | "npm-asset/fullcalendar": "~6.1.0" 15 | }, 16 | "repositories": [ 17 | { 18 | "type": "composer", 19 | "url": "https://asset-packagist.org" 20 | } 21 | ], 22 | "config": { 23 | "fxp-asset": { 24 | "enabled": false 25 | } 26 | }, 27 | "conflict": { 28 | "elgg/elgg": "<6.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /views/default/event_manager/addthisevent/button.css: -------------------------------------------------------------------------------- 1 | .addeventatc_dropdown { 2 | display: none; 3 | right: 0px; 4 | left: unset !important; 5 | position: absolute; 6 | top: unset !important; 7 | z-index: 1; 8 | background: white; 9 | border: 1px solid #CCC; 10 | 11 | span { 12 | display: block; 13 | white-space: nowrap; 14 | color: $(text-color-strong); 15 | padding: 5px 15px; 16 | 17 | &:hover { 18 | background: $(background-color-soft); 19 | color: #333; 20 | cursor: pointer; 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /views/default/event_manager/addthisevent/button.php: -------------------------------------------------------------------------------- 1 | location ?: $event->venue; 11 | 12 | $start = $event->getStartDate('d/m/Y H:i:00'); 13 | $end = $event->getEndDate('d/m/Y H:i:00'); 14 | 15 | $title = html_entity_decode($event->getDisplayName()); 16 | 17 | $description = ''; 18 | if (!empty($event->location)) { 19 | // add venue to description 20 | $description .= $event->venue . PHP_EOL; 21 | } 22 | 23 | // removing HTML and shorter because of URL length limitations 24 | $description .= $event->getExcerpt(500) . PHP_EOL . PHP_EOL; 25 | $description .= $event->getURL(); 26 | 27 | ?> 28 | 29 | 30 | 38 | 39 | -------------------------------------------------------------------------------- /views/default/event_manager/addthisevent/email.css: -------------------------------------------------------------------------------- 1 | .event-manager-email-addevent-title { 2 | font-weight: bold; 3 | } 4 | 5 | .event-manager-email-addevent { 6 | background: #EFEFEF; 7 | border-radius: 4px; 8 | padding: 5px 10px; 9 | border: 1px solid #CCC; 10 | text-align: center; 11 | vertical-align: top; 12 | } 13 | .event-manager-email-addevent a { 14 | text-decoration: none; 15 | color: black; 16 | } 17 | -------------------------------------------------------------------------------- /views/default/event_manager/addthisevent/email.php: -------------------------------------------------------------------------------- 1 |
'; 32 | echo elgg_format_element('span', ['class' => 'event-manager-email-addevent-title'], elgg_echo('event_manager:addevent:mail:title')); 33 | echo '

'; 34 | 35 | $description = ''; 36 | if (!empty($event->location)) { 37 | // add venue to description 38 | $description .= $event->venue . PHP_EOL; 39 | } 40 | 41 | // removing HTML and shorter because of URL length limitations 42 | $description .= $event->getExcerpt(500) . PHP_EOL . PHP_EOL; 43 | $description .= $event->getURL(); 44 | 45 | $url_params = [ 46 | 'client' => elgg_get_plugin_setting('add_event_license', 'event_manager'), 47 | 'date_format' => 'DD/MM/YYYY', 48 | 'start' => $event->getStartDate('d/m/Y'), 49 | 'starttime' => $event->getStartDate('H:i:00'), 50 | 'end' => $event->getEndDate('d/m/Y'), 51 | 'endtime' => $event->getEndDate('H:i:00'), 52 | 'title' => $event->getDisplayName(), 53 | 'location' => $event->location ?: $event->venue, 54 | 'description' => $description, 55 | ]; 56 | 57 | echo ''; 58 | foreach ($service_links as $service) { 59 | $url_params['service'] = $service; 60 | 61 | echo elgg_format_element('td', [ 62 | 'class' => 'event-manager-email-addevent event-manager-email-addevent-' . $service, 63 | ], elgg_view_url(elgg_http_add_url_query_elements('https://addevent.com/dir/', $url_params), elgg_echo('event_manager:addevent:mail:service:' . $service))); 64 | } 65 | 66 | echo '
'; 67 | -------------------------------------------------------------------------------- /views/default/event_manager/addthisevent/settings.js.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | window.addeventasync = function(){ 8 | addeventatc.settings({ 9 | license: "", 10 | mouse: false, 11 | css: false, 12 | google: {show:, text:"Google (online)"}, 13 | yahoo: {show:, text:"Yahoo (online)"}, 14 | office365: {show:, text:"Office 365 (online)"}, 15 | outlookcom: {show:, text:"Outlook.com (online)"}, 16 | outlook: {show:, text:"Outlook"}, 17 | appleical: {show:, text:"iCal Calendar"}, 18 | dropdown: {order:"google,yahoo,office365,outlookcom,outlook,appleical"} 19 | }); 20 | }; 21 | -------------------------------------------------------------------------------- /views/default/event_manager/event/attendees_list.php: -------------------------------------------------------------------------------- 1 | 'user', // trigger search fields generation 25 | 'type_subtype_pairs' => [ 26 | 'user' => ELGG_ENTITIES_ANY_VALUE, 27 | 'object' => [ 28 | EventRegistration::SUBTYPE, 29 | ], 30 | ], 31 | 'relationship_guid' => $entity->guid, 32 | 'relationship' => $relationship, 33 | 'no_results' => true, 34 | 'order_by' => new OrderByClause('r.time_created', 'DESC'), 35 | ]; 36 | 37 | $getter = 'elgg_get_entities'; 38 | 39 | // searching ? 40 | $q = elgg_extract('q', $vars, get_input('q')); 41 | if (!empty($q)) { 42 | $options['query'] = $q; 43 | // fix pagination 44 | $options['base_url'] = elgg_generate_url('collection:object:event:attendees', [ 45 | 'guid' => $entity->guid, 46 | 'relationship' => $relationship, 47 | 'q' => $q, 48 | ]); 49 | 50 | $getter = 'elgg_search'; 51 | } 52 | 53 | echo elgg_list_entities($options, $getter); 54 | -------------------------------------------------------------------------------- /views/default/event_manager/event/files.php: -------------------------------------------------------------------------------- 1 | getFiles(); 9 | if (empty($files)) { 10 | return; 11 | } 12 | 13 | $rows = ''; 14 | $elggfile = new \ElggFile(); 15 | $elggfile->owner_guid = $event->guid; 16 | 17 | $use_cookie = ($event->access_id !== ACCESS_PUBLIC); 18 | 19 | foreach ($files as $file) { 20 | $elggfile->setFilename($file->file); 21 | 22 | if (!$elggfile->exists()) { 23 | // check old storage location 24 | $elggfile->setFilename("files/{$file->file}"); 25 | } 26 | 27 | $link = elgg_view_url(elgg_get_download_url($elggfile, $use_cookie), $file->title); 28 | 29 | $delete = elgg_view('output/url', [ 30 | 'href' => elgg_generate_action_url('event_manager/event/deletefile', [ 31 | 'guid' => $event->guid, 32 | 'file' => $file->file, 33 | ]), 34 | 'icon' => 'delete', 35 | 'text' => elgg_echo('delete'), 36 | 'confirm' => true, 37 | ]); 38 | 39 | $rows .= "{$link}{$delete}"; 40 | } 41 | 42 | $content = elgg_format_element('table', ['class' => 'elgg-table'], $rows); 43 | 44 | echo elgg_view_module('info', elgg_echo('event_manager:edit:form:files'), $content, ['class' => 'mtm']); 45 | -------------------------------------------------------------------------------- /views/default/event_manager/event/pdf.php: -------------------------------------------------------------------------------- 1 | hasIcon('header', 'header')) { 6 | $header_icon = $event->getIcon('header', 'header'); 7 | 8 | $filecontents = $header_icon->grabFile(); 9 | 10 | echo '
'; 11 | } 12 | 13 | $event_start = $event->getStartTimestamp(); 14 | $event_end = $event->getEndTimestamp(); 15 | 16 | $when_title = elgg_echo('date:weekday:' . gmdate('w', $event_start)) . ', '; 17 | $when_title .= elgg_echo('date:month:' . gmdate('m', $event_start), [gmdate('j', $event_start)]) . ' '; 18 | $when_title .= gmdate('Y', $event_start); 19 | 20 | $when_subtitle = ''; 21 | 22 | if (!$event_end) { 23 | $when_title .= ' ' . gmdate('H:i', $event_start); 24 | } else { 25 | if (gmdate('d-m-Y', $event_end) === gmdate('d-m-Y', $event_start)) { 26 | // same day event 27 | $when_subtitle .= gmdate('H:i', $event_start) . ' ' . strtolower(elgg_echo('event_manager:date:to')) . ' ' . gmdate('H:i', $event_end); 28 | } else { 29 | $when_title .= ' ' . gmdate('H:i', $event_start); 30 | $when_subtitle .= strtolower(elgg_echo('event_manager:date:to')) . ' '; 31 | 32 | $when_subtitle .= elgg_echo('date:weekday:' . gmdate('w', $event_end)) . ', '; 33 | $when_subtitle .= elgg_echo('date:month:' . gmdate('m', $event_end), [gmdate('j', $event_end)]) . ' '; 34 | $when_subtitle .= gmdate('Y', $event_end) . ' '; 35 | $when_subtitle .= gmdate('H:i', $event_end); 36 | } 37 | } 38 | 39 | $when = elgg_format_element('div', ['class' => 'event-manager-event-when-title'], $when_title); 40 | if (!empty($when_subtitle)) { 41 | $when .= elgg_format_element('div', ['class' => 'event-manager-event-when-subtitle'], $when_subtitle); 42 | } 43 | 44 | echo elgg_view_image_block(elgg_view_icon('calendar', ['class' => 'elgg-icon-hover']), $when, ['class' => 'event-manager-event-when']); 45 | 46 | // event details 47 | $location = $event->location; 48 | if ($location) { 49 | echo elgg_format_element('label', [], elgg_echo('event_manager:edit:form:location')); 50 | echo elgg_format_element('div', ['class' => 'mbm'], $location); 51 | } 52 | 53 | $organizer = $event->organizer; 54 | if ($organizer) { 55 | echo elgg_format_element('label', [], elgg_echo('event_manager:edit:form:organizer')); 56 | echo elgg_format_element('div', ['class' => 'mbm'], $organizer); 57 | } 58 | 59 | $description = $event->description; 60 | if ($description) { 61 | echo elgg_format_element('label', [], elgg_echo('description')); 62 | echo elgg_format_element('div', ['class' => 'mbm'], elgg_view('output/longtext', ['value' => $description])); 63 | } 64 | 65 | $region = $event->region; 66 | if ($region) { 67 | echo elgg_format_element('label', [], elgg_echo('event_manager:edit:form:region')); 68 | echo elgg_format_element('div', ['class' => 'mbm'], $region); 69 | } 70 | 71 | $type = $event->event_type; 72 | if ($type) { 73 | echo elgg_format_element('label', [], elgg_echo('event_manager:edit:form:type')); 74 | echo elgg_format_element('div', ['class' => 'mbm'], $type); 75 | } 76 | -------------------------------------------------------------------------------- /views/default/event_manager/event/popup.php: -------------------------------------------------------------------------------- 1 | getDisplayName(), [ 11 | 'class' => 'elgg-heading-main', 12 | ]); 13 | 14 | $result .= elgg_format_element('div', ['class' => 'event-manager-popup-title'], $title); 15 | 16 | $datetime = elgg_view('event_manager/event/view/datetime', $vars); 17 | $registration = elgg_view('event_manager/event/view/registration', $vars + ['show_rsvp' => false]); 18 | 19 | $result .= elgg_format_element('div', ['class' => 'event-manager-header'], $datetime . $registration); 20 | 21 | // description 22 | $description = $event->description ? elgg_get_excerpt($event->description, 500) : $event->shortdescription; 23 | if (!empty($description)) { 24 | $result .= elgg_view_module('event', '', elgg_view('output/longtext', ['value' => $description])); 25 | } 26 | 27 | $location = ''; 28 | if ($event->location) { 29 | $location_details = elgg_format_element('label', [], elgg_echo('event_manager:edit:form:location')); 30 | $location_details .= elgg_format_element('div', ['class' => 'mrl'], elgg_view_url($event->getURL() . '#location', $event->location)); 31 | 32 | $location = elgg_format_element('div', [], $location_details); 33 | } 34 | 35 | $event_link = elgg_view('output/url', [ 36 | 'href' => $event->getURL(), 37 | 'text' => elgg_echo('event_manager:popup:event_link'), 38 | 'class' => ['elgg-button', 'elgg-button-action', 'mts'], 39 | ]); 40 | 41 | $result .= elgg_format_element('div', ['class' => 'event-manager-popup-footer'], $location . $event_link); 42 | 43 | $classes = ['event-manager-popup']; 44 | if ($event->owner_guid === elgg_get_logged_in_user_guid()) { 45 | $classes[] = 'event-manager-event-owner'; 46 | } elseif ($event->getRelationshipByUser()) { 47 | $classes[] = 'event-manager-event-attending'; 48 | } 49 | 50 | echo elgg_format_element('div', ['class' => $classes], $result); 51 | -------------------------------------------------------------------------------- /views/default/event_manager/event/registration.php: -------------------------------------------------------------------------------- 1 | registration_needed) { 9 | return; 10 | } 11 | 12 | if (!$event->hasRelationship(elgg_get_logged_in_user_guid(), EVENT_MANAGER_RELATION_ATTENDING)) { 13 | return; 14 | } 15 | 16 | echo elgg_view_url(elgg_generate_url('view:object:eventregistration', ['guid' => $event->guid]), elgg_echo('event_manager:registration:viewyourregistration')); 17 | -------------------------------------------------------------------------------- /views/default/event_manager/event/rsvp.php: -------------------------------------------------------------------------------- 1 | getRelationships(); 8 | 9 | $organizer_guids = $event->organizer_guids; 10 | if (!empty($organizer_guids)) { 11 | if (!array_key_exists(EVENT_MANAGER_RELATION_ORGANIZING, $relationships)) { 12 | $relationships[EVENT_MANAGER_RELATION_ORGANIZING] = []; 13 | } 14 | 15 | if (!is_array($organizer_guids)) { 16 | $organizer_guids = [$organizer_guids]; 17 | } 18 | 19 | foreach ($organizer_guids as $organizer_guid) { 20 | $relationships[EVENT_MANAGER_RELATION_ORGANIZING][] = $organizer_guid; 21 | } 22 | } 23 | 24 | if (empty($relationships)) { 25 | return; 26 | } 27 | 28 | $ordered_relationships = [ 29 | EVENT_MANAGER_RELATION_PRESENTING, 30 | EVENT_MANAGER_RELATION_EXHIBITING, 31 | EVENT_MANAGER_RELATION_ORGANIZING, 32 | ]; 33 | 34 | foreach ($ordered_relationships as $rel) { 35 | if (!array_key_exists($rel, $relationships)) { 36 | continue; 37 | } 38 | 39 | $members = $relationships[$rel]; 40 | 41 | $rel_title = elgg_echo("event_manager:event:relationship:{$rel}:label"); 42 | 43 | $rel_content = ''; 44 | foreach ($members as $member) { 45 | $member_entity = get_entity($member); 46 | if (empty($member_entity)) { 47 | continue; 48 | } 49 | 50 | $member_icon = elgg_view_entity_icon($member_entity, 'tiny', ['event' => $event]); 51 | $rel_content .= elgg_view_image_block($member_icon, elgg_view_entity_url($member_entity), ['class' => 'pan']); 52 | } 53 | 54 | echo elgg_view_module('aside', $rel_title, $rel_content); 55 | } 56 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view.php: -------------------------------------------------------------------------------- 1 | 'event-manager-header'], $datetime . $registration); 7 | $body .= elgg_view('event_manager/event/view/description', $vars); 8 | $body .= elgg_view('event_manager/event/view/contact_details', $vars); 9 | $body .= elgg_view('event_manager/event/view/location', $vars); 10 | $body .= elgg_view('event_manager/program/view', $vars); 11 | $body .= elgg_view('event_manager/event/view/files', $vars); 12 | $body .= elgg_view('event_manager/event/view/attendees', $vars); 13 | 14 | $params = [ 15 | 'body' => $body, 16 | 'show_summary' => true, 17 | 'show_navigation' => false, 18 | 'icon' => false, 19 | ]; 20 | $params = $params + $vars; 21 | 22 | echo elgg_view('object/elements/full', $params); 23 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/attendees.php: -------------------------------------------------------------------------------- 1 | show_attendees && !$event->canEdit()) { 9 | return; 10 | } 11 | 12 | $relationships = $event->getRelationships(false, 'DESC'); 13 | if (empty($relationships)) { 14 | return; 15 | } 16 | 17 | $supported_relationships = $event->getSupportedRelationships(); 18 | $can_edit = $event->canEdit(); 19 | 20 | foreach ($supported_relationships as $rel => $label) { 21 | if (!array_key_exists($rel, $relationships)) { 22 | continue; 23 | } 24 | 25 | $members = $relationships[$rel]; 26 | $total = count($members); 27 | $member_limit = 10; 28 | 29 | $rel_title = elgg_view('output/url', [ 30 | 'text' => "{$label} ({$total})", 31 | 'href' => elgg_generate_url('collection:object:event:attendees', [ 32 | 'guid' => $event->guid, 33 | 'relationship' => $rel, 34 | ]), 35 | ]); 36 | 37 | $rel_content = ''; 38 | 39 | $first_guids = array_slice($members, 0, $member_limit); 40 | $first_entities = elgg_get_entities(['guids' => $first_guids]); 41 | $ordered_entities = array_flip($first_guids); 42 | foreach ($first_entities as $member) { 43 | $ordered_entities[$member->guid] = $member; 44 | } 45 | 46 | foreach ($ordered_entities as $member) { 47 | $rel_content .= elgg_view_entity_icon($member, 'small', ['class' => ['mrs', 'mbs']]); 48 | } 49 | 50 | if ($total > $member_limit) { 51 | $remaining = $total - $member_limit; 52 | 53 | $rel_content .= elgg_view('output/url', [ 54 | 'text' => elgg_echo('event_manager:event:view:attendees:more', [$remaining]), 55 | 'href' => elgg_generate_url('collection:object:event:attendees', [ 56 | 'guid' => $event->guid, 57 | 'relationship' => $rel, 58 | ]), 59 | 'class' => [ 60 | 'elgg-button', 61 | 'elgg-button-action', 62 | ], 63 | ]); 64 | } 65 | 66 | $module_vars = []; 67 | 68 | if ($can_edit) { 69 | // export action 70 | $module_vars['menu'] = elgg_view('output/url', [ 71 | 'href' => elgg_generate_action_url('event_manager/attendees/export', [ 72 | 'guid' => $event->guid, 73 | 'rel' => $rel, 74 | ]), 75 | 'title' => elgg_echo('event_manager:event:exportattendees'), 76 | 'icon' => 'download', 77 | 'text' => elgg_echo('download'), 78 | ]); 79 | } 80 | 81 | echo elgg_view_module('info', $rel_title, $rel_content, $module_vars); 82 | } 83 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/banner.php: -------------------------------------------------------------------------------- 1 | hasIcon('header', 'header')) { 9 | return; 10 | } 11 | 12 | $event_banner_url = $event->getIconURL(['type' => 'header', 'size' => 'header']); 13 | 14 | echo elgg_format_element('div', [ 15 | 'class' => ['mbl', 'event-manager-event-banner'], 16 | 'style' => "background-image: url('{$event_banner_url}');" 17 | ]); 18 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/contact_details.php: -------------------------------------------------------------------------------- 1 | website; 11 | $contact_details = $event->contact_details; 12 | $organizer = $event->organizer; 13 | 14 | if ($organizer) { 15 | $contact_information .= elgg_view_image_block( 16 | elgg_view_icon('user', ['title' => elgg_echo('event_manager:edit:form:organizer')]), 17 | elgg_view('output/longtext', ['value' => $organizer]) 18 | ); 19 | } 20 | 21 | if ($contact_details) { 22 | $contact_information .= elgg_view_image_block( 23 | elgg_view_icon('info-circle', ['title' => elgg_echo('event_manager:edit:form:contact_details')]), 24 | elgg_view('output/longtext', ['value' => $contact_details]) 25 | ); 26 | } 27 | 28 | if ($website) { 29 | if (!preg_match('~^https?\://~i', $website)) { 30 | $website = "http://{$website}"; 31 | } 32 | 33 | $contact_information .= elgg_view_image_block( 34 | elgg_view_icon('globe', ['title' => elgg_echo('event_manager:edit:form:website')]), 35 | elgg_view_url($website) 36 | ); 37 | } 38 | 39 | if (!empty($contact_information)) { 40 | echo elgg_view_module('event', elgg_echo('event_manager:edit:form:tabs:contact'), $contact_information, ['class' => 'event-manager-contact-details']); 41 | } 42 | 43 | $contact_guids = $event->contact_guids; 44 | if (!empty($contact_guids)) { 45 | if (!is_array($contact_guids)) { 46 | $contact_guids = [$contact_guids]; 47 | } 48 | 49 | $contact_content = ''; 50 | foreach ($contact_guids as $contact_guid) { 51 | $member_entity = get_entity($contact_guid); 52 | if (empty($member_entity)) { 53 | continue; 54 | } 55 | 56 | $member_icon = elgg_view_entity_icon($member_entity, 'tiny', ['event' => $event]); 57 | $contact_content .= elgg_view_image_block($member_icon, elgg_view_entity_url($member_entity), ['class' => 'pan']); 58 | } 59 | 60 | echo elgg_view_module('event', elgg_echo('event_manager:event:view:contact_persons'), $contact_content); 61 | } 62 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/datetime.php: -------------------------------------------------------------------------------- 1 | getStartDate('d-m-Y H:i:s')); 14 | $event_end = \Elgg\Values::normalizeTime($event->getEndDate('d-m-Y H:i:s')); 15 | 16 | $when_title = $event_start->formatLocale($short_format); 17 | $when_subtitle = ''; 18 | 19 | if (!$event->isMultiDayEvent()) { 20 | // same day event 21 | $when_subtitle .= $event_start->formatLocale($time_format) . ' ' . strtolower(elgg_echo('event_manager:date:to')) . ' ' . $event_end->formatLocale($time_format); 22 | } else { 23 | $when_title .= ' ' . $event_start->formatLocale($time_format); 24 | 25 | $when_subtitle .= strtolower(elgg_echo('event_manager:date:to')) . ' '; 26 | $when_subtitle .= $event_end->formatLocale($full_format); 27 | } 28 | 29 | $when = elgg_format_element('div', ['class' => 'event-manager-event-when-title'], $when_title); 30 | if (!empty($when_subtitle)) { 31 | $when .= elgg_format_element('div', ['class' => 'event-manager-event-when-subtitle'], $when_subtitle); 32 | } 33 | 34 | echo elgg_view_image_block(elgg_view_icon('calendar', ['class' => 'elgg-icon-hover']), $when, ['class' => 'event-manager-event-when']); 35 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/description.php: -------------------------------------------------------------------------------- 1 | description ?: $event->shortdescription; 10 | if (empty($description)) { 11 | return; 12 | } 13 | 14 | echo elgg_view_module('event', '', elgg_view('output/longtext', ['value' => $description, 'class' => 'man'])); 15 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/files.php: -------------------------------------------------------------------------------- 1 | $event]); 10 | $can_edit = $event->canEdit(); 11 | if (empty($event_files) && !$can_edit) { 12 | return; 13 | } 14 | 15 | $module_vars = []; 16 | if ($can_edit) { 17 | $module_vars['menu'] = elgg_view('output/url', [ 18 | 'href' => elgg_generate_url('edit:object:event:upload', ['guid' => $event->guid]), 19 | 'title' => elgg_echo('event_manager:event:uploadfiles'), 20 | 'text' => elgg_echo('upload'), 21 | 'icon' => 'plus-circle', 22 | ]); 23 | } 24 | 25 | if (empty($event_files)) { 26 | $event_files = elgg_echo('event_manager:event:uploadfiles:no_files'); 27 | } 28 | 29 | echo elgg_view_module('info', elgg_echo('event_manager:edit:form:files'), $event_files, $module_vars); 30 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/location.php: -------------------------------------------------------------------------------- 1 | location; 11 | $event_venue = $event->venue; 12 | $event_region = $event->region; 13 | 14 | if ($event_region) { 15 | $location_details .= elgg_view_image_block( 16 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:region') . ':'), 17 | $event_region 18 | ); 19 | } 20 | 21 | if ($event_venue) { 22 | $location_details .= elgg_view_image_block( 23 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:venue') . ':'), 24 | $event_venue 25 | ); 26 | } 27 | 28 | if ($event_location) { 29 | $maps_provider = event_manager_get_maps_provider(); 30 | 31 | $location_details .= elgg_view_image_block( 32 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:location') . ':'), 33 | $event_location . elgg_view("event_manager/maps/{$maps_provider}/route", $vars) 34 | ); 35 | 36 | $location_details .= elgg_view("event_manager/maps/{$maps_provider}/location", $vars); 37 | } 38 | 39 | if (empty($location_details)) { 40 | return; 41 | } 42 | 43 | echo elgg_view_module('event', '', $location_details, ['id' => 'location']); 44 | -------------------------------------------------------------------------------- /views/default/event_manager/event/view/registration.php: -------------------------------------------------------------------------------- 1 | max_attendees; 10 | $fee = $event->fee; 11 | $type = $event->event_type; 12 | $endregistration_day = $event->endregistration_day; 13 | 14 | if ($endregistration_day) { 15 | $registration_details .= elgg_view_image_block( 16 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:endregistration_day') . ':'), 17 | elgg_view('output/date', ['value' => $endregistration_day]) 18 | ); 19 | } 20 | 21 | if ($max_attendees) { 22 | $attendee_info = ''; 23 | 24 | $spots_left = ($max_attendees - $event->countAttendees()); 25 | if ($spots_left < 1) { 26 | $count_waitinglist = $event->countWaiters(); 27 | if ($count_waitinglist > 0) { 28 | $attendee_info .= elgg_echo('event_manager:full') . ', ' . $count_waitinglist . ' '; 29 | if ($count_waitinglist == 1) { 30 | $attendee_info .= elgg_echo('event_manager:personwaitinglist'); 31 | } else { 32 | $attendee_info .= elgg_echo('event_manager:peoplewaitinglist'); 33 | } 34 | } else { 35 | $attendee_info .= elgg_echo('event_manager:full'); 36 | } 37 | } else { 38 | $attendee_info .= $spots_left . ' / ' . $max_attendees; 39 | } 40 | 41 | $registration_details .= elgg_view_image_block( 42 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:spots_left') . ':'), 43 | $attendee_info 44 | ); 45 | } 46 | 47 | if ($fee) { 48 | $registration_details .= elgg_view_image_block( 49 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:fee') . ':'), 50 | elgg_view('output/text', ['value' => $fee]) . elgg_view('output/longtext', ['value' => $event->fee_details]) 51 | ); 52 | } 53 | 54 | if ($type) { 55 | $registration_details .= elgg_view_image_block( 56 | elgg_format_element('label', [], elgg_echo('event_manager:edit:form:type') . ':'), 57 | $type 58 | ); 59 | } 60 | 61 | $content = elgg_format_element('div', [], $registration_details); 62 | $content .= elgg_format_element('div', [], elgg_view('event_manager/event/rsvp', $vars)); 63 | 64 | echo elgg_format_element('div', ['class' => 'event-manager-view-registration-details'], $content); 65 | -------------------------------------------------------------------------------- /views/default/event_manager/forms/program/day.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 20 | echo elgg_echo('EntityPermissionsException'); 21 | return; 22 | } 23 | 24 | $guid = null; 25 | $description = null; 26 | $title = null; 27 | 28 | if ($entity instanceof \ColdTrick\EventManager\Event\Day) { 29 | // assume day edit mode 30 | $guid = $entity->guid; 31 | $parent_guid = $entity->owner_guid; 32 | $title = $entity->title; 33 | $description = $entity->description; 34 | $date = $entity->date; 35 | } else { 36 | // entity is a event 37 | $parent_guid = $entity->guid; 38 | 39 | // make nice default date 40 | $days = $entity->getEventDays(); 41 | $last_day = end($days); 42 | if (!$last_day) { 43 | $date = $entity->getStartTimestamp() + (3600 * 24); 44 | } else { 45 | $date = $last_day->date + (3600 * 24); 46 | } 47 | } 48 | 49 | $form_body = elgg_view_field([ 50 | '#type' => 'date', 51 | '#label' => elgg_echo('event_manager:edit:form:start_day'), 52 | 'name' => 'date', 53 | 'id' => 'date', 54 | 'timestamp' => true, 55 | 'value' => $date, 56 | 'required' => true, 57 | ]); 58 | 59 | $form_body .= elgg_view_field([ 60 | '#type' => 'text', 61 | '#label' => elgg_echo('title'), 62 | 'name' => 'description', 63 | 'value' => $description 64 | ]); 65 | 66 | $form_body .= elgg_view_field([ 67 | '#type' => 'text', 68 | '#label' => elgg_echo('description'), 69 | 'name' => 'title', 70 | 'value' => $title, 71 | ]); 72 | 73 | $form_body .= elgg_view_field([ 74 | '#type' => 'submit', 75 | 'text' => elgg_echo('submit'), 76 | 'class' => 'mtm', 77 | ]); 78 | $form_body .= elgg_view_field([ 79 | '#type' => 'hidden', 80 | 'name' => 'guid', 81 | 'value' => $guid 82 | ]); 83 | $form_body .= elgg_view_field([ 84 | '#type' => 'hidden', 85 | 'name' => 'parent_guid', 86 | 'value' => $parent_guid 87 | ]); 88 | 89 | $body = elgg_view('input/form', [ 90 | 'id' => 'event_manager_form_program_day', 91 | 'name' => 'event_manager_form_program_day', 92 | 'action' => false, 93 | 'body' => $form_body, 94 | ]); 95 | 96 | echo elgg_view_module('info', elgg_echo('event_manager:form:program:day'), $body, ['id' => 'event-manager-program-day-lightbox']); 97 | -------------------------------------------------------------------------------- /views/default/event_manager/listing/calendar.mjs.php: -------------------------------------------------------------------------------- 1 | 2 | import 'jquery'; 3 | import 'elgg'; 4 | import lightbox from 'elgg/lightbox'; 5 | 6 | 7 | 8 | var calendarEl = document.getElementById('event-manager-event-calendar'); 9 | var wrapper_data = $('#event-manager-event-calendar-wrapper').data(); 10 | var events_url = 'event_manager/calendar?' + $.param(wrapper_data); 11 | 12 | var calendar = new FullCalendar.Calendar(calendarEl, { 13 | events: elgg.normalize_url(events_url), 14 | headerToolbar: { 15 | left: 'prev next today', 16 | center: 'title', 17 | right: 'dayGridMonth timeGridWeek timeGridDay' 18 | }, 19 | views: { 20 | dayGridMonth: { 21 | dayMaxEventRows: 5 22 | } 23 | }, 24 | eventTimeFormat: { // like '14:30' 25 | hour: 'numeric', 26 | minute: '2-digit', 27 | meridiem: false 28 | }, 29 | defaultAllDay: true, 30 | locale: elgg.config.current_language, 31 | timeZone: 'UTC', 32 | eventClick: function (info) { 33 | var guid = info.event.extendedProps.guid; 34 | if (!guid) { 35 | return; 36 | } 37 | 38 | lightbox.open({ 39 | 'href': elgg.normalize_url('ajax/view/event_manager/event/popup?guid=' + guid), 40 | }); 41 | 42 | info.jsEvent.preventDefault(); // don't let the browser navigate 43 | } 44 | }); 45 | 46 | calendar.render(); 47 | -------------------------------------------------------------------------------- /views/default/event_manager/listing/calendar.php: -------------------------------------------------------------------------------- 1 | 'event-manager-event-calendar-wrapper', 16 | 'data-resource' => elgg_extract('resource', $vars), 17 | 'data-guid' => ($page_owner instanceof ElggEntity) ? $page_owner->guid : null, 18 | 'data-tag' => get_input('tag'), 19 | ]; 20 | $content = elgg_format_element('div', ['id' => 'event-manager-event-calendar']); 21 | 22 | echo elgg_view('event_manager/listing/elements/tags'); 23 | 24 | echo elgg_format_element('div', $wrapper_attr, $content); 25 | -------------------------------------------------------------------------------- /views/default/event_manager/listing/elements/tags.php: -------------------------------------------------------------------------------- 1 | elgg_http_add_url_query_elements(elgg_get_current_url(), ['tag' => null]), 10 | 'text' => $tag, 11 | 'icon_alt' => 'remove', 12 | ]); 13 | 14 | echo elgg_format_element('div', ['class' => 'event-manager-listing-tags mbm'], elgg_echo('event_manager:list:filter:tags', [$tag_link])); 15 | -------------------------------------------------------------------------------- /views/default/event_manager/listing/list.php: -------------------------------------------------------------------------------- 1 | 'object', 12 | 'subtype' => \Event::SUBTYPE, 13 | 'no_results' => elgg_echo('event_manager:list:noresults'), 14 | ]; 15 | 16 | $options = array_merge($defaults, $options); 17 | 18 | $tag = get_input('tag'); 19 | if (!empty($tag)) { 20 | echo elgg_view('event_manager/listing/elements/tags'); 21 | 22 | $options['metadata_name_value_pairs'][] = [ 23 | 'name' => 'tags', 24 | 'value' => $tag, 25 | 'case_sensitive' => false, 26 | ]; 27 | } 28 | 29 | echo elgg_list_entities($options); 30 | -------------------------------------------------------------------------------- /views/default/event_manager/listing/map.php: -------------------------------------------------------------------------------- 1 | 'event_manager_onthemap_canvas', 21 | 'data-resource' => elgg_extract('resource', $vars), 22 | 'data-guid' => ($page_owner instanceof \ElggEntity) ? $page_owner->guid : null, 23 | 'data-tag' => get_input('tag'), 24 | ]); 25 | 26 | echo elgg_view('event_manager/listing/elements/tags'); 27 | 28 | echo elgg_format_element('div', ['id' => 'event_manager_event_map'], $body); 29 | 30 | ?> 31 | 37 | -------------------------------------------------------------------------------- /views/default/event_manager/maps/osm/location.php: -------------------------------------------------------------------------------- 1 | getLatitude(); 9 | $long = $entity->getLongitude(); 10 | 11 | if (empty($lat) || empty($long)) { 12 | return; 13 | } 14 | 15 | elgg_load_external_file('css', 'leafletjs'); 16 | 17 | echo elgg_format_element('div', [ 18 | 'id' => 'event-manager-leafletjs-map', 19 | 'class' => 'event-manager-event-view-maps', 20 | ]); 21 | 22 | $event_zoom_level = (int) elgg_get_plugin_setting('osm_detail_zoom', 'event_manager', 12); 23 | 24 | ?> 25 | 38 | -------------------------------------------------------------------------------- /views/default/event_manager/maps/osm/location_input.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | import lightbox from 'elgg/lightbox'; 3 | import EventMap from 'event_manager/maps/osm/osm'; 4 | 5 | var event_map; 6 | var location_data; 7 | 8 | var createAddress = function(addressData) { 9 | 10 | var address = addressData.road; 11 | if (addressData.house_number) { 12 | address += ' ' + addressData.house_number; 13 | } 14 | 15 | if (addressData.city) { 16 | address += ', ' + addressData.city; 17 | } else if (addressData.town) { 18 | address += ', ' + addressData.town; 19 | } else if (addressData.suburb) { 20 | address += ', ' + addressData.suburb; 21 | } 22 | 23 | address += ', ' + addressData.country; 24 | 25 | return address; 26 | }; 27 | 28 | var executeSearch = function() { 29 | var $search_form = $('#event-manager-edit-maps-search-container'); 30 | 31 | event_map.clearMarkers(); 32 | 33 | event_map.getGeocode($search_form.find('input[name="address_search"]').val(), function(result) { 34 | location_data = result; 35 | 36 | $('#event-manager-edit-maps-search-container input[name="address_search"]').val(createAddress(location_data.address)); 37 | 38 | $search_form.find('[name="address_search_save"]').removeClass('hidden'); 39 | 40 | event_map.moveToLatLng(location_data.lat, location_data.lon, true); 41 | }); 42 | }; 43 | 44 | $('#event_manager_event_edit input[name="location"]').on('focus', function() { 45 | var $elem = $(this); 46 | 47 | lightbox.open({ 48 | 'inline': true, 49 | 'href': '#event-manager-edit-maps-search-container', 50 | 'onComplete': function () { 51 | 52 | var current_location = $elem.val(); 53 | var $container = $('#event-manager-edit-maps-search-container'); 54 | if (current_location) { 55 | $container.find('input[name="address_search"]').val(current_location); 56 | $container.find('[name="address_search_save"]').removeClass('hidden'); 57 | } 58 | 59 | $container.find('input[name="address_search"]').focus(); 60 | 61 | import('leafletjs').then((leaflet) => { 62 | if (!event_map) { 63 | var lat = $('#event_manager_event_edit input[name="latitude"]').val(); 64 | var lng = $('#event_manager_event_edit input[name="longitude"]').val(); 65 | 66 | event_map = EventMap.setup({ 67 | element: 'event-manager-maps-location-search' 68 | }); 69 | if (lat && lng) { 70 | event_map.moveToLatLng(lat, lng, true); 71 | } else { 72 | event_map.moveToDefaultLocation(); 73 | } 74 | } 75 | }); 76 | } 77 | }); 78 | }); 79 | 80 | $(document).on('keyup', '#event-manager-edit-maps-search-container input[name="address_search"]', function(event) { 81 | if (event.keyCode == 13) { 82 | executeSearch(); 83 | } else { 84 | $('#event-manager-edit-maps-search-container [name="address_search_save"]').addClass('hidden'); 85 | } 86 | }); 87 | $(document).on('click', '#event-manager-edit-maps-search-container button[name="address_search_submit"]', function() { 88 | executeSearch(); 89 | }); 90 | 91 | $(document).on('click', '#event-manager-edit-maps-search-container button[name="address_search_save"]', function() { 92 | var address = $('#event-manager-edit-maps-search-container input[name="address_search"]').val(); 93 | var $location_field = $('#event_manager_event_edit input[name="location"]'); 94 | var $latitude = $('#event_manager_event_edit input[name="latitude"]'); 95 | var $longitude = $('#event_manager_event_edit input[name="longitude"]'); 96 | 97 | if (location_data) { 98 | $location_field.val(createAddress(location_data.address)); 99 | 100 | $latitude.val(location_data.lat); 101 | $longitude.val(location_data.lon); 102 | 103 | $('#event-manager-location-input-delete').closest('.elgg-field').removeClass('hidden'); 104 | } else { 105 | $location_field.val(''); 106 | $latitude.val(''); 107 | $longitude.val(''); 108 | } 109 | 110 | lightbox.close(); 111 | }); 112 | -------------------------------------------------------------------------------- /views/default/event_manager/maps/osm/location_input.php: -------------------------------------------------------------------------------- 1 | { 98 | event_map = EventMap.default.setup({ 99 | element: 'event_manager_onthemap_canvas' 100 | }); 101 | event_map.moveToDefaultLocation(); 102 | event_map.getMap().on('moveend', execute_search_map); 103 | execute_search_map(); 104 | }); 105 | } else { 106 | execute_search_map(); 107 | } 108 | }; 109 | 110 | initialize_tab(); 111 | 112 | hooks.register('search:onthemap', 'event_manager', execute_search_map); 113 | -------------------------------------------------------------------------------- /views/default/event_manager/maps/osm/osm.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | import 'elgg'; 3 | import 'leafletjs'; 4 | 5 | function EventMap(options) { 6 | this.event_map = leaflet.map(options.element, options); 7 | 8 | // create the tile layer with correct attribution 9 | var osmUrl = '//{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'; 10 | var osmAttrib = 'Map data © OpenStreetMap contributors'; 11 | 12 | var osm = new leaflet.TileLayer(osmUrl, { 13 | attribution: osmAttrib 14 | }); 15 | 16 | this.event_map.addLayer(osm); 17 | 18 | // add marker group 19 | this.markerGroup = leaflet.layerGroup().addTo(this.event_map); 20 | }; 21 | 22 | EventMap.prototype = { 23 | moveToLatLng: function(lat, lng, add_marker) { 24 | this.event_map.setView([lat, lng]); 25 | 26 | if (add_marker == true) { 27 | this.addMarker([lat, lng]); 28 | } 29 | 30 | }, 31 | moveToDefaultLocation: function() { 32 | this.event_map.setView([elgg.data.event_manager_osm_default_location_lat, elgg.data.event_manager_osm_default_location_lng]); 33 | }, 34 | getGeocode: function(address, callback) { 35 | $.getJSON('https://nominatim.openstreetmap.org/search?q=' + address + '&format=json&limit=1&addressdetails=1', function(data) { 36 | callback(data[0]); 37 | }); 38 | this.event_map.attributionControl.addAttribution('© Nominatim'); 39 | }, 40 | addMarker: function(options) { 41 | var extra_options = {}; 42 | if (options.icon) { 43 | extra_options['icon'] = new leaflet.Icon(options.icon); 44 | } 45 | 46 | return leaflet.marker(options, extra_options).addTo(this.markerGroup); 47 | }, 48 | clearMarkers: function() { 49 | this.markerGroup.clearLayers(); 50 | }, 51 | getMap: function() { 52 | return this.event_map; 53 | } 54 | }; 55 | 56 | EventMap.setup = function(options) { 57 | if (!options) { 58 | options = {}; 59 | } 60 | 61 | if (!options.zoom) { 62 | options.zoom = elgg.data.event_manager_osm_default_zoom; 63 | } 64 | 65 | if (!options.element) { 66 | if (window.console) { 67 | console.log('Missing element to initialize map'); 68 | } 69 | 70 | return false; 71 | } 72 | 73 | var map = new EventMap(options); 74 | if (options.lat && options.lng) { 75 | map.moveToLatLng(options.lat, options.lng); 76 | } 77 | 78 | return map; 79 | }; 80 | 81 | export default EventMap; 82 | -------------------------------------------------------------------------------- /views/default/event_manager/maps/osm/route.php: -------------------------------------------------------------------------------- 1 | getLatitude()) || empty($entity->getLongitude())) { 9 | return; 10 | } 11 | 12 | echo elgg_view('output/url', [ 13 | 'href' => 'www.openstreetmap.org/directions?engine=osrm_car&route=%3B' . $entity->getLatitude() . '%2C' . $entity->getLongitude(), 14 | 'text' => elgg_echo('event_manager:event:location:plan_route'), 15 | 'target' => '_blank', 16 | 'class' => 'mlm', 17 | ]); 18 | -------------------------------------------------------------------------------- /views/default/event_manager/program/edit.php: -------------------------------------------------------------------------------- 1 | with_program) { 12 | return; 13 | } 14 | 15 | $tab_options = [ 16 | 'id' => 'event_manager_event_view_program', 17 | 'tabs' => [], 18 | ]; 19 | 20 | $eventDays = $event->getEventDays(); 21 | foreach ($eventDays as $key => $day) { 22 | $tab_options['tabs'][] = [ 23 | 'text' => $day->description ?: event_manager_format_date($day->date), 24 | 'content' => elgg_view('event_manager/program/elements/day', [ 25 | 'entity' => $day, 26 | 'participate' => true, 27 | 'register_type' => $register_type, 28 | ]), 29 | 'selected' => ($key === 0), 30 | ]; 31 | } 32 | 33 | $program = elgg_view('input/hidden', [ 34 | 'id' => 'event_manager_program_guids', 35 | 'name' => 'program_guids' 36 | ]); 37 | 38 | $program .= elgg_view('page/components/tabs', $tab_options); 39 | 40 | $slot_sets = elgg_get_metadata([ 41 | 'type' => 'object', 42 | 'subtype' => \ColdTrick\EventManager\Event\Slot::SUBTYPE, 43 | 'container_guids' => [$event->guid], 44 | 'metadata_names' => ['slot_set'], 45 | 'count' => true, 46 | ]); 47 | 48 | if ($slot_sets > 0) { 49 | $program .= elgg_format_element('span', ['class' => 'elgg-subtext'], elgg_echo('event_manager:registration:slot_set:info')); 50 | } 51 | 52 | echo elgg_view_module('info', elgg_echo('event_manager:event:program'), $program); 53 | -------------------------------------------------------------------------------- /views/default/event_manager/program/elements/day.php: -------------------------------------------------------------------------------- 1 | canEdit(); 14 | 15 | $details = ''; 16 | if ($day->description) { 17 | $details .= '
' . elgg_echo('event_manager:edit:form:start_day') . ': ' . event_manager_format_date($day->date) . '
'; 18 | } 19 | 20 | $details .= $day->getDisplayName(); 21 | 22 | if ($can_edit && $show_owner_actions && ($participate == false)) { 23 | $edit_day = elgg_view('output/url', [ 24 | 'href' => false, 25 | 'rel' => $day->guid, 26 | 'data-colorbox-opts' => json_encode([ 27 | 'href' => elgg_normalize_url('ajax/view/event_manager/forms/program/day?day_guid=' . $day->guid) 28 | ]), 29 | 'class' => 'event_manager_program_day_edit elgg-lightbox', 30 | 'text' => elgg_echo('edit'), 31 | ]); 32 | 33 | $delete_day = elgg_view('output/url', [ 34 | 'href' => false, 35 | 'class' => 'event_manager_program_day_delete', 36 | 'text' => elgg_echo('delete'), 37 | ]); 38 | 39 | $details .= " [ $edit_day | $delete_day ]"; 40 | } 41 | 42 | if ($details_only) { 43 | echo $details; 44 | return; 45 | } 46 | 47 | $day_info = elgg_format_element('div', [ 48 | 'class' => 'event_manager_program_day_details pbs mbs elgg-divide-bottom', 49 | 'rel' => $day->guid, 50 | ], $details); 51 | 52 | $slots = ''; 53 | $daySlots = $day->getEventSlots(); 54 | if ($daySlots) { 55 | $member = elgg_extract('member', $vars); 56 | 57 | foreach ($daySlots as $slot) { 58 | $slots .= elgg_view('event_manager/program/elements/slot', [ 59 | 'entity' => $slot, 60 | 'participate' => $participate, 61 | 'show_owner_actions' => $show_owner_actions, 62 | 'register_type' => $register_type, 63 | 'member' => $member, 64 | ]); 65 | } 66 | } 67 | 68 | if ($can_edit && $show_owner_actions && ($participate == false)) { 69 | $slots .= elgg_view('output/url', [ 70 | 'href' => false, 71 | 'class' => 'elgg-button elgg-button-action event_manager_program_slot_add mll elgg-lightbox', 72 | 'rel' => $day->guid, 73 | 'data-colorbox-opts' => json_encode([ 74 | 'href' => elgg_normalize_url('ajax/view/event_manager/forms/program/slot?day_guid=' . $day->guid) 75 | ]), 76 | 'text' => elgg_echo('event_manager:program:slot:add'), 77 | 'icon' => 'plus', 78 | ]); 79 | } 80 | 81 | echo elgg_format_element('div', [ 82 | 'class' => ['event_manager_program_day'], 83 | 'id' => 'day_' . $day->guid 84 | ], $day_info . $slots); 85 | -------------------------------------------------------------------------------- /views/default/event_manager/program/pdf.php: -------------------------------------------------------------------------------- 1 | with_program) { 9 | return; 10 | } 11 | 12 | $eventDays = $event->getEventDays(); 13 | if (empty($eventDays)) { 14 | return; 15 | } 16 | 17 | echo elgg_format_element('h3', [], elgg_echo('event_manager:event:program')); 18 | 19 | foreach ($eventDays as $day) { 20 | echo elgg_view('event_manager/program/pdf/day', [ 21 | 'entity' => $day, 22 | 'user_guid' => elgg_extract('user_guid', $vars), 23 | ]); 24 | } 25 | -------------------------------------------------------------------------------- /views/default/event_manager/program/pdf/day.php: -------------------------------------------------------------------------------- 1 | getEventSlots() as $slot) { 12 | $slots .= elgg_view('event_manager/program/pdf/slot', [ 13 | 'entity' => $slot, 14 | 'register_type' => $register_type, 15 | 'user_guid' => elgg_extract('user_guid', $vars), 16 | ]); 17 | } 18 | 19 | if (empty($slots)) { 20 | return; 21 | } 22 | 23 | $title = event_manager_format_date($day->date); 24 | $description = $day->description; 25 | 26 | if ($description) { 27 | $title = "{$description} ({$title})"; 28 | } 29 | 30 | $result = elgg_format_element('div', [], $title); 31 | if ($day->getDisplayName()) { 32 | $result .= elgg_format_element('div', [], $day->getDisplayName()); 33 | } 34 | 35 | $result .= "

{$slots}

"; 36 | 37 | echo $result; 38 | -------------------------------------------------------------------------------- /views/default/event_manager/program/pdf/slot.php: -------------------------------------------------------------------------------- 1 | hasRelationship($slot->guid, EVENT_MANAGER_RELATION_SLOT_REGISTRATION)) { 15 | return; 16 | } 17 | 18 | $start_time = $slot->start_time; 19 | $end_time = $slot->end_time; 20 | 21 | $result = "
"; 22 | $result .= date('H:i', $start_time) . ' - ' . date('H:i', $end_time); 23 | $result .= ''; 24 | $result .= elgg_format_element('b', [], $slot->getDisplayName()); 25 | 26 | if ($slot->location) { 27 | $result .= elgg_format_element('div', [], $slot->location); 28 | } 29 | 30 | $result .= elgg_format_element('div', [], elgg_view('output/text', ['value' => $slot->description])); 31 | 32 | $result .= '
'; 33 | 34 | echo $result; 35 | -------------------------------------------------------------------------------- /views/default/event_manager/program/view.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | import i18n from 'elgg/i18n'; 3 | import Ajax from 'elgg/Ajax'; 4 | import lightbox from 'elgg/lightbox'; 5 | 6 | var ajax = new Ajax(); 7 | 8 | function addSlot(event) { 9 | event.preventDefault(); 10 | 11 | var $button = $(this).find("input[type='submit']"); 12 | 13 | // Prevent accidental double click 14 | $button.hide(); 15 | 16 | var url = $(this).attr('action'); 17 | 18 | ajax.action(url, { 19 | data: ajax.objectify($(this)), 20 | success: function(output) { 21 | lightbox.close(); 22 | 23 | if (output.edit) { 24 | $("#" + output.guid).replaceWith(output.content); 25 | } else { 26 | $("#day_" + output.parent_guid).find(".event_manager_program_slot_add").before(output.content); 27 | } 28 | }, 29 | error: function () { 30 | $button.show(); 31 | } 32 | }); 33 | } 34 | 35 | function addDay(event) { 36 | event.preventDefault(); 37 | 38 | var $button = $(this).find("input[type='submit']"); 39 | $button.hide(); 40 | 41 | ajax.action('event_manager/day/edit', { 42 | data: ajax.objectify($(this)), 43 | success: function(output) { 44 | var guid = output.guid; 45 | if (guid) { 46 | lightbox.close(); 47 | 48 | if (output.edit) { 49 | $("#day_" + guid + " .event_manager_program_day_details").html(output.content_body); 50 | $("#event_manager_event_view_program a[rel='day_" + guid + "']").html(output.content_title).click(); 51 | } else { 52 | var $program = $('#event_manager_event_view_program'); 53 | $program.find('.elgg-tabs-content').append(output.content_body); 54 | $program.find('.elgg-menu-navigation-tabs').append(output.content_title); 55 | $program.find("a[rel='day_" + guid + "']").click(); 56 | } 57 | } else { 58 | $button.show(); 59 | } 60 | }, 61 | error: function() { 62 | $button.show(); 63 | } 64 | }); 65 | } 66 | 67 | $(document).on('click', '.event_manager_program_day_delete', function() { 68 | if (!confirm(i18n.echo('deleteconfirm'))) { 69 | return false; 70 | } 71 | 72 | var dayGuid = $(this).parent().attr("rel"); 73 | if (!dayGuid) { 74 | return false; 75 | } 76 | 77 | var $program = $('#event_manager_event_view_program'); 78 | 79 | var $dayElements = $program.find("#day_" + dayGuid + ", .elgg-menu-navigation-tabs a[rel='day_" + dayGuid + "']").parent(); 80 | 81 | $program.find('.elgg-menu-navigation-tabs li:first a').click(); 82 | 83 | $dayElements.hide(); 84 | 85 | ajax.action('event_manager/delete_program_item', { 86 | data: { 87 | guid: dayGuid 88 | }, 89 | success: function(json) { 90 | $dayElements.remove(); 91 | }, 92 | error: function() { 93 | $dayElements.show(); 94 | } 95 | }); 96 | }); 97 | 98 | $(document).on('click', '.event_manager_program_slot_delete', function() { 99 | if (!confirm(i18n.echo('deleteconfirm'))) { 100 | return false; 101 | } 102 | 103 | var slotGuid = $(this).parent().attr('rel'); 104 | if (!slotGuid) { 105 | return false; 106 | } 107 | 108 | var $slotElement = $('#' + slotGuid); 109 | $slotElement.hide(); 110 | 111 | ajax.action('event_manager/delete_program_item', { 112 | data: { 113 | guid: slotGuid 114 | }, 115 | success: function(json) { 116 | $slotElement.remove(); 117 | }, 118 | error: function() { 119 | $slotElement.show(); 120 | } 121 | }); 122 | }); 123 | 124 | $(document).on('click', '#event-manager-new-slot-set-name-button', function() { 125 | var set_name = $('#event-manager-new-slot-set-name').val(); 126 | if (set_name !== '') { 127 | $("#event_manager_form_program_slot input[name='slot_set']").prop('checked', false); 128 | var $options = $("#event_manager_form_program_slot input[name='slot_set']:first").parent().parent().parent(); 129 | $options.append("
  • "); 130 | } 131 | }); 132 | 133 | $(document).on('submit', '#event_manager_form_program_slot', addSlot); 134 | $(document).on('submit', '#event_manager_form_program_day', addDay); 135 | -------------------------------------------------------------------------------- /views/default/event_manager/program/view.php: -------------------------------------------------------------------------------- 1 | with_program) { 9 | return; 10 | } 11 | 12 | if ($event->canEdit()) { 13 | elgg_import_esm('event_manager/program/view'); 14 | } 15 | 16 | $show_owner_actions = elgg_extract('show_owner_actions', $vars, true); 17 | 18 | $tab_options = [ 19 | 'id' => 'event_manager_event_view_program', 20 | 'tabs' => [], 21 | ]; 22 | 23 | $member = elgg_extract('member', $vars); 24 | foreach ($event->getEventDays() as $key => $day) { 25 | $tab_options['tabs'][] = [ 26 | 'text' => $day->description ?: event_manager_format_date($day->date), 27 | 'rel' => "day_{$day->guid}", 28 | 'content' => elgg_view('event_manager/program/elements/day', [ 29 | 'entity' => $day, 30 | 'member' => $member, 31 | 'show_owner_actions' => $show_owner_actions, 32 | ]), 33 | 'selected' => ($key === 0), 34 | ]; 35 | } 36 | 37 | $module_vars = []; 38 | if ($event->canEdit() && $show_owner_actions) { 39 | $module_vars['menu'] = elgg_view('output/url', [ 40 | 'href' => false, 41 | 'rel' => $event->guid, 42 | 'data-colorbox-opts' => json_encode([ 43 | 'href' => elgg_normalize_url('ajax/view/event_manager/forms/program/day?event_guid=' . $event->guid) 44 | ]), 45 | 'class' => 'event_manager_program_day_add elgg-lightbox', 46 | 'text' => elgg_echo('event_manager:program:day:add'), 47 | 'icon' => 'plus', 48 | ]); 49 | } 50 | 51 | $content = elgg_view('page/components/tabs', $tab_options); 52 | 53 | echo elgg_view_module('info', elgg_echo('event_manager:event:program'), $content, $module_vars); 54 | -------------------------------------------------------------------------------- /views/default/event_manager/registration/completed.php: -------------------------------------------------------------------------------- 1 | getRelationshipByUser($object->guid); 6 | 7 | if ($rel === EVENT_MANAGER_RELATION_ATTENDING) { 8 | $completed_text = $event->registration_completed ?: elgg_echo('event_manager:registration:completed', [$object->getDisplayName(), $event->getDisplayName()]); 9 | 10 | $completed_text = str_ireplace('[NAME]', $object->getDisplayName(), $completed_text); 11 | $completed_text = str_ireplace('[EVENT]', $event->getDisplayName(), $completed_text); 12 | 13 | echo elgg_view('output/longtext', ['value' => $completed_text]); 14 | } 15 | 16 | echo elgg_view('output/longtext', ['value' => elgg_echo('event_manager:event:relationship:message:' . $rel)]); 17 | 18 | echo elgg_format_element('div', ['class' => 'mtm'], elgg_view('output/url', [ 19 | 'text' => elgg_echo('event_manager:registration:continue'), 20 | 'href' => $event->getURL(), 21 | 'class' => 'elgg-button elgg-button-action', 22 | ])); 23 | -------------------------------------------------------------------------------- /views/default/event_manager/registration/non_loggedin.php: -------------------------------------------------------------------------------- 1 | 'text', 5 | '#label' => elgg_echo('user:name:label'), 6 | 'name' => 'question_name', 7 | 'value' => elgg_get_sticky_value('event_register', 'question_name'), 8 | 'required' => true, 9 | ]); 10 | 11 | echo elgg_view_field([ 12 | '#type' => 'email', 13 | '#label' => elgg_echo('email'), 14 | 'name' => 'question_email', 15 | 'value' => elgg_get_sticky_value('event_register', 'question_email'), 16 | 'required' => true, 17 | ]); 18 | -------------------------------------------------------------------------------- /views/default/event_manager/registration/question.php: -------------------------------------------------------------------------------- 1 | 'text', 12 | 'Textarea' => 'plaintext', 13 | 'Dropdown' => 'dropdown', 14 | 'Radiobutton' => 'radio' 15 | ]; 16 | 17 | if (!array_key_exists($question->fieldtype, $fieldtypes)) { 18 | return; 19 | } 20 | 21 | echo elgg_view_field([ 22 | '#type' => $fieldtypes[$question->fieldtype], 23 | '#label' => $question->getDisplayName(), 24 | 'name' => 'question_' . $question->guid, 25 | 'value' => $value, 26 | 'required' => (bool) $question->required, 27 | 'options' => $question->getOptions(), 28 | ]); 29 | -------------------------------------------------------------------------------- /views/default/event_manager/registration/user_data.php: -------------------------------------------------------------------------------- 1 | getRegistrationFormQuestions(); 11 | $show_title = elgg_extract('show_title', $vars, false); 12 | 13 | if (empty($questions)) { 14 | return; 15 | } 16 | 17 | if ($show_title) { 18 | echo elgg_format_element('h3', [], elgg_echo('event_manager:registration:view:information')); 19 | } 20 | 21 | if (($entity->guid !== elgg_get_logged_in_user_guid()) && !$entity instanceof \ElggUser) { 22 | echo elgg_format_element('label', [], elgg_echo('user:name:label')); 23 | echo elgg_format_element('div', ['class' => 'mbm'], $entity->getDisplayName()); 24 | 25 | echo elgg_format_element('label', [], elgg_echo('email')); 26 | echo elgg_format_element('div', ['class' => 'mbm'], $entity->email); 27 | } 28 | 29 | /** @var EventRegistrationQuestion $question */ 30 | foreach ($questions as $question) { 31 | $answer_value = (string) $question->getAnswerFromUser($entity->guid)?->value; 32 | 33 | echo elgg_format_element('label', [], $question->getDisplayName()); 34 | echo elgg_format_element('div', ['class' => 'mbm'], $answer_value); 35 | } 36 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/attendees.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | import Ajax from 'elgg/Ajax'; 3 | 4 | $(document).on('submit', 'form.elgg-form-event-manager-event-attendees', function() { 5 | 6 | var form = this; 7 | var $form = $(form); 8 | var ajax = new Ajax(); 9 | 10 | ajax.view('event_manager/event/attendees_list', { 11 | method: 'POST', 12 | data: ajax.objectify(form), 13 | success: function(data) { 14 | $form.nextAll('ul.elgg-list, ul.elgg-pagination, p.elgg-no-results, div.elgg-list-container').remove(); 15 | $form.after(data); 16 | } 17 | }); 18 | 19 | return false; 20 | }); 21 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/attendees.php: -------------------------------------------------------------------------------- 1 | getSupportedRelationships())) { 16 | return; 17 | } 18 | 19 | elgg_import_esm('forms/event_manager/event/attendees'); 20 | 21 | echo elgg_view_field([ 22 | '#type' => 'hidden', 23 | 'name' => 'guid', 24 | 'value' => $entity->guid, 25 | ]); 26 | 27 | echo elgg_view_field([ 28 | '#type' => 'hidden', 29 | 'name' => 'relationship', 30 | 'value' => $relationship, 31 | ]); 32 | 33 | echo elgg_view_field([ 34 | '#type' => 'text', 35 | 'name' => 'q', 36 | 'title' => elgg_echo('search'), 37 | 'placeholder' => elgg_echo('event_manager:event:search_attendees'), 38 | 'value' => elgg_extract('q', $vars, get_input('q')), 39 | ]); 40 | 41 | $footer = elgg_view_field([ 42 | '#type' => 'submit', 43 | 'text' => elgg_echo('search'), 44 | 'class' => 'hidden', 45 | ]); 46 | 47 | elgg_set_form_footer($footer); 48 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/copy.php: -------------------------------------------------------------------------------- 1 | elgg_echo('event_manager:entity:copy', [$entity->getDisplayName()]), 10 | 'event_start' => $entity->getStartTimestamp(), 11 | 'event_end' => $entity->getEndTimestamp(), 12 | 'announcement_period' => elgg_get_plugin_setting('announcement_period', 'event_manager'), 13 | 'notification_queued_ts' => ELGG_ENTITIES_ANY_VALUE, 14 | 'notification_sent_ts' => ELGG_ENTITIES_ANY_VALUE, 15 | ]); 16 | 17 | $body .= elgg_view_field([ 18 | '#type' => 'access', 19 | '#label' => elgg_echo('access'), 20 | 'name' => 'access_id', 21 | 'value' => $entity->access_id, 22 | ]); 23 | 24 | $body .= elgg_view_field([ 25 | '#type' => 'hidden', 26 | 'name' => 'guid', 27 | 'value' => $entity->guid, 28 | ]); 29 | 30 | $body .= elgg_view_field([ 31 | '#type' => 'submit', 32 | 'text' => elgg_echo('save'), 33 | ]); 34 | 35 | echo elgg_view_module('info', elgg_echo('event_manager:menu:copy'), $body); 36 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/edit.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | import 'jquery-ui'; 3 | import 'elgg'; 4 | 5 | $('#event_manager_event_edit input[name="registration_needed"]').on('change', function() { 6 | if ($(this).val()) { 7 | $('#event-manager-forms-event-edit-questions, .elgg-menu-item-event-edit-questions').removeClass('hidden'); 8 | } 9 | }); 10 | 11 | $(document).on('change', 'input[name="fee"], input[name="max_attendees"]', function() { 12 | var $toggle_field = $(this).parent().parent().next().find('.elgg-field'); 13 | $toggle_field.addClass('hidden'); 14 | var entered_value = $(this).val().trim(); 15 | if (entered_value && (entered_value !== '0')) { 16 | $toggle_field.removeClass('hidden'); 17 | } 18 | }); 19 | 20 | // Registration Questions 21 | $('.event_manager_registrationform_fields').sortable({ 22 | axis: 'y', 23 | tolerance: 'pointer', 24 | opacity: 0.8, 25 | forcePlaceholderSize: true, 26 | forceHelperSize: true, 27 | }); 28 | 29 | $(document).on('click', '.event_manager_questions_delete', function(e) { 30 | if (e.isDefaultPrevented()) { 31 | return; 32 | } 33 | 34 | $(this).parents('.elgg-item-object-eventregistrationquestion').eq(0).remove(); 35 | }); 36 | 37 | $(document).on('change', '.event_manager_registrationform_question_fieldtype', function() { 38 | var type = $(this).val(); 39 | var $parent = $(this).parents('.elgg-item-object-eventregistrationquestion').eq(0); 40 | if (type == 'Radiobutton' || type == 'Dropdown') { 41 | $parent.find('.event_manager_registrationform_select_options').show(); 42 | } else { 43 | $parent.find('.event_manager_registrationform_select_options').hide(); 44 | } 45 | }); 46 | 47 | $(document).on('click', '.event-manager-registration-add-field', function() { 48 | var $clone = $('#event-manager-registration-field-template').clone(); 49 | $clone.appendTo('.event_manager_registrationform_fields').removeClass('hidden').removeAttr('id'); 50 | $clone.find(':disabled').removeAttr('disabled'); 51 | 52 | var d = new Date(); 53 | var temp_id = 't_' + d.getTime(); 54 | $($clone).html($clone.html().replace(/questions\[\]\[/g, 'questions[' + temp_id + '][')); 55 | }); 56 | 57 | $(document).on('click', '#event-manager-location-input-delete', function() { 58 | $('#event_manager_event_edit').find('input[name="location"], input[name="latitude"], input[name="longitude"]').val(''); 59 | $(this).closest('.elgg-field').addClass('hidden'); 60 | }); 61 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/edit.php: -------------------------------------------------------------------------------- 1 | 'hidden', 21 | 'name' => $hidden, 22 | 'value' => $fields[$hidden], 23 | ]); 24 | } 25 | 26 | echo elgg_view('forms/event_manager/event/module', [ 27 | 'body' => elgg_view('forms/event_manager/event/tabs/general', $vars), 28 | ]); 29 | 30 | $sections = ['profile', 'location', 'contact', 'registration', 'questions']; 31 | foreach ($sections as $section) { 32 | echo elgg_view('forms/event_manager/event/module', [ 33 | 'section' => $section, 34 | 'title' => elgg_echo("event_manager:edit:form:tabs:{$section}"), 35 | 'id' => "event-manager-forms-event-edit-{$section}", 36 | 'body' => elgg_view("forms/event_manager/event/tabs/{$section}", $vars), 37 | 'body_vars' => $vars, 38 | ]); 39 | } 40 | 41 | $footer = elgg_view_field([ 42 | '#type' => 'submit', 43 | 'text' => elgg_echo('save'), 44 | ]); 45 | 46 | elgg_set_form_footer($footer); 47 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/edit/event_type.php: -------------------------------------------------------------------------------- 1 | 'hidden', 21 | 'name' => 'event_type', 22 | 'value' => $event_type, 23 | ]); 24 | } 25 | 26 | return; 27 | } 28 | 29 | $options = array_merge([''], $type_list); 30 | if (!in_array($event_type, $options)) { 31 | $options[] = $event_type; 32 | } 33 | 34 | echo elgg_view_field([ 35 | '#type' => 'select', 36 | '#label' => elgg_echo('event_manager:edit:form:type'), 37 | '#help' => elgg_echo('event_manager:edit:form:type:help'), 38 | 'name' => 'event_type', 39 | 'value' => $event_type, 40 | 'options' => $options, 41 | ]); 42 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/edit/region.php: -------------------------------------------------------------------------------- 1 | 'hidden', 21 | 'name' => 'region', 22 | 'value' => $region, 23 | ]); 24 | } 25 | 26 | return; 27 | } 28 | 29 | $options = array_merge([''], $region_list); 30 | if (!in_array($region, $options)) { 31 | $options[] = $region; 32 | } 33 | 34 | echo elgg_view_field([ 35 | '#type' => 'select', 36 | '#label' => elgg_echo('event_manager:edit:form:region'), 37 | '#help' => elgg_echo('event_manager:edit:form:region:help'), 38 | 'name' => 'region', 39 | 'value' => $region, 40 | 'options' => $options, 41 | ]); 42 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/mail.php: -------------------------------------------------------------------------------- 1 | 'hidden', 13 | 'name' => 'guid', 14 | 'value' => $entity->guid, 15 | ]); 16 | 17 | echo elgg_view_field([ 18 | '#type' => 'text', 19 | '#label' => elgg_echo('email:subject'), 20 | 'name' => 'title', 21 | 'value' => elgg_extract('title', $vars), 22 | 'required' => true, 23 | ]); 24 | 25 | echo elgg_view_field([ 26 | '#type' => 'plaintext', 27 | '#label' => elgg_echo('email:body'), 28 | 'name' => 'description', 29 | 'value' => elgg_extract('description', $vars), 30 | 'required' => true, 31 | ]); 32 | 33 | $recipient_options = $entity->getSupportedRelationships(); 34 | unset($recipient_options[EVENT_MANAGER_RELATION_ATTENDING_PENDING]); 35 | foreach ($recipient_options as $rel => $text) { 36 | $count = $entity->getEntitiesFromRelationship([ 37 | 'count' => true, 38 | 'relationship' => $rel, 39 | ]); 40 | 41 | $recipient_options[$rel] = "{$text} ({$count})"; 42 | } 43 | 44 | $contacts = $entity->getContacts(['count' => true]); 45 | if (!empty($contacts)) { 46 | $recipient_options['contacts'] = elgg_echo('event_manager:event:view:contact_persons') . " ({$contacts})"; 47 | } 48 | 49 | $organizers = $entity->getOrganizers(['count' => true]); 50 | if (!empty($organizers)) { 51 | $recipient_options[EVENT_MANAGER_RELATION_ORGANIZING] = elgg_echo('event_manager:event:relationship:event_organizing:label') . " ({$organizers})"; 52 | } 53 | 54 | echo elgg_view_field([ 55 | '#type' => 'checkboxes', 56 | '#label' => elgg_echo('event_manager:mail:recipients'), 57 | 'name' => 'recipients', 58 | 'options_values' => $recipient_options, 59 | 'value' => elgg_extract('recipients', $vars), 60 | ]); 61 | 62 | $footer = elgg_view_field([ 63 | '#type' => 'submit', 64 | 'text' => elgg_echo('send'), 65 | ]); 66 | 67 | elgg_set_form_footer($footer); 68 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/module.php: -------------------------------------------------------------------------------- 1 | [ 65 | "event-manager-edit-{$section}-toggle", 66 | 'elgg-button-action', 67 | 'elgg-toggle', 68 | ], 69 | 'text' => elgg_echo('event_manager:edit:form:tabs:toggle'), 70 | 'data-toggle-slide' => 0, 71 | 'data-toggle-selector' => ".event-manager-edit-{$section}-toggle", 72 | ]); 73 | 74 | $body = elgg_format_element('div', [ 75 | 'class' => "hidden event-manager-edit-{$section}-toggle", 76 | 'data-toggle-slide' => 0, 77 | ], $body); 78 | 79 | $body .= elgg_format_element('div', [ 80 | 'class' => "event-manager-edit-{$section}-toggle", 81 | 'data-toggle-slide' => 0, 82 | ], elgg_echo("event_manager:edit:form:tabs:{$section}:toggle")); 83 | } 84 | 85 | $module_vars = [ 86 | 'id' => elgg_extract('id', $vars), 87 | 'class' => ['event_tab'], 88 | 'menu' => $menu, 89 | ]; 90 | 91 | if ($section == 'questions') { 92 | if (!$entity instanceof \Event) { 93 | $module_vars['class'][] = 'hidden'; 94 | } elseif (!$entity->getRegistrationFormQuestions(true) && !$entity->registration_needed) { 95 | $module_vars['class'][] = 'hidden'; 96 | } 97 | } 98 | 99 | echo elgg_view_module('info', $title, $body, $module_vars); 100 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/register.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | import i18n from 'elgg/i18n'; 3 | import system_messages from 'elgg/system_messages'; 4 | 5 | var $form = $("#event_manager_event_register"); 6 | if ($form.length > 0) { 7 | var set_names = []; // store processed set names 8 | 9 | $form.find(".event_manager_program_participatetoslot[rel]:checked").each(function(){ 10 | var rel = $(this).attr("rel"); 11 | if ($.inArray(rel, set_names) < 0) { 12 | set_names.push[rel]; 13 | $form.find(".event_manager_program_participatetoslot[rel='" + rel + "'][id!='" + $(this).attr("id") + "']").removeAttr("checked").attr("disabled", "disabled"); 14 | } 15 | }); 16 | 17 | $(document).on('change', '#event_manager_event_register .event_manager_program_participatetoslot[rel]', function() { 18 | var $form = $("#event_manager_event_register"); 19 | var rel = $(this).attr("rel"); 20 | var selected_id = $form.find(".event_manager_program_participatetoslot[rel='" + rel + "']:checked:first").attr("id"); 21 | if (selected_id) { 22 | // disabled others 23 | $form.find(".event_manager_program_participatetoslot[rel='" + rel + "'][id!='" + selected_id + "']").removeAttr("checked").attr("disabled", "disabled"); 24 | } else { 25 | // enable others 26 | $form.find(".event_manager_program_participatetoslot[rel='" + rel + "']").removeAttr("checked").removeAttr("disabled"); 27 | } 28 | }); 29 | } 30 | 31 | $(document).on('submit', '#event_manager_event_register', function() { 32 | if (($("input[name='question_name']").val() === "") || ($("input[name='question_email']").val() === "")) { 33 | system_messages.error(i18n.echo("event_manager:registration:required_fields")); 34 | return false; 35 | } 36 | 37 | var error_found = false; 38 | 39 | $("#event_manager_registration_form_fields .elgg-field-required [required]").each(function(index, elem){ 40 | if ($(this).hasClass("elgg-input-radios")) { 41 | if ($(this).find("input[type='radio']:checked").length === 0) { 42 | error_found = true; 43 | return false; 44 | } 45 | } else if ($(this).val() === "") { 46 | error_found = true; 47 | return false; 48 | } 49 | }); 50 | 51 | if (error_found) { 52 | system_messages.error(i18n.echo("event_manager:registration:required_fields")); 53 | return false; 54 | } 55 | 56 | var guids = []; 57 | $.each($('.event_manager_program_participatetoslot'), function(i, value) { 58 | var elementId = $(value).attr('id'); 59 | if ($(value).is(':checked')) { 60 | guids.push(elementId.substring(9, elementId.length)); 61 | } 62 | }); 63 | 64 | $('#event_manager_program_guids').val(guids.join(',')); 65 | }); 66 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/register.php: -------------------------------------------------------------------------------- 1 | getRegistrationFormQuestions(); 18 | if ($registration_form) { 19 | if ($register_type == 'waitinglist') { 20 | $form_body .= '

    ' . elgg_echo('event_manager:event:rsvp:waiting_list:message') . '


    '; 21 | } 22 | 23 | foreach ($registration_form as $question) { 24 | $value = elgg_get_sticky_value('event_register', 'question_' . $question->guid); 25 | if ($value === null && elgg_is_logged_in()) { 26 | $value = $question->getAnswerFromUser()?->value; 27 | } 28 | 29 | $form_body .= elgg_view('event_manager/registration/question', [ 30 | 'entity' => $question, 31 | 'value' => $value, 32 | ]); 33 | 34 | if ($question->required) { 35 | $show_required = true; 36 | } 37 | } 38 | } 39 | 40 | if ($show_required) { 41 | $form_body .= elgg_format_element('div', ['class' => 'elgg-subtext'], elgg_echo('event_manager:registration:required_fields:info')); 42 | } 43 | 44 | if (!empty($form_body)) { 45 | $form_body = elgg_view_module('info', '', $form_body, ['id' => 'event_manager_registration_form_fields']); 46 | } 47 | 48 | if ($event->with_program) { 49 | $form_body .= $event->getProgramData(elgg_get_logged_in_user_guid(), true, $register_type); 50 | } 51 | 52 | if (!$form_body) { 53 | return; 54 | } 55 | 56 | $form_body .= elgg_view_field([ 57 | '#type' => 'hidden', 58 | 'name' => 'event_guid', 59 | 'value' => $event->guid, 60 | ]); 61 | 62 | $form_body .= elgg_view_field([ 63 | '#type' => 'hidden', 64 | 'name' => 'register_type', 65 | 'value' => $register_type, 66 | ]); 67 | 68 | if ($register_type == 'register') { 69 | $form_body .= elgg_view_field([ 70 | '#type' => 'hidden', 71 | 'name' => 'relation', 72 | 'value' => EVENT_MANAGER_RELATION_ATTENDING, 73 | ]); 74 | } elseif ($register_type == 'waitinglist') { 75 | $form_body .= elgg_view_field([ 76 | '#type' => 'hidden', 77 | 'name' => 'relation', 78 | 'value' => EVENT_MANAGER_RELATION_ATTENDING_WAITINGLIST, 79 | ]); 80 | } 81 | 82 | $form_body .= elgg_view_field([ 83 | '#type' => 'submit', 84 | 'text' => elgg_echo('register'), 85 | ]); 86 | 87 | echo $form_body; 88 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/tabs/contact.php: -------------------------------------------------------------------------------- 1 | 'fieldset', 13 | '#label' => elgg_echo('event_manager:edit:form:organizer'), 14 | 'align' => 'horizontal', 15 | 'fields' => [ 16 | [ 17 | '#type' => 'text', 18 | '#class' => 'elgg-field-stretch', 19 | '#help' => elgg_echo('event_manager:edit:form:organizer:help'), 20 | 'name' => 'organizer', 21 | 'value' => $organizer, 22 | ], 23 | [ 24 | '#html' => elgg_echo('event_manager:edit:form:users:or'), 25 | ], 26 | [ 27 | '#type' => 'button', 28 | 'text' => elgg_echo('event_manager:edit:form:users:add'), 29 | 'class' => ['elgg-button-action', 'elgg-toggle'], 30 | 'data-toggle-selector' => '.event-manager-contact-organizer-guids', 31 | ], 32 | ], 33 | ]); 34 | 35 | $field_classes = ['event-manager-contact-organizer-guids']; 36 | if (empty($organizer_guids)) { 37 | $field_classes[] = 'hidden'; 38 | } 39 | 40 | $output .= elgg_view_field([ 41 | '#type' => 'userpicker', 42 | '#label' => elgg_echo('event_manager:edit:form:organizer_guids'), 43 | '#class' => $field_classes, 44 | 'name' => 'organizer_guids', 45 | 'values' => $organizer_guids, 46 | 'show_friends' => false, 47 | ]); 48 | 49 | $output .= elgg_view_field([ 50 | '#type' => 'fieldset', 51 | '#label' => elgg_echo('event_manager:edit:form:contact_details'), 52 | 'align' => 'horizontal', 53 | 'fields' => [ 54 | [ 55 | '#type' => 'text', 56 | '#class' => 'elgg-field-stretch', 57 | '#help' => elgg_echo('event_manager:edit:form:contact_details:help'), 58 | 'name' => 'contact_details', 59 | 'value' => $contact_details, 60 | ], 61 | [ 62 | '#html' => elgg_echo('event_manager:edit:form:users:or'), 63 | ], 64 | [ 65 | '#type' => 'button', 66 | 'text' => elgg_echo('event_manager:edit:form:users:add'), 67 | 'class' => ['elgg-button-action', 'elgg-toggle'], 68 | 'data-toggle-selector' => '.event-manager-contact-contact-guids', 69 | ], 70 | ], 71 | ]); 72 | 73 | $field_classes = ['event-manager-contact-contact-guids']; 74 | if (empty($contact_guids)) { 75 | $field_classes[] = 'hidden'; 76 | } 77 | 78 | $output .= elgg_view_field([ 79 | '#type' => 'userpicker', 80 | '#label' => elgg_echo('event_manager:edit:form:contact_guids'), 81 | '#class' => $field_classes, 82 | 'name' => 'contact_guids', 83 | 'values' => $contact_guids, 84 | 'show_friends' => false, 85 | ]); 86 | 87 | $output .= elgg_view_field([ 88 | '#type' => 'url', 89 | '#label' => elgg_echo('event_manager:edit:form:website'), 90 | '#help' => elgg_echo('event_manager:edit:form:website:help'), 91 | 'name' => 'website', 92 | 'value' => $website, 93 | ]); 94 | 95 | echo $output; 96 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/tabs/general.php: -------------------------------------------------------------------------------- 1 | 'text', 10 | '#label' => elgg_echo('title'), 11 | 'name' => 'title', 12 | 'value' => $vars['title'], 13 | 'required' => true, 14 | ]); 15 | 16 | echo elgg_view_field([ 17 | '#type' => 'fieldset', 18 | 'align' => 'horizontal', 19 | 'fields' => [ 20 | [ 21 | '#type' => 'date', 22 | '#label' => elgg_echo('event_manager:edit:form:start'), 23 | '#class' => 'elgg-field-horizontal', 24 | 'name' => 'event_start', 25 | 'timestamp' => true, 26 | 'required' => true, 27 | 'value' => $vars['event_start'], 28 | 'class' => 'event_manager_event_edit_date', 29 | ], 30 | [ 31 | '#type' => 'time', 32 | 'name' => 'start_time', 33 | 'value' => $vars['event_start'], 34 | 'timestamp' => true, 35 | 'title' => elgg_echo('event_manager:edit:form:start_time'), 36 | ], 37 | [ 38 | '#type' => 'date', 39 | '#label' => elgg_echo('event_manager:edit:form:end'), 40 | '#class' => 'elgg-field-horizontal', 41 | 'name' => 'event_end', 42 | 'timestamp' => true, 43 | 'required' => true, 44 | 'value' => $vars['event_end'], 45 | 'class' => 'event_manager_event_edit_date', 46 | ], 47 | [ 48 | '#type' => 'time', 49 | 'name' => 'end_time', 50 | 'value' => $vars['event_end'], 51 | 'timestamp' => true, 52 | 'title' => elgg_echo('event_manager:edit:form:end_time'), 53 | ], 54 | ], 55 | ]); 56 | 57 | $announcement_period = $vars['announcement_period']; 58 | $notification_queued_ts = $vars['notification_queued_ts']; 59 | $notification_sent_ts = $vars['notification_sent_ts']; 60 | 61 | if (!empty($notification_sent_ts)) { 62 | // notification already sent 63 | echo elgg_format_element('div', ['class' => 'elgg-subtext'], elgg_echo('event_manager:edit:form:announcement_period:sent', [Values::normalizeTime($notification_sent_ts)->formatLocale(elgg_echo('friendlytime:date_format:short'))])); 64 | 65 | return; 66 | } 67 | 68 | if (!empty($notification_queued_ts) && $notification_queued_ts <= time()) { 69 | // notification scheduled in the past 70 | echo elgg_format_element('div', ['class' => 'elgg-subtext'], elgg_echo('event_manager:edit:form:announcement_period:scheduled', [Values::normalizeTime($notification_queued_ts)->formatLocale(elgg_echo('friendlytime:date_format:short'))])); 71 | 72 | return; 73 | } 74 | 75 | if (!empty($vars['guid']) && empty($notification_queued_ts)) { 76 | // scheduled notifications not supported, probably an event created before this feature existed 77 | return; 78 | } 79 | 80 | echo elgg_view_field([ 81 | '#type' => 'number', 82 | '#label' => elgg_echo('event_manager:edit:form:announcement_period'), 83 | '#help' => elgg_echo('event_manager:edit:form:announcement_period:help'), 84 | 'name' => 'announcement_period', 85 | 'value' => $announcement_period, 86 | 'min' => 0, 87 | ]); 88 | 89 | if (!empty($notification_queued_ts)) { 90 | // notification scheduled in the future 91 | echo elgg_format_element('div', ['class' => 'elgg-subtext'], elgg_echo('event_manager:edit:form:announcement_period:scheduled', [Values::normalizeTime($notification_queued_ts)->formatLocale(elgg_echo('friendlytime:date_format:short'))])); 92 | } 93 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/tabs/location.php: -------------------------------------------------------------------------------- 1 | 'text', 13 | '#label' => elgg_echo('event_manager:edit:form:venue'), 14 | '#help' => elgg_echo('event_manager:edit:form:venue:help'), 15 | 'name' => 'venue', 16 | 'value' => $venue, 17 | ]); 18 | 19 | $field_options = [ 20 | '#type' => 'fieldset', 21 | 'align' => 'horizontal', 22 | 'class' => 'event-manager-align-bottom', 23 | 'fields' => [ 24 | [ 25 | '#type' => 'text', 26 | '#class' => 'elgg-field-stretch', 27 | '#label' => elgg_echo('event_manager:edit:form:location'), 28 | '#help' => elgg_echo('event_manager:edit:form:location:help'), 29 | 'name' => 'location', 30 | 'value' => $location, 31 | ], 32 | [ 33 | '#type' => 'button', 34 | '#class' => $location ? null : 'hidden', 35 | 'text' => elgg_echo('delete'), 36 | 'id' => 'event-manager-location-input-delete', 37 | 'class' => [ 38 | 'elgg-button-delete', 39 | ], 40 | ], 41 | ], 42 | ]; 43 | 44 | if (elgg_view_exists("event_manager/maps/{$maps_provider}/location_input")) { 45 | $field_options['data-has-maps'] = true; 46 | 47 | $params = $vars; 48 | $params['field_options'] = $field_options; 49 | $output .= elgg_view("event_manager/maps/{$maps_provider}/location_input", $params); 50 | $output .= elgg_view('forms/event_manager/event/tabs/location_search', $vars); 51 | } else { 52 | $output .= elgg_view_field($field_options); 53 | } 54 | 55 | $output .= elgg_view('forms/event_manager/event/edit/region', $vars); 56 | 57 | echo $output; 58 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/tabs/location_search.php: -------------------------------------------------------------------------------- 1 | 'event-manager-maps-location-search']); 4 | 5 | $form .= elgg_view_field([ 6 | '#type' => 'text', 7 | '#label' => elgg_echo('event_manager:event:edit:maps_address'), 8 | 'name' => 'address_search', 9 | 'id' => 'address_search', 10 | ]); 11 | 12 | $form .= elgg_view_field([ 13 | '#type' => 'fieldset', 14 | 'align' => 'horizontal', 15 | 'fields' => [ 16 | [ 17 | '#type' => 'button', 18 | 'class' => 'elgg-button-submit elgg-button-action', 19 | 'name' => 'address_search_submit', 20 | 'text' => elgg_echo('search'), 21 | ], 22 | [ 23 | '#type' => 'button', 24 | 'class' => 'elgg-button-submit hidden', 25 | 'name' => 'address_search_save', 26 | 'id' => 'address_search_save', 27 | 'text' => elgg_echo('save'), 28 | ], 29 | ], 30 | ]); 31 | 32 | $container = elgg_format_element('div', ['id' => 'event-manager-edit-maps-search-container'], $form); 33 | 34 | echo elgg_format_element('div', ['class' => 'hidden'], $container); 35 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/tabs/profile.php: -------------------------------------------------------------------------------- 1 | 'text', 8 | '#label' => elgg_echo('event_manager:edit:form:shortdescription'), 9 | '#help' => elgg_echo('event_manager:edit:form:shortdescription:help'), 10 | 'name' => 'shortdescription', 11 | 'value' => elgg_extract('shortdescription', $vars), 12 | ]); 13 | 14 | echo elgg_view_field([ 15 | '#type' => 'longtext', 16 | '#label' => elgg_echo('description'), 17 | '#help' => elgg_echo('event_manager:edit:form:description:help'), 18 | 'name' => 'description', 19 | 'value' => elgg_extract('description', $vars), 20 | ]); 21 | 22 | echo elgg_view_field([ 23 | '#type' => 'tags', 24 | '#label' => elgg_echo('tags'), 25 | '#help' => elgg_echo('event_manager:edit:form:tags:help'), 26 | 'name' => 'tags', 27 | 'value' => elgg_extract('tags', $vars), 28 | ]); 29 | 30 | echo elgg_view('entity/edit/header', [ 31 | 'entity' => elgg_extract('entity', $vars), 32 | 'entity_type' => 'object', 33 | 'entity_subtype' => 'event', 34 | ]); 35 | 36 | echo elgg_view('forms/event_manager/event/edit/event_type', $vars); 37 | 38 | echo elgg_view_field([ 39 | '#type' => 'checkbox', 40 | '#label' => elgg_echo('event_manager:edit:form:comments_on'), 41 | '#help' => elgg_echo('event_manager:edit:form:comments_on:help'), 42 | 'name' => 'comments_on', 43 | 'checked' => (int) $vars['comments_on'] === 1, 44 | 'switch' => true, 45 | 'default' => '0', 46 | 'value' => '1', 47 | ]); 48 | 49 | echo elgg_view_field([ 50 | '#type' => 'access', 51 | '#label' => elgg_echo('access'), 52 | 'name' => 'access_id', 53 | 'value' => $vars['access_id'], 54 | ]); 55 | 56 | echo elgg_view_field([ 57 | '#type' => 'container_guid', 58 | 'entity_type' => 'object', 59 | 'entity_subtype' => \Event::SUBTYPE, 60 | 'value' => $vars['container_guid'], 61 | ]); 62 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/tabs/questions.php: -------------------------------------------------------------------------------- 1 | 'elgg-list event_manager_registrationform_fields', 10 | ]); 11 | }; 12 | 13 | if ($event instanceof \Event) { 14 | $results .= elgg_view_entity_list($event->getRegistrationFormQuestions(), [ 15 | 'list_class' => 'event_manager_registrationform_fields', 16 | 'item_view' => 'forms/event_manager/registrationform/question', 17 | 'no_results' => $no_results, 18 | ]); 19 | } else { 20 | $results .= $no_results(); 21 | } 22 | 23 | $results .= elgg_format_element('ul', [], elgg_format_element('li', [ 24 | 'id' => 'event-manager-registration-field-template', 25 | 'class' => 'hidden elgg-item elgg-item-object elgg-item-object-eventregistrationquestion ui-sortable-handle', 26 | ], elgg_view('forms/event_manager/registrationform/question'))); 27 | 28 | $results .= elgg_view('output/url', [ 29 | 'href' => false, 30 | 'class' => 'elgg-button elgg-button-action event-manager-registration-add-field', 31 | 'text' => elgg_echo('event_manager:editregistration:addfield'), 32 | ]); 33 | 34 | return $results; 35 | }); 36 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/unsubscribe.php: -------------------------------------------------------------------------------- 1 | 'hidden', 8 | 'name' => 'guid', 9 | 'value' => $entity->guid, 10 | ]); 11 | 12 | echo elgg_view('output/longtext', ['value' => elgg_echo('event_manager:unsubscribe:description', [$entity->getDisplayName()])]); 13 | 14 | echo elgg_view_field([ 15 | '#type' => 'email', 16 | '#label' => elgg_echo('email'), 17 | 'name' => 'email', 18 | 'value' => $email, 19 | 'id' => 'event-manager-unsubscribe-email', 20 | ]); 21 | 22 | $footer = elgg_view_field([ 23 | '#type' => 'submit', 24 | 'text' => elgg_echo('submit'), 25 | ]); 26 | 27 | elgg_set_form_footer($footer); 28 | 29 | elgg_clear_sticky_form('event_unsubscribe'); 30 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/unsubscribe_confirm.php: -------------------------------------------------------------------------------- 1 | elgg_echo('event_manager:unsubscribe_confirm:description', [$registration->getDisplayName(), $event->getDisplayName()]), 9 | ]); 10 | 11 | echo elgg_view('input/hidden', ['name' => 'registration', 'value' => $registration->guid]); 12 | echo elgg_view('input/hidden', ['name' => 'event', 'value' => $event->guid]); 13 | echo elgg_view('input/hidden', ['name' => 'code', 'value' => $code]); 14 | 15 | $footer = elgg_view('input/submit', ['text' => elgg_echo('confirm')]); 16 | 17 | elgg_set_form_footer($footer); 18 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/event/upload_file.php: -------------------------------------------------------------------------------- 1 | 'hidden', 10 | 'name' => 'guid', 11 | 'value' => $event->guid, 12 | ]); 13 | 14 | echo elgg_view_field([ 15 | '#type' => 'text', 16 | '#label' => elgg_echo('title'), 17 | 'name' => 'title', 18 | 'required' => true 19 | ]); 20 | 21 | echo elgg_view_field([ 22 | '#type' => 'file', 23 | '#label' => elgg_echo('event_manager:edit:form:file'), 24 | 'name' => 'file', 25 | 'required' => true, 26 | ]); 27 | 28 | $footer = elgg_view_field([ 29 | '#type' => 'submit', 30 | 'text' => elgg_echo('upload'), 31 | ]); 32 | 33 | elgg_set_form_footer($footer); 34 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/registration/confirm.php: -------------------------------------------------------------------------------- 1 | elgg_echo('event_manager:registration:confirm:description', [$event->getDisplayName()]), 9 | ]); 10 | 11 | echo elgg_view('input/hidden', ['name' => 'event_guid', 'value' => $event->guid]); 12 | echo elgg_view('input/hidden', ['name' => 'user_guid', 'value' => $user->guid]); 13 | echo elgg_view('input/hidden', ['name' => 'code', 'value' => $code]); 14 | 15 | $footer = elgg_view('input/submit', ['text' => elgg_echo('confirm')]); 16 | $footer .= elgg_view('output/url', [ 17 | 'text' => elgg_echo('delete'), 18 | 'confirm' => elgg_echo('event_manager:registration:confirm:delete'), 19 | 'href' => elgg_generate_action_url('event_manager/event/rsvp', [ 20 | 'guid' => $event->guid, 21 | 'user' => $user->guid, 22 | 'code' => $code, 23 | 'type' => EVENT_MANAGER_RELATION_UNDO, 24 | 'forward_url' => $event->getURL(), 25 | ]), 26 | 'class' => 'float-alt elgg-button elgg-button-delete', 27 | ]); 28 | 29 | elgg_set_form_footer($footer); 30 | -------------------------------------------------------------------------------- /views/default/forms/event_manager/registrationform/question.php: -------------------------------------------------------------------------------- 1 | guid; 14 | $title = $question->title; 15 | $fieldtype = $question->fieldtype; 16 | $required = $question->required; 17 | $fieldoptions = $question->fieldoptions; 18 | } 19 | 20 | $disabled = empty($guid); 21 | 22 | $fields = [ 23 | [ 24 | '#type' => 'hidden', 25 | 'name' => "questions[{$guid}][guid]", 26 | 'value' => $guid, 27 | 'disabled' => $disabled, 28 | ], 29 | [ 30 | '#type' => 'text', 31 | '#label' => elgg_echo('event_manager:editregistration:question'), 32 | '#class' => 'mbs', 33 | 'name' => "questions[{$guid}][questiontext]", 34 | 'value' => $title, 35 | 'placeholder' => elgg_echo('event_manager:registrationform:editquestion:text:placeholder'), 36 | 'disabled' => $disabled, 37 | ], 38 | [ 39 | '#type' => 'checkbox', 40 | '#label' => elgg_echo('event_manager:registrationform:editquestion:required'), 41 | 'name' => "questions[{$guid}][required]", 42 | 'checked' => (bool) $required, 43 | 'switch' => true, 44 | 'default' => 0, 45 | 'value' => 1, 46 | 'disabled' => $disabled, 47 | ], 48 | [ 49 | '#type' => 'fieldset', 50 | 'align' => 'horizontal', 51 | 'fields' => [ 52 | [ 53 | '#type' => 'select', 54 | '#label' => elgg_echo('event_manager:editregistration:fieldtype'), 55 | '#class' => 'man', 56 | 'class' => 'event_manager_registrationform_question_fieldtype', 57 | 'value' => $fieldtype, 58 | 'name' => "questions[{$guid}][fieldtype]", 59 | 'options_values' => [ 60 | 'Textfield' => elgg_echo('event_manager:editregistration:fieldtype:text'), 61 | 'Textarea' => elgg_echo('event_manager:editregistration:fieldtype:longtext'), 62 | 'Dropdown' => elgg_echo('event_manager:editregistration:fieldtype:select'), 63 | 'Radiobutton' => elgg_echo('event_manager:editregistration:fieldtype:radio'), 64 | ], 65 | 'disabled' => $disabled, 66 | ], 67 | [ 68 | '#type' => 'text', 69 | '#label' => elgg_echo('event_manager:editregistration:fieldoptions'), 70 | '#class' => [ 71 | 'event_manager_registrationform_select_options', 72 | 'elgg-field-stretch', 73 | in_array($fieldtype, ['Radiobutton', 'Dropdown']) ? null : 'hidden', 74 | ], 75 | 'name' => "questions[{$guid}][fieldoptions]", 76 | 'value' => $fieldoptions, 77 | 'placeholder' => elgg_echo('event_manager:editregistration:commasepatared'), 78 | 'disabled' => $disabled, 79 | ], 80 | ], 81 | ], 82 | ]; 83 | 84 | $form_body = ''; 85 | foreach ($fields as $field) { 86 | $form_body .= elgg_view_field($field); 87 | } 88 | 89 | $delete_question = elgg_view('output/url', [ 90 | 'icon' => 'delete', 91 | 'text' => false, 92 | 'href' => false, 93 | 'class' => 'event_manager_questions_delete', 94 | 'confirm' => elgg_echo('deleteconfirm'), 95 | 'is_action' => false, 96 | ]); 97 | 98 | echo elgg_view_image_block(elgg_view_icon('arrows-alt', ['class' => 'link']), $form_body, ['image_alt' => $delete_question]); 99 | -------------------------------------------------------------------------------- /views/default/groups/profile/module/event_manager.php: -------------------------------------------------------------------------------- 1 | elgg_echo('event_manager:group'), 8 | 'entity_type' => 'object', 9 | 'entity_subtype' => 'event', 10 | ]; 11 | $params = $params + $vars; 12 | 13 | echo elgg_view('groups/profile/module', $params); 14 | -------------------------------------------------------------------------------- /views/default/icon/object/event.php: -------------------------------------------------------------------------------- 1 | getStartTimestamp(); 11 | 12 | $event_end = $entity->getEndTimestamp(); 13 | if (($event_start < time()) && ($event_end > time())) { 14 | // show the running date 15 | $event_start = time(); 16 | } 17 | 18 | $month = elgg_format_element('div', ['class' => 'event_manager_event_list_icon_month'], strtoupper(trim(elgg_echo('date:month:short:' . date('m', $event_start), [''])))); 19 | $day = elgg_format_element('div', ['class' => 'event_manager_event_list_icon_day'], date('d', $event_start)); 20 | 21 | echo elgg_format_element('div', [ 22 | 'class' => 'event_manager_event_list_icon', 23 | 'title' => event_manager_format_date($event_start), 24 | ], $month . $day); 25 | -------------------------------------------------------------------------------- /views/default/icon/object/eventregistration.php: -------------------------------------------------------------------------------- 1 | getOwnerEntity(); 17 | 18 | $name = htmlspecialchars($entity->getDisplayName(), ENT_QUOTES, 'UTF-8', false); 19 | $username = $entity->username; 20 | 21 | $wrapper_class = [ 22 | 'elgg-avatar', 23 | "elgg-avatar-{$size}", 24 | ]; 25 | $wrapper_class = elgg_extract_class($vars, $wrapper_class); 26 | 27 | $icon = elgg_view('output/img', [ 28 | 'src' => $entity->getIconURL($size), 29 | 'alt' => $name, 30 | 'title' => $name, 31 | 'class' => elgg_extract_class($vars, [], 'img_class'), 32 | ]); 33 | 34 | $content = elgg_format_element('a', [], $icon); 35 | 36 | echo elgg_format_element('div', ['class' => $wrapper_class], $content); 37 | -------------------------------------------------------------------------------- /views/default/object/event.php: -------------------------------------------------------------------------------- 1 | owner_guid === elgg_get_logged_in_user_guid()) { 9 | $vars['class'] = elgg_extract_class($vars, 'event-manager-event-owner'); 10 | } elseif ($event->getRelationshipByUser()) { 11 | $vars['class'] = elgg_extract_class($vars, 'event-manager-event-attending'); 12 | } 13 | 14 | if (elgg_extract('full_view', $vars)) { 15 | echo elgg_view('event_manager/event/view', $vars); 16 | return; 17 | } 18 | 19 | $content = ''; 20 | 21 | $excerpt = $event->getExcerpt(); 22 | if ($excerpt) { 23 | $content .= elgg_format_element('div', [], $excerpt); 24 | } 25 | 26 | $content .= elgg_view('event_manager/event/rsvp', $vars); 27 | 28 | $imprint = elgg_extract('imprint', $vars, []); 29 | 30 | $location = $event->location; 31 | if ($location) { 32 | $imprint['location'] = [ 33 | 'icon_name' => 'map-marker-alt', 34 | 'content' => elgg_view_url($event->getURL() . '#location', $location), 35 | ]; 36 | } 37 | 38 | $attendee_count = $event->countAttendees(); 39 | if ($attendee_count > 0 || $event->openForRegistration()) { 40 | $imprint['attendee_count'] = [ 41 | 'icon_name' => 'users', 42 | 'content' => elgg_echo('event_manager:event:relationship:event_attending:entity_menu', [$attendee_count]), 43 | ]; 44 | } 45 | 46 | $params = [ 47 | 'entity' => $event, 48 | 'content' => $content, 49 | 'imprint' => $imprint, 50 | 'time' => false, 51 | 'icon' => elgg_view_entity_icon($event, 'date'), 52 | ]; 53 | 54 | $params = $params + $vars; 55 | 56 | echo elgg_view('object/elements/summary', $params); 57 | -------------------------------------------------------------------------------- /views/default/object/eventregistration.php: -------------------------------------------------------------------------------- 1 | $entity->getDisplayName(), 15 | 'icon_entity' => $entity, 16 | 'subtitle' => false, 17 | ]; 18 | $params = $params + $vars; 19 | 20 | echo elgg_view('object/elements/summary', $params); 21 | -------------------------------------------------------------------------------- /views/default/plugins/event_manager/settings.mjs: -------------------------------------------------------------------------------- 1 | import 'jquery'; 2 | 3 | $(document).on('change', 'select[name="params[maps_provider]"]', function() { 4 | var selected_value = $(this).val(); 5 | 6 | $('.event-manager-maps-provider').hide(); 7 | $('.event-manager-maps-provider-' + selected_value).show(); 8 | }); 9 | -------------------------------------------------------------------------------- /views/default/resources/event/add.php: -------------------------------------------------------------------------------- 1 | canWriteToContainer(0, 'object', 'subtype')) { 8 | throw new EntityPermissionsException(); 9 | } 10 | 11 | elgg_push_collection_breadcrumbs('object', 'event', $page_owner); 12 | 13 | echo elgg_view_page(elgg_echo('event_manager:edit:title'), [ 14 | 'content' => elgg_view_form('event_manager/event/edit', [ 15 | 'id' => 'event_manager_event_edit', 16 | 'name' => 'event_manager_event_edit', 17 | ]), 18 | 'filter_id' => 'event/edit', 19 | ]); 20 | -------------------------------------------------------------------------------- /views/default/resources/event/attendees.php: -------------------------------------------------------------------------------- 1 | getSupportedRelationships(); 13 | if (!array_key_exists($relationship, $valid_relationships)) { 14 | $exception = new BadRequestException(); 15 | $exception->setRedirectUrl(elgg_generate_url('collection:object:event:attendees', [ 16 | 'guid' => $entity->guid, 17 | 'relationship' => EVENT_MANAGER_RELATION_ATTENDING, 18 | ])); 19 | throw $exception; 20 | } 21 | 22 | $rel_text = $valid_relationships[$relationship]; 23 | 24 | elgg_set_page_owner_guid($entity->container_guid); 25 | 26 | elgg_push_entity_breadcrumbs($entity); 27 | 28 | if ($entity->canEdit()) { 29 | elgg_register_menu_item('title', [ 30 | 'name' => 'export', 31 | 'title' => elgg_echo('event_manager:event:exportattendees'), 32 | 'icon' => 'download', 33 | 'text' => elgg_echo('export'), 34 | 'href' => elgg_generate_action_url('event_manager/attendees/export', [ 35 | 'guid' => $entity->guid, 36 | 'rel' => $relationship, 37 | ]), 38 | 'link_class' => [ 39 | 'elgg-button', 40 | 'elgg-button-action', 41 | ], 42 | ]); 43 | } 44 | 45 | // search form 46 | $content = elgg_view_form('event_manager/event/attendees', [ 47 | 'action' => elgg_generate_url('collection:object:event:attendees', [ 48 | 'guid' => $entity->guid, 49 | 'relationship' => $relationship, 50 | ]), 51 | 'method' => 'GET', 52 | 'disable_security' => true, 53 | 'prevent_double_submit' => false, 54 | ], [ 55 | 'entity' => $entity, 56 | 'relationship' => $relationship, 57 | ]); 58 | 59 | // attendees listing 60 | $content .= elgg_view('event_manager/event/attendees_list', [ 61 | 'entity' => $entity, 62 | 'relationship' => $relationship, 63 | ]); 64 | 65 | echo elgg_view_page(elgg_echo('event_manager:event:attendees:title', [$entity->getDisplayName(), $rel_text]), [ 66 | 'content' => $content, 67 | 'filter_id' => 'event/attendees', 68 | 'filter_value' => $relationship, 69 | 'event_entity' => $entity, 70 | ]); 71 | -------------------------------------------------------------------------------- /views/default/resources/event/attending.php: -------------------------------------------------------------------------------- 1 | guid === elgg_get_logged_in_user_guid()) ? 'attending' : ''; 8 | 9 | $list_type = get_input('list_type', 'list'); 10 | 11 | $content = elgg_view("event_manager/listing/{$list_type}", [ 12 | 'options' => [ 13 | 'metadata_name_value_pairs' => [ 14 | [ 15 | 'name' => 'event_start', 16 | 'value' => time(), 17 | 'operand' => '>=', 18 | ], 19 | ], 20 | 'sort_by' => [ 21 | 'property' => 'event_start', 22 | 'direction' => 'ASC', 23 | 'signed' => true, 24 | ], 25 | 'relationship' => EVENT_MANAGER_RELATION_ATTENDING, 26 | 'relationship_guid' => $user->guid, 27 | 'inverse_relationship' => true, 28 | ], 29 | 'resource' => 'attending', 30 | 'page_owner' => $user, 31 | ]); 32 | 33 | echo elgg_view_page(elgg_echo('event_manager:attending:title', [$user->getDisplayName()]), [ 34 | 'content' => $content, 35 | 'filter_value' => $filter_value, 36 | 'filter_id' => 'events', 37 | ]); 38 | -------------------------------------------------------------------------------- /views/default/resources/event/edit.php: -------------------------------------------------------------------------------- 1 | container_guid); 10 | 11 | elgg_push_entity_breadcrumbs($event); 12 | 13 | elgg_register_menu_item('title', [ 14 | 'name' => 'copy', 15 | 'icon' => 'clone-regular', 16 | 'href' => 'ajax/form/event_manager/event/copy?guid=' . $event->guid, 17 | 'text' => elgg_echo('event_manager:menu:copy'), 18 | 'link_class' => 'elgg-lightbox elgg-button elgg-button-action', 19 | ]); 20 | 21 | echo elgg_view_page(elgg_echo('event_manager:edit:title'), [ 22 | 'content' => elgg_view_form('event_manager/event/edit', [ 23 | 'id' => 'event_manager_event_edit', 24 | 'name' => 'event_manager_event_edit', 25 | ], [ 26 | 'entity' => $event, 27 | ]), 28 | 'filter_id' => 'event/edit', 29 | ]); 30 | -------------------------------------------------------------------------------- /views/default/resources/event/edit_program.php: -------------------------------------------------------------------------------- 1 | 'event', 11 | 'href' => $event->getURL(), 12 | 'icon_alt' => 'arrow-right', 13 | 'text' => elgg_echo('event_manager:edit_program:continue'), 14 | 'class' => ['elgg-button', 'elgg-button-action'], 15 | ]); 16 | 17 | elgg_set_page_owner_guid($event->getContainerGUID()); 18 | 19 | elgg_push_entity_breadcrumbs($event); 20 | 21 | $content = elgg_format_element('div', [], elgg_view('output/longtext', [ 22 | 'value' => elgg_echo('event_manager:edit_program:description'), 23 | 'class' => 'mbm', 24 | ])); 25 | 26 | $content .= elgg_view('event_manager/program/view', ['entity' => $event]); 27 | 28 | echo elgg_view_page(elgg_echo('event_manager:edit_program:title'), [ 29 | 'content' => $content, 30 | 'filter' => false, 31 | ]); 32 | -------------------------------------------------------------------------------- /views/default/resources/event/live.php: -------------------------------------------------------------------------------- 1 | guid, 'group'); 6 | elgg_group_tool_gatekeeper('event_manager'); 7 | 8 | elgg_push_collection_breadcrumbs('object', \Event::SUBTYPE, $page_owner); 9 | } else { 10 | $page_owner = null; 11 | elgg_set_page_owner_guid(0); 12 | } 13 | 14 | elgg_register_title_button('add', 'object', \Event::SUBTYPE); 15 | 16 | $list_type = get_input('list_type', 'list'); 17 | 18 | $content = elgg_view("event_manager/listing/{$list_type}", [ 19 | 'options' => [ 20 | 'container_guid' => ($page_owner instanceof ElggGroup) ? $page_owner->guid : ELGG_ENTITIES_ANY_VALUE, 21 | 'metadata_name_value_pairs' => [ 22 | [ 23 | 'name' => 'event_start', 24 | 'value' => time(), 25 | 'operand' => '<=', 26 | ], 27 | [ 28 | 'name' => 'event_end', 29 | 'value' => time(), 30 | 'operand' => '>=', 31 | ], 32 | ], 33 | 'sort_by' => [ 34 | 'property' => 'event_start', 35 | 'direction' => 'ASC', 36 | 'signed' => true, 37 | ], 38 | ], 39 | 'resource' => 'live', 40 | 'page_owner' => $page_owner, 41 | ]); 42 | 43 | echo elgg_view_page(elgg_echo('event_manager:list:live'), [ 44 | 'content' => $content, 45 | 'filter_id' => 'events', 46 | 'filter_value' => 'live', 47 | ]); 48 | -------------------------------------------------------------------------------- /views/default/resources/event/mail.php: -------------------------------------------------------------------------------- 1 | canEdit()) { 21 | throw new EntityPermissionsException(); 22 | } 23 | 24 | elgg_set_page_owner_guid($entity->container_guid); 25 | 26 | elgg_push_entity_breadcrumbs($entity); 27 | 28 | $form = new EventMail($entity); 29 | 30 | echo elgg_view_page(elgg_echo('event_manager:mail:title', [$entity->getDisplayName()]), [ 31 | 'content' => elgg_view_form('event_manager/event/mail', [], $form()), 32 | 'filter_id' => 'events/mail', 33 | 'filter_value' => 'mail', 34 | ]); 35 | -------------------------------------------------------------------------------- /views/default/resources/event/owner.php: -------------------------------------------------------------------------------- 1 | [ 13 | 'owner_guid' => $user->guid, 14 | ], 15 | 'resource' => 'owner', 16 | 'page_owner' => $user, 17 | ]); 18 | 19 | echo elgg_view_page(elgg_echo('event_manager:owner:title', [$user->getDisplayName()]), [ 20 | 'content' => $content, 21 | 'filter_value' => ($user->guid === elgg_get_logged_in_user_guid()) ? 'mine' : '', 22 | 'filter_id' => 'events', 23 | ]); 24 | -------------------------------------------------------------------------------- /views/default/resources/event/register.php: -------------------------------------------------------------------------------- 1 | getContainerGUID()); 13 | 14 | if ((!$event->registration_needed && elgg_is_logged_in()) || (!elgg_is_logged_in() && !$event->register_nologin)) { 15 | $exception = new BadRequestException(elgg_echo('event_manager:registration:message:registrationnotneeded')); 16 | $exception->setRedirectUrl($event->getURL()); 17 | throw $exception; 18 | } 19 | 20 | if (!elgg_is_logged_in()) { 21 | if (!$event->hasEventSpotsLeft() || !$event->hasSlotSpotsLeft()) { 22 | if ($event->waiting_list_enabled && $event->registration_needed && $event->openForRegistration()) { 23 | $exception = new HttpException(); 24 | $exception->setRedirectUrl(elgg_generate_url('collection:object:event:waitinglist', ['guid' => $guid])); 25 | throw $exception; 26 | } else { 27 | $exception = new BadRequestException(elgg_echo('event_manager:event:rsvp:nospotsleft')); 28 | $exception->setRedirectUrl(REFERRER); 29 | throw $exception; 30 | } 31 | } 32 | } 33 | 34 | if (!$event->openForRegistration()) { 35 | $exception = new BadRequestException(elgg_echo('event_manager:event:rsvp:registration_ended')); 36 | $exception->setRedirectUrl($event->getURL()); 37 | throw $exception; 38 | } 39 | 40 | $form_vars = ['id' => 'event_manager_event_register', 'name' => 'event_manager_event_register']; 41 | 42 | $form = elgg_view_form('event_manager/event/register', $form_vars, ['entity' => $event]); 43 | 44 | $title_text = elgg_echo('event_manager:registration:register:title'); 45 | 46 | elgg_push_entity_breadcrumbs($event); 47 | 48 | $title = $title_text . " '{$event->getDisplayName()}'"; 49 | 50 | echo elgg_view_page($title, [ 51 | 'content' => $form, 52 | 'filter' => false, 53 | ]); 54 | 55 | elgg_clear_sticky_form('event_register'); 56 | -------------------------------------------------------------------------------- /views/default/resources/event/unsubscribe/confirm.php: -------------------------------------------------------------------------------- 1 | getOwnerEntity(); 12 | $verify_code = event_manager_create_unsubscribe_code($registration, $event); 13 | 14 | if (empty($code) || ($code !== $verify_code)) { 15 | $exception = new BadRequestException(elgg_echo('event_manager:unsubscribe_confirm:error:code')); 16 | $exception->setRedirectUrl(REFERRER); 17 | throw $exception; 18 | } 19 | 20 | elgg_set_page_owner_guid($event->getContainerGUID()); 21 | 22 | elgg_push_entity_breadcrumbs($event); 23 | 24 | $body_vars = [ 25 | 'entity' => $event, 26 | 'registration' => $registration, 27 | 'code' => $code, 28 | ]; 29 | $body = elgg_view_form('event_manager/event/unsubscribe_confirm', [], $body_vars); 30 | 31 | echo elgg_view_page(elgg_echo('event_manager:unsubscribe_confirm:title', [$event->getDisplayName()]), [ 32 | 'content' => $body, 33 | 'filter' => false, 34 | ]); 35 | -------------------------------------------------------------------------------- /views/default/resources/event/unsubscribe/request.php: -------------------------------------------------------------------------------- 1 | register_nologin) { 11 | $exception = new BadRequestException(); 12 | $exception->setRedirectUrl(REFERRER); 13 | throw $exception; 14 | } 15 | 16 | elgg_set_page_owner_guid($entity->getContainerGUID()); 17 | 18 | elgg_push_entity_breadcrumbs($entity); 19 | 20 | $body = elgg_view_form('event_manager/event/unsubscribe', [], ['entity' => $entity]); 21 | 22 | echo elgg_view_page(elgg_echo('event_manager:unsubscribe:title', [$entity->getDisplayName()]), [ 23 | 'content' => $body, 24 | 'filter' => false, 25 | ]); 26 | -------------------------------------------------------------------------------- /views/default/resources/event/upcoming.php: -------------------------------------------------------------------------------- 1 | guid, 'group'); 6 | elgg_group_tool_gatekeeper('event_manager'); 7 | 8 | elgg_push_collection_breadcrumbs('object', \Event::SUBTYPE, $page_owner); 9 | } else { 10 | $page_owner = null; 11 | elgg_set_page_owner_guid(0); 12 | } 13 | 14 | elgg_register_title_button('add', 'object', \Event::SUBTYPE); 15 | 16 | $list_type = get_input('list_type', 'list'); 17 | 18 | $content = elgg_view("event_manager/listing/{$list_type}", [ 19 | 'options' => [ 20 | 'container_guid' => ($page_owner instanceof \ElggGroup) ? $page_owner->guid : ELGG_ENTITIES_ANY_VALUE, 21 | 'metadata_name_value_pairs' => [ 22 | [ 23 | 'name' => 'event_start', 24 | 'value' => time(), 25 | 'operand' => '>=', 26 | ], 27 | ], 28 | 'sort_by' => [ 29 | 'property' => 'event_start', 30 | 'direction' => 'ASC', 31 | 'signed' => true, 32 | ], 33 | ], 34 | 'resource' => 'upcoming', 35 | 'page_owner' => $page_owner, 36 | ]); 37 | 38 | echo elgg_view_page(elgg_echo('event_manager:list:upcoming'), [ 39 | 'content' => $content, 40 | 'filter_id' => 'events', 41 | 'filter_value' => 'upcoming', 42 | ]); 43 | -------------------------------------------------------------------------------- /views/default/resources/event/upload.php: -------------------------------------------------------------------------------- 1 | 'event_manager_event_upload', 13 | 'name' => 'event_manager_event_upload', 14 | 'action' => 'action/event_manager/event/upload', 15 | 'enctype' => 'multipart/form-data', 16 | ]; 17 | 18 | $content = elgg_view_form('event_manager/event/upload_file', $form_vars, ['entity' => $event]); 19 | 20 | $content .= elgg_view('event_manager/event/files', ['entity' => $event]); 21 | 22 | echo elgg_view_page(elgg_echo('event_manager:edit:upload:title'), [ 23 | 'content' => $content, 24 | 'filter' => false, 25 | ]); 26 | -------------------------------------------------------------------------------- /views/default/resources/event/view.php: -------------------------------------------------------------------------------- 1 | getRelationshipByUser()))) { 11 | elgg_register_menu_item('title', [ 12 | 'name' => 'addthisevent', 13 | 'href' => false, 14 | 'icon' => 'calendar', 15 | 'class' => 'elgg-button elgg-button-action', 16 | 'text' => elgg_view('event_manager/addthisevent/button', ['entity' => $event]), 17 | ]); 18 | } 19 | 20 | elgg_push_entity_breadcrumbs($event); 21 | 22 | echo elgg_view_page($event->getDisplayName(), [ 23 | 'content' => elgg_view_entity($event), 24 | 'sidebar' => elgg_view('event_manager/event/sidebar', ['entity' => $event]), 25 | 'entity' => $event, 26 | 'filter_id' => 'event/view', 27 | ]); 28 | -------------------------------------------------------------------------------- /views/default/resources/event/waitinglist.php: -------------------------------------------------------------------------------- 1 | getContainerGUID()); 12 | 13 | if (!$event->waiting_list_enabled) { 14 | $exception = new HttpException(); 15 | $exception->setRedirectUrl($event->getURL()); 16 | throw $exception; 17 | } 18 | 19 | if (!$event->openForRegistration()) { 20 | $exception = new HttpException(elgg_echo('event_manager:event:rsvp:registration_ended')); 21 | $exception->setRedirectUrl($event->getURL()); 22 | throw $exception; 23 | } 24 | 25 | elgg_push_entity_breadcrumbs($event); 26 | 27 | echo elgg_view_page(elgg_echo('event_manager:event:rsvp:waiting_list'), [ 28 | 'content' => elgg_view_form('event_manager/event/register', [ 29 | 'id' => 'event_manager_event_register', 30 | 'name' => 'event_manager_event_register', 31 | ], [ 32 | 'entity' => $event, 33 | 'register_type' => 'waitinglist', 34 | ]), 35 | 'filter' => false, 36 | ]); 37 | -------------------------------------------------------------------------------- /views/default/resources/eventregistration/completed.php: -------------------------------------------------------------------------------- 1 | setRedirectUrl(elgg_generate_url('collection:object:event:upcoming')); 19 | throw $exception; 20 | } 21 | 22 | elgg_set_page_owner_guid($event->getContainerGUID()); 23 | 24 | elgg_push_entity_breadcrumbs($event); 25 | 26 | echo elgg_view_page(elgg_echo('event_manager:registration:completed:title', [$event->getDisplayName()]), [ 27 | 'content' => elgg_view('event_manager/registration/completed', [ 28 | 'event' => $event, 29 | 'object' => $object, 30 | ]), 31 | 'filter' => false, 32 | ]); 33 | -------------------------------------------------------------------------------- /views/default/resources/eventregistration/confirm.php: -------------------------------------------------------------------------------- 1 | getRelationshipByUser($user_guid) !== EVENT_MANAGER_RELATION_ATTENDING_PENDING) { 24 | $exception = new HttpException(); 25 | $exception->setRedirectUrl($event->getURL()); 26 | throw $exception; 27 | } 28 | 29 | elgg_set_page_owner_guid($event->getContainerGUID()); 30 | 31 | elgg_push_entity_breadcrumbs($event); 32 | 33 | echo elgg_view_page(elgg_echo('event_manager:registration:confirm:title', [$event->getDisplayName()]), [ 34 | 'content' => elgg_view_form('event_manager/registration/confirm', [], [ 35 | 'event' => $event, 36 | 'user' => $user, 37 | 'code' => $code, 38 | ]), 39 | 'filter' => false, 40 | ]); 41 | -------------------------------------------------------------------------------- /views/default/resources/eventregistration/view.php: -------------------------------------------------------------------------------- 1 | getDisplayName()}'"; 15 | 16 | elgg_push_entity_breadcrumbs($event); 17 | 18 | if (!empty($key)) { 19 | // registration of a non logged in user 20 | 21 | $entity = get_entity($user_guid); 22 | if (empty($entity)) { 23 | $exception = new HttpException(); 24 | $exception->setRedirectUrl(elgg_generate_url('default:object:event')); 25 | throw $exception; 26 | } 27 | 28 | if (!elgg_build_hmac([$event->time_created, $user_guid])->matchesToken($key)) { 29 | $exception = new HttpException(); 30 | $exception->setRedirectUrl(elgg_generate_url('default:object:event')); 31 | throw $exception; 32 | } 33 | 34 | $output .= elgg_call(ELGG_IGNORE_ACCESS, function() use ($entity, $event) { 35 | 36 | $result = elgg_view('event_manager/event/pdf', ['entity' => $event]); 37 | $result .= elgg_view('event_manager/registration/user_data', [ 38 | 'event' => $event, 39 | 'entity' => $entity, 40 | ]); 41 | 42 | if ($event->with_program) { 43 | $result .= $event->getProgramData($entity->guid); 44 | } 45 | 46 | return $result; 47 | }); 48 | } else { 49 | elgg_gatekeeper(); 50 | 51 | if (!$event->canEdit() && ($user_guid !== elgg_get_logged_in_user_guid())) { 52 | $exception = new HttpException(); 53 | $exception->setRedirectUrl(elgg_generate_url('default:object:event')); 54 | throw $exception; 55 | } 56 | 57 | $output .= elgg_view('event_manager/event/pdf', ['entity' => $event]); 58 | $output .= elgg_view('event_manager/registration/user_data', [ 59 | 'event' => $event, 60 | 'entity' => elgg_get_logged_in_user_entity(), 61 | ]); 62 | 63 | if ($event->with_program) { 64 | $output .= $event->getProgramData($user_guid); 65 | } 66 | 67 | if ($user_guid === elgg_get_logged_in_user_guid()) { 68 | elgg_register_menu_item('title', [ 69 | 'name' => 'edityourregistration', 70 | 'icon' => 'edit', 71 | 'text' => elgg_echo('event_manager:registration:edityourregistration'), 72 | 'link_class' => 'elgg-button elgg-button-action', 73 | 'href' => elgg_generate_url('default:object:event:register', [ 74 | 'guid' => $event->guid, 75 | ]), 76 | ]); 77 | } 78 | } 79 | 80 | elgg_register_menu_item('title', [ 81 | 'name' => 'save_to_pdf', 82 | 'icon' => 'download', 83 | 'text' => elgg_echo('event_manager:registration:view:savetopdf'), 84 | 'link_class' => 'elgg-button elgg-button-action', 85 | 'href' => elgg_generate_action_url('event_manager/registration/pdf', [ 86 | 'k' => elgg_build_hmac([$event->time_created, $user_guid])->getToken(), 87 | 'guid' => $guid, 88 | 'u_g' => $user_guid, 89 | ]), 90 | ]); 91 | 92 | echo elgg_view_page($title_text, [ 93 | 'content' => $output, 94 | 'filter' => false, 95 | ]); 96 | -------------------------------------------------------------------------------- /views/default/river/event_relationship/create.php: -------------------------------------------------------------------------------- 1 | getSubjectEntity(); 6 | $event = $item->getObjectEntity(); 7 | 8 | $subject_url = elgg_view_entity_url($user); 9 | $event_url = elgg_view_entity_url($event); 10 | 11 | $relationtype = $event->getRelationshipByUser($user->guid); 12 | 13 | echo elgg_view('river/elements/layout', [ 14 | 'item' => $item, 15 | 'summary' => elgg_echo("event_manager:river:event_relationship:create:{$relationtype}", [$subject_url, $event_url]), 16 | 'metadata' => elgg_view_menu('river', [ 17 | 'item' => $item, 18 | 'prepare_dropdown' => true, 19 | ]), 20 | ]); 21 | -------------------------------------------------------------------------------- /views/default/widgets/events/content.php: -------------------------------------------------------------------------------- 1 | num_display; 7 | if ($num_display < 1) { 8 | $num_display = 5; 9 | } 10 | 11 | $event_options = [ 12 | 'type' => 'object', 13 | 'subtype' => 'event', 14 | 'limit' => $num_display, 15 | 'pagination' => false, 16 | 'metadata_name_value_pairs' => [ 17 | [ 18 | 'name' => 'event_start', 19 | 'value' => time(), 20 | 'operand' => '>=', 21 | ], 22 | ], 23 | 'sort_by' => [ 24 | 'property' => 'event_start', 25 | 'direction' => 'ASC', 26 | 'signed' => true, 27 | ], 28 | 'no_results' => elgg_echo('event_manager:list:noresults'), 29 | ]; 30 | 31 | $tag_filter = $widget->tag ? elgg_string_to_array($widget->tag)[0] : null; 32 | 33 | $more_link = elgg_generate_url('collection:object:event:upcoming', [ 34 | 'tag' => $tag_filter, 35 | ]); 36 | 37 | $group_route_name = 'collection:object:event:group'; 38 | 39 | if ($widget->event_status === 'live') { 40 | $event_options['metadata_name_value_pairs'] = [ 41 | [ 42 | 'name' => 'event_start', 43 | 'value' => time(), 44 | 'operand' => '<=', 45 | ], 46 | [ 47 | 'name' => 'event_end', 48 | 'value' => time(), 49 | 'operand' => '>=', 50 | ], 51 | ]; 52 | 53 | $more_link = elgg_generate_url('collection:object:event:live'); 54 | $group_route_name = 'collection:object:event:live'; 55 | } 56 | 57 | if (!empty($tag_filter)) { 58 | $event_options['metadata_name_value_pairs'][] = [ 59 | 'name' => 'tags', 60 | 'value' => $tag_filter, 61 | 'case_sensitive' => false, 62 | ]; 63 | } 64 | 65 | $owner = $widget->getOwnerEntity(); 66 | 67 | switch ($widget->context) { 68 | case 'groups': 69 | $event_options['container_guid'] = $owner->guid; 70 | $more_link = elgg_generate_url($group_route_name, [ 71 | 'guid' => $owner->guid, 72 | 'tag' => $tag_filter, 73 | ]); 74 | break; 75 | case 'profile': 76 | case 'dashboard': 77 | switch ($widget->type_to_show) { 78 | case 'owning': 79 | $event_options['owner_guid'] = $owner->guid; 80 | $more_link = elgg_generate_url('collection:object:event:owner', [ 81 | 'username' => $owner->username, 82 | 'tag' => $tag_filter, 83 | ]); 84 | break; 85 | case 'attending': 86 | $event_options['relationship'] = EVENT_MANAGER_RELATION_ATTENDING; 87 | $event_options['relationship_guid'] = $owner->guid; 88 | $event_options['inverse_relationship'] = true; 89 | 90 | $more_link = elgg_generate_url('collection:object:event:attending', [ 91 | 'username' => $owner->username, 92 | 'tag' => $tag_filter, 93 | ]); 94 | break; 95 | } 96 | break; 97 | } 98 | 99 | if ($widget->group_guid) { 100 | $event_options['container_guid'] = $widget->group_guid; 101 | } 102 | 103 | $more_text = elgg_echo('event_manager:list:more'); 104 | if (!empty($tag_filter)) { 105 | $more_text = elgg_echo('event_manager:list:more:with_tag', [$tag_filter]); 106 | } 107 | 108 | $event_options['widget_more'] = elgg_view_url($more_link, $more_text); 109 | 110 | echo elgg_list_entities($event_options); 111 | -------------------------------------------------------------------------------- /views/default/widgets/events/edit.php: -------------------------------------------------------------------------------- 1 | $widget, 8 | 'default' => 5, 9 | ]); 10 | 11 | if (in_array($widget->context, ['dashboard', 'profile'])) { 12 | echo elgg_view_field([ 13 | '#type' => 'select', 14 | '#label' => elgg_echo('widgets:events:showevents'), 15 | 'name' => 'params[type_to_show]', 16 | 'value' => $widget->type_to_show, 17 | 'options_values' => [ 18 | 'all' => elgg_echo('all'), 19 | 'owning' => elgg_echo('widgets:events:showevents:icreated'), 20 | 'attending' => elgg_echo('widgets:events:showevents:attendingto'), 21 | ], 22 | ]); 23 | } else { 24 | echo elgg_view_field([ 25 | '#type' => 'select', 26 | '#label' => elgg_echo('widgets:events:showevents:status'), 27 | 'name' => 'params[event_status]', 28 | 'value' => $widget->event_status, 29 | 'options_values' => [ 30 | 'upcoming' => elgg_echo('event_manager:list:upcoming'), 31 | 'live' => elgg_echo('event_manager:list:live'), 32 | ], 33 | ]); 34 | } 35 | 36 | echo elgg_view_field([ 37 | '#type' => 'text', 38 | '#label' => elgg_echo('widgets:events:tag_filter'), 39 | '#help' => elgg_echo('widgets:events:tag_filter:help'), 40 | 'name' => 'params[tag]', 41 | 'value' => $widget->tag, 42 | 43 | ]); 44 | 45 | if (!$widget->getOwnerEntity() instanceof \ElggSite) { 46 | // profile, dashboard, groups 47 | return; 48 | } 49 | 50 | echo elgg_view_field([ 51 | '#type' => 'grouppicker', 52 | '#label' => elgg_echo('widgets:events:group'), 53 | 'name' => 'params[group_guid]', 54 | 'values' => $widget->group_guid, 55 | 'limit' => 1, 56 | ]); 57 | -------------------------------------------------------------------------------- /views/default/widgets/highlighted_events/content.php: -------------------------------------------------------------------------------- 1 | event_guids; 6 | $show_past_events = (bool) $widget->show_past_events; 7 | 8 | if (empty($event_guids)) { 9 | echo elgg_echo('event_manager:list:noresults'); 10 | return; 11 | } 12 | 13 | $event_guids = (array) $event_guids; 14 | 15 | $events = []; 16 | 17 | $entities = elgg_get_entities([ 18 | 'type' => 'object', 19 | 'subtype' => \Event::SUBTYPE, 20 | 'guids' => $event_guids, 21 | 'limit' => false, 22 | ]); 23 | 24 | foreach ($entities as $event) { 25 | if (!$show_past_events) { 26 | if ($event->getEndTimestamp() < time()) { 27 | continue; 28 | } 29 | } 30 | 31 | $events[$event->guid] = $event; 32 | } 33 | 34 | $sorted_entities = []; 35 | foreach ($event_guids as $guid) { 36 | $entity = elgg_extract($guid, $events); 37 | if (!$entity) { 38 | continue; 39 | } 40 | 41 | $sorted_entities[] = $entity; 42 | } 43 | 44 | echo elgg_view_entity_list($sorted_entities, [ 45 | 'full_view' => false, 46 | 'pagination' => false, 47 | 'limit' => false, 48 | 'no_results' => elgg_echo('event_manager:list:noresults'), 49 | ]); 50 | -------------------------------------------------------------------------------- /views/default/widgets/highlighted_events/edit.php: -------------------------------------------------------------------------------- 1 | 'objectpicker', 8 | '#label' => elgg_echo('widgets:highlighted_events:edit:event_guids'), 9 | '#help' => elgg_echo('widgets:highlighted_events:description'), 10 | 'values' => $widget->event_guids, 11 | 'name' => 'params[event_guids]', 12 | 'subtype' => Event::SUBTYPE, 13 | 'sortable' => true, 14 | ]); 15 | 16 | echo elgg_view_field([ 17 | '#type' => 'checkbox', 18 | '#label' => elgg_echo('widgets:highlighted_events:edit:show_past_events'), 19 | 'name' => 'params[show_past_events]', 20 | 'value' => 1, 21 | 'checked' => (bool) $widget->show_past_events, 22 | 'switch' => true, 23 | ]); 24 | ?> 25 | 30 | --------------------------------------------------------------------------------