diff options
-rw-r--r-- | addon/sniper/sniper.php | 6 | ||||
-rw-r--r-- | boot.php | 2 | ||||
-rw-r--r-- | include/bbcode.php | 1 | ||||
-rw-r--r-- | include/conversation.php | 25 | ||||
-rw-r--r-- | include/event.php | 50 | ||||
-rw-r--r-- | include/html2bbcode.php | 2 | ||||
-rw-r--r-- | include/items.php | 126 | ||||
-rw-r--r-- | include/main.js | 20 | ||||
-rw-r--r-- | mod/dfrn_notify.php | 6 | ||||
-rw-r--r-- | mod/events.php | 140 | ||||
-rw-r--r-- | mod/item.php | 111 | ||||
-rw-r--r-- | mod/photos.php | 2 | ||||
-rw-r--r-- | mod/profile.php | 3 | ||||
-rw-r--r-- | view/event_form.tpl | 4 | ||||
-rw-r--r-- | view/jot-header.tpl | 16 | ||||
-rw-r--r-- | view/photo_drop.tpl | 4 | ||||
-rw-r--r-- | view/theme/duepuntozero/style.css | 48 | ||||
-rw-r--r-- | view/theme/loozah/style.css | 55 | ||||
-rw-r--r-- | view/wall_item_drop.tpl | 2 |
19 files changed, 445 insertions, 178 deletions
diff --git a/addon/sniper/sniper.php b/addon/sniper/sniper.php index bb4eace30..d431a2466 100644 --- a/addon/sniper/sniper.php +++ b/addon/sniper/sniper.php @@ -6,6 +6,12 @@ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike> */ +/** + * Demo plugin for adding various types of Flash games to Friendika. + * In this case we're using "Hot Shot Sniper" by FlashGames247 + */ + + function sniper_install() { register_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); } @@ -4,7 +4,7 @@ set_time_limit(0); ini_set('pcre.backtrack_limit', 250000); -define ( 'FRIENDIKA_VERSION', '2.2.1010' ); +define ( 'FRIENDIKA_VERSION', '2.2.1012' ); define ( 'DFRN_PROTOCOL_VERSION', '2.21' ); define ( 'DB_UPDATE_VERSION', 1063 ); diff --git a/include/bbcode.php b/include/bbcode.php index a44838c24..40f4935fb 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -97,6 +97,7 @@ function bbcode($Text,$preserve_nl = false) { $Text = preg_replace("/\[audio\](.*?)\[\/audio\]/", '<audio src="$1" controls="controls"><a href="$1">$1</a></audio>', $Text); + $Text = preg_replace("/\[iframe\](.*?)\[\/iframe\]/", '<iframe src="$1" width="425" height="350"><a href="$1">$1</a></iframe>', $Text); // [img=widthxheight]image source[/img] $Text = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/", '<img src="$3" style="height:{$2}px; width:{$1}px;" >', $Text); diff --git a/include/conversation.php b/include/conversation.php index 9ffcbe157..0d3123831 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -114,6 +114,8 @@ function conversation(&$a, $items, $mode, $update) { $noshare_tpl = get_markup_template('like_noshare.tpl'); $tpl = get_markup_template('wall_item.tpl'); $wallwall = get_markup_template('wallwall_item.tpl'); + $droptpl = get_markup_template('wall_item_drop.tpl'); + $fakedrop = get_markup_template('wall_fake_drop.tpl'); $alike = array(); $dlike = array(); @@ -126,7 +128,6 @@ function conversation(&$a, $items, $mode, $update) { // - just loop through the items and format them minimally for display $tpl = get_markup_template('search_item.tpl'); - $droptpl = get_markup_template('wall_fake_drop.tpl'); foreach($items as $item) { @@ -171,14 +172,7 @@ function conversation(&$a, $items, $mode, $update) { } $drop = ''; - $dropping = false; - if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) - $dropping = true; - - $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete'))); - - // localize_item($item); $drop = replace_macros($droptpl,array('$id' => $item['id'])); @@ -390,7 +384,16 @@ function conversation(&$a, $items, $mode, $update) { ? '<a class="editpost" href="' . $a->get_baseurl() . '/editpost/' . $item['id'] . '" title="' . t('Edit') . '"><img src="images/pencil.gif" /></a>' : ''); - $drop = replace_macros(get_markup_template('wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete'))); + + + $drop = ''; + $dropping = false; + + if((intval($item['contact-id']) && $item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) + $dropping = true; + + $drop = replace_macros((($dropping)? $droptpl : $fakedrop), array('$id' => $item['id'], '$delete' => t('Delete'))); + $photo = $item['photo']; $thumb = $item['thumb']; @@ -477,6 +480,7 @@ function conversation(&$a, $items, $mode, $update) { '$comment' => $comment )); + $arr = array('item' => $item, 'output' => $tmp_item); call_hooks('display_item', $arr); @@ -491,6 +495,9 @@ function conversation(&$a, $items, $mode, $update) { if($blowhard_count >= 3) $o .= '</div>'; + if($dropping) + $o .= '<div id="item-delete-selected" class="fakelink" onclick="deleteCheckedItems();"><div id="item-delete-selected-icon" class="icon drophide" title="' . t('Delete Selected Items') . '" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></div><div id="item-delete-selected-desc" >' . t('Delete Selected Items') . '</div></div><div id="item-delete-selected-end"></div>'; + return $o; } diff --git a/include/event.php b/include/event.php index 2cfc52408..9d4a8df59 100644 --- a/include/event.php +++ b/include/event.php @@ -10,9 +10,9 @@ function format_event_html($ev) { $bd_format = t('l F d, Y \@ g A') ; // Friday January 18, 2011 @ 8 AM - $o = '<div class="vevent">'; + $o = '<div class="vevent">' . "\r\n"; - $o .= '<p class="description event-description">' . bbcode($ev['desc']) . '</p>'; + $o .= '<p class="description event-description">' . bbcode($ev['desc']) . '</p>' . "\r\n"; $o .= '<p class="event-start">' . t('Starts:') . ' <abbr class="dtstart" title="' . datetime_convert('UTC','UTC',$ev['start'], (($ev['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )) @@ -21,7 +21,7 @@ function format_event_html($ev) { $ev['start'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $ev['start'] , $bd_format))) - . '</abbr></p>'; + . '</abbr></p>' . "\r\n"; if(! $ev['nofinish']) $o .= '<p class="event-end" >' . t('Finishes:') . ' <abbr class="dtend" title="' @@ -31,14 +31,14 @@ function format_event_html($ev) { $ev['finish'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $ev['finish'] , $bd_format ))) - . '</abbr></p>'; + . '</abbr></p>' . "\r\n"; if(strlen($ev['location'])) $o .= '<p class="event-location"> ' . t('Location:') . ' <span class="location">' . bbcode($ev['location']) - . '</span></p>'; + . '</span></p>' . "\r\n"; - $o .= '</div>'; + $o .= '</div>' . "\r\n"; return $o; } @@ -175,6 +175,9 @@ function ev_compare($a,$b) { $date_a = (($a['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$a['start']) : $a['start']); $date_b = (($b['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$b['start']) : $b['start']); + + if($date_a === $date_b) + return strcasecmp($a['desc'],$b['desc']); return strcmp($date_a,$date_b); } @@ -190,10 +193,10 @@ function event_store($arr) { $a = get_app(); $arr['created'] = (($arr['created']) ? $arr['created'] : datetime_convert()); - $arr['edited'] = (($arr['edited']) ? $arr['edited'] : datetime_convert()); - $arr['type'] = (($arr['type']) ? $arr['type'] : 'event' ); - $arr['cid'] = ((intval($arr['cid'])) ? intval($arr['cid']) : 0); - $arr['uri'] = (x($arr,'uri') ? $arr['uri'] : item_new_uri($a->get_hostname(),$arr['uid'])); + $arr['edited'] = (($arr['edited']) ? $arr['edited'] : datetime_convert()); + $arr['type'] = (($arr['type']) ? $arr['type'] : 'event' ); + $arr['cid'] = ((intval($arr['cid'])) ? intval($arr['cid']) : 0); + $arr['uri'] = (x($arr,'uri') ? $arr['uri'] : item_new_uri($a->get_hostname(),$arr['uid'])); if($arr['cid']) $c = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", @@ -244,8 +247,26 @@ function event_store($arr) { intval($arr['id']), intval($arr['uid']) ); - if(count($r)) + if(count($r)) { + $object = '<object><type>' . xmlify(ACTIVITY_OBJ_EVENT) . '</type><title></title><id>' . xmlify($arr['uri']) . '</id>'; + $object .= '<content>' . xmlify(format_event_bbcode($arr)) . '</content>'; + $object .= '</object>' . "\n"; + + + q("UPDATE `item` SET `body` = '%s', `object` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `edited` = '%s' WHERE `id` = %d AND `uid` = %d LIMIT 1", + dbesc(format_event_bbcode($arr)), + dbesc($object), + dbesc($arr['allow_cid']), + dbesc($arr['allow_gid']), + dbesc($arr['deny_cid']), + dbesc($arr['deny_gid']), + dbesc(datetime_convert()), + intval($r[0]['id']), + intval($arr['uid']) + ); + return $r[0]['id']; + } else return 0; } @@ -274,7 +295,7 @@ function event_store($arr) { ); $r = q("SELECT * FROM `event` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($uri), + dbesc($arr['uri']), intval($arr['uid']) ); if(count($r)) @@ -284,8 +305,8 @@ function event_store($arr) { $item_arr['uid'] = $arr['uid']; $item_arr['contact-id'] = $arr['cid']; - $item_arr['uri'] = $uri; - $item_arr['parent-uri'] = $uri; + $item_arr['uri'] = $arr['uri']; + $item_arr['parent-uri'] = $arr['uri']; $item_arr['type'] = 'activity'; $item_arr['wall'] = 1; $item_arr['contact-id'] = $contact['id']; @@ -329,6 +350,7 @@ function event_store($arr) { intval($item_id) ); } + return $item_id; } } diff --git a/include/html2bbcode.php b/include/html2bbcode.php index 734282d95..d4e8cce66 100644 --- a/include/html2bbcode.php +++ b/include/html2bbcode.php @@ -35,6 +35,7 @@ function html2bbcode($s) { '/\<blockquote\>(.*?)\<\/blockquote\>/is', '/\<video(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/video\>/is', '/\<audio(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/audio\>/is', + '/\<iframe(.*?) src=\"(.*?)\" (.*?)\>(.*?)\<\/iframe\>/is', ); @@ -60,6 +61,7 @@ function html2bbcode($s) { '[quote]$1[/quote]', '[video]$1[/video]', '[audio]$1[/audio]', + '[iframe]$1[/iframe]', ); // Replace $htmltags in $text with $bbtags diff --git a/include/items.php b/include/items.php index dc177c468..a003b84bb 100644 --- a/include/items.php +++ b/include/items.php @@ -1772,3 +1772,129 @@ function item_expire($uid,$days) { } + +function drop_items($items) { + $uid = 0; + + if(count($items)) { + foreach($items as $item) { + $owner = drop_item($item,false); + if($owner && ! $uid) + $uid = $owner; + } + } + + // multiple threads may have been deleted, send an expire notification + + if($uid) + proc_run('php',"include/notifier.php","expire","$uid"); +} + + +function drop_item($id,$interactive = true) { + + $a = get_app(); + + // locate item to be deleted + + $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", + intval($id) + ); + + if(! count($r)) { + if(! $interactive) + return 0; + notice( t('Item not found.') . EOL); + goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); + } + + $item = $r[0]; + + $owner = $item['uid']; + + // check if logged in user is either the author or owner of this item + + if((local_user() == $item['uid']) || (remote_user() == $item['contact-id'])) { + + // delete the item + + $r = q("UPDATE `item` SET `deleted` = 1, `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($item['id']) + ); + + // If item is a link to a photo resource, nuke all the associated photos + // (visitors will not have photo resources) + // This only applies to photos uploaded from the photos page. Photos inserted into a post do not + // generate a resource-id and therefore aren't intimately linked to the item. + + if(strlen($item['resource-id'])) { + q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ", + dbesc($item['resource-id']), + intval($item['uid']) + ); + // ignore the result + } + + // If item is a link to an event, nuke the event record. + + if(intval($item['event-id'])) { + q("DELETE FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1", + intval($item['event-id']), + intval($item['uid']) + ); + // ignore the result + } + + + // If it's the parent of a comment thread, kill all the kids + + if($item['uri'] == $item['parent-uri']) { + $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' + WHERE `parent-uri` = '%s' AND `uid` = %d ", + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc($item['parent-uri']), + intval($item['uid']) + ); + // ignore the result + } + else { + // ensure that last-child is set in case the comment that had it just got wiped. + q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ", + dbesc(datetime_convert()), + dbesc($item['parent-uri']), + intval($item['uid']) + ); + // who is the last child now? + $r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d ORDER BY `edited` DESC LIMIT 1", + dbesc($item['parent-uri']), + intval($item['uid']) + ); + if(count($r)) { + q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", + intval($r[0]['id']) + ); + } + } + $drop_id = intval($item['id']); + + // send the notification upstream/downstream as the case may be + + if(! $interactive) + return $owner; + + proc_run('php',"include/notifier.php","drop","$drop_id"); + goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); + //NOTREACHED + } + else { + if(! $interactive) + return 0; + notice( t('Permission denied.') . EOL); + goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); + //NOTREACHED + } + +}
\ No newline at end of file diff --git a/include/main.js b/include/main.js index 1a377a1a4..3cc607977 100644 --- a/include/main.js +++ b/include/main.js @@ -70,26 +70,6 @@ $('#pause').html(''); } } -// // F8 - show/hide language selector -// if(event.keyCode == '119') { -// if(langSelect) { -// langSelect = false; -// $('#language-selector').hide(); -// } -// else { -// langSelect = true; -// $('#language-selector').show(); -// } -// } -// -// this is shift-home on FF, but $ on IE, disabling until I figure out why the diff. -// update: incompatible usage of onKeyDown vs onKeyPress -// if(event.keyCode == '36' && event.shiftKey == true) { -// if(homebase !== undefined) { -// event.preventDefault(); -// document.location = homebase; -// } -// } }); }); diff --git a/mod/dfrn_notify.php b/mod/dfrn_notify.php index 6ca3f9fc2..8f11cabf4 100644 --- a/mod/dfrn_notify.php +++ b/mod/dfrn_notify.php @@ -217,6 +217,7 @@ function dfrn_notify_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('mail_received_html_body_eml.tpl'); $email_html_body_tpl = replace_macros($tpl,array( + '$username' => $importer['username'], '$siteName' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $importer['thumb'], // thumbnail url for sender icon @@ -232,6 +233,7 @@ function dfrn_notify_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('mail_received_text_body_eml.tpl'); $email_text_body_tpl = replace_macros($tpl,array( + '$username' => $importer['username'], '$siteName' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $importer['thumb'], // thumbnail url for sender icon @@ -416,6 +418,7 @@ function dfrn_notify_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl'); $email_html_body_tpl = replace_macros($tpl,array( + '$username' => $importer['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon @@ -429,6 +432,7 @@ function dfrn_notify_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl'); $email_text_body_tpl = replace_macros($tpl,array( + '$username' => $importer['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon @@ -545,6 +549,7 @@ function dfrn_notify_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl'); $email_html_body_tpl = replace_macros($tpl,array( + '$username' => $importer['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon @@ -557,6 +562,7 @@ function dfrn_notify_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl'); $email_text_body_tpl = replace_macros($tpl,array( + '$username' => $importer['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $datarray['author-avatar'], // thumbnail url for sender icon diff --git a/mod/events.php b/mod/events.php index 1418a7549..07231eb05 100644 --- a/mod/events.php +++ b/mod/events.php @@ -10,6 +10,7 @@ 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(); $startyear = intval($_POST['startyear']); $startmonth = intval($_POST['startmonth']); @@ -77,7 +78,7 @@ function events_post(&$a) { $datarray['adjust'] = $adjust; $datarray['nofinish'] = $nofinish; $datarray['uid'] = $uid; - $datarray['cid'] = 0; + $datarray['cid'] = $cid; $datarray['allow_cid'] = $str_contact_allow; $datarray['allow_gid'] = $str_group_allow; $datarray['deny_cid'] = $str_contact_deny; @@ -87,7 +88,9 @@ function events_post(&$a) { $datarray['edited'] = $edited; $item_id = event_store($datarray); - proc_run('php',"include/notifier.php","event","$item_id"); + + if(! $cid) + proc_run('php',"include/notifier.php","event","$item_id"); } @@ -131,7 +134,7 @@ function events_content(&$a) { $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 endlessly. + // An upper limit was chosen to keep search engines from exploring links millions of years in the future. if($y < 1901) $y = 1900; @@ -154,16 +157,6 @@ function events_content(&$a) { } - $o .= '<div id="new-event-link"><a href="' . $a->get_baseurl() . '/events/new' . '" >' . t('Create New Event') . '</a></div>'; - $o .= '<div id="event-calendar-wrapper">'; - - $o .= '<a href="' . $a->get_baseurl() . '/events/' . $prevyear . '/' . $prevmonth . '" class="prevcal"><div id="event-calendar-prev" class="icon prev" title="' . t('Previous') . '"></div></a>'; - $o .= cal($y,$m,false, ' eventcal'); - - $o .= '<a href="' . $a->get_baseurl() . '/events/' . $nextyear . '/' . $nextmonth . '" class="nextcal"><div id="event-calendar-next" class="icon next" title="' . t('Next') . '"></div></a>'; - $o .= '</div>'; - $o .= '<div class="event-calendar-end"></div>'; - $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); @@ -173,73 +166,152 @@ function events_content(&$a) { $adjust_start = datetime_convert('UTC', date_default_timezone_get(), $start); $adjust_finish = datetime_convert('UTC', date_default_timezone_get(), $finish); - +dbg(1); $r = q("SELECT `event`.*, `item`.`id` AS `itemid`,`item`.`plink` FROM `event` LEFT JOIN `item` ON `item`.`event-id` = `event`.`id` WHERE `event`.`uid` = %d - AND (( `adjust` = 0 AND `start` >= '%s' AND `finish` <= '%s' ) - OR ( `adjust` = 1 AND `start` >= '%s' AND `finish` <= '%s' )) ", + 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($adjust_start), dbesc($adjust_finish) ); +dbg(0); + $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 .= '<div id="new-event-link"><a href="' . $a->get_baseurl() . '/events/new' . '" >' . t('Create New Event') . '</a></div>'; + $o .= '<div id="event-calendar-wrapper">'; + + $o .= '<a href="' . $a->get_baseurl() . '/events/' . $prevyear . '/' . $prevmonth . '" class="prevcal"><div id="event-calendar-prev" class="icon prev" title="' . t('Previous') . '"></div></a>'; + $o .= cal($y,$m,$links, ' eventcal'); + + $o .= '<a href="' . $a->get_baseurl() . '/events/' . $nextyear . '/' . $nextmonth . '" class="nextcal"><div id="event-calendar-next" class="icon next" title="' . t('Next') . '"></div></a>'; + $o .= '</div>'; + $o .= '<div class="event-calendar-end"></div>'; + + + + + - $last_date = ''; + $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 .= '<hr /><div class="event-list-date">' . $d . '</div>'; + if($d !== $last_date) + $o .= '<hr /><a name="link-' . $j . '" ><div class="event-list-date">' . $d . '</div></a>'; $last_date = $d; $o .= format_event_html($rr); + $o .= '<a href="' . $a->get_baseurl() . '/events/event/' . $rr['id'] . '" title="' . t('Edit event') . '" class="edit-event-link icon pencil"></a>'; if($rr['plink']) - $o .= get_plink($rr) . '<br />'; + $o .= '<a href="' . $rr['plink'] . '" title="' . t('link to source') . '" target="external-link" class="plink-event-link icon remote-link"></a></div>'; + + $o .= '<div class="clear"></div>'; + } } 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'); - $year = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y'); - $month = datetime_convert('UTC', date_default_timezone_get(), 'now', 'm'); - $day = datetime_convert('UTC', date_default_timezone_get(), 'now', 'd'); + $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:') . ' <span class="required">*</span> ', - '$s_dsel' => datesel('start',$year+5,$year,false,$year,$month,$day), - '$s_tsel' => timesel('start',0,0), + '$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' => $n_checked, '$f_text' => t('Event Finishes:'), - '$f_dsel' => datesel('finish',$year+5,$year,false,$year,$month,$day), - '$f_tsel' => timesel('finish',0,0), + '$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' => $a_checked, '$d_text' => t('Description:') . ' <span class="required">*</span>', - '$d_orig' => '', + '$d_orig' => $d_orig, '$l_text' => t('Location:'), - '$l_orig' => '', + '$l_orig' => $l_orig, '$sh_text' => t('Share this event'), - '$sh_checked' => '', - '$acl' => populate_acl($a->user,false), + '$sh_checked' => $sh_checked, + '$acl' => (($cid) ? '' : populate_acl(((x($orig_event)) ? $orig_event : $a->user),false)), '$submit' => t('Submit') )); diff --git a/mod/item.php b/mod/item.php index d7c15ff02..98f4ff90c 100644 --- a/mod/item.php +++ b/mod/item.php @@ -22,6 +22,15 @@ function item_post(&$a) { $uid = local_user(); + if(x($_POST,'dropitems')) { + require_once('include/items.php'); + $arr_drop = explode(',',$_POST['dropitems']); + drop_items($arr_drop); + $json = array('success' => 1); + echo json_encode($json); + killme(); + } + call_hooks('post_local_start', $_POST); $parent = ((x($_POST,'parent')) ? intval($_POST['parent']) : 0); @@ -544,6 +553,7 @@ function item_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('cmnt_received_html_body_eml.tpl'); $email_html_body_tpl = replace_macros($tpl,array( + '$username' => $user['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $author['thumb'], // thumbnail url for sender icon @@ -557,6 +567,7 @@ function item_post(&$a) { // load the template for private message notifications $tpl = get_intltext_template('cmnt_received_text_body_eml.tpl'); $email_text_body_tpl = replace_macros($tpl,array( + '$username' => $user['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $author['thumb'], // thumbnail url for sender icon @@ -610,6 +621,7 @@ function item_post(&$a) { // load the template for private message notifications $tpl = load_view_file('view/wall_received_html_body_eml.tpl'); $email_html_body_tpl = replace_macros($tpl,array( + '$username' => $user['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $author['thumb'], // thumbnail url for sender icon @@ -622,6 +634,7 @@ function item_post(&$a) { // load the template for private message notifications $tpl = load_view_file('view/wall_received_text_body_eml.tpl'); $email_text_body_tpl = replace_macros($tpl,array( + '$username' => $user['username'], '$sitename' => $a->config['sitename'], // name of this site '$siteurl' => $a->get_baseurl(), // descriptive url of this site '$thumb' => $author['thumb'], // thumbnail url for sender icon @@ -731,102 +744,8 @@ function item_content(&$a) { require_once('include/security.php'); - $uid = local_user(); - if(($a->argc == 3) && ($a->argv[1] === 'drop') && intval($a->argv[2])) { - - // locate item to be deleted - - $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", - intval($a->argv[2]) - ); - - if(! count($r)) { - notice( t('Item not found.') . EOL); - goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); - } - $item = $r[0]; - - // check if logged in user is either the author or owner of this item - - if(($_SESSION['visitor_id'] == $item['contact-id']) || ($_SESSION['uid'] == $item['uid'])) { - - // delete the item - - $r = q("UPDATE `item` SET `deleted` = 1, `body` = '', `edited` = '%s', `changed` = '%s' WHERE `id` = %d LIMIT 1", - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($item['id']) - ); - - // If item is a link to a photo resource, nuke all the associated photos - // (visitors will not have photo resources) - // This only applies to photos uploaded from the photos page. Photos inserted into a post do not - // generate a resource-id and therefore aren't intimately linked to the item. - - if(strlen($item['resource-id'])) { - q("DELETE FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d ", - dbesc($item['resource-id']), - intval($item['uid']) - ); - // ignore the result - } - - // If item is a link to an event, nuke the event record. - - if(intval($item['event-id'])) { - q("DELETE FROM `event` WHERE `id` = %d AND `uid` = %d LIMIT 1", - intval($item['event-id']), - intval($item['uid']) - ); - // ignore the result - } - - - // If it's the parent of a comment thread, kill all the kids - - if($item['uri'] == $item['parent-uri']) { - $r = q("UPDATE `item` SET `deleted` = 1, `edited` = '%s', `changed` = '%s', `body` = '' - WHERE `parent-uri` = '%s' AND `uid` = %d ", - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc($item['parent-uri']), - intval($item['uid']) - ); - // ignore the result - } - else { - // ensure that last-child is set in case the comment that had it just got wiped. - q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent-uri` = '%s' AND `uid` = %d ", - dbesc(datetime_convert()), - dbesc($item['parent-uri']), - intval($item['uid']) - ); - // who is the last child now? - $r = q("SELECT `id` FROM `item` WHERE `parent-uri` = '%s' AND `type` != 'activity' AND `deleted` = 0 AND `uid` = %d ORDER BY `edited` DESC LIMIT 1", - dbesc($item['parent-uri']), - intval($item['uid']) - ); - if(count($r)) { - q("UPDATE `item` SET `last-child` = 1 WHERE `id` = %d LIMIT 1", - intval($r[0]['id']) - ); - } - } - $drop_id = intval($item['id']); - - // send the notification upstream/downstream as the case may be - - proc_run('php',"include/notifier.php","drop","$drop_id"); -// We seem to lose the return url occasionally. Have not been able to reliably duplicate -// logger('drop_return_url: ' . $_SESSION['return_url']); - goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); - //NOTREACHED - } - else { - notice( t('Permission denied.') . EOL); - goaway($a->get_baseurl() . '/' . $_SESSION['return_url']); - //NOTREACHED - } + require_once('include/items.php'); + drop_item($a->argv[2]); } } diff --git a/mod/photos.php b/mod/photos.php index 717800364..e52f67008 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -1274,7 +1274,7 @@ function photos_content(&$a) { $drop = ''; if(($item['contact-id'] == remote_user()) || ($item['uid'] == local_user())) - $drop = replace_macros(get_markup_template('wall_item_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete'))); + $drop = replace_macros(get_markup_template('photo_drop.tpl'), array('$id' => $item['id'], '$delete' => t('Delete'))); $comments .= replace_macros($template,array( diff --git a/mod/profile.php b/mod/profile.php index aeb21f077..587ac6288 100644 --- a/mod/profile.php +++ b/mod/profile.php @@ -261,11 +261,8 @@ function profile_content(&$a, $update = 0) { if($is_owner && ! $update) $o .= get_birthdays(); - - $o .= conversation($a,$r,'profile',$update); - if(! $update) { $o .= paginate($a); diff --git a/view/event_form.tpl b/view/event_form.tpl index 6401f16d0..5f3510bef 100644 --- a/view/event_form.tpl +++ b/view/event_form.tpl @@ -6,6 +6,10 @@ $e_desc <form action="$post" method="post" > +<input type="hidden" name="event_id" value="$eid" /> +<input type="hidden" name="cid" value="$cid" /> +<input type="hidden" name="uri" value="$uri" /> + <div id="event-start-text">$s_text</div> $s_dsel $s_tsel diff --git a/view/jot-header.tpl b/view/jot-header.tpl index 77e5bc4bc..61c80702e 100644 --- a/view/jot-header.tpl +++ b/view/jot-header.tpl @@ -109,6 +109,22 @@ tinyMCE.init({ }); + function deleteCheckedItems() { + var checkedstr = ''; + + $('.item-select').each( function() { + if($(this).is(':checked')) { + if(checkedstr.length != 0) + checkedstr = checkedstr + ',' + $(this).val(); + else + checkedstr = $(this).val(); + } + }); + $.post('item', { dropitems: checkedstr }, function(data) { + window.location.reload(); + }); + } + function jotGetLink() { reply = prompt("$linkurl"); if(reply && reply.length) { diff --git a/view/photo_drop.tpl b/view/photo_drop.tpl new file mode 100644 index 000000000..b4ea62b45 --- /dev/null +++ b/view/photo_drop.tpl @@ -0,0 +1,4 @@ +<div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" > + <a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> +</div> +<div class="wall-item-delete-end"></div> diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css index 4aad4339f..2c3700c43 100644 --- a/view/theme/duepuntozero/style.css +++ b/view/theme/duepuntozero/style.css @@ -2228,10 +2228,29 @@ a.mail-list-link { font-size: 20px; } +.vevent { + border: 1px solid #CCCCCC; +} +.vevent .event-description, .vevent .event-location { + margin-left: 10px; + margin-right: 10px; +} +.vevent .event-start { + margin-left: 10px; + margin-right: 10px; +} + #new-event-link { margin-bottom: 10px; } +.edit-event-link, .plink-event-link { + float: left; + margin-top: 4px; + margin-right: 4px; + margin-bottom: 15px; +} + .event-description:before { content: url('../../../images/calendar.png'); margin-right: 15px; @@ -2247,6 +2266,10 @@ a.mail-list-link { float: right; } +.event-list-date { + margin-bottom: 10px; +} + .prevcal, .nextcal { float: left; margin-left: 32px; @@ -2262,6 +2285,7 @@ a.mail-list-link { font-family: Courier, monospace; } .today { + font-weight: bold; color: #FF0000; } @@ -2465,8 +2489,32 @@ a.mail-list-link { margin-top: 10px; } +.item-select { + opacity: 0.3; + filter:alpha(opacity=30); + float: right; + margin-right: 10px; +} +.item-select:hover { + opacity: 1; + filter:alpha(opacity=100); +} +#item-delete-selected { + margin-top: 30px; +} + +#item-delete-selected-end { + clear: both; +} +#item-delete-selected-icon, #item-delete-selected-desc { + float: left; + margin-right: 5px; +} +#item-delete-selected-desc:hover { + text-decoration: underline; +} #lang-select-icon { cursor: pointer; diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css index 947b76fec..9ab3bb6bc 100644 --- a/view/theme/loozah/style.css +++ b/view/theme/loozah/style.css @@ -2428,15 +2428,42 @@ a.mail-list-link { font-size: 20px; } + +.vevent { + border: 1px solid #CCCCCC; +} +.vevent .event-description, .vevent .event-location { + margin-left: 10px; + margin-right: 10px; +} +.vevent .event-start { + margin-left: 10px; + margin-right: 10px; +} + + #new-event-link { margin-bottom: 10px; } + +.edit-event-link, .plink-event-link { + float: left; + margin-top: 4px; + margin-right: 4px; + margin-bottom: 15px; +} + + .event-description:before { content: url('../../../images/calendar.png'); margin-right: 15px; } +.event-list-date { + margin-bottom: 10px; +} + .event-start, .event-end { margin-left: 10px; width: 330px; @@ -2461,6 +2488,7 @@ a.mail-list-link { font-family: Courier, monospace; } .today { + font-weight: bold; color: #FF0000; } @@ -2490,6 +2518,33 @@ a.mail-list-link { } +.item-select { + opacity: 0.3; + filter:alpha(opacity=30); + float: right; + margin-right: 10px; + +} +.item-select:hover { + opacity: 1; + filter:alpha(opacity=100); +} + +#item-delete-selected { + margin-top: 30px; +} + +#item-delete-selected-end { + clear: both; +} +#item-delete-selected-icon, #item-delete-selected-desc { + float: left; + margin-right: 5px; +} +#item-delete-selected-desc:hover { + text-decoration: underline; +} + #lang-select-icon { cursor: pointer; position: absolute; diff --git a/view/wall_item_drop.tpl b/view/wall_item_drop.tpl index b4ea62b45..b10c21093 100644 --- a/view/wall_item_drop.tpl +++ b/view/wall_item_drop.tpl @@ -1,4 +1,6 @@ <div class="wall-item-delete-wrapper" id="wall-item-delete-wrapper-$id" > + <a href="item/drop/$id" onclick="return confirmDelete();" class="icon drophide" title="$delete" onmouseover="imgbright(this);" onmouseout="imgdull(this);" ></a> </div> +<input type="checkbox" class="item-select" name="itemselected[]" value="$id" /> <div class="wall-item-delete-end"></div> |