X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=mod%2Fevents.php;h=b0b54601fdf09f653b9d94d12935ec57bdeebb52;hb=020deefba613327a1d8875ba7f2cf9a750be42dd;hp=73328b959e31f2dbcd01113080952643cc9372a8;hpb=4c629e274bbf368e79e47133869c923a2e6dd4a9;p=friendica.git diff --git a/mod/events.php b/mod/events.php index 73328b959e..b0b54601fd 100644 --- a/mod/events.php +++ b/mod/events.php @@ -2,6 +2,7 @@ require_once('include/datetime.php'); require_once('include/event.php'); +require_once('include/items.php'); function events_post(&$a) { @@ -9,76 +10,324 @@ function events_post(&$a) { return; $event_id = ((x($_POST,'event_id')) ? intval($_POST['event_id']) : 0); + $cid = ((x($_POST,'cid')) ? intval($_POST['cid']) : 0); $uid = local_user(); - $start = strip_tags($_POST['start']); - $finish = strip_tags($_POST['finish']); - $desc = escape_tags($_POST['desc']); - $location = escape_tags($_POST['location']); - $type = 'event'; + $startyear = intval($_POST['startyear']); + $startmonth = intval($_POST['startmonth']); + $startday = intval($_POST['startday']); + $starthour = intval($_POST['starthour']); + $startminute = intval($_POST['startminute']); + + $finishyear = intval($_POST['finishyear']); + $finishmonth = intval($_POST['finishmonth']); + $finishday = intval($_POST['finishday']); + $finishhour = intval($_POST['finishhour']); + $finishminute = intval($_POST['finishminute']); + $adjust = intval($_POST['adjust']); + $nofinish = intval($_POST['nofinish']); - $str_group_allow = perms2str($_POST['group_allow']); - $str_contact_allow = perms2str($_POST['contact_allow']); - $str_group_deny = perms2str($_POST['group_deny']); - $str_contact_deny = perms2str($_POST['contact_deny']); - - - if($event_id) { - $r = q("UPDATE `event` SET - `edited` = '%s', - `start` = '%s', - `finish` = '%s', - `desc` = '%s', - `location` = '%s', - `type` = '%s', - `adjust` = %d, - `allow_cid` = '%s', - `allow_gid` = '%s', - `deny_cid` = '%s', - `deny_gid` = '%s' - WHERE `id` = %d AND `uid` = %d LIMIT 1", - - dbesc(datetime_convert()), - dbesc($start), - dbesc($finish), - dbesc($desc), - dbesc($location), - dbesc($type), - intval($adjust), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny), - intval($event_id), - intval($local_user()) - ); + $start = sprintf('%d-%d-%d %d:%d:0',$startyear,$startmonth,$startday,$starthour,$startminute); + if($nofinish) + $finish = '0000-00-00 00:00:00'; + else + $finish = sprintf('%d-%d-%d %d:%d:0',$finishyear,$finishmonth,$finishday,$finishhour,$finishminute); + + if($adjust) { + $start = datetime_convert(date_default_timezone_get(),'UTC',$start); + if(! $nofinish) + $finish = datetime_convert(date_default_timezone_get(),'UTC',$finish); } else { + $start = datetime_convert('UTC','UTC',$start); + if(! $nofinish) + $finish = datetime_convert('UTC','UTC',$finish); + } - $uri = item_new_uri($a->get_hostname(),local_user()); - $r = q("INSERT INTO `event` ( `uid`,`uri`,`created`,`edited`,`start`,`finish`,`desc`,`location`,`type`, - `adjust`,`allow_cid`,`allow_gid`,`deny_cid`,`deny_gid`) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s', '%s' ) ", - intval(local_user()), + $desc = escape_tags(trim($_POST['desc'])); + $location = escape_tags(trim($_POST['location'])); + $type = 'event'; + + if((! $desc) || (! $start)) { + notice('Event description and start time are required.'); + goaway($a->get_baseurl() . '/events/new'); + } + + $share = ((intval($_POST['share'])) ? intval($_POST['share']) : 0); + + if($share) { + $str_group_allow = perms2str($_POST['group_allow']); + $str_contact_allow = perms2str($_POST['contact_allow']); + $str_group_deny = perms2str($_POST['group_deny']); + $str_contact_deny = perms2str($_POST['contact_deny']); + } + else { + $str_contact_allow = '<' . local_user() . '>'; + $str_group_allow = $str_contact_deny = $str_group_deny = ''; + } + + + $datarray = array(); + $datarray['start'] = $start; + $datarray['finish'] = $finish; + $datarray['desc'] = $desc; + $datarray['location'] = $location; + $datarray['type'] = $type; + $datarray['adjust'] = $adjust; + $datarray['nofinish'] = $nofinish; + $datarray['uid'] = $uid; + $datarray['cid'] = $cid; + $datarray['allow_cid'] = $str_contact_allow; + $datarray['allow_gid'] = $str_group_allow; + $datarray['deny_cid'] = $str_contact_deny; + $datarray['deny_gid'] = $str_group_deny; + $datarray['id'] = $event_id; + $datarray['created'] = $created; + $datarray['edited'] = $edited; + + $item_id = event_store($datarray); + + if(! $cid) + proc_run('php',"include/notifier.php","event","$item_id"); + +} + + + +function events_content(&$a) { + + if(! local_user()) { + notice( t('Permission denied.') . EOL); + return; + } + + $o =""; + // tabs + $tpl = get_markup_template('profile_tabs.tpl'); + $o .= replace_macros($tpl,array( + '$url' => $a->get_baseurl() . '/profile/' . $a->user['nickname'], + '$phototab' => $a->get_baseurl() . '/photos/' . $a->user['nickname'], + '$status' => t('Status'), + '$profile' => t('Profile'), + '$photos' => t('Photos'), + '$events' => t('Events') , + '$notes' => t('Personal Notes'), + '$activetab' => "events", + )); + + $o .= '

' . t('Events') . '

'; + + + $mode = 'view'; + $y = 0; + $m = 0; + + if($a->argc > 1) { + if($a->argc > 2 && $a->argv[1] == 'event') { + $mode = 'edit'; + $event_id = intval($a->argv[2]); + } + if($a->argv[1] === 'new') { + $mode = 'new'; + $event_id = 0; + } + if($a->argc > 2 && intval($a->argv[1]) && intval($a->argv[2])) { + $mode = 'view'; + $y = intval($a->argv[1]); + $m = intval($a->argv[2]); + } + } + + if($mode == 'view') { + $thisyear = datetime_convert('UTC',date_default_timezone_get(),'now','Y'); + $thismonth = datetime_convert('UTC',date_default_timezone_get(),'now','m'); + if(! $y) + $y = intval($thisyear); + if(! $m) + $m = intval($thismonth); + + // Put some limits on dates. The PHP date functions don't seem to do so well before 1900. + // An upper limit was chosen to keep search engines from exploring links millions of years in the future. + + if($y < 1901) + $y = 1900; + if($y > 2099) + $y = 2100; + + $nextyear = $y; + $nextmonth = $m + 1; + if($nextmonth > 12) { + $nextmonth = 1; + $nextyear ++; + } - dbesc(datetime_convert()), - dbesc(datetime_convert()), + $prevyear = $y; + if($m > 1) + $prevmonth = $m - 1; + else { + $prevmonth = 12; + $prevyear --; + } + + + $dim = get_dim($y,$m); + $start = sprintf('%d-%d-%d %d:%d:%d',$y,$m,1,0,0,0); + $finish = sprintf('%d-%d-%d %d:%d:%d',$y,$m,$dim,23,59,59); + + $start = datetime_convert('UTC','UTC',$start); + $finish = datetime_convert('UTC','UTC',$finish); + + $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start); + $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish); + + + $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink`, + `item`.`author-name`, `item`.`author-avatar`, `item`.`author-link` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` + WHERE `event`.`uid` = %d + AND (( `adjust` = 0 AND `start` >= '%s' AND `start` <= '%s' ) + OR ( `adjust` = 1 AND `start` >= '%s' AND `start` <= '%s' )) ", + intval(local_user()), dbesc($start), dbesc($finish), - dbesc($desc), - dbesc($location), - dbesc($type), - intval($adjust), - dbesc($str_contact_allow), - dbesc($str_group_allow), - dbesc($str_contact_deny), - dbesc($str_group_deny) + dbesc($adjust_start), + dbesc($adjust_finish) + ); + + $links = array(); + + if(count($r)) { + $r = sort_by_date($r); + foreach($r as $rr) { + $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'j') : datetime_convert('UTC','UTC',$rr['start'],'j')); + if(! x($links,$j)) + $links[$j] = $a->get_baseurl() . '/' . $a->cmd . '#link-' . $j; + } + } + + + $o .= ''; + $o .= '
'; + $o .= ''; + $o .= cal($y,$m,$links, ' eventcal'); + + $o .= ''; + $o .= '
'; + $o .= '
'; + + + + $last_date = ''; + $fmt = t('l, F j'); + + if(count($r)) { + $r = sort_by_date($r); + foreach($r as $rr) { + $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'j') : datetime_convert('UTC','UTC',$rr['start'],'j')); + $d = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], $fmt) : datetime_convert('UTC','UTC',$rr['start'],$fmt)); + $d = day_translate($d); + if($d !== $last_date) + $o .= '
' . $d . '
'; + $last_date = $d; + $o .= format_event_html($rr); + $o .= ((! $rr['cid']) ? '' : ''); + if($rr['plink']) + $o .= ''; + + $o .= '
'; + + } + } + return $o; + } + + if($mode === 'edit' && $event_id) { + $r = q("SELECT * FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($event_id), + intval(local_user()) ); + if(count($r)) + $orig_event = $r[0]; } -} + if($mode === 'edit' || $mode === 'new') { + + $n_checked = ((x($orig_event) && $orig_event['nofinish']) ? ' checked="checked" ' : ''); + $a_checked = ((x($orig_event) && $orig_event['adjust']) ? ' checked="checked" ' : ''); + $d_orig = ((x($orig_event)) ? $orig_event['desc'] : ''); + $l_orig = ((x($orig_event)) ? $orig_event['location'] : ''); + $eid = ((x($orig_event)) ? $orig_event['id'] : 0); + $cid = ((x($orig_event)) ? $orig_event['cid'] : 0); + $uri = ((x($orig_event)) ? $orig_event['uri'] : ''); + + + if(! x($orig_event)) + $sh_checked = ''; + else + $sh_checked = (($orig_event['allow_cid'] === '<' . local_user() . '>' && (! $orig_event['allow_gid']) && (! $orig_event['deny_cid']) && (! $orig_event['deny_gid'])) ? '' : ' checked="checked" ' ); + + if($cid) + $sh_checked .= ' disabled="disabled" '; + + $htpl = get_markup_template('event_head.tpl'); + $a->page['htmlhead'] .= replace_macros($htpl,array('$baseurl' => $a->get_baseurl())); + + $tpl = get_markup_template('event_form.tpl'); + + $sdt = ((x($orig_event)) ? $orig_event['start'] : 'now'); + $fdt = ((x($orig_event)) ? $orig_event['finish'] : 'now'); + + $tz = ((x($orig_event) && $orig_event['adjust']) ? date_default_timezone_get() : 'UTC'); + + + $syear = datetime_convert('UTC', $tz, $sdt, 'Y'); + $smonth = datetime_convert('UTC', $tz, $sdt, 'm'); + $sday = datetime_convert('UTC', $tz, $sdt, 'd'); + $shour = ((x($orig_event)) ? datetime_convert('UTC', $tz, $sdt, 'H') : 0); + $sminute = ((x($orig_event)) ? datetime_convert('UTC', $tz, $sdt, 'i') : 0); + + $fyear = datetime_convert('UTC', $tz, $fdt, 'Y'); + $fmonth = datetime_convert('UTC', $tz, $fdt, 'm'); + $fday = datetime_convert('UTC', $tz, $fdt, 'd'); + + $fhour = ((x($orig_event)) ? datetime_convert('UTC', $tz, $fdt, 'H') : 0); + $fminute = ((x($orig_event)) ? datetime_convert('UTC', $tz, $fdt, 'i') : 0); + + + require_once('include/acl_selectors.php'); + + $o .= replace_macros($tpl,array( + '$post' => $a->get_baseurl() . '/events', + '$eid' => $eid, + '$cid' => $cid, + '$uri' => $uri, + '$e_text' => t('Event details'), + '$e_desc' => t('Format is year-month-day hour:minute. Starting date and Description are required.'), + '$s_text' => t('Event Starts:') . ' * ', + '$s_dsel' => datesel('start',$syear+5,$syear,false,$syear,$smonth,$sday), + '$s_tsel' => timesel('start',$shour,$sminute), + '$n_text' => t('Finish date/time is not known or not relevant'), + '$n_checked' => $n_checked, + '$f_text' => t('Event Finishes:'), + '$f_dsel' => datesel('finish',$fyear+5,$fyear,false,$fyear,$fmonth,$fday), + '$f_tsel' => timesel('finish',$fhour,$fminute), + '$a_text' => t('Adjust for viewer timezone'), + '$a_checked' => $a_checked, + '$d_text' => t('Description:') . ' *', + '$d_orig' => $d_orig, + '$l_text' => t('Location:'), + '$l_orig' => $l_orig, + '$sh_text' => t('Share this event'), + '$sh_checked' => $sh_checked, + '$acl' => (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user),false)), + '$submit' => t('Submit') + + )); + + return $o; + } +}