diff --git a/2020/include/functions.php b/2020/include/functions.php index 02f678e..d543016 100644 --- a/2020/include/functions.php +++ b/2020/include/functions.php @@ -1,95 +1,149 @@ . /** * Require a certain page from the template directory * * @param $name string page name (to be sanitized) * @param $args mixed arguments to be passed to the page scope */ function template_2020( $template_name, $template_args = [] ) { extract( $template_args, EXTR_SKIP ); return require ABSPATH . "/2020/template/$template_name.php"; } /** * Spawn a 2020 Event + * + * @param int $id Event ID */ function event_2020( $id ) { $event = ( new QueryEvent() ) ->whereEventID( $id ) ->select( Conference::fields() ) ->select( Event::fields() ) ->select( Room::fields() ) ->select( Track::fields() ) ->select( Room::fields() ) ->select( Chapter::fields() ) ->selectEventHasVideo() ->joinConference() - ->joinTrack( 'LEFT' ) - ->joinRoom( 'LEFT' ) + ->joinTrack( 'LEFT' ) + ->joinRoom( 'LEFT' ) ->joinChapter( 'LEFT' ) ->queryRow(); template_2020( 'event-brief', [ 'event' => $event, ] ); } /** * Print an icon for the 2020 website * * See https://materializecss.com/icons.html * * @param string $name Icon name * @param string $classes CSS classes * @return string */ function icon_2020( $name, $classes = null ) { $classes = $classes ? " $classes" : ''; return sprintf( '%s', $classes, $name ); } +/** + * Query some Event Users + * + * @param Event $event + * @param string $role Choose 'speaker' or 'moderator' + * @return Generator + */ function event_users_2020( $event, $role ) { $users = ( new QueryEventUser() ) ->joinUser() ->whereEvent( $event ) ->whereEventUserRole( $role ) ->orderByEventUserOrder() ->queryGenerator(); return $users; } +/** + * Link to an User of the itWikiCon 2020 + * + * @param User $user + * @return string HTML firm + */ function user_link_2020( $user ) { $name = esc_html( $user->getUserDisplayName() ); // print the Meta-wiki permalink if( $user->has( User::META_WIKI ) ) { $name = HTML::a( $user->getUserMetaWikiURL(), $name ); } return $name; } + +/** + * Print the URL to a Sharable + * + * @param Event $event + * @param Sharable $sharable + * @param string $text + * @return string HTML + */ +function sharable_edit( $event, $sharable = null, $text = null ) { + + $s = ''; + + // no editable, no party + if( $event->isEventEditable() ) { + + // displayed text + if( !$text ) { + $text = $sharable ? __( "modifica" ) : __( "aggiungi" ); + } + + // edit or creation URL + $url = $sharable + ? $sharable->getSharableEditURL() + : Sharable::editURL( [ + 'event_ID' => $event->getEventID(), + ] ); + + // create link + $s = HTML::a( $url, esc_html( $text ) ); + } + + // [edit] + if( $s ) { + $s = "[$s]"; + } + + return $s; +} diff --git a/2020/www/event.php b/2020/www/event.php index bb24212..b456e2d 100644 --- a/2020/www/event.php +++ b/2020/www/event.php @@ -1,335 +1,377 @@ . // load all the stuff require 'load.php'; // the Event we want to visit $event = null; // load this conference //$conference = ( new QueryConference() ) // ->whereConferenceUID( THIS_CONFERENCE_UID ) // ->queryRow(); // no conference no party //if( !$conference ) { // error_die( sprintf( // "missing conference %s", // THIS_CONFERENCE_UID // ) ); //} // event UID $event_slug = $_SERVER['PATH_INFO'] ?? null; if( !$event_slug ) { error_die( "missing event UID" ); } // remove unuseful slashes $event_slug = trim( $event_slug, _ ); // 123-something $event_slug_parts = explode( '-', $event_slug ); // no ID no party $event_ID = $event_slug_parts[0] ?? 0; $event_ID = (int) $event_ID; if( $event_ID ) { // Event $event = FullEvent::factory() ->whereEventID( $event_ID ) ->queryRow(); } else { // else use the complete Event slug // Event $event = FullEvent::factory() ->whereEventUID( $event_slug ) ->queryRow(); } // no Event no party if( !$event ) { error_die( "missing event $event_slug" ); } // inherit the Conference information from the Event object // the $conference is read from the website header $conference = $event; // check if this is the correct permalink if( site_page( $_SERVER['REQUEST_URI'], true ) !== $event->getEventStandardURL( true ) ) { http_redirect( $event->getEventStandardURL( true ) ); } // Event speakers $speakers = event_users_2020( $event, 'speaker' ); $moderators = event_users_2020( $event, 'moderator' ); // create an array of links $links_speaker = []; $links_moderator = []; foreach( $speakers as $user ) { $links_speaker[] = user_link_2020( $user ); } foreach( $moderators as $user ) { $links_moderator[] = user_link_2020( $user ); } // print the website header template_2020( 'header', [ 'conference' => $conference, 'title' => $event->getEventTitle(), 'url' => $event->getEventURL(), ] ); ?>

getEventTitle() ) ?> – getConferenceAcronym() ) ?>

.

factorySharebleByEvent() ->select( Sharable::fields() ) ->whereSharableIsRoot() ->selectSharableHasChildren() ->queryGenerator(); ?> valid() ): ?>
get( 'sharable_has_children' ) ) { $child_sharables = ( new QuerySharable() ) ->whereSharableParent( $sharable ) ->queryResults(); } + + $all_sharables = array_merge( [ $sharable ], $child_sharables ); ?>
isSharableDownloadable() ): ?> isSharableVideo() ): ?>

isEventPassed() ): ?>

getEventStart( 'd' ) ?> getEventStart( 'H:i' ) ?>–getEventEnd( 'H:i' ) ?> in stanza "getRoomName() ) ?>":

- - - + + + +

getSharablePath(), icon_2020('attachment', 'left') . esc_html( $child_sharable->getSharableMIME() ), null, null, 'target="_blank"' ), $sharable->getSharableLicense()->getLink() ) ?>

+ + + + + + + + + + + + +

+ getSharablePath(), + icon_2020('attachment', 'left') . + esc_html( $child_sharable->getSharableTitle() ), + null, + null, + 'target="_blank"' + ), + $sharable->getSharableLicense()->getLink() + ) ?> +

+ + + + + + +

getSharablePath(), icon_2020('share', 'left') . esc_html( $sharable->getSharableTitle( [ 'prop' => true ] ) ), null, null, 'target="_blank"' ), $sharable->getSharableLicense()->getLink() ) ?>

+ + + +
+ + hasEventAbstract() ): ?>

getEventAbstractHTML( [ 'p' => 'flow-text', ] ) ?>
isEventPassed() ): ?>

getEventStart( 'd' ) ?> getEventStart( 'H:i' ) ?>–getEventEnd( 'H:i' ) ?> in getRoomName() ) ?>.

play_arrow getRoomName() ) ?>

hasEventDescription() ): ?> getEventDescription() ?>

getEventExternalURL(), __( "Maggiori informazioni su Meta-wiki" ) ) ?>

factoryPreviousFullEvent( [ 'whatever-room' => true ] ) ->select( Event::fields() ) ->select( Conference::fields() ) ->limit( 2 ) ->queryResults(); // next talk in the same room $nexts = $event->factoryNextFullEvent( [ 'whatever-room' => true ] ) ->select( Event::fields() ) ->select( Conference::fields() ) ->limit( 2 ) ->queryResults(); // in the meanwhile $durings = $event->factoryMeanwhileFullEvent() ->limit( 2 ) ->queryResults(); ?>

navigate_before

getEventURL(), esc_html( $previous->getEventTitle() ) ) ?>

navigate_next

getEventURL(), esc_html( $next->getEventTitle() ) ) ?>

play_arrow

getEventURL(), esc_html( $during->getEventTitle() ) ) ?>

isEventEditable() ): ?>

getEventEditURL(), '[edit]' ) ?>

$conference, ] );