From a9d7acda279ebb7f2b3cd61a91a5e1d8b590dcf2 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Wed, 1 Jun 2016 21:48:54 -0700 Subject: [PATCH 01/19] the rest of the schema updates - WARNING: some third party plugins may fail; e.g. embedphotos and chess. $item['object'] is now $item['obj'] and $photo['type'] is $photo['mimetype'], $photo['scale'] is $photo['imgscale'] and $photo['data'] is now $photo['content']. There are a number of other changes, but these are the ones noted to cause issues with third-party plugins. The project plugins have been updated. Please note any new issues as this effort touched a lot of code in a lot of files. --- Zotlabs/Daemon/Cron_daily.php | 2 +- Zotlabs/Lib/Enotify.php | 16 +-- Zotlabs/Module/Attach.php | 4 +- Zotlabs/Module/Cal.php | 20 ++-- Zotlabs/Module/Connedit.php | 2 +- Zotlabs/Module/Cover_photo.php | 44 ++++---- Zotlabs/Module/Events.php | 42 ++++---- Zotlabs/Module/Fbrowser.php | 4 +- Zotlabs/Module/Like.php | 2 +- Zotlabs/Module/Notifications.php | 6 +- Zotlabs/Module/Notify.php | 4 +- Zotlabs/Module/Oep.php | 16 +-- Zotlabs/Module/Photo.php | 18 ++-- Zotlabs/Module/Photos.php | 73 ++++++------- Zotlabs/Module/Ping.php | 38 +++---- Zotlabs/Module/Poke.php | 2 +- Zotlabs/Module/Profile_photo.php | 44 ++++---- Zotlabs/Module/Share.php | 2 +- Zotlabs/Module/Sharedwithme.php | 4 +- Zotlabs/Module/Subthread.php | 2 +- Zotlabs/Module/Tagger.php | 2 +- Zotlabs/Module/Tasks.php | 20 ++-- Zotlabs/Module/Thing.php | 2 +- Zotlabs/Storage/Directory.php | 2 +- Zotlabs/Storage/File.php | 14 +-- boot.php | 4 +- include/api.php | 24 ++--- include/attach.php | 26 +++-- include/channel.php | 174 +++---------------------------- include/conversation.php | 16 +-- include/event.php | 169 +++++++++++++++++------------- include/feedutils.php | 12 +-- include/import.php | 26 +++-- include/items.php | 34 +++--- include/photo/photo_driver.php | 50 ++++----- include/photos.php | 28 ++--- include/sharedwithme.php | 4 +- include/text.php | 33 +----- include/widgets.php | 12 +-- install/schema_mysql.sql | 44 ++++---- install/schema_postgres.sql | 46 ++++---- install/update.php | 70 ++++++++++++- 42 files changed, 541 insertions(+), 616 deletions(-) diff --git a/Zotlabs/Daemon/Cron_daily.php b/Zotlabs/Daemon/Cron_daily.php index fbc255d2f..a16d49853 100644 --- a/Zotlabs/Daemon/Cron_daily.php +++ b/Zotlabs/Daemon/Cron_daily.php @@ -34,7 +34,7 @@ class Cron_daily { // expire any read notifications over a month old - q("delete from notify where seen = 1 and date < %s - INTERVAL %s", + q("delete from notify where seen = 1 and created < %s - INTERVAL %s", db_utcnow(), db_quoteinterval('30 DAY') ); diff --git a/Zotlabs/Lib/Enotify.php b/Zotlabs/Lib/Enotify.php index ccb538ef5..56c717468 100644 --- a/Zotlabs/Lib/Enotify.php +++ b/Zotlabs/Lib/Enotify.php @@ -348,7 +348,7 @@ class Enotify { $hash = random_string(); $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1", dbesc($hash)); - if (count($r)) + if ($r) $dups = true; } while ($dups === true); @@ -356,16 +356,16 @@ class Enotify { $datarray = array(); $datarray['hash'] = $hash; $datarray['sender_hash'] = $sender['xchan_hash']; - $datarray['name'] = $sender['xchan_name']; + $datarray['xname'] = $sender['xchan_name']; $datarray['url'] = $sender['xchan_url']; $datarray['photo'] = $sender['xchan_photo_s']; - $datarray['date'] = datetime_convert(); + $datarray['created'] = datetime_convert(); $datarray['aid'] = $recip['channel_account_id']; $datarray['uid'] = $recip['channel_id']; $datarray['link'] = $itemlink; $datarray['parent'] = $parent_mid; $datarray['parent_item'] = $parent_item; - $datarray['type'] = $params['type']; + $datarray['ntype'] = $params['type']; $datarray['verb'] = $params['verb']; $datarray['otype'] = $params['otype']; $datarray['abort'] = false; @@ -394,19 +394,19 @@ class Enotify { } } - $r = q("insert into notify (hash,name,url,photo,date,aid,uid,link,parent,seen,type,verb,otype) + $r = q("insert into notify (hash,xname,url,photo,created,aid,uid,link,parent,seen,ntype,verb,otype) values('%s','%s','%s','%s','%s',%d,%d,'%s','%s',%d,%d,'%s','%s')", dbesc($datarray['hash']), - dbesc($datarray['name']), + dbesc($datarray['xname']), dbesc($datarray['url']), dbesc($datarray['photo']), - dbesc($datarray['date']), + dbesc($datarray['created']), intval($datarray['aid']), intval($datarray['uid']), dbesc($datarray['link']), dbesc($datarray['parent']), intval($seen), - intval($datarray['type']), + intval($datarray['ntype']), dbesc($datarray['verb']), dbesc($datarray['otype']) ); diff --git a/Zotlabs/Module/Attach.php b/Zotlabs/Module/Attach.php index 8948b66d7..de941d52c 100644 --- a/Zotlabs/Module/Attach.php +++ b/Zotlabs/Module/Attach.php @@ -40,7 +40,7 @@ class Attach extends \Zotlabs\Web\Controller { header('Content-disposition: attachment; filename="' . $r['data']['filename'] . '"'); if(intval($r['data']['os_storage'])) { - $fname = dbunescbin($r['data']['data']); + $fname = dbunescbin($r['data']['content']); if(strpos($fname,'store') !== false) $istream = fopen($fname,'rb'); else @@ -53,7 +53,7 @@ class Attach extends \Zotlabs\Web\Controller { } } else - echo dbunescbin($r['data']['data']); + echo dbunescbin($r['data']['content']); killme(); } diff --git a/Zotlabs/Module/Cal.php b/Zotlabs/Module/Cal.php index a1adb30e5..1da42684d 100644 --- a/Zotlabs/Module/Cal.php +++ b/Zotlabs/Module/Cal.php @@ -91,7 +91,7 @@ class Cal extends \Zotlabs\Web\Controller { $mode = 'view'; $y = 0; $m = 0; - $ignored = ((x($_REQUEST,'ignored')) ? " and ignored = " . intval($_REQUEST['ignored']) . " " : ''); + $ignored = ((x($_REQUEST,'ignored')) ? " and dismissed = " . intval($_REQUEST['ignored']) . " " : ''); // logger('args: ' . print_r(\App::$argv,true)); @@ -146,7 +146,7 @@ class Cal extends \Zotlabs\Web\Controller { $ftext = datetime_convert('UTC',$tz,$fdt); $ftext = substr($ftext,0,14) . "00:00"; - $type = ((x($orig_event)) ? $orig_event['type'] : 'event'); + $type = ((x($orig_event)) ? $orig_event['etype'] : 'event'); $f = get_config('system','event_input_format'); if(! $f) @@ -157,7 +157,7 @@ class Cal extends \Zotlabs\Web\Controller { $show_bd = perm_is_allowed($channel['channel_id'], get_observer_hash(), 'view_contacts'); if(! $show_bd) { - $sql_extra .= " and event.type != 'birthday' "; + $sql_extra .= " and event.etype != 'birthday' "; } @@ -225,8 +225,8 @@ class Cal extends \Zotlabs\Web\Controller { $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan from event left join item on event_hash = resource_id where resource_type = 'event' and event.uid = %d $ignored - AND (( adjust = 0 AND ( finish >= '%s' or nofinish = 1 ) AND start <= '%s' ) - OR ( adjust = 1 AND ( finish >= '%s' or nofinish = 1 ) AND start <= '%s' )) $sql_extra ", + AND (( adjust = 0 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' ) + OR ( adjust = 1 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' )) $sql_extra ", intval($channel['channel_id']), dbesc($start), dbesc($finish), @@ -247,7 +247,7 @@ class Cal extends \Zotlabs\Web\Controller { if($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')); + $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'j') : datetime_convert('UTC','UTC',$rr['dtstart'],'j')); if(! x($links,$j)) $links[$j] = z_root() . '/' . \App::$cmd . '#link-' . $j; } @@ -262,15 +262,15 @@ class Cal extends \Zotlabs\Web\Controller { 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)); + $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'j') : datetime_convert('UTC','UTC',$rr['dtstart'],'j')); + $d = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], $fmt) : datetime_convert('UTC','UTC',$rr['dtstart'],$fmt)); $d = day_translate($d); - $start = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'c') : datetime_convert('UTC','UTC',$rr['start'],'c')); + $start = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'c') : datetime_convert('UTC','UTC',$rr['dtstart'],'c')); if ($rr['nofinish']){ $end = null; } else { - $end = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['finish'], 'c') : datetime_convert('UTC','UTC',$rr['finish'],'c')); + $end = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtend'], 'c') : datetime_convert('UTC','UTC',$rr['dtend'],'c')); } diff --git a/Zotlabs/Module/Connedit.php b/Zotlabs/Module/Connedit.php index c5c38b96a..33deac4c8 100644 --- a/Zotlabs/Module/Connedit.php +++ b/Zotlabs/Module/Connedit.php @@ -270,7 +270,7 @@ class Connedit extends \Zotlabs\Web\Controller { array('rel' => 'photo', 'type' => \App::$poi['xchan_photo_mimetype'], 'href' => \App::$poi['xchan_photo_l']) ), ); - $xarr['object'] = json_encode($obj); + $xarr['obj'] = json_encode($obj); $xarr['obj_type'] = ACTIVITY_OBJ_PERSON; $xarr['body'] = '[zrl=' . $channel['xchan_url'] . ']' . $channel['xchan_name'] . '[/zrl]' . ' ' . t('is now connected to') . ' ' . '[zrl=' . \App::$poi['xchan_url'] . ']' . \App::$poi['xchan_name'] . '[/zrl]'; diff --git a/Zotlabs/Module/Cover_photo.php b/Zotlabs/Module/Cover_photo.php index 371713c8d..a72c3389f 100644 --- a/Zotlabs/Module/Cover_photo.php +++ b/Zotlabs/Module/Cover_photo.php @@ -80,7 +80,7 @@ class Cover_photo extends \Zotlabs\Web\Controller { $profile = $r[0]; } - $r = q("SELECT * FROM photo WHERE resource_id = '%s' AND uid = %d AND scale = 0 LIMIT 1", + $r = q("SELECT * FROM photo WHERE resource_id = '%s' AND uid = %d AND imgscale = 0 LIMIT 1", dbesc($image_id), intval(local_channel()) ); @@ -88,9 +88,9 @@ class Cover_photo extends \Zotlabs\Web\Controller { if($r) { $base_image = $r[0]; - $base_image['data'] = (($r[0]['os_storage']) ? @file_get_contents($base_image['data']) : dbunescbin($base_image['data'])); + $base_image['content'] = (($r[0]['os_storage']) ? @file_get_contents($base_image['content']) : dbunescbin($base_image['content'])); - $im = photo_factory($base_image['data'], $base_image['type']); + $im = photo_factory($base_image['content'], $base_image['mimetype']); if($im->is_valid()) { // We are scaling and cropping the relative pixel locations to the original photo instead of the @@ -99,7 +99,7 @@ class Cover_photo extends \Zotlabs\Web\Controller { // First load the scaled photo to check its size. (Should probably pass this in the post form and save // a query.) - $g = q("select width, height from photo where resource_id = '%s' and uid = %d and scale = 3", + $g = q("select width, height from photo where resource_id = '%s' and uid = %d and imgscale = 3", dbesc($image_id), intval(local_channel()) ); @@ -133,26 +133,26 @@ class Cover_photo extends \Zotlabs\Web\Controller { $p = array('aid' => $aid, 'uid' => local_channel(), 'resource_id' => $base_image['resource_id'], 'filename' => $base_image['filename'], 'album' => t('Cover Photos')); - $p['scale'] = 7; + $p['imgscale'] = 7; $p['photo_usage'] = PHOTO_COVER; $r1 = $im->save($p); $im->doScaleImage(850,310); - $p['scale'] = 8; + $p['imgscale'] = 8; $r2 = $im->save($p); $im->doScaleImage(425,160); - $p['scale'] = 9; + $p['imgscale'] = 9; $r3 = $im->save($p); if($r1 === false || $r2 === false || $r3 === false) { // if one failed, delete them all so we can start over. notice( t('Image resize failed.') . EOL ); - $x = q("delete from photo where resource_id = '%s' and uid = %d and scale >= 7 ", + $x = q("delete from photo where resource_id = '%s' and uid = %d and imgscale >= 7 ", dbesc($base_image['resource_id']), local_channel() ); @@ -183,7 +183,7 @@ class Cover_photo extends \Zotlabs\Web\Controller { logger('attach_store: ' . print_r($res,true)); if($res && intval($res['data']['is_photo'])) { - $i = q("select * from photo where resource_id = '%s' and uid = %d and scale = 0", + $i = q("select * from photo where resource_id = '%s' and uid = %d and imgscale = 0", dbesc($hash), intval(local_channel()) ); @@ -195,10 +195,10 @@ class Cover_photo extends \Zotlabs\Web\Controller { $os_storage = false; foreach($i as $ii) { - $smallest = intval($ii['scale']); + $smallest = intval($ii['imgscale']); $os_storage = intval($ii['os_storage']); - $imagedata = $ii['data']; - $filetype = $ii['type']; + $imagedata = $ii['content']; + $filetype = $ii['mimetype']; } } @@ -224,10 +224,10 @@ class Cover_photo extends \Zotlabs\Web\Controller { $arr['obj_type'] = ACTIVITY_OBJ_PHOTO; $arr['verb'] = ACTIVITY_UPDATE; - $arr['object'] = json_encode(array( + $arr['obj'] = json_encode(array( 'type' => $arr['obj_type'], 'id' => z_root() . '/photo/' . $photo['resource_id'] . '-7', - 'link' => array('rel' => 'photo', 'type' => $photo['type'], 'href' => z_root() . '/photo/' . $photo['resource_id'] . '-7') + 'link' => array('rel' => 'photo', 'type' => $photo['mimetype'], 'href' => z_root() . '/photo/' . $photo['resource_id'] . '-7') )); if($profile && stripos($profile['gender'],t('female')) !== false) @@ -295,7 +295,7 @@ class Cover_photo extends \Zotlabs\Web\Controller { $resource_id = argv(2); - $r = q("SELECT id, album, scale FROM photo WHERE uid = %d AND resource_id = '%s' ORDER BY scale ASC", + $r = q("SELECT id, album, imgscale FROM photo WHERE uid = %d AND resource_id = '%s' ORDER BY imgscale ASC", intval(local_channel()), dbesc($resource_id) ); @@ -305,11 +305,11 @@ class Cover_photo extends \Zotlabs\Web\Controller { } $havescale = false; foreach($r as $rr) { - if($rr['scale'] == 7) + if($rr['imgscale'] == 7) $havescale = true; } - $r = q("SELECT `data`, `type`, resource_id, os_storage FROM photo WHERE id = %d and uid = %d limit 1", + $r = q("SELECT `content`, `mimetype`, resource_id, os_storage FROM photo WHERE id = %d and uid = %d limit 1", intval($r[0]['id']), intval(local_channel()) @@ -320,15 +320,15 @@ class Cover_photo extends \Zotlabs\Web\Controller { } if(intval($r[0]['os_storage'])) - $data = @file_get_contents($r[0]['data']); + $data = @file_get_contents($r[0]['content']); else - $data = dbunescbin($r[0]['data']); + $data = dbunescbin($r[0]['content']); - $ph = photo_factory($data, $r[0]['type']); + $ph = photo_factory($data, $r[0]['mimetype']); $smallest = 0; if($ph->is_valid()) { // go ahead as if we have just uploaded a new photo to crop - $i = q("select resource_id, scale from photo where resource_id = '%s' and uid = %d and scale = 0", + $i = q("select resource_id, imgscale from photo where resource_id = '%s' and uid = %d and imgscale = 0", dbesc($r[0]['resource_id']), intval(local_channel()) ); @@ -336,7 +336,7 @@ class Cover_photo extends \Zotlabs\Web\Controller { if($i) { $hash = $i[0]['resource_id']; foreach($i as $ii) { - $smallest = intval($ii['scale']); + $smallest = intval($ii['imgscale']); } } } diff --git a/Zotlabs/Module/Events.php b/Zotlabs/Module/Events.php index 3996473b7..3f3f9fb4c 100644 --- a/Zotlabs/Module/Events.php +++ b/Zotlabs/Module/Events.php @@ -180,12 +180,12 @@ class Events extends \Zotlabs\Web\Controller { } $datarray = array(); - $datarray['start'] = $start; - $datarray['finish'] = $finish; + $datarray['dtstart'] = $start; + $datarray['dtend'] = $finish; $datarray['summary'] = $summary; $datarray['description'] = $desc; $datarray['location'] = $location; - $datarray['type'] = $type; + $datarray['etype'] = $type; $datarray['adjust'] = $adjust; $datarray['nofinish'] = $nofinish; $datarray['uid'] = local_channel(); @@ -269,14 +269,14 @@ class Events extends \Zotlabs\Web\Controller { nav_set_selected('all_events'); if((argc() > 2) && (argv(1) === 'ignore') && intval(argv(2))) { - $r = q("update event set ignore = 1 where id = %d and uid = %d", + $r = q("update event set dismissed = 1 where id = %d and uid = %d", intval(argv(2)), intval(local_channel()) ); } if((argc() > 2) && (argv(1) === 'unignore') && intval(argv(2))) { - $r = q("update event set ignore = 0 where id = %d and uid = %d", + $r = q("update event set dismissed = 0 where id = %d and uid = %d", intval(argv(2)), intval(local_channel()) ); @@ -301,7 +301,7 @@ class Events extends \Zotlabs\Web\Controller { $mode = 'view'; $y = 0; $m = 0; - $ignored = ((x($_REQUEST,'ignored')) ? " and ignored = " . intval($_REQUEST['ignored']) . " " : ''); + $ignored = ((x($_REQUEST,'ignored')) ? " and dismissed = " . intval($_REQUEST['ignored']) . " " : ''); // logger('args: ' . print_r(\App::$argv,true)); @@ -358,9 +358,9 @@ class Events extends \Zotlabs\Web\Controller { if(x($_REQUEST,'summary')) $orig_event['summary'] = $_REQUEST['summary']; if(x($_REQUEST,'description')) $orig_event['description'] = $_REQUEST['description']; if(x($_REQUEST,'location')) $orig_event['location'] = $_REQUEST['location']; - if(x($_REQUEST,'start')) $orig_event['start'] = $_REQUEST['start']; - if(x($_REQUEST,'finish')) $orig_event['finish'] = $_REQUEST['finish']; - if(x($_REQUEST,'type')) $orig_event['type'] = $_REQUEST['type']; + if(x($_REQUEST,'start')) $orig_event['dtstart'] = $_REQUEST['start']; + if(x($_REQUEST,'finish')) $orig_event['dtend'] = $_REQUEST['finish']; + if(x($_REQUEST,'type')) $orig_event['etype'] = $_REQUEST['type']; */ $n_checked = ((x($orig_event) && $orig_event['nofinish']) ? ' checked="checked" ' : ''); @@ -380,9 +380,9 @@ class Events extends \Zotlabs\Web\Controller { if($orig_event['event_xchan']) $sh_checked .= ' disabled="disabled" '; - $sdt = ((x($orig_event)) ? $orig_event['start'] : 'now'); + $sdt = ((x($orig_event)) ? $orig_event['dtstart'] : 'now'); - $fdt = ((x($orig_event)) ? $orig_event['finish'] : '+1 hour'); + $fdt = ((x($orig_event)) ? $orig_event['dtend'] : '+1 hour'); $tz = date_default_timezone_get(); if(x($orig_event)) @@ -406,7 +406,7 @@ class Events extends \Zotlabs\Web\Controller { $ftext = datetime_convert('UTC',$tz,$fdt); $ftext = substr($ftext,0,14) . "00:00"; - $type = ((x($orig_event)) ? $orig_event['type'] : 'event'); + $type = ((x($orig_event)) ? $orig_event['etype'] : 'event'); $f = get_config('system','event_input_format'); if(! $f) @@ -536,8 +536,8 @@ class Events extends \Zotlabs\Web\Controller { ); } elseif($export) { $r = q("SELECT * from event where uid = %d - AND (( `adjust` = 0 AND ( `finish` >= '%s' or nofinish = 1 ) AND `start` <= '%s' ) - OR ( `adjust` = 1 AND ( `finish` >= '%s' or nofinish = 1 ) AND `start` <= '%s' )) ", + AND (( `adjust` = 0 AND ( `dtend` >= '%s' or nofinish = 1 ) AND `dtstart` <= '%s' ) + OR ( `adjust` = 1 AND ( `dtend` >= '%s' or nofinish = 1 ) AND `dtstart` <= '%s' )) ", intval(local_channel()), dbesc($start), dbesc($finish), @@ -554,8 +554,8 @@ class Events extends \Zotlabs\Web\Controller { $r = q("SELECT event.*, item.plink, item.item_flags, item.author_xchan, item.owner_xchan from event left join item on event_hash = resource_id where resource_type = 'event' and event.uid = %d $ignored - AND (( adjust = 0 AND ( finish >= '%s' or nofinish = 1 ) AND start <= '%s' ) - OR ( adjust = 1 AND ( finish >= '%s' or nofinish = 1 ) AND start <= '%s' )) ", + AND (( adjust = 0 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' ) + OR ( adjust = 1 AND ( dtend >= '%s' or nofinish = 1 ) AND dtstart <= '%s' )) ", intval(local_channel()), dbesc($start), dbesc($finish), @@ -576,7 +576,7 @@ class Events extends \Zotlabs\Web\Controller { if($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')); + $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'j') : datetime_convert('UTC','UTC',$rr['dtstart'],'j')); if(! x($links,$j)) $links[$j] = z_root() . '/' . \App::$cmd . '#link-' . $j; } @@ -591,15 +591,15 @@ class Events extends \Zotlabs\Web\Controller { 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)); + $j = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'j') : datetime_convert('UTC','UTC',$rr['dtstart'],'j')); + $d = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], $fmt) : datetime_convert('UTC','UTC',$rr['dtstart'],$fmt)); $d = day_translate($d); - $start = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['start'], 'c') : datetime_convert('UTC','UTC',$rr['start'],'c')); + $start = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtstart'], 'c') : datetime_convert('UTC','UTC',$rr['dtstart'],'c')); if ($rr['nofinish']){ $end = null; } else { - $end = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['finish'], 'c') : datetime_convert('UTC','UTC',$rr['finish'],'c')); + $end = (($rr['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$rr['dtend'], 'c') : datetime_convert('UTC','UTC',$rr['dtend'],'c')); } diff --git a/Zotlabs/Module/Fbrowser.php b/Zotlabs/Module/Fbrowser.php index eef3cb67d..c534e8f72 100644 --- a/Zotlabs/Module/Fbrowser.php +++ b/Zotlabs/Module/Fbrowser.php @@ -45,10 +45,10 @@ class Fbrowser extends \Zotlabs\Web\Controller { $album = hex2bin(\App::$argv[2]); $sql_extra = sprintf("AND `album` = '%s' ",dbesc($album)); $sql_extra2 = ""; - $path[]=array(z_root()."/fbrowser/image/".\App::$argv[2]."/", $album); + $path[]=array(z_root() . "/fbrowser/image/" . \App::$argv[2] . "/", $album); } - $r = q("SELECT `resource_id`, `id`, `filename`, type, min(`scale`) AS `hiq`,max(`scale`) AS `loq`, `description` + $r = q("SELECT `resource_id`, `id`, `filename`, type, min(`imgscale`) AS `hiq`,max(`imgscale`) AS `loq`, `description` FROM `photo` WHERE `uid` = %d $sql_extra GROUP BY `resource_id` $sql_extra2", intval(local_channel()) diff --git a/Zotlabs/Module/Like.php b/Zotlabs/Module/Like.php index 3ef67ddcc..1ca37d646 100644 --- a/Zotlabs/Module/Like.php +++ b/Zotlabs/Module/Like.php @@ -483,7 +483,7 @@ class Like extends \Zotlabs\Web\Controller { $arr['verb'] = $activity; $arr['obj_type'] = $objtype; - $arr['object'] = $object; + $arr['obj'] = $object; if($target) { $arr['tgt_type'] = $tgttype; diff --git a/Zotlabs/Module/Notifications.php b/Zotlabs/Module/Notifications.php index d51d2861c..9da28a360 100644 --- a/Zotlabs/Module/Notifications.php +++ b/Zotlabs/Module/Notifications.php @@ -80,18 +80,18 @@ class Notifications extends \Zotlabs\Web\Controller { $not_tpl = get_markup_template('notify.tpl'); require_once('include/bbcode.php'); - $r = q("SELECT * from notify where uid = %d and seen = 0 order by date desc", + $r = q("SELECT * from notify where uid = %d and seen = 0 order by created desc", intval(local_channel()) ); - if (count($r) > 0) { + if ($r > 0) { $notifications_available =1; foreach ($r as $it) { $notif_content .= replace_macros($not_tpl,array( '$item_link' => z_root().'/notify/view/'. $it['id'], '$item_image' => $it['photo'], '$item_text' => strip_tags(bbcode($it['msg'])), - '$item_when' => relative_date($it['date']) + '$item_when' => relative_date($it['created']) )); } } else { diff --git a/Zotlabs/Module/Notify.php b/Zotlabs/Module/Notify.php index 227491145..f592f6f37 100644 --- a/Zotlabs/Module/Notify.php +++ b/Zotlabs/Module/Notify.php @@ -39,7 +39,7 @@ class Notify extends \Zotlabs\Web\Controller { $not_tpl = get_markup_template('notify.tpl'); require_once('include/bbcode.php'); - $r = q("SELECT * from notify where uid = %d and seen = 0 order by date desc", + $r = q("SELECT * from notify where uid = %d and seen = 0 order by created desc", intval(local_channel()) ); @@ -49,7 +49,7 @@ class Notify extends \Zotlabs\Web\Controller { '$item_link' => z_root().'/notify/view/'. $it['id'], '$item_image' => $it['photo'], '$item_text' => strip_tags(bbcode($it['msg'])), - '$item_when' => relative_date($it['date']) + '$item_when' => relative_date($it['created']) )); } } diff --git a/Zotlabs/Module/Oep.php b/Zotlabs/Module/Oep.php index 89824fc7e..dc0547a42 100644 --- a/Zotlabs/Module/Oep.php +++ b/Zotlabs/Module/Oep.php @@ -249,7 +249,7 @@ class Oep extends \Zotlabs\Web\Controller { $sql_extra = permissions_sql($c[0]['channel_id']); - $p = q("select resource_id from photo where album = '%s' and uid = %d and scale = 0 $sql_extra order by created desc limit 1", + $p = q("select resource_id from photo where album = '%s' and uid = %d and imgscale = 0 $sql_extra order by created desc limit 1", dbesc($res), intval($c[0]['channel_id']) ); @@ -258,7 +258,7 @@ class Oep extends \Zotlabs\Web\Controller { $res = $p[0]['resource_id']; - $r = q("select height, width, scale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by scale asc", + $r = q("select height, width, imgscale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by imgscale asc", intval($c[0]['channel_id']), dbesc($res) ); @@ -276,7 +276,7 @@ class Oep extends \Zotlabs\Web\Controller { if($foundres) { $ret['type'] = 'link'; - $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['scale']; + $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['imgscale']; $ret['thumbnail_width'] = $rr['width']; $ret['thumbnail_height'] = $rr['height']; } @@ -310,7 +310,7 @@ class Oep extends \Zotlabs\Web\Controller { $sql_extra = permissions_sql($c[0]['channel_id']); - $p = q("select resource_id from photo where uid = %d and scale = 0 $sql_extra order by created desc limit 1", + $p = q("select resource_id from photo where uid = %d and imgscale = 0 $sql_extra order by created desc limit 1", intval($c[0]['channel_id']) ); if(! $p) @@ -318,7 +318,7 @@ class Oep extends \Zotlabs\Web\Controller { $res = $p[0]['resource_id']; - $r = q("select height, width, scale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by scale asc", + $r = q("select height, width, imgscale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by imgscale asc", intval($c[0]['channel_id']), dbesc($res) ); @@ -336,7 +336,7 @@ class Oep extends \Zotlabs\Web\Controller { if($foundres) { $ret['type'] = 'link'; - $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['scale']; + $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['imgscale']; $ret['thumbnail_width'] = $rr['width']; $ret['thumbnail_height'] = $rr['height']; } @@ -372,7 +372,7 @@ class Oep extends \Zotlabs\Web\Controller { $sql_extra = permissions_sql($c[0]['channel_id']); - $r = q("select height, width, scale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by scale asc", + $r = q("select height, width, imgscale, resource_id from photo where uid = %d and resource_id = '%s' $sql_extra order by imgscale asc", intval($c[0]['channel_id']), dbesc($res) ); @@ -390,7 +390,7 @@ class Oep extends \Zotlabs\Web\Controller { if($foundres) { $ret['type'] = 'link'; - $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['scale']; + $ret['thumbnail_url'] = z_root() . '/photo/' . '/' . $rr['resource_id'] . '-' . $rr['imgscale']; $ret['thumbnail_width'] = $rr['width']; $ret['thumbnail_height'] = $rr['height']; } diff --git a/Zotlabs/Module/Photo.php b/Zotlabs/Module/Photo.php index 408688886..92c9ac3c0 100644 --- a/Zotlabs/Module/Photo.php +++ b/Zotlabs/Module/Photo.php @@ -57,14 +57,14 @@ class Photo extends \Zotlabs\Web\Controller { $uid = $person; - $r = q("SELECT * FROM photo WHERE scale = %d AND uid = %d AND photo_usage = %d LIMIT 1", + $r = q("SELECT * FROM photo WHERE imgscale = %d AND uid = %d AND photo_usage = %d LIMIT 1", intval($resolution), intval($uid), intval(PHOTO_PROFILE) ); if(count($r)) { - $data = dbunescbin($r[0]['data']); - $mimetype = $r[0]['type']; + $data = dbunescbin($r[0]['content']); + $mimetype = $r[0]['mimetype']; } if(intval($r[0]['os_storage'])) $data = file_get_contents($data); @@ -113,7 +113,7 @@ class Photo extends \Zotlabs\Web\Controller { // If using resolution 1, make sure it exists before proceeding: if ($resolution == 1) { - $r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND scale = %d LIMIT 1", + $r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", dbesc($photo), intval($resolution) ); @@ -121,7 +121,7 @@ class Photo extends \Zotlabs\Web\Controller { $resolution = 2; } - $r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND scale = %d LIMIT 1", + $r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", dbesc($photo), intval($resolution) ); @@ -133,14 +133,14 @@ class Photo extends \Zotlabs\Web\Controller { // Now we'll see if we can access the photo - $r = q("SELECT * FROM photo WHERE resource_id = '%s' AND scale = %d $sql_extra LIMIT 1", + $r = q("SELECT * FROM photo WHERE resource_id = '%s' AND imgscale = %d $sql_extra LIMIT 1", dbesc($photo), intval($resolution) ); if($r && $allowed) { - $data = dbunescbin($r[0]['data']); - $mimetype = $r[0]['type']; + $data = dbunescbin($r[0]['content']); + $mimetype = $r[0]['mimetype']; if(intval($r[0]['os_storage'])) $data = file_get_contents($data); } @@ -154,7 +154,7 @@ class Photo extends \Zotlabs\Web\Controller { // they won't have the photo link, so there's a reasonable chance that the person // might be able to obtain permission to view it. - $r = q("SELECT * FROM `photo` WHERE `resource_id` = '%s' AND `scale` = %d LIMIT 1", + $r = q("SELECT * FROM `photo` WHERE `resource_id` = '%s' AND `imgscale` = %d LIMIT 1", dbesc($photo), intval($resolution) ); diff --git a/Zotlabs/Module/Photos.php b/Zotlabs/Module/Photos.php index ecf966032..ada7b4ef1 100644 --- a/Zotlabs/Module/Photos.php +++ b/Zotlabs/Module/Photos.php @@ -255,13 +255,13 @@ class Photos extends \Zotlabs\Web\Controller { ( (intval($_POST['rotate']) == 1) || (intval($_POST['rotate']) == 2) )) { logger('rotate'); - $r = q("select * from photo where `resource_id` = '%s' and uid = %d and scale = 0 limit 1", + $r = q("select * from photo where `resource_id` = '%s' and uid = %d and imgscale = 0 limit 1", dbesc($resource_id), intval($page_owner_uid) ); if(count($r)) { - $d = (($r[0]['os_storage']) ? @file_get_contents($r[0]['data']) : dbunescbin($r[0]['data'])); - $ph = photo_factory($d, $r[0]['type']); + $d = (($r[0]['os_storage']) ? @file_get_contents($r[0]['content']) : dbunescbin($r[0]['content'])); + $ph = photo_factory($d, $r[0]['mimetype']); if($ph->is_valid()) { $rotate_deg = ( (intval($_POST['rotate']) == 1) ? 270 : 90 ); $ph->rotate($rotate_deg); @@ -270,9 +270,9 @@ class Photos extends \Zotlabs\Web\Controller { $height = $ph->getHeight(); if(intval($r[0]['os_storage'])) { - @file_put_contents($r[0]['data'],$ph->imageString()); - $data = $r[0]['data']; - $fsize = @filesize($r[0]['data']); + @file_put_contents($r[0]['content'],$ph->imageString()); + $data = $r[0]['content']; + $fsize = @filesize($r[0]['content']); q("update attach set filesize = %d where hash = '%s' and uid = %d limit 1", intval($fsize), dbesc($resource_id), @@ -284,7 +284,7 @@ class Photos extends \Zotlabs\Web\Controller { $fsize = strlen($data); } - $x = q("update photo set data = '%s', `size` = %d, height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 0", + $x = q("update photo set content = '%s', filesize = %d, height = %d, width = %d where `resource_id` = '%s' and uid = %d and imgscale = 0", dbescbin($data), intval($fsize), intval($height), @@ -299,7 +299,7 @@ class Photos extends \Zotlabs\Web\Controller { $width = $ph->getWidth(); $height = $ph->getHeight(); - $x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 1", + $x = q("update photo set content = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and imgscale = 1", dbescbin($ph->imageString()), intval($height), intval($width), @@ -314,7 +314,7 @@ class Photos extends \Zotlabs\Web\Controller { $width = $ph->getWidth(); $height = $ph->getHeight(); - $x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 2", + $x = q("update photo set content = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and imgscale = 2", dbescbin($ph->imageString()), intval($height), intval($width), @@ -329,7 +329,7 @@ class Photos extends \Zotlabs\Web\Controller { $width = $ph->getWidth(); $height = $ph->getHeight(); - $x = q("update photo set data = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and scale = 3", + $x = q("update photo set content = '%s', height = %d, width = %d where `resource_id` = '%s' and uid = %d and imgscale = 3", dbescbin($ph->imageString()), intval($height), intval($width), @@ -340,12 +340,12 @@ class Photos extends \Zotlabs\Web\Controller { } } - $p = q("SELECT type, is_nsfw, description, resource_id, scale, allow_cid, allow_gid, deny_cid, deny_gid FROM photo WHERE resource_id = '%s' AND uid = %d ORDER BY scale DESC", + $p = q("SELECT mimetype, is_nsfw, description, resource_id, imgscale, allow_cid, allow_gid, deny_cid, deny_gid FROM photo WHERE resource_id = '%s' AND uid = %d ORDER BY imgscale DESC", dbesc($resource_id), intval($page_owner_uid) ); if($p) { - $ext = $phototypes[$p[0]['type']]; + $ext = $phototypes[$p[0]['mimetype']]; $r = q("UPDATE `photo` SET `description` = '%s', `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s' WHERE `resource_id` = '%s' AND `uid` = %d", dbesc($desc), @@ -611,7 +611,7 @@ class Photos extends \Zotlabs\Web\Controller { /* Show space usage */ - $r = q("select sum(size) as total from photo where aid = %d and scale = 0 ", + $r = q("select sum(filesize) as total from photo where aid = %d and imgscale = 0 ", intval(\App::$data['channel']['channel_account_id']) ); @@ -704,8 +704,8 @@ class Photos extends \Zotlabs\Web\Controller { \App::$page['htmlhead'] .= "\r\n" . '' . "\r\n"; - $r = q("SELECT `resource_id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s' - AND `scale` <= 4 and photo_usage IN ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY `resource_id`", + $r = q("SELECT `resource_id`, max(`imgscale`) AS `imgscale` FROM `photo` WHERE `uid` = %d AND `album` = '%s' + AND `imgscale` <= 4 and photo_usage IN ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY `resource_id`", intval($owner_uid), dbesc($album), intval(PHOTO_NORMAL), @@ -725,9 +725,9 @@ class Photos extends \Zotlabs\Web\Controller { $order = 'DESC'; - $r = q("SELECT p.resource_id, p.id, p.filename, p.type, p.scale, p.description, p.created FROM photo p INNER JOIN - (SELECT resource_id, max(scale) scale FROM photo WHERE uid = %d AND album = '%s' AND scale <= 4 AND photo_usage IN ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY resource_id) ph - ON (p.resource_id = ph.resource_id AND p.scale = ph.scale) + $r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.imgscale, p.description, p.created FROM photo p INNER JOIN + (SELECT resource_id, max(imgscale) imgscale FROM photo WHERE uid = %d AND album = '%s' AND imgscale <= 4 AND photo_usage IN ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY resource_id) ph + ON (p.resource_id = ph.resource_id AND p.imgscale = ph.imgscale) ORDER BY created $order LIMIT %d OFFSET %d", intval($owner_uid), dbesc($album), @@ -777,7 +777,7 @@ class Photos extends \Zotlabs\Web\Controller { else $twist = 'rotright'; - $ext = $phototypes[$rr['type']]; + $ext = $phototypes[$rr['mimetype']]; $imgalt_e = $rr['filename']; $desc_e = $rr['description']; @@ -790,7 +790,7 @@ class Photos extends \Zotlabs\Web\Controller { 'twist' => ' ' . $twist . rand(2,4), 'link' => $imagelink, 'title' => t('View Photo'), - 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . $rr['scale'] . '.' .$ext, + 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . $rr['imgscale'] . '.' .$ext, 'alt' => $imgalt_e, 'desc'=> $desc_e, 'ext' => $ext, @@ -852,8 +852,8 @@ class Photos extends \Zotlabs\Web\Controller { // fetch image, item containing image, then comments - $ph = q("SELECT id,aid,uid,xchan,resource_id,created,edited,title,`description`,album,filename,`type`,height,width,`size`,scale,photo_usage,is_nsfw,allow_cid,allow_gid,deny_cid,deny_gid FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s' - $sql_extra ORDER BY `scale` ASC ", + $ph = q("SELECT id,aid,uid,xchan,resource_id,created,edited,title,`description`,album,filename,mimetype,height,width,filesize,imgscale,photo_usage,is_nsfw,allow_cid,allow_gid,deny_cid,deny_gid FROM `photo` WHERE `uid` = %d AND `resource_id` = '%s' + $sql_extra ORDER BY `imgscale` ASC ", intval($owner_uid), dbesc($datum) ); @@ -884,7 +884,7 @@ class Photos extends \Zotlabs\Web\Controller { $order = 'DESC'; - $prvnxt = q("SELECT `resource_id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `scale` = 0 + $prvnxt = q("SELECT `resource_id` FROM `photo` WHERE `album` = '%s' AND `uid` = %d AND `imgscale` = 0 $sql_extra ORDER BY `created` $order ", dbesc($ph[0]['album']), intval($owner_uid) @@ -911,7 +911,7 @@ class Photos extends \Zotlabs\Web\Controller { if(count($ph) == 1) $hires = $lores = $ph[0]; if(count($ph) > 1) { - if($ph[1]['scale'] == 2) { + if($ph[1]['imgscale'] == 2) { // original is 640 or less, we can display it directly $hires = $lores = $ph[0]; } @@ -949,9 +949,9 @@ class Photos extends \Zotlabs\Web\Controller { $prevlink = array($prevlink, t('Previous')); $photo = array( - 'href' => z_root() . '/photo/' . $hires['resource_id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']], + 'href' => z_root() . '/photo/' . $hires['resource_id'] . '-' . $hires['imgscale'] . '.' . $phototypes[$hires['mimetype']], 'title'=> t('View Full Size'), - 'src' => z_root() . '/photo/' . $lores['resource_id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?f=&_u=' . datetime_convert('','','','ymdhis') + 'src' => z_root() . '/photo/' . $lores['resource_id'] . '-' . $lores['imgscale'] . '.' . $phototypes[$lores['mimetype']] . '?f=&_u=' . datetime_convert('','','','ymdhis') ); if($nextlink) @@ -1277,7 +1277,7 @@ class Photos extends \Zotlabs\Web\Controller { \App::$page['htmlhead'] .= "\r\n" . '' . "\r\n"; - $r = q("SELECT `resource_id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' + $r = q("SELECT `resource_id`, max(`imgscale`) AS `imgscale` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s' and photo_usage in ( %d, %d ) and is_nsfw = %d $sql_extra GROUP BY `resource_id`", intval(\App::$data['channel']['channel_id']), dbesc('Contact Photos'), @@ -1286,16 +1286,17 @@ class Photos extends \Zotlabs\Web\Controller { intval(PHOTO_PROFILE), intval($unsafe) ); - if(count($r)) { + if($r) { \App::set_pager_total(count($r)); \App::set_pager_itemspage(60); } - $r = q("SELECT p.resource_id, p.id, p.filename, p.type, p.album, p.scale, p.created FROM photo p INNER JOIN - (SELECT resource_id, max(scale) scale FROM photo - WHERE uid=%d AND album != '%s' AND album != '%s' - AND photo_usage IN ( %d, %d ) and is_nsfw = %d $sql_extra group by resource_id) ph - ON (p.resource_id = ph.resource_id and p.scale = ph.scale) ORDER by p.created DESC LIMIT %d OFFSET %d", + $r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.album, p.imgscale, p.created FROM photo as p + INNER JOIN ( SELECT resource_id, max(imgscale) as imgscale FROM photo + WHERE uid = %d AND photo_usage IN ( %d, %d ) + AND is_nsfw = %d $sql_extra group by resource_id ) as ph + ON (p.resource_id = ph.resource_id and p.imgscale = ph.imgscale) + ORDER by p.created DESC LIMIT %d OFFSET %d", intval(\App::$data['channel']['channel_id']), dbesc('Contact Photos'), dbesc( t('Contact Photos')), @@ -1309,14 +1310,14 @@ class Photos extends \Zotlabs\Web\Controller { $photos = array(); - if(count($r)) { + if($r) { $twist = 'rotright'; foreach($r as $rr) { if($twist == 'rotright') $twist = 'rotleft'; else $twist = 'rotright'; - $ext = $phototypes[$rr['type']]; + $ext = $phototypes[$rr['mimetype']]; if(\App::get_template_engine() === 'internal') { $alt_e = template_escape($rr['filename']); @@ -1332,7 +1333,7 @@ class Photos extends \Zotlabs\Web\Controller { 'twist' => ' ' . $twist . rand(2,4), 'link' => z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/image/' . $rr['resource_id'], 'title' => t('View Photo'), - 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . ((($rr['scale']) == 6) ? 4 : $rr['scale']) . '.' . $ext, + 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . ((($rr['imgscale']) == 6) ? 4 : $rr['imgscale']) . '.' . $ext, 'alt' => $alt_e, 'album' => array( 'link' => z_root() . '/photos/' . \App::$data['channel']['channel_address'] . '/album/' . bin2hex($rr['album']), diff --git a/Zotlabs/Module/Ping.php b/Zotlabs/Module/Ping.php index 32427b06f..5cbf45daa 100644 --- a/Zotlabs/Module/Ping.php +++ b/Zotlabs/Module/Ping.php @@ -173,7 +173,7 @@ class Ping extends \Zotlabs\Web\Controller { ); break; case 'all_events': - $r = q("update event set `ignore` = 1 where `ignore` = 0 and uid = %d AND start < '%s' AND start > '%s' ", + $r = q("update event set `dimissed` = 1 where `dismissed` = 0 and uid = %d AND dtstart < '%s' AND dtstart > '%s' ", intval(local_channel()), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) @@ -209,17 +209,17 @@ class Ping extends \Zotlabs\Web\Controller { ); if($t && intval($t[0]['total']) > 49) { $z = q("select * from notify where uid = %d - and seen = 0 order by date desc limit 50", + and seen = 0 order by created desc limit 50", intval(local_channel()) ); } else { $z1 = q("select * from notify where uid = %d - and seen = 0 order by date desc limit 50", + and seen = 0 order by created desc limit 50", intval(local_channel()) ); $z2 = q("select * from notify where uid = %d - and seen = 1 order by date desc limit %d", + and seen = 1 order by created desc limit %d", intval(local_channel()), intval(50 - intval($t[0]['total'])) ); @@ -230,10 +230,10 @@ class Ping extends \Zotlabs\Web\Controller { foreach($z as $zz) { $notifs[] = array( 'notify_link' => z_root() . '/notify/view/' . $zz['id'], - 'name' => $zz['name'], + 'name' => $zz['xname'], 'url' => $zz['url'], 'photo' => $zz['photo'], - 'when' => relative_date($zz['date']), + 'when' => relative_date($zz['created']), 'hclass' => (($zz['seen']) ? 'notify-seen' : 'notify-unseen'), 'message' => strip_tags(bbcode($zz['msg'])) ); @@ -325,9 +325,9 @@ class Ping extends \Zotlabs\Web\Controller { $result = array(); $r = q("SELECT * FROM event left join xchan on event_xchan = xchan_hash - WHERE `event`.`uid` = %d AND start < '%s' AND start > '%s' and `ignore` = 0 - and type in ( 'event', 'birthday' ) - ORDER BY `start` DESC LIMIT 1000", + WHERE `event`.`uid` = %d AND dtstart < '%s' AND dtstart > '%s' and `dismissed` = 0 + and etype in ( 'event', 'birthday' ) + ORDER BY `dtstart` DESC LIMIT 1000", intval(local_channel()), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) @@ -336,14 +336,14 @@ class Ping extends \Zotlabs\Web\Controller { if($r) { foreach($r as $rr) { if($rr['adjust']) - $md = datetime_convert('UTC', date_default_timezone_get(), $rr['start'], 'Y/m'); + $md = datetime_convert('UTC', date_default_timezone_get(), $rr['dtstart'], 'Y/m'); else - $md = datetime_convert('UTC', 'UTC', $rr['start'], 'Y/m'); + $md = datetime_convert('UTC', 'UTC', $rr['dtstart'], 'Y/m'); - $strt = datetime_convert('UTC', (($rr['adjust']) ? date_default_timezone_get() : 'UTC'), $rr['start']); + $strt = datetime_convert('UTC', (($rr['adjust']) ? date_default_timezone_get() : 'UTC'), $rr['dtstart']); $today = ((substr($strt, 0, 10) === datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y-m-d')) ? true : false); - $when = day_translate(datetime_convert('UTC', (($rr['adjust']) ? date_default_timezone_get() : 'UTC'), $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : ''); + $when = day_translate(datetime_convert('UTC', (($rr['adjust']) ? date_default_timezone_get() : 'UTC'), $rr['dtstart'], $bd_format)) . (($today) ? ' ' . t('[today]') : ''); $result[] = array( 'notify_link' => z_root() . '/events', // FIXME this takes you to an edit page and it may not be yours, we really want to just view the single event --> '/events/event/' . $rr['event_hash'], @@ -443,10 +443,10 @@ class Ping extends \Zotlabs\Web\Controller { $t5 = dba_timer(); if($vnotify & (VNOTIFY_EVENT|VNOTIFY_EVENTTODAY|VNOTIFY_BIRTHDAY)) { - $events = q("SELECT type, start, adjust FROM `event` - WHERE `event`.`uid` = %d AND start < '%s' AND start > '%s' and `ignore` = 0 - and type in ( 'event', 'birthday' ) - ORDER BY `start` ASC ", + $events = q("SELECT etype, dtstart, adjust FROM `event` + WHERE `event`.`uid` = %d AND dtstart < '%s' AND dtstart > '%s' and `dismissed` = 0 + and etype in ( 'event', 'birthday' ) + ORDER BY `dtstart` ASC ", intval(local_channel()), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + ' . intval($evdays) . ' days')), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) @@ -459,14 +459,14 @@ class Ping extends \Zotlabs\Web\Controller { $str_now = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y-m-d'); foreach($events as $x) { $bd = false; - if($x['type'] === 'birthday') { + if($x['etype'] === 'birthday') { $result['birthdays'] ++; $bd = true; } else { $result['events'] ++; } - if(datetime_convert('UTC', ((intval($x['adjust'])) ? date_default_timezone_get() : 'UTC'), $x['start'], 'Y-m-d') === $str_now) { + if(datetime_convert('UTC', ((intval($x['adjust'])) ? date_default_timezone_get() : 'UTC'), $x['dtstart'], 'Y-m-d') === $str_now) { $result['all_events_today'] ++; if($bd) $result['birthdays_today'] ++; diff --git a/Zotlabs/Module/Poke.php b/Zotlabs/Module/Poke.php index 123ecbc7b..cf8d83023 100644 --- a/Zotlabs/Module/Poke.php +++ b/Zotlabs/Module/Poke.php @@ -115,7 +115,7 @@ class Poke extends \Zotlabs\Web\Controller { ), ); - $arr['object'] = json_encode($obj); + $arr['obj'] = json_encode($obj); $arr['item_origin'] = 1; $arr['item_wall'] = 1; diff --git a/Zotlabs/Module/Profile_photo.php b/Zotlabs/Module/Profile_photo.php index a8cf3cbee..6129a7492 100644 --- a/Zotlabs/Module/Profile_photo.php +++ b/Zotlabs/Module/Profile_photo.php @@ -93,7 +93,7 @@ class Profile_photo extends \Zotlabs\Web\Controller { $srcW = $_POST['xfinal'] - $srcX; $srcH = $_POST['yfinal'] - $srcY; - $r = q("SELECT * FROM photo WHERE resource_id = '%s' AND uid = %d AND scale = %d LIMIT 1", + $r = q("SELECT * FROM photo WHERE resource_id = '%s' AND uid = %d AND imgscale = %d LIMIT 1", dbesc($image_id), dbesc(local_channel()), intval($scale)); @@ -101,9 +101,9 @@ class Profile_photo extends \Zotlabs\Web\Controller { if($r) { $base_image = $r[0]; - $base_image['data'] = (($r[0]['os_storage']) ? @file_get_contents($base_image['data']) : dbunescbin($base_image['data'])); + $base_image['content'] = (($r[0]['os_storage']) ? @file_get_contents($base_image['content']) : dbunescbin($base_image['content'])); - $im = photo_factory($base_image['data'], $base_image['type']); + $im = photo_factory($base_image['content'], $base_image['mimetype']); if($im->is_valid()) { $im->cropImage(300,$srcX,$srcY,$srcW,$srcH); @@ -113,25 +113,25 @@ class Profile_photo extends \Zotlabs\Web\Controller { $p = array('aid' => $aid, 'uid' => local_channel(), 'resource_id' => $base_image['resource_id'], 'filename' => $base_image['filename'], 'album' => t('Profile Photos')); - $p['scale'] = 4; + $p['imgscale'] = 4; $p['photo_usage'] = (($is_default_profile) ? PHOTO_PROFILE : PHOTO_NORMAL); $r1 = $im->save($p); $im->scaleImage(80); - $p['scale'] = 5; + $p['imgscale'] = 5; $r2 = $im->save($p); $im->scaleImage(48); - $p['scale'] = 6; + $p['imgscale'] = 6; $r3 = $im->save($p); if($r1 === false || $r2 === false || $r3 === false) { // if one failed, delete them all so we can start over. notice( t('Image resize failed.') . EOL ); - $x = q("delete from photo where resource_id = '%s' and uid = %d and scale >= 4 ", + $x = q("delete from photo where resource_id = '%s' and uid = %d and imgscale >= 4 ", dbesc($base_image['resource_id']), local_channel() ); @@ -208,7 +208,7 @@ class Profile_photo extends \Zotlabs\Web\Controller { logger('attach_store: ' . print_r($res,true)); if($res && intval($res['data']['is_photo'])) { - $i = q("select * from photo where resource_id = '%s' and uid = %d order by scale", + $i = q("select * from photo where resource_id = '%s' and uid = %d order by imgscale", dbesc($hash), intval(local_channel()) ); @@ -220,11 +220,11 @@ class Profile_photo extends \Zotlabs\Web\Controller { $os_storage = false; foreach($i as $ii) { - if(intval($ii['scale']) < 2) { - $smallest = intval($ii['scale']); + if(intval($ii['imgscale']) < 2) { + $smallest = intval($ii['imgscale']); $os_storage = intval($ii['os_storage']); - $imagedata = $ii['data']; - $filetype = $ii['type']; + $imagedata = $ii['content']; + $filetype = $ii['mimetype']; } } } @@ -250,7 +250,7 @@ class Profile_photo extends \Zotlabs\Web\Controller { */ - function get() { + function get() { if(! local_channel()) { notice( t('Permission denied.') . EOL ); @@ -275,7 +275,7 @@ class Profile_photo extends \Zotlabs\Web\Controller { $resource_id = argv(2); - $r = q("SELECT id, album, scale FROM photo WHERE uid = %d AND resource_id = '%s' ORDER BY scale ASC", + $r = q("SELECT id, album, imgscale FROM photo WHERE uid = %d AND resource_id = '%s' ORDER BY imgscale ASC", intval(local_channel()), dbesc($resource_id) ); @@ -285,7 +285,7 @@ class Profile_photo extends \Zotlabs\Web\Controller { } $havescale = false; foreach($r as $rr) { - if($rr['scale'] == 5) + if($rr['imgscale'] == 5) $havescale = true; } @@ -315,7 +315,7 @@ class Profile_photo extends \Zotlabs\Web\Controller { goaway(z_root() . '/profiles'); } - $r = q("SELECT `data`, `type`, resource_id, os_storage FROM photo WHERE id = %d and uid = %d limit 1", + $r = q("SELECT content, mimetype, resource_id, os_storage FROM photo WHERE id = %d and uid = %d limit 1", intval($r[0]['id']), intval(local_channel()) @@ -326,15 +326,15 @@ class Profile_photo extends \Zotlabs\Web\Controller { } if(intval($r[0]['os_storage'])) - $data = @file_get_contents($r[0]['data']); + $data = @file_get_contents($r[0]['content']); else - $data = dbunescbin($r[0]['data']); + $data = dbunescbin($r[0]['content']); - $ph = photo_factory($data, $r[0]['type']); + $ph = photo_factory($data, $r[0]['mimetype']); $smallest = 0; if($ph->is_valid()) { // go ahead as if we have just uploaded a new photo to crop - $i = q("select resource_id, scale from photo where resource_id = '%s' and uid = %d order by scale", + $i = q("select resource_id, imgscale from photo where resource_id = '%s' and uid = %d order by imgscale", dbesc($r[0]['resource_id']), intval(local_channel()) ); @@ -342,8 +342,8 @@ class Profile_photo extends \Zotlabs\Web\Controller { if($i) { $hash = $i[0]['resource_id']; foreach($i as $ii) { - if(intval($ii['scale']) < 2) { - $smallest = intval($ii['scale']); + if(intval($ii['imgscale']) < 2) { + $smallest = intval($ii['imgscale']); } } } diff --git a/Zotlabs/Module/Share.php b/Zotlabs/Module/Share.php index 73db01657..fcc2486ba 100644 --- a/Zotlabs/Module/Share.php +++ b/Zotlabs/Module/Share.php @@ -48,7 +48,7 @@ class Share extends \Zotlabs\Web\Controller { $is_photo = (($r[0]['obj_type'] === ACTIVITY_OBJ_PHOTO) ? true : false); if($is_photo) { - $object = json_decode($r[0]['object'],true); + $object = json_decode($r[0]['obj'],true); $photo_bb = $object['body']; } diff --git a/Zotlabs/Module/Sharedwithme.php b/Zotlabs/Module/Sharedwithme.php index 8eaa47dba..25bc7dba3 100644 --- a/Zotlabs/Module/Sharedwithme.php +++ b/Zotlabs/Module/Sharedwithme.php @@ -46,7 +46,7 @@ class Sharedwithme extends \Zotlabs\Web\Controller { } //list files - $r = q("SELECT id, uid, object, item_unseen FROM item WHERE verb = '%s' AND obj_type = '%s' AND uid = %d AND owner_xchan != '%s'", + $r = q("SELECT id, uid, obj, item_unseen FROM item WHERE verb = '%s' AND obj_type = '%s' AND uid = %d AND owner_xchan != '%s'", dbesc(ACTIVITY_POST), dbesc(ACTIVITY_OBJ_FILE), intval(local_channel()), @@ -59,7 +59,7 @@ class Sharedwithme extends \Zotlabs\Web\Controller { if($r) { foreach($r as $rr) { - $object = json_decode($rr['object'],true); + $object = json_decode($rr['obj'],true); $item = array(); $item['id'] = $rr['id']; diff --git a/Zotlabs/Module/Subthread.php b/Zotlabs/Module/Subthread.php index 16a011a40..0226664d7 100644 --- a/Zotlabs/Module/Subthread.php +++ b/Zotlabs/Module/Subthread.php @@ -144,7 +144,7 @@ class Subthread extends \Zotlabs\Web\Controller { $arr['verb'] = $activity; $arr['obj_type'] = $objtype; - $arr['object'] = $obj; + $arr['obj'] = $obj; $arr['allow_cid'] = $item['allow_cid']; $arr['allow_gid'] = $item['allow_gid']; diff --git a/Zotlabs/Module/Tagger.php b/Zotlabs/Module/Tagger.php index 26d1c58ea..0a46cf56d 100644 --- a/Zotlabs/Module/Tagger.php +++ b/Zotlabs/Module/Tagger.php @@ -124,7 +124,7 @@ class Tagger extends \Zotlabs\Web\Controller { $arr['tgt_type'] = $targettype; $arr['target'] = $target; $arr['obj_type'] = $objtype; - $arr['object'] = $obj; + $arr['obj'] = $obj; $arr['parent_mid'] = $item['mid']; store_item_tag($item['uid'],$item['id'],TERM_OBJ_POST,TERM_COMMUNITYTAG,$term,$tagid); diff --git a/Zotlabs/Module/Tasks.php b/Zotlabs/Module/Tasks.php index ab05f8be9..6d0a92d91 100644 --- a/Zotlabs/Module/Tasks.php +++ b/Zotlabs/Module/Tasks.php @@ -45,7 +45,7 @@ class Tasks extends \Zotlabs\Web\Controller { if((argc() > 2) && (argv(1) === 'complete') && intval(argv(2))) { $ret = array('success' => false); - $r = q("select * from event where `type` = 'task' and uid = %d and id = %d limit 1", + $r = q("select * from event where `etype` = 'task' and uid = %d and id = %d limit 1", intval(local_channel()), intval(argv(2)) ); @@ -80,9 +80,9 @@ class Tasks extends \Zotlabs\Web\Controller { $event['account'] = $channel['channel_account_id']; $event['uid'] = $channel['channel_id']; $event['event_xchan'] = $channel['channel_hash']; - $event['type'] = 'task'; + $event['etype'] = 'task'; $event['nofinish'] = true; - $event['created'] = $event['edited'] = $event['start'] = datetime_convert(); + $event['created'] = $event['edited'] = $event['dtstart'] = datetime_convert(); $event['adjust'] = 1; $event['allow_cid'] = '<' . $channel['channel_hash'] . '>'; $event['summary'] = escape_tags($_REQUEST['summary']); @@ -92,21 +92,13 @@ class Tasks extends \Zotlabs\Web\Controller { else $x = array('success' => false); json_return_and_die($x); - } - - + } } - - - - - function get() { - + function get() { if(! local_channel()) return; - - + return ''; } } diff --git a/Zotlabs/Module/Thing.php b/Zotlabs/Module/Thing.php index 6fc5219d8..e23cce565 100644 --- a/Zotlabs/Module/Thing.php +++ b/Zotlabs/Module/Thing.php @@ -212,7 +212,7 @@ class Thing extends \Zotlabs\Web\Controller { $arr['verb'] = $verb; $arr['obj_type'] = $objtype; - $arr['object'] = $obj; + $arr['obj'] = $obj; if(! $profile['is_default']) { $arr['item_private'] = true; diff --git a/Zotlabs/Storage/Directory.php b/Zotlabs/Storage/Directory.php index 84368d07e..06ae90a5f 100644 --- a/Zotlabs/Storage/Directory.php +++ b/Zotlabs/Storage/Directory.php @@ -246,7 +246,7 @@ class Directory extends DAV\Node implements DAV\ICollection, DAV\IQuota { $deny_gid = $c[0]['channel_deny_gid']; } - $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, folder, os_storage, filetype, filesize, revision, is_photo, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) + $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, folder, os_storage, filetype, filesize, revision, is_photo, content, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", intval($c[0]['channel_account_id']), intval($c[0]['channel_id']), diff --git a/Zotlabs/Storage/File.php b/Zotlabs/Storage/File.php index d40fee0ea..ecd15cc55 100644 --- a/Zotlabs/Storage/File.php +++ b/Zotlabs/Storage/File.php @@ -124,7 +124,7 @@ class File extends DAV\Node implements DAV\IFile { ); if ($r) { if (intval($r[0]['os_storage'])) { - $d = q("select folder, data from attach where hash = '%s' and uid = %d limit 1", + $d = q("select folder, content from attach where hash = '%s' and uid = %d limit 1", dbesc($this->data['hash']), intval($c[0]['channel_id']) ); @@ -139,7 +139,7 @@ class File extends DAV\Node implements DAV\IFile { $direct = $f1[0]; } } - $fname = dbunescbin($d[0]['data']); + $fname = dbunescbin($d[0]['content']); if(strpos($fname,'store') === false) $f = 'store/' . $this->auth->owner_nick . '/' . $fname ; else @@ -158,12 +158,12 @@ class File extends DAV\Node implements DAV\IFile { } else { // this shouldn't happen any more - $r = q("UPDATE attach SET data = '%s' WHERE hash = '%s' AND uid = %d", + $r = q("UPDATE attach SET content = '%s' WHERE hash = '%s' AND uid = %d", dbescbin(stream_get_contents($data)), dbesc($this->data['hash']), intval($this->data['uid']) ); - $r = q("SELECT length(data) AS fsize FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", + $r = q("SELECT length(content) AS fsize FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", dbesc($this->data['hash']), intval($this->data['uid']) ); @@ -236,7 +236,7 @@ class File extends DAV\Node implements DAV\IFile { logger('get file ' . basename($this->name), LOGGER_DEBUG); logger('os_path: ' . $this->os_path, LOGGER_DATA); - $r = q("SELECT data, flags, os_storage, filename, filetype FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", + $r = q("SELECT content, flags, os_storage, filename, filetype FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", dbesc($this->data['hash']), intval($this->data['uid']) ); @@ -250,14 +250,14 @@ class File extends DAV\Node implements DAV\IFile { } if (intval($r[0]['os_storage'])) { - $x = dbunescbin($r[0]['data']); + $x = dbunescbin($r[0]['content']); if(strpos($x,'store') === false) $f = 'store/' . $this->auth->owner_nick . '/' . (($this->os_path) ? $this->os_path . '/' : '') . $x; else $f = $x; return fopen($f, 'rb'); } - return dbunescbin($r[0]['data']); + return dbunescbin($r[0]['content']); } } diff --git a/boot.php b/boot.php index e105560e4..5b3a614f1 100755 --- a/boot.php +++ b/boot.php @@ -45,10 +45,10 @@ require_once('include/account.php'); define ( 'PLATFORM_NAME', 'hubzilla' ); -define ( 'STD_VERSION', '1.7.2' ); +define ( 'STD_VERSION', '1.7.3' ); define ( 'ZOT_REVISION', 1.1 ); -define ( 'DB_UPDATE_VERSION', 1173 ); +define ( 'DB_UPDATE_VERSION', 1176 ); /** diff --git a/include/api.php b/include/api.php index 0833ae7b9..f0d886d9b 100644 --- a/include/api.php +++ b/include/api.php @@ -554,7 +554,7 @@ require_once('include/api_auth.php'); dbesc($_REQUEST['file_id']) ); if($r) { - unset($r[0]['data']); + unset($r[0]['content']); $ret = array('attach' => $r[0]); json_return_and_die($ret); } @@ -580,21 +580,21 @@ require_once('include/api_auth.php'); $length = intval($ptr['filesize']); if($ptr['is_dir']) - $ptr['data'] = ''; + $ptr['content'] = ''; elseif(! intval($r[0]['os_storage'])) { $ptr['start'] = $start; - $x = substr(dbunescbin($ptr['data'],$start,$length)); + $x = substr(dbunescbin($ptr['content'],$start,$length)); $ptr['length'] = strlen($x); - $ptr['data'] = base64_encode($x); + $ptr['content'] = base64_encode($x); } else { - $fp = fopen(dbunescbin($ptr['data']),'r'); + $fp = fopen(dbunescbin($ptr['content']),'r'); if($fp) { $seek = fseek($fp,$start,SEEK_SET); $x = fread($fp,$length); $ptr['start'] = $start; $ptr['length'] = strlen($x); - $ptr['data'] = base64_encode($x); + $ptr['content'] = base64_encode($x); } } @@ -617,11 +617,11 @@ require_once('include/api_auth.php'); ); if($r) { if($r[0]['is_dir']) - $r[0]['data'] = ''; + $r[0]['content'] = ''; elseif(intval($r[0]['os_storage'])) - $r[0]['data'] = base64_encode(file_get_contents(dbunescbin($r[0]['data']))); + $r[0]['content'] = base64_encode(file_get_contents(dbunescbin($r[0]['content']))); else - $r[0]['data'] = base64_encode(dbunescbin($r[0]['data'])); + $r[0]['content'] = base64_encode(dbunescbin($r[0]['content'])); $ret = array('attach' => $r[0]); json_return_and_die($ret); @@ -647,16 +647,16 @@ require_once('include/api_auth.php'); if (api_user()===false) return false; if(! $_REQUEST['photo_id']) return false; $scale = ((array_key_exists('scale',$_REQUEST)) ? intval($_REQUEST['scale']) : 0); - $r = q("select * from photo where uid = %d and resource_id = '%s' and scale = %d limit 1", + $r = q("select * from photo where uid = %d and resource_id = '%s' and imgscale = %d limit 1", intval(local_channel()), dbesc($_REQUEST['photo_id']), intval($scale) ); if($r) { - $data = dbunescbin($r[0]['data']); + $data = dbunescbin($r[0]['content']); if(array_key_exists('os_storage',$r[0]) && intval($r[0]['os_storage'])) $data = file_get_contents($data); - $r[0]['data'] = base64_encode($data); + $r[0]['content'] = base64_encode($data); $ret = array('photo' => $r[0]); $i = q("select id from item where uid = %d and resource_type = 'photo' and resource_id = '%s' limit 1", intval(local_channel()), diff --git a/include/attach.php b/include/attach.php index d9cd30f6d..78efde51f 100644 --- a/include/attach.php +++ b/include/attach.php @@ -720,7 +720,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) { $edited = $created; if($options === 'replace') { - $r = q("update attach set filename = '%s', filetype = '%s', folder = '%s', filesize = %d, os_storage = %d, is_photo = %d, data = '%s', edited = '%s' where id = %d and uid = %d", + $r = q("update attach set filename = '%s', filetype = '%s', folder = '%s', filesize = %d, os_storage = %d, is_photo = %d, content = '%s', edited = '%s' where id = %d and uid = %d", dbesc($filename), dbesc($mimetype), dbesc($folder_hash), @@ -734,7 +734,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) { ); } elseif($options === 'revise') { - $r = q("insert into attach ( aid, uid, hash, creator, filename, filetype, folder, filesize, revision, os_storage, is_photo, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) + $r = q("insert into attach ( aid, uid, hash, creator, filename, filetype, folder, filesize, revision, os_storage, is_photo, content, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", intval($x[0]['aid']), intval($channel_id), @@ -775,7 +775,7 @@ function attach_store($channel, $observer_hash, $options = '', $arr = null) { } else { - $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, folder, filesize, revision, os_storage, is_photo, data, created, edited, allow_cid, allow_gid,deny_cid, deny_gid ) + $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, folder, filesize, revision, os_storage, is_photo, content, created, edited, allow_cid, allow_gid,deny_cid, deny_gid ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", intval($channel['channel_account_id']), intval($channel_id), @@ -1032,7 +1032,7 @@ function attach_mkdir($channel, $observer_hash, $arr = null) { $created = datetime_convert(); - $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, folder, os_storage, is_dir, data, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) + $r = q("INSERT INTO attach ( aid, uid, hash, creator, filename, filetype, filesize, revision, folder, os_storage, is_dir, content, created, edited, allow_cid, allow_gid, deny_cid, deny_gid ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s' ) ", intval($channel['channel_account_id']), intval($channel_id), @@ -1275,16 +1275,16 @@ function attach_delete($channel_id, $resource, $is_photo = 0) { // delete a file from filesystem if(intval($r[0]['os_storage'])) { - $y = q("SELECT data FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", + $y = q("SELECT content FROM attach WHERE hash = '%s' AND uid = %d LIMIT 1", dbesc($resource), intval($channel_id) ); if($y) { - if(strpos($y[0]['data'],'store') === false) - $f = 'store/' . $channel_address . '/' . $y[0]['data']; + if(strpos($y[0]['content'],'store') === false) + $f = 'store/' . $channel_address . '/' . $y[0]['content']; else - $f = $y[0]['data']; + $f = $y[0]['content']; if(is_dir($f)) @rmdir($f); @@ -1585,7 +1585,7 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $arr['deny_gid'] = perms2str($u_arr_deny_gid); $arr['item_private'] = $private; $arr['verb'] = ACTIVITY_UPDATE; - $arr['object'] = $u_jsonobject; + $arr['obj'] = $u_jsonobject; $arr['body'] = ''; $post = item_store($arr); @@ -1620,7 +1620,7 @@ function file_activity($channel_id, $object, $allow_cid, $allow_gid, $deny_cid, $arr['deny_gid'] = perms2str($arr_deny_gid); $arr['item_private'] = $private; $arr['verb'] = (($update) ? ACTIVITY_UPDATE : ACTIVITY_POST); - $arr['object'] = (($update) ? $u_jsonobject : $jsonobject); + $arr['obj'] = (($update) ? $u_jsonobject : $jsonobject); $arr['body'] = ''; $post = item_store($arr); @@ -1854,21 +1854,19 @@ function attach_export_data($channel, $resource_id, $deleted = false) { } while($hash_ptr); - - $paths = array_reverse($paths); $ret['attach'] = $paths; if($attach_ptr['is_photo']) { - $r = q("select * from photo where resource_id = '%s' and uid = %d order by scale asc", + $r = q("select * from photo where resource_id = '%s' and uid = %d order by imgscale asc", dbesc($resource_id), intval($channel['channel_id']) ); if($r) { for($x = 0; $x < count($r); $x ++) { - $r[$x]['data'] = base64_encode($r[$x]['data']); + $r[$x]['content'] = base64_encode($r[$x]['content']); } $ret['photo'] = $r; } diff --git a/include/channel.php b/include/channel.php index 0e5490c86..087bd4162 100644 --- a/include/channel.php +++ b/include/channel.php @@ -550,13 +550,13 @@ function identity_basic_export($channel_id, $items = false) { if($r) $ret['config'] = $r; - $r = q("select type, data, os_storage from photo where scale = 4 and photo_usage = %d and uid = %d limit 1", + $r = q("select mimetype, content, os_storage from photo where imgscale = 4 and photo_usage = %d and uid = %d limit 1", intval(PHOTO_PROFILE), intval($channel_id) ); if($r) { - $ret['photo'] = array('type' => $r[0]['type'], 'data' => (($r[0]['os_storage']) ? base64url_encode(file_get_contents($r[0]['data'])) : base64url_encode($r[0]['data']))); + $ret['photo'] = array('type' => $r[0]['mimetype'], 'data' => (($r[0]['os_storage']) ? base64url_encode(file_get_contents($r[0]['content'])) : base64url_encode($r[0]['content']))); } // All other term types will be included in items, if requested. @@ -1108,150 +1108,6 @@ function profile_sidebar($profile, $block = 0, $show_connect = true, $zcard = fa } -/** - * @FIXME or remove - */ - function get_birthdays() { - - $o = ''; - - if(! local_channel()) - return $o; - - $bd_format = t('g A l F d') ; // 8 AM Friday January 18 - $bd_short = t('F d'); - - $r = q("SELECT `event`.*, `event`.`id` AS `eid`, `contact`.* FROM `event` - LEFT JOIN `contact` ON `contact`.`id` = `event`.`cid` - WHERE `event`.`uid` = %d AND `type` = 'birthday' AND `start` < '%s' AND `finish` > '%s' - ORDER BY `start` ASC ", - intval(local_channel()), - dbesc(datetime_convert('UTC','UTC','now + 6 days')), - dbesc(datetime_convert('UTC','UTC','now')) - ); - - if($r && count($r)) { - $total = 0; - $now = strtotime('now'); - $cids = array(); - - $istoday = false; - foreach($r as $rr) { - if(strlen($rr['name'])) - $total ++; - if((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) - $istoday = true; - } - $classtoday = $istoday ? ' birthday-today ' : ''; - if($total) { - foreach($r as &$rr) { - if(! strlen($rr['name'])) - continue; - - // avoid duplicates - - if(in_array($rr['cid'],$cids)) - continue; - $cids[] = $rr['cid']; - - $today = (((strtotime($rr['start'] . ' +00:00') < $now) && (strtotime($rr['finish'] . ' +00:00') > $now)) ? true : false); - $sparkle = ''; - $url = $rr['url']; - if($rr['network'] === NETWORK_DFRN) { - $sparkle = " sparkle"; - $url = z_root() . '/redir/' . $rr['cid']; - } - - $rr['link'] = $url; - $rr['title'] = $rr['name']; - $rr['date'] = day_translate(datetime_convert('UTC', App::$timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : ''); - $rr['startime'] = Null; - $rr['today'] = $today; - } - } - } - $tpl = get_markup_template("birthdays_reminder.tpl"); - return replace_macros($tpl, array( - '$baseurl' => z_root(), - '$classtoday' => $classtoday, - '$count' => $total, - '$event_reminders' => t('Birthday Reminders'), - '$event_title' => t('Birthdays this week:'), - '$events' => $r, - '$lbr' => '{', // raw brackets mess up if/endif macro processing - '$rbr' => '}' - )); - } - - -/** - * @FIXME - */ - function get_events() { - - require_once('include/bbcode.php'); - - if(! local_channel()) - return $o; - - $bd_format = t('g A l F d') ; // 8 AM Friday January 18 - $bd_short = t('F d'); - - $r = q("SELECT `event`.* FROM `event` - WHERE `event`.`uid` = %d AND `type` != 'birthday' AND `start` < '%s' AND `start` > '%s' - ORDER BY `start` ASC ", - intval(local_channel()), - dbesc(datetime_convert('UTC','UTC','now + 6 days')), - dbesc(datetime_convert('UTC','UTC','now - 1 days')) - ); - - if($r && count($r)) { - $now = strtotime('now'); - $istoday = false; - foreach($r as $rr) { - if(strlen($rr['name'])) - $total ++; - - $strt = datetime_convert('UTC',$rr['convert'] ? App::$timezone : 'UTC',$rr['start'],'Y-m-d'); - if($strt === datetime_convert('UTC',App::$timezone,'now','Y-m-d')) - $istoday = true; - } - $classtoday = (($istoday) ? 'event-today' : ''); - - foreach($r as &$rr) { - if($rr['adjust']) - $md = datetime_convert('UTC',App::$timezone,$rr['start'],'Y/m'); - else - $md = datetime_convert('UTC','UTC',$rr['start'],'Y/m'); - $md .= "/#link-".$rr['id']; - - $title = substr(strip_tags(bbcode($rr['desc'])),0,32) . '... '; - if(! $title) - $title = t('[No description]'); - - $strt = datetime_convert('UTC',$rr['convert'] ? App::$timezone : 'UTC',$rr['start']); - $today = ((substr($strt,0,10) === datetime_convert('UTC',App::$timezone,'now','Y-m-d')) ? true : false); - - $rr['link'] = $md; - $rr['title'] = $title; - $rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? App::$timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : ''); - $rr['startime'] = $strt; - $rr['today'] = $today; - } - } - - $tpl = get_markup_template("events_reminder.tpl"); - return replace_macros($tpl, array( - '$baseurl' => z_root(), - '$classtoday' => $classtoday, - '$count' => count($r), - '$event_reminders' => t('Event Reminders'), - '$event_title' => t('Events this week:'), - '$events' => $r, - )); - } - - function advanced_profile(&$a) { require_once('include/text.php'); if(! perm_is_allowed(App::$profile['profile_uid'],get_observer_hash(),'view_profile')) @@ -1785,7 +1641,7 @@ function auto_channel_create($account_id) { function get_cover_photo($channel_id,$format = 'bbcode', $res = PHOTO_RES_COVER_1200) { - $r = q("select height, width, resource_id, type from photo where uid = %d and scale = %d and photo_usage = %d", + $r = q("select height, width, resource_id, mimetype from photo where uid = %d and imgscale = %d and photo_usage = %d", intval($channel_id), intval($res), intval(PHOTO_COVER) @@ -1808,8 +1664,8 @@ function get_cover_photo($channel_id,$format = 'bbcode', $res = PHOTO_RES_COVER_ default: $output = array( 'width' => $r[0]['width'], - 'height' => $r[0]['type'], - 'type' => $r[0]['type'], + 'height' => $r[0]['height'], + 'type' => $r[0]['mimetype'], 'url' => $url ); break; @@ -1834,19 +1690,19 @@ function get_zcard($channel,$observer_hash = '',$args = array()) { $width = 425; $size = 'hz_small'; $cover_size = PHOTO_RES_COVER_425; - $pphoto = array('type' => $channel['xchan_photo_mimetype'], 'width' => 80 , 'height' => 80, 'href' => $channel['xchan_photo_m']); + $pphoto = array('mimetype' => $channel['xchan_photo_mimetype'], 'width' => 80 , 'height' => 80, 'href' => $channel['xchan_photo_m']); } elseif($maxwidth <= 900) { $width = 900; $size = 'hz_medium'; $cover_size = PHOTO_RES_COVER_850; - $pphoto = array('type' => $channel['xchan_photo_mimetype'], 'width' => 160 , 'height' => 160, 'href' => $channel['xchan_photo_l']); + $pphoto = array('mimetype' => $channel['xchan_photo_mimetype'], 'width' => 160 , 'height' => 160, 'href' => $channel['xchan_photo_l']); } elseif($maxwidth <= 1200) { $width = 1200; $size = 'hz_large'; $cover_size = PHOTO_RES_COVER_1200; - $pphoto = array('type' => $channel['xchan_photo_mimetype'], 'width' => 300 , 'height' => 300, 'href' => $channel['xchan_photo_l']); + $pphoto = array('mimetype' => $channel['xchan_photo_mimetype'], 'width' => 300 , 'height' => 300, 'href' => $channel['xchan_photo_l']); } // $scale = (float) $maxwidth / $width; @@ -1856,7 +1712,7 @@ function get_zcard($channel,$observer_hash = '',$args = array()) { $channel['channel_addr'] = $channel['channel_address'] . '@' . App::get_hostname(); $zcard = array('chan' => $channel); - $r = q("select height, width, resource_id, scale, type from photo where uid = %d and scale = %d and photo_usage = %d", + $r = q("select height, width, resource_id, imgscale, mimetype from photo where uid = %d and imgscale = %d and photo_usage = %d", intval($channel['channel_id']), intval($cover_size), intval(PHOTO_COVER) @@ -1864,7 +1720,7 @@ function get_zcard($channel,$observer_hash = '',$args = array()) { if($r) { $cover = $r[0]; - $cover['href'] = z_root() . '/photo/' . $r[0]['resource_id'] . '-' . $r[0]['scale']; + $cover['href'] = z_root() . '/photo/' . $r[0]['resource_id'] . '-' . $r[0]['imgscale']; } else { $cover = $pphoto; @@ -1900,25 +1756,25 @@ function get_zcard_embed($channel,$observer_hash = '',$args = array()) { $width = 425; $size = 'hz_small'; $cover_size = PHOTO_RES_COVER_425; - $pphoto = array('type' => $channel['xchan_photo_mimetype'], 'width' => 80 , 'height' => 80, 'href' => $channel['xchan_photo_m']); + $pphoto = array('mimetype' => $channel['xchan_photo_mimetype'], 'width' => 80 , 'height' => 80, 'href' => $channel['xchan_photo_m']); } elseif($maxwidth <= 900) { $width = 900; $size = 'hz_medium'; $cover_size = PHOTO_RES_COVER_850; - $pphoto = array('type' => $channel['xchan_photo_mimetype'], 'width' => 160 , 'height' => 160, 'href' => $channel['xchan_photo_l']); + $pphoto = array('mimetype' => $channel['xchan_photo_mimetype'], 'width' => 160 , 'height' => 160, 'href' => $channel['xchan_photo_l']); } elseif($maxwidth <= 1200) { $width = 1200; $size = 'hz_large'; $cover_size = PHOTO_RES_COVER_1200; - $pphoto = array('type' => $channel['xchan_photo_mimetype'], 'width' => 300 , 'height' => 300, 'href' => $channel['xchan_photo_l']); + $pphoto = array('mimetype' => $channel['xchan_photo_mimetype'], 'width' => 300 , 'height' => 300, 'href' => $channel['xchan_photo_l']); } $channel['channel_addr'] = $channel['channel_address'] . '@' . App::get_hostname(); $zcard = array('chan' => $channel); - $r = q("select height, width, resource_id, scale, type from photo where uid = %d and scale = %d and photo_usage = %d", + $r = q("select height, width, resource_id, imgscale, mimetype from photo where uid = %d and imgscale = %d and photo_usage = %d", intval($channel['channel_id']), intval($cover_size), intval(PHOTO_COVER) @@ -1926,7 +1782,7 @@ function get_zcard_embed($channel,$observer_hash = '',$args = array()) { if($r) { $cover = $r[0]; - $cover['href'] = z_root() . '/photo/' . $r[0]['resource_id'] . '-' . $r[0]['scale']; + $cover['href'] = z_root() . '/photo/' . $r[0]['resource_id'] . '-' . $r[0]['imgscale']; } else { $cover = $pphoto; diff --git a/include/conversation.php b/include/conversation.php index dabe2ca93..518193b08 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -93,15 +93,15 @@ function localize_item(&$item){ if (activity_match($item['verb'],ACTIVITY_LIKE) || activity_match($item['verb'],ACTIVITY_DISLIKE)){ - if(! $item['object']) + if(! $item['obj']) return; if(intval($item['item_thread_top'])) return; - $obj = json_decode_plus($item['object']); - if((! $obj) && ($item['object'])) { - logger('localize_item: failed to decode object: ' . print_r($item['object'],true)); + $obj = json_decode_plus($item['obj']); + if((! $obj) && ($item['obj'])) { + logger('localize_item: failed to decode object: ' . print_r($item['obj'],true)); } if($obj['author'] && $obj['author']['link']) @@ -186,7 +186,7 @@ function localize_item(&$item){ $Alink = $item['author']['xchan_url']; - $obj= json_decode_plus($item['object']); + $obj= json_decode_plus($item['obj']); $Blink = $Bphoto = ''; @@ -219,7 +219,7 @@ function localize_item(&$item){ $Aname = $item['author']['xchan_name']; $Alink = $item['author']['xchan_url']; - $obj= json_decode_plus($item['object']); + $obj= json_decode_plus($item['obj']); $Blink = $Bphoto = ''; @@ -299,7 +299,7 @@ function localize_item(&$item){ } $plink = '[zrl=' . $obj['plink'] . ']' . $post_type . '[/zrl]'; - $parsedobj = parse_xml_string($xmlhead.$item['object']); + $parsedobj = parse_xml_string($xmlhead.$item['obj']); $tag = sprintf('#[zrl=%s]%s[/zrl]', $parsedobj->id, $parsedobj->content); $item['body'] = sprintf( t('%1$s tagged %2$s\'s %3$s with %4$s'), $author, $objauthor, $plink, $tag ); @@ -316,7 +316,7 @@ function localize_item(&$item){ $xmlhead="<"."?xml version='1.0' encoding='UTF-8' ?".">"; - $obj = parse_xml_string($xmlhead.$item['object']); + $obj = parse_xml_string($xmlhead.$item['obj']); if(strlen($obj->id)) { $r = q("select * from item where mid = '%s' and uid = %d limit 1", dbesc($obj->id), diff --git a/include/event.php b/include/event.php index 81e403d37..a4118ec78 100644 --- a/include/event.php +++ b/include/event.php @@ -28,22 +28,22 @@ function format_event_html($ev) { $o .= '

 ' . bbcode($ev['summary']) . '

' . "\r\n"; $o .= '
' . t('Starts:') . ' ' . (($ev['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), - $ev['start'] , $bd_format )) + $ev['dtstart'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', - $ev['start'] , $bd_format))) + $ev['dtstart'] , $bd_format))) . '
' . "\r\n"; if(! $ev['nofinish']) $o .= '
' . t('Finishes:') . ' ' . (($ev['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), - $ev['finish'] , $bd_format )) + $ev['dtend'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', - $ev['finish'] , $bd_format ))) + $ev['dtend'] , $bd_format ))) . '
' . "\r\n"; $o .= '
' . bbcode($ev['description']) . '
' . "\r\n"; @@ -58,6 +58,37 @@ function format_event_html($ev) { return $o; } +function format_event_obj($jobject) { + $event = array(); + + $object = json_decode($jobject,true); + + //ensure compatibility with older items - this check can be removed at a later point + if(array_key_exists('description', $object)) { + + $bd_format = t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8:01 AM + + $event['header'] = replace_macros(get_markup_template('event_item_header.tpl'),array( + '$title' => bbcode($object['title']), + '$dtstart_label' => t('Starts:'), + '$dtstart_title' => datetime_convert('UTC', 'UTC', $object['dtstart'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), + '$dtstart_dt' => (($object['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['dtstart'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $object['dtstart'] , $bd_format))), + '$finish' => (($object['nofinish']) ? false : true), + '$dtend_label' => t('Finishes:'), + '$dtend_title' => datetime_convert('UTC','UTC',$object['dtend'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), + '$dtend_dt' => (($object['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['dtend'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $object['dtend'] , $bd_format ))) + )); + + $event['content'] = replace_macros(get_markup_template('event_item_content.tpl'),array( + '$description' => bbcode($object['description']), + '$location_label' => t('Location:'), + '$location' => bbcode($object['location']) + )); + + } + + return $event; +} function ical_wrapper($ev) { @@ -68,7 +99,7 @@ function ical_wrapper($ev) { $o .= "\r\nVERSION:2.0"; $o .= "\r\nMETHOD:PUBLISH"; $o .= "\r\nPRODID:-//" . get_config('system','sitename') . "//" . Zotlabs\Lib\System::get_platform_name() . "//" . strtoupper(App::$language). "\r\n"; - if(array_key_exists('start', $ev)) + if(array_key_exists('dtstart', $ev)) $o .= format_event_ical($ev); else { foreach($ev as $e) { @@ -82,7 +113,7 @@ function ical_wrapper($ev) { function format_event_ical($ev) { - if($ev['type'] === 'task') + if($ev['etype'] === 'task') return format_todo_ical($ev); $o = ''; @@ -92,10 +123,10 @@ function format_event_ical($ev) { $o .= "\r\nCREATED:" . datetime_convert('UTC','UTC', $ev['created'],'Ymd\\THis\\Z'); $o .= "\r\nLAST-MODIFIED:" . datetime_convert('UTC','UTC', $ev['edited'],'Ymd\\THis\\Z'); $o .= "\r\nDTSTAMP:" . datetime_convert('UTC','UTC', $ev['edited'],'Ymd\\THis\\Z'); - if($ev['start']) - $o .= "\r\nDTSTART:" . datetime_convert('UTC','UTC', $ev['start'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); - if($ev['finish'] && ! $ev['nofinish']) - $o .= "\r\nDTEND:" . datetime_convert('UTC','UTC', $ev['finish'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); + if($ev['dtstart']) + $o .= "\r\nDTSTART:" . datetime_convert('UTC','UTC', $ev['dtstart'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); + if($ev['dtend'] && ! $ev['nofinish']) + $o .= "\r\nDTEND:" . datetime_convert('UTC','UTC', $ev['dtend'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); if($ev['summary']) $o .= "\r\nSUMMARY:" . format_ical_text($ev['summary']); if($ev['location']) @@ -119,10 +150,10 @@ function format_todo_ical($ev) { $o .= "\r\nCREATED:" . datetime_convert('UTC','UTC', $ev['created'],'Ymd\\THis\\Z'); $o .= "\r\nLAST-MODIFIED:" . datetime_convert('UTC','UTC', $ev['edited'],'Ymd\\THis\\Z'); $o .= "\r\nDTSTAMP:" . datetime_convert('UTC','UTC', $ev['edited'],'Ymd\\THis\\Z'); - if($ev['start']) - $o .= "\r\nDTSTART:" . datetime_convert('UTC','UTC', $ev['start'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); - if($ev['finish'] && ! $ev['nofinish']) - $o .= "\r\nDUE:" . datetime_convert('UTC','UTC', $ev['finish'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); + if($ev['dtstart']) + $o .= "\r\nDTSTART:" . datetime_convert('UTC','UTC', $ev['dtstart'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); + if($ev['dtend'] && ! $ev['nofinish']) + $o .= "\r\nDUE:" . datetime_convert('UTC','UTC', $ev['dtend'],'Ymd\\THis' . (($ev['adjust']) ? '\\Z' : '')); if($ev['summary']) $o .= "\r\nSUMMARY:" . format_ical_text($ev['summary']); if($ev['event_status']) { @@ -166,11 +197,11 @@ function format_event_bbcode($ev) { if($ev['description']) $o .= '[event-description]' . $ev['description'] . '[/event-description]'; - if($ev['start']) - $o .= '[event-start]' . $ev['start'] . '[/event-start]'; + if($ev['dtstart']) + $o .= '[event-start]' . $ev['dtstart'] . '[/event-start]'; - if(($ev['finish']) && (! $ev['nofinish'])) - $o .= '[event-finish]' . $ev['finish'] . '[/event-finish]'; + if(($ev['dtend']) && (! $ev['nofinish'])) + $o .= '[event-finish]' . $ev['dtend'] . '[/event-finish]'; if($ev['location']) $o .= '[event-location]' . $ev['location'] . '[/event-location]'; @@ -207,10 +238,10 @@ function bbtoevent($s) { $ev['description'] = $match[1]; $match = ''; if(preg_match("/\[event\-start\](.*?)\[\/event\-start\]/is",$s,$match)) - $ev['start'] = $match[1]; + $ev['dtstart'] = $match[1]; $match = ''; if(preg_match("/\[event\-finish\](.*?)\[\/event\-finish\]/is",$s,$match)) - $ev['finish'] = $match[1]; + $ev['dtend'] = $match[1]; $match = ''; if(preg_match("/\[event\-location\](.*?)\[\/event\-location\]/is",$s,$match)) $ev['location'] = $match[1]; @@ -220,11 +251,11 @@ function bbtoevent($s) { $match = ''; if(preg_match("/\[event\-adjust\](.*?)\[\/event\-adjust\]/is",$s,$match)) $ev['adjust'] = $match[1]; - if(array_key_exists('start',$ev)) { - if(array_key_exists('finish',$ev)) { - if($ev['finish'] === $ev['start']) + if(array_key_exists('dtstart',$ev)) { + if(array_key_exists('dtend',$ev)) { + if($ev['dtend'] === $ev['dtstart']) $ev['nofinish'] = 1; - elseif($ev['finish']) + elseif($ev['dtend']) $ev['nofinish'] = 0; else $ev['nofinish'] = 1; @@ -260,8 +291,8 @@ function sort_by_date($arr) { */ 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']); + $date_a = (($a['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$a['dtstart']) : $a['dtstart']); + $date_b = (($b['adjust']) ? datetime_convert('UTC',date_default_timezone_get(),$b['dtstart']) : $b['dtstart']); if ($date_a === $date_b) return strcasecmp($a['description'], $b['description']); @@ -274,7 +305,7 @@ function event_store_event($arr) { $arr['created'] = (($arr['created']) ? $arr['created'] : datetime_convert()); $arr['edited'] = (($arr['edited']) ? $arr['edited'] : datetime_convert()); - $arr['type'] = (($arr['type']) ? $arr['type'] : 'event' ); + $arr['etype'] = (($arr['etype']) ? $arr['etype'] : 'event' ); $arr['event_xchan'] = (($arr['event_xchan']) ? $arr['event_xchan'] : ''); $arr['event_priority'] = (($arr['event_priority']) ? $arr['event_priority'] : 0); @@ -324,12 +355,12 @@ function event_store_event($arr) { $r = q("UPDATE `event` SET `edited` = '%s', - `start` = '%s', - `finish` = '%s', + `dtstart` = '%s', + `dtend` = '%s', `summary` = '%s', `description` = '%s', `location` = '%s', - `type` = '%s', + `etype` = '%s', `adjust` = %d, `nofinish` = %d, `event_status` = '%s', @@ -345,12 +376,12 @@ function event_store_event($arr) { WHERE `id` = %d AND `uid` = %d", dbesc($arr['edited']), - dbesc($arr['start']), - dbesc($arr['finish']), + dbesc($arr['dtstart']), + dbesc($arr['dtend']), dbesc($arr['summary']), dbesc($arr['description']), dbesc($arr['location']), - dbesc($arr['type']), + dbesc($arr['etype']), intval($arr['adjust']), intval($arr['nofinish']), dbesc($arr['event_status']), @@ -378,7 +409,7 @@ function event_store_event($arr) { else $hash = random_string() . '@' . App::get_hostname(); - $r = q("INSERT INTO event ( uid,aid,event_xchan,event_hash,created,edited,start,finish,summary,description,location,type, + $r = q("INSERT INTO event ( uid,aid,event_xchan,event_hash,created,edited,dtstart,dtend,summary,description,location,etype, adjust,nofinish, event_status, event_status_date, event_percent, event_repeat, event_sequence, event_priority, allow_cid,allow_gid,deny_cid,deny_gid) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, '%s', %d, %d, '%s', '%s', '%s', '%s' ) ", intval($arr['uid']), @@ -387,12 +418,12 @@ function event_store_event($arr) { dbesc($hash), dbesc($arr['created']), dbesc($arr['edited']), - dbesc($arr['start']), - dbesc($arr['finish']), + dbesc($arr['dtstart']), + dbesc($arr['dtend']), dbesc($arr['summary']), dbesc($arr['description']), dbesc($arr['location']), - dbesc($arr['type']), + dbesc($arr['etype']), intval($arr['adjust']), intval($arr['nofinish']), dbesc($arr['event_status']), @@ -441,7 +472,7 @@ function event_addtocal($item_id, $uid) { $ev = bbtoevent($r[0]['body']); - if(x($ev,'summary') && x($ev,'start')) { + if(x($ev,'summary') && x($ev,'dtstart')) { $ev['event_xchan'] = $item['author_xchan']; $ev['uid'] = $channel['channel_id']; $ev['account'] = $channel['channel_account_id']; @@ -554,20 +585,20 @@ function event_import_ical($ical, $uid) { // logger('dtstart: ' . var_export($dtstart,true)); - $ev['start'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', + $ev['dtstart'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', $dtstart->format(\DateTime::W3C)); if(isset($ical->DTEND)) { $dtend = $ical->DTEND->getDateTime(); - $ev['finish'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', + $ev['dtend'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', $dtend->format(\DateTime::W3C)); } else $ev['nofinish'] = 1; - if($ev['start'] === $ev['finish']) + if($ev['dtstart'] === $ev['dtend']) $ev['nofinish'] = 1; if(isset($ical->CREATED)) { @@ -601,7 +632,7 @@ function event_import_ical($ical, $uid) { $ev['external_id'] = $evuid; } - if($ev['summary'] && $ev['start']) { + if($ev['summary'] && $ev['dtstart']) { $ev['event_xchan'] = $channel['channel_hash']; $ev['uid'] = $channel['channel_id']; $ev['account'] = $channel['channel_account_id']; @@ -640,29 +671,24 @@ function event_import_ical_task($ical, $uid) { $dtstart = $ical->DTSTART->getDateTime(); + $ev['adjust'] = (($ical->DTSTART->isFloating()) ? 1 : 0); + // logger('dtstart: ' . var_export($dtstart,true)); - if(($dtstart->timezone_type == 2) || (($dtstart->timezone_type == 3) && ($dtstart->timezone === 'UTC'))) { - $ev['adjust'] = 1; - } - else { - $ev['adjust'] = 0; - } - - $ev['start'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', + $ev['dtstart'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', $dtstart->format(\DateTime::W3C)); if(isset($ical->DUE)) { $dtend = $ical->DUE->getDateTime(); - $ev['finish'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', + $ev['dtend'] = datetime_convert((($ev['adjust']) ? 'UTC' : date_default_timezone_get()),'UTC', $dtend->format(\DateTime::W3C)); } else $ev['nofinish'] = 1; - if($ev['start'] === $ev['finish']) + if($ev['dtstart'] === $ev['dtend']) $ev['nofinish'] = 1; if(isset($ical->CREATED)) { @@ -727,9 +753,9 @@ function event_import_ical_task($ical, $uid) { $ev['event_percent'] = (string) $ical->{'PERCENT-COMPLETE'} ; } - $ev['type'] = 'task'; + $ev['etype'] = 'task'; - if($ev['summary'] && $ev['start']) { + if($ev['summary'] && $ev['dtstart']) { $ev['event_xchan'] = $channel['channel_hash']; $ev['uid'] = $channel['channel_id']; $ev['account'] = $channel['channel_account_id']; @@ -781,7 +807,7 @@ function event_store_item($arr, $event) { if(($event) && array_key_exists('event_hash',$event) && (! array_key_exists('event_hash',$arr))) $arr['event_hash'] = $event['event_hash']; - if($event['type'] === 'birthday') { + if($event['etype'] === 'birthday') { if(! is_sys_channel($arr['uid'])) $prefix = t('This event has been added to your calendar.'); // $birthday = true; @@ -805,21 +831,22 @@ function event_store_item($arr, $event) { 'type' => ACTIVITY_OBJ_EVENT, 'id' => z_root() . '/event/' . $r[0]['resource_id'], 'title' => $arr['summary'], - 'start' => $arr['start'], - 'finish' => $arr['finish'], + 'dtstart' => $arr['dtstart'], + 'dtend' => $arr['dtend'], 'nofinish' => $arr['nofinish'], 'description' => $arr['description'], 'location' => $arr['location'], 'adjust' => $arr['adjust'], 'content' => format_event_bbcode($arr), 'author' => array( - 'name' => $r[0]['xchan_name'], - 'address' => $r[0]['xchan_addr'], - 'guid' => $r[0]['xchan_guid'], - 'guid_sig' => $r[0]['xchan_guid_sig'], - 'link' => array( - array('rel' => 'alternate', 'type' => 'text/html', 'href' => $r[0]['xchan_url']), - array('rel' => 'photo', 'type' => $r[0]['xchan_photo_mimetype'], 'href' => $r[0]['xchan_photo_m'])), + 'name' => $r[0]['xchan_name'], + 'address' => $r[0]['xchan_addr'], + 'guid' => $r[0]['xchan_guid'], + 'guid_sig' => $r[0]['xchan_guid_sig'], + 'link' => array( + array('rel' => 'alternate', 'type' => 'text/html', 'href' => $r[0]['xchan_url']), + array('rel' => 'photo', 'type' => $r[0]['xchan_photo_mimetype'], 'href' => $r[0]['xchan_photo_m']) + ), ), )); @@ -830,7 +857,7 @@ function event_store_item($arr, $event) { $sig = ''; - q("UPDATE item SET title = '%s', body = '%s', object = '%s', allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', edited = '%s', sig = '%s', item_flags = %d, item_private = %d, obj_type = '%s' WHERE id = %d AND uid = %d", + q("UPDATE item SET title = '%s', body = '%s', obj = '%s', allow_cid = '%s', allow_gid = '%s', deny_cid = '%s', deny_gid = '%s', edited = '%s', sig = '%s', item_flags = %d, item_private = %d, obj_type = '%s' WHERE id = %d AND uid = %d", dbesc($arr['summary']), dbesc($prefix . format_event_bbcode($arr)), dbesc($object), @@ -946,12 +973,12 @@ function event_store_item($arr, $event) { dbesc($arr['event_xchan']) ); if($x) { - $item_arr['object'] = json_encode(array( + $item_arr['obj'] = json_encode(array( 'type' => ACTIVITY_OBJ_EVENT, 'id' => z_root() . '/event/' . $event['event_hash'], 'title' => $arr['summary'], - 'start' => $arr['start'], - 'finish' => $arr['finish'], + 'dtstart' => $arr['dtstart'], + 'dtend' => $arr['dtend'], 'nofinish' => $arr['nofinish'], 'description' => $arr['description'], 'location' => $arr['location'], @@ -1001,7 +1028,7 @@ function tasks_fetch($arr) { if($arr && $arr['all'] == 1) $sql_extra = ''; - $r = q("select * from event where type = 'task' and uid = %d $sql_extra order by created desc", + $r = q("select * from event where etype = 'task' and uid = %d $sql_extra order by created desc", intval(local_channel()) ); diff --git a/include/feedutils.php b/include/feedutils.php index fb938cfdd..685b2f982 100644 --- a/include/feedutils.php +++ b/include/feedutils.php @@ -144,9 +144,9 @@ function construct_verb($item) { function construct_activity_object($item) { - if($item['object']) { + if($item['obj']) { $o = '' . "\r\n"; - $r = json_decode($item['object'],false); + $r = json_decode($item['obj'],false); if(! $r) return ''; @@ -582,7 +582,7 @@ function get_atom_elements($feed, $item, &$author) { $obj['content'] = $body; } - $res['object'] = $obj; + $res['obj'] = $obj; } $rawobj = $item->get_item_tags(NAMESPACE_ACTIVITY, 'target'); @@ -1163,12 +1163,12 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { } if(activity_match($item['obj_type'],ACTIVITY_OBJ_EVENT) && activity_match($item['verb'],ACTIVITY_POST)) { - $obj = ((is_array($item['obj'])) ? $item['object'] : json_decode($item['object'],true)); + $obj = ((is_array($item['obj'])) ? $item['obj'] : json_decode($item['obj'],true)); $o .= '' . xmlify($item['title']) . '' . "\r\n"; $o .= '' . xmlify(bbcode($obj['title'])) . '' . "\r\n"; - $o .= '' . datetime_convert('UTC','UTC', $obj['start'],'Ymd\\THis' . (($obj['adjust']) ? '\\Z' : '')) . '' . "\r\n"; - $o .= '' . datetime_convert('UTC','UTC', $obj['finish'],'Ymd\\THis' . (($obj['adjust']) ? '\\Z' : '')) . '' . "\r\n"; + $o .= '' . datetime_convert('UTC','UTC', $obj['dtstart'],'Ymd\\THis' . (($obj['adjust']) ? '\\Z' : '')) . '' . "\r\n"; + $o .= '' . datetime_convert('UTC','UTC', $obj['dtend'],'Ymd\\THis' . (($obj['adjust']) ? '\\Z' : '')) . '' . "\r\n"; $o .= '' . xmlify(bbcode($obj['location'])) . '' . "\r\n"; $o .= '' . xmlify(bbcode($obj['description'])) . '' . "\r\n"; } diff --git a/include/import.php b/include/import.php index d094fb582..6fcb08416 100644 --- a/include/import.php +++ b/include/import.php @@ -974,6 +974,11 @@ function sync_files($channel,$files) { $attachment_stored = false; foreach($f['attach'] as $att) { + if(array_key_exists('data',$att)) { + $att['content'] = $att['data']; + unset($att['data']); + } + if($att['deleted']) { attach_delete($channel,$att['hash']); continue; @@ -1043,7 +1048,7 @@ function sync_files($channel,$files) { // @fixme - update attachment structures if they are modified rather than created - $att['data'] = $newfname; + $att['content'] = $newfname; // Note: we use $att['hash'] below after it has been escaped to // fetch the file contents. @@ -1125,6 +1130,15 @@ function sync_files($channel,$files) { $p['aid'] = $channel['channel_account_id']; $p['uid'] = $channel['channel_id']; + if(array_key_exists('data',$p)) { + $p['content'] = $p['data']; + unset($p['data']); + } + if(array_key_exists('scale',$p)) { + $p['imgscale'] = $p['scale']; + unset($p['scale']); + } + // if this is a profile photo, undo the profile photo bit // for any other photo which previously held it. @@ -1150,15 +1164,15 @@ function sync_files($channel,$files) { ); } - if($p['scale'] === 0 && $p['os_storage']) - $p['data'] = $store_path; + if($p['imgscale'] === 0 && $p['os_storage']) + $p['content'] = $store_path; else - $p['data'] = base64_decode($p['data']); + $p['content'] = base64_decode($p['content']); - $exists = q("select * from photo where resource_id = '%s' and scale = %d and uid = %d limit 1", + $exists = q("select * from photo where resource_id = '%s' and imgscale = %d and uid = %d limit 1", dbesc($p['resource_id']), - intval($p['scale']), + intval($p['imgscale']), intval($channel['channel_id']) ); diff --git a/include/items.php b/include/items.php index b283ed3ab..f473b2bac 100755 --- a/include/items.php +++ b/include/items.php @@ -666,7 +666,7 @@ function get_item_elements($x,$allow_code = false) { $arr['diaspora_meta'] = (($x['diaspora_signature']) ? $x['diaspora_signature'] : ''); - $arr['object'] = activity_sanitise($x['object']); + $arr['obj'] = activity_sanitise($x['object']); $arr['target'] = activity_sanitise($x['target']); $arr['attach'] = activity_sanitise($x['attach']); @@ -1055,8 +1055,8 @@ function encode_item($item,$mirror = false) { $x['owner'] = encode_item_xchan($item['owner']); $x['author'] = encode_item_xchan($item['author']); - if($item['object']) - $x['object'] = json_decode_plus($item['object']); + if($item['obj']) + $x['object'] = json_decode_plus($item['obj']); if($item['target']) $x['target'] = json_decode_plus($item['target']); if($item['attach']) @@ -1595,9 +1595,9 @@ function item_store($arr, $allow_exec = false, $deliver = true) { } } - if((x($arr,'object')) && is_array($arr['object'])) { - activity_sanitise($arr['object']); - $arr['object'] = json_encode($arr['object']); + if((x($arr,'obj')) && is_array($arr['obj'])) { + activity_sanitise($arr['obj']); + $arr['obj'] = json_encode($arr['obj']); } if((x($arr,'target')) && is_array($arr['target'])) { @@ -1628,7 +1628,7 @@ function item_store($arr, $allow_exec = false, $deliver = true) { $arr['thr_parent'] = ((x($arr,'thr_parent')) ? notags(trim($arr['thr_parent'])) : $arr['parent_mid']); $arr['verb'] = ((x($arr,'verb')) ? notags(trim($arr['verb'])) : ACTIVITY_POST); $arr['obj_type'] = ((x($arr,'obj_type')) ? notags(trim($arr['obj_type'])) : ACTIVITY_OBJ_NOTE); - $arr['object'] = ((x($arr,'object')) ? trim($arr['object']) : ''); + $arr['obj'] = ((x($arr,'obj')) ? trim($arr['obj']) : ''); $arr['tgt_type'] = ((x($arr,'tgt_type')) ? notags(trim($arr['tgt_type'])) : ''); $arr['target'] = ((x($arr,'target')) ? trim($arr['target']) : ''); $arr['plink'] = ((x($arr,'plink')) ? notags(trim($arr['plink'])) : ''); @@ -1697,7 +1697,7 @@ function item_store($arr, $allow_exec = false, $deliver = true) { return $ret; } - if(($arr['obj_type'] == ACTIVITY_OBJ_NOTE) && (! $arr['object'])) + if(($arr['obj_type'] == ACTIVITY_OBJ_NOTE) && (! $arr['obj'])) $arr['obj_type'] = ACTIVITY_OBJ_COMMENT; // is the new message multi-level threaded? @@ -1991,9 +1991,9 @@ function item_store_update($arr,$allow_exec = false, $deliver = true) { } } - if((x($arr,'object')) && is_array($arr['object'])) { - activity_sanitise($arr['object']); - $arr['object'] = json_encode($arr['object']); + if((x($arr,'obj')) && is_array($arr['obj'])) { + activity_sanitise($arr['obj']); + $arr['obj'] = json_encode($arr['obj']); } if((x($arr,'target')) && is_array($arr['target'])) { @@ -2035,7 +2035,7 @@ function item_store_update($arr,$allow_exec = false, $deliver = true) { $arr['coord'] = ((x($arr,'coord')) ? notags(trim($arr['coord'])) : $orig[0]['coord']); $arr['verb'] = ((x($arr,'verb')) ? notags(trim($arr['verb'])) : $orig[0]['verb']); $arr['obj_type'] = ((x($arr,'obj_type')) ? notags(trim($arr['obj_type'])) : $orig[0]['obj_type']); - $arr['object'] = ((x($arr,'object')) ? trim($arr['object']) : $orig[0]['object']); + $arr['obj'] = ((x($arr,'obj')) ? trim($arr['obj']) : $orig[0]['obj']); $arr['tgt_type'] = ((x($arr,'tgt_type')) ? notags(trim($arr['tgt_type'])) : $orig[0]['tgt_type']); $arr['target'] = ((x($arr,'target')) ? trim($arr['target']) : $orig[0]['target']); $arr['plink'] = ((x($arr,'plink')) ? notags(trim($arr['plink'])) : $orig[0]['plink']); @@ -2369,10 +2369,10 @@ function tag_deliver($uid, $item_id) { if (stristr($item['verb'],ACTIVITY_POKE)) { $poke_notify = true; - if(($item['obj_type'] == "") || ($item['obj_type'] !== ACTIVITY_OBJ_PERSON) || (! $item['object'])) + if(($item['obj_type'] == "") || ($item['obj_type'] !== ACTIVITY_OBJ_PERSON) || (! $item['obj'])) $poke_notify = false; - $obj = json_decode_plus($item['object']); + $obj = json_decode_plus($item['obj']); if($obj) { if($obj['id'] !== $u[0]['channel_hash']) $poke_notify = false; @@ -2416,7 +2416,7 @@ function tag_deliver($uid, $item_id) { intval($u[0]['channel_id']) ); if($p) { - $j_obj = json_decode_plus($item['object']); + $j_obj = json_decode_plus($item['obj']); logger('tag_deliver: tag object: ' . print_r($j_obj,true), LOGGER_DATA); if($j_obj && $j_obj['id'] && $j_obj['title']) { if(is_array($j_obj['link'])) @@ -3093,7 +3093,7 @@ function fix_private_photos($s, $uid, $item = null, $cid = 0) { if($x) { $res = substr($i,$x+1); $i = substr($i,0,$x); - $r = q("SELECT * FROM `photo` WHERE `resource_id` = '%s' AND `scale` = %d AND `uid` = %d", + $r = q("SELECT * FROM `photo` WHERE `resource_id` = '%s' AND `imgscale` = %d AND `uid` = %d", dbesc($i), intval($res), intval($uid) @@ -4263,7 +4263,7 @@ function send_profile_photo_activity($channel,$photo,$profile) { $arr['obj_type'] = ACTIVITY_OBJ_PHOTO; $arr['verb'] = ACTIVITY_UPDATE; - $arr['object'] = json_encode(array( + $arr['obj'] = json_encode(array( 'type' => $arr['obj_type'], 'id' => z_root() . '/photo/profile/l/' . $channel['channel_id'], 'link' => array('rel' => 'photo', 'type' => $photo['type'], 'href' => z_root() . '/photo/profile/l/' . $channel['channel_id']) diff --git a/include/photo/photo_driver.php b/include/photo/photo_driver.php index e57a9165a..6de75d497 100644 --- a/include/photo/photo_driver.php +++ b/include/photo/photo_driver.php @@ -316,7 +316,7 @@ abstract class photo_driver { $p['resource_id'] = (($arr['resource_id']) ? $arr['resource_id'] : ''); $p['filename'] = (($arr['filename']) ? $arr['filename'] : ''); $p['album'] = (($arr['album']) ? $arr['album'] : ''); - $p['scale'] = ((intval($arr['scale'])) ? intval($arr['scale']) : 0); + $p['imgscale'] = ((intval($arr['imgscale'])) ? intval($arr['imgscale']) : 0); $p['allow_cid'] = (($arr['allow_cid']) ? $arr['allow_cid'] : ''); $p['allow_gid'] = (($arr['allow_gid']) ? $arr['allow_gid'] : ''); $p['deny_cid'] = (($arr['deny_cid']) ? $arr['deny_cid'] : ''); @@ -329,14 +329,14 @@ abstract class photo_driver { $p['os_storage'] = intval($arr['os_storage']); $p['os_path'] = $arr['os_path']; - if(! intval($p['scale'])) - logger('save: ' . print_r($arr,true)); + if(! intval($p['imgscale'])) + logger('save: ' . print_r($arr,true), LOGGER_DATA); - $x = q("select id from photo where resource_id = '%s' and uid = %d and xchan = '%s' and `scale` = %d limit 1", + $x = q("select id from photo where resource_id = '%s' and uid = %d and xchan = '%s' and imgscale = %d limit 1", dbesc($p['resource_id']), intval($p['uid']), dbesc($p['xchan']), - intval($p['scale']) + intval($p['imgscale']) ); if($x) { $r = q("UPDATE `photo` set @@ -347,14 +347,14 @@ abstract class photo_driver { `created` = '%s', `edited` = '%s', `filename` = '%s', - `type` = '%s', + `mimetype` = '%s', `album` = '%s', `height` = %d, `width` = %d, - `data` = '%s', + `content` = '%s', `os_storage` = %d, - `size` = %d, - `scale` = %d, + `filesize` = %d, + `imgscale` = %d, `photo_usage` = %d, `title` = '%s', `description` = '%s', @@ -378,7 +378,7 @@ abstract class photo_driver { (intval($p['os_storage']) ? dbesc($p['os_path']) : dbescbin($this->imageString())), intval($p['os_storage']), intval(strlen($this->imageString())), - intval($p['scale']), + intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), @@ -391,7 +391,7 @@ abstract class photo_driver { } else { $r = q("INSERT INTO `photo` - ( `aid`, `uid`, `xchan`, `resource_id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `data`, `os_storage`, `size`, `scale`, `photo_usage`, `title`, `description`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) + ( `aid`, `uid`, `xchan`, `resource_id`, `created`, `edited`, `filename`, mimetype, `album`, `height`, `width`, `content`, `os_storage`, `filesize`, `imgscale`, `photo_usage`, `title`, `description`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', '%s' )", intval($p['aid']), intval($p['uid']), @@ -407,7 +407,7 @@ abstract class photo_driver { (intval($p['os_storage']) ? dbesc($p['os_path']) : dbescbin($this->imageString())), intval($p['os_storage']), intval(strlen($this->imageString())), - intval($p['scale']), + intval($p['imgscale']), intval($p['photo_usage']), dbesc($p['title']), dbesc($p['description']), @@ -422,7 +422,7 @@ abstract class photo_driver { public function store($aid, $uid, $xchan, $rid, $filename, $album, $scale, $usage = PHOTO_NORMAL, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '') { - $x = q("select id from photo where `resource_id` = '%s' and uid = %d and `xchan` = '%s' and `scale` = %d limit 1", + $x = q("select id from photo where `resource_id` = '%s' and uid = %d and `xchan` = '%s' and `imgscale` = %d limit 1", dbesc($rid), intval($uid), dbesc($xchan), @@ -437,13 +437,13 @@ abstract class photo_driver { `created` = '%s', `edited` = '%s', `filename` = '%s', - `type` = '%s', + `mimetype` = '%s', `album` = '%s', `height` = %d, `width` = %d, - `data` = '%s', - `size` = %d, - `scale` = %d, + `content` = '%s', + `filesize` = %d, + `imgscale` = %d, `photo_usage` = %d, `allow_cid` = '%s', `allow_gid` = '%s', @@ -475,7 +475,7 @@ abstract class photo_driver { } else { $r = q("INSERT INTO `photo` - ( `aid`, `uid`, `xchan`, `resource_id`, `created`, `edited`, `filename`, type, `album`, `height`, `width`, `data`, `size`, `scale`, `photo_usage`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) + ( `aid`, `uid`, `xchan`, `resource_id`, `created`, `edited`, `filename`, mimetype, `album`, `height`, `width`, `content`, `filesize`, `imgscale`, `photo_usage`, `allow_cid`, `allow_gid`, `deny_cid`, `deny_gid` ) VALUES ( %d, %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, '%s', '%s', '%s', '%s' )", intval($aid), intval($uid), @@ -588,7 +588,7 @@ function import_xchan_photo($photo,$xchan,$thing = false) { if($thing) $hash = photo_new_resource(); else { - $r = q("select resource_id from photo where xchan = '%s' and photo_usage = %d and scale = 4 limit 1", + $r = q("select resource_id from photo where xchan = '%s' and photo_usage = %d and imgscale = 4 limit 1", dbesc($xchan), intval(PHOTO_XCHAN) ); @@ -654,7 +654,7 @@ function import_xchan_photo($photo,$xchan,$thing = false) { else $photo_failure = true; - $p = array('xchan' => $xchan,'resource_id' => $hash, 'filename' => basename($photo), 'album' => $album, 'photo_usage' => $flags, 'scale' => 4); + $p = array('xchan' => $xchan,'resource_id' => $hash, 'filename' => basename($photo), 'album' => $album, 'photo_usage' => $flags, 'imgscale' => 4); $r = $img->save($p); @@ -662,7 +662,7 @@ function import_xchan_photo($photo,$xchan,$thing = false) { $photo_failure = true; $img->scaleImage(80); - $p['scale'] = 5; + $p['imgscale'] = 5; $r = $img->save($p); @@ -670,7 +670,7 @@ function import_xchan_photo($photo,$xchan,$thing = false) { $photo_failure = true; $img->scaleImage(48); - $p['scale'] = 6; + $p['imgscale'] = 6; $r = $img->save($p); @@ -715,7 +715,7 @@ function import_channel_photo($photo,$type,$aid,$uid) { $img->scaleImageSquare(300); - $p = array('aid' => $aid, 'uid' => $uid, 'resource_id' => $hash, 'filename' => $filename, 'album' => t('Profile Photos'), 'photo_usage' => PHOTO_PROFILE, 'scale' => 4); + $p = array('aid' => $aid, 'uid' => $uid, 'resource_id' => $hash, 'filename' => $filename, 'album' => t('Profile Photos'), 'photo_usage' => PHOTO_PROFILE, 'imgscale' => 4); $r = $img->save($p); @@ -723,7 +723,7 @@ function import_channel_photo($photo,$type,$aid,$uid) { $photo_failure = true; $img->scaleImage(80); - $p['scale'] = 5; + $p['imgscale'] = 5; $r = $img->save($p); @@ -731,7 +731,7 @@ function import_channel_photo($photo,$type,$aid,$uid) { $photo_failure = true; $img->scaleImage(48); - $p['scale'] = 6; + $p['imgscale'] = 6; $r = $img->save($p); diff --git a/include/photos.php b/include/photos.php index c333a4d04..1cc64f6fa 100644 --- a/include/photos.php +++ b/include/photos.php @@ -71,17 +71,17 @@ function photo_upload($channel, $observer, $args) { $type = $args['getimagesize']['mime']; $os_storage = 1; } - elseif ($args['data']) { + elseif ($args['data'] || $args['content']) { // allow an import from a binary string representing the image. // This bypasses the upload step and max size limit checking - $imagedata = $args['data']; + $imagedata = (($args['content']) ? $args['content'] : $args['data']); $filename = $args['filename']; $filesize = strlen($imagedata); // this is going to be deleted if it exists $src = '/tmp/deletemenow'; - $type = $args['type']; + $type = (($args['mimetype']) ? $args['mimetype'] : $args['type']); } else { $f = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); @@ -125,7 +125,7 @@ function photo_upload($channel, $observer, $args) { $imagedata = @file_get_contents($src); } - $r = q("select sum(size) as total from photo where aid = %d and scale = 0 ", + $r = q("select sum(filesize) as total from photo where aid = %d and imgscale = 0 ", intval($account_id) ); @@ -172,7 +172,7 @@ function photo_upload($channel, $observer, $args) { $errors = false; $p = array('aid' => $account_id, 'uid' => $channel_id, 'xchan' => $visitor, 'resource_id' => $photo_hash, - 'filename' => $filename, 'album' => $album, 'scale' => 0, 'photo_usage' => PHOTO_NORMAL, + 'filename' => $filename, 'album' => $album, 'imgscale' => 0, 'photo_usage' => PHOTO_NORMAL, 'allow_cid' => $ac['allow_cid'], 'allow_gid' => $ac['allow_gid'], 'deny_cid' => $ac['deny_cid'], 'deny_gid' => $ac['deny_gid'], 'os_storage' => $os_storage, 'os_path' => $args['os_path'] @@ -205,7 +205,7 @@ function photo_upload($channel, $observer, $args) { if(($width > 1024 || $height > 1024) && (! $errors)) $ph->scaleImage(1024); - $p['scale'] = 1; + $p['imgscale'] = 1; $r1 = $ph->save($p); $link[1] = array( 'rel' => 'alternate', @@ -220,7 +220,7 @@ function photo_upload($channel, $observer, $args) { if(($width > 640 || $height > 640) && (! $errors)) $ph->scaleImage(640); - $p['scale'] = 2; + $p['imgscale'] = 2; $r2 = $ph->save($p); $link[2] = array( 'rel' => 'alternate', @@ -235,7 +235,7 @@ function photo_upload($channel, $observer, $args) { if(($width > 320 || $height > 320) && (! $errors)) $ph->scaleImage(320); - $p['scale'] = 3; + $p['imgscale'] = 3; $r3 = $ph->save($p); $link[3] = array( 'rel' => 'alternate', @@ -332,7 +332,7 @@ function photo_upload($channel, $observer, $args) { $item['body'] = $args['body']; $item['obj_type'] = ACTIVITY_OBJ_PHOTO; - $item['object'] = json_encode($object); + $item['obj'] = json_encode($object); $item['tgt_type'] = ACTIVITY_OBJ_ALBUM; $item['target'] = json_encode($target); @@ -389,8 +389,8 @@ function photo_upload($channel, $observer, $args) { $arr['deny_cid'] = $ac['deny_cid']; $arr['deny_gid'] = $ac['deny_gid']; $arr['verb'] = ACTIVITY_POST; - $arr['obj_type'] = ACTIVITY_OBJ_PHOTO; - $arr['object'] = json_encode($object); + $arr['obj_type'] = ACTIVITY_OBJ_PHOTO; + $arr['obj'] = json_encode($object); $arr['tgt_type'] = ACTIVITY_OBJ_ALBUM; $arr['target'] = json_encode($target); $arr['item_wall'] = 1; @@ -535,7 +535,7 @@ function photos_list_photos($channel, $observer, $album = '') { $ret = array('success' => false); - $r = q("select resource_id, created, edited, title, description, album, filename, type, height, width, size, scale, photo_usage, allow_cid, allow_gid, deny_cid, deny_gid from photo where uid = %d and photo_usage in ( %d, %d ) $sql_extra ", + $r = q("select resource_id, created, edited, title, description, album, filename, mimetype, height, width, filesize, imgscale, photo_usage, allow_cid, allow_gid, deny_cid, deny_gid from photo where uid = %d and photo_usage in ( %d, %d ) $sql_extra ", intval($channel_id), intval(PHOTO_NORMAL), intval(PHOTO_PROFILE) @@ -543,7 +543,7 @@ function photos_list_photos($channel, $observer, $album = '') { if($r) { for($x = 0; $x < count($r); $x ++) { - $r[$x]['src'] = z_root() . '/photo/' . $r[$x]['resource_id'] . '-' . $r[$x]['scale']; + $r[$x]['src'] = z_root() . '/photo/' . $r[$x]['resource_id'] . '-' . $r[$x]['imgscale']; } $ret['success'] = true; $ret['photos'] = $r; @@ -661,7 +661,7 @@ function photos_create_item($channel, $creator_hash, $photo, $visible = false) { $arr['plink'] = z_root() . '/channel/' . $channel['channel_address'] . '/?f=&mid=' . $arr['mid']; $arr['body'] = '[zrl=' . z_root() . '/photos/' . $channel['channel_address'] . '/image/' . $photo['resource_id'] . ']' - . '[zmg]' . z_root() . '/photo/' . $photo['resource_id'] . '-' . $photo['scale'] . '[/zmg]' + . '[zmg]' . z_root() . '/photo/' . $photo['resource_id'] . '-' . $photo['imgscale'] . '[/zmg]' . '[/zrl]'; $result = item_store($arr); diff --git a/include/sharedwithme.php b/include/sharedwithme.php index b01764ad3..b342f51d5 100644 --- a/include/sharedwithme.php +++ b/include/sharedwithme.php @@ -3,7 +3,7 @@ function apply_updates() { //check for updated items and remove them - $x = q("SELECT mid, max(object) AS object FROM item WHERE verb = '%s' AND obj_type = '%s' GROUP BY mid", + $x = q("SELECT mid, max(obj) AS obj FROM item WHERE verb = '%s' AND obj_type = '%s' GROUP BY mid", dbesc(ACTIVITY_UPDATE), dbesc(ACTIVITY_OBJ_FILE) ); @@ -12,7 +12,7 @@ function apply_updates() { foreach($x as $xx) { - $object = json_decode($xx['object'],true); + $object = json_decode($xx['obj'],true); $d_mid = $object['d_mid']; $u_mid = $xx['mid']; diff --git a/include/text.php b/include/text.php index c57f5fce4..551cb72bc 100644 --- a/include/text.php +++ b/include/text.php @@ -1458,37 +1458,6 @@ function generate_named_map($location) { return (($arr['html']) ? $arr['html'] : $location); } -function format_event($jobject) { - $event = array(); - - $object = json_decode($jobject,true); - - //ensure compatibility with older items - this check can be removed at a later point - if(array_key_exists('description', $object)) { - - $bd_format = t('l F d, Y \@ g:i A'); // Friday January 18, 2011 @ 8:01 AM - - $event['header'] = replace_macros(get_markup_template('event_item_header.tpl'),array( - '$title' => bbcode($object['title']), - '$dtstart_label' => t('Starts:'), - '$dtstart_title' => datetime_convert('UTC', 'UTC', $object['start'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), - '$dtstart_dt' => (($object['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['start'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $object['start'] , $bd_format))), - '$finish' => (($object['nofinish']) ? false : true), - '$dtend_label' => t('Finishes:'), - '$dtend_title' => datetime_convert('UTC','UTC',$object['finish'], (($object['adjust']) ? ATOM_TIME : 'Y-m-d\TH:i:s' )), - '$dtend_dt' => (($object['adjust']) ? day_translate(datetime_convert('UTC', date_default_timezone_get(), $object['finish'] , $bd_format )) : day_translate(datetime_convert('UTC', 'UTC', $object['finish'] , $bd_format ))) - )); - - $event['content'] = replace_macros(get_markup_template('event_item_content.tpl'),array( - '$description' => bbcode($object['description']), - '$location_label' => t('Location:'), - '$location' => bbcode($object['location']) - )); - - } - - return $event; -} function prepare_body(&$item,$attach = false) { @@ -1516,7 +1485,7 @@ function prepare_body(&$item,$attach = false) { $s .= prepare_text($item['body'],$item['mimetype'], false); - $event = (($item['obj_type'] === ACTIVITY_OBJ_EVENT) ? format_event($item['object']) : false); + $event = (($item['obj_type'] === ACTIVITY_OBJ_EVENT) ? format_event_obj($item['obj']) : false); $prep_arr = array( 'item' => $item, diff --git a/include/widgets.php b/include/widgets.php index 17a76c0f4..3448aeb5e 100644 --- a/include/widgets.php +++ b/include/widgets.php @@ -1126,7 +1126,7 @@ function widget_photo_rand($arr) { $filtered = array(); if($ret['success'] && $ret['photos']) foreach($ret['photos'] as $p) - if($p['scale'] == $scale) + if($p['imgscale'] == $scale) $filtered[] = $p['src']; if($filtered) { @@ -1459,9 +1459,9 @@ function widget_album($args) { $order = 'DESC'; - $r = q("SELECT p.resource_id, p.id, p.filename, p.type, p.scale, p.description, p.created FROM photo p INNER JOIN - (SELECT resource_id, max(scale) scale FROM photo WHERE uid = %d AND album = '%s' AND scale <= 4 AND photo_usage IN ( %d, %d ) $sql_extra GROUP BY resource_id) ph - ON (p.resource_id = ph.resource_id AND p.scale = ph.scale) + $r = q("SELECT p.resource_id, p.id, p.filename, p.mimetype, p.imgscale, p.description, p.created FROM photo p INNER JOIN + (SELECT resource_id, max(imgscale) imgscale FROM photo WHERE uid = %d AND album = '%s' AND imgscale <= 4 AND photo_usage IN ( %d, %d ) $sql_extra GROUP BY resource_id) ph + ON (p.resource_id = ph.resource_id AND p.imgscale = ph.imgscale) ORDER BY created $order ", intval($owner_uid), dbesc($album), @@ -1482,7 +1482,7 @@ function widget_album($args) { else $twist = 'rotright'; - $ext = $phototypes[$rr['type']]; + $ext = $phototypes[$rr['mimetype']]; $imgalt_e = $rr['filename']; $desc_e = $rr['description']; @@ -1495,7 +1495,7 @@ function widget_album($args) { 'twist' => ' ' . $twist . rand(2,4), 'link' => $imagelink, 'title' => t('View Photo'), - 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . $rr['scale'] . '.' .$ext, + 'src' => z_root() . '/photo/' . $rr['resource_id'] . '-' . $rr['imgscale'] . '.' .$ext, 'alt' => $imgalt_e, 'desc'=> $desc_e, 'ext' => $ext, diff --git a/install/schema_mysql.sql b/install/schema_mysql.sql index e5bb7b889..a536c3f9a 100644 --- a/install/schema_mysql.sql +++ b/install/schema_mysql.sql @@ -158,7 +158,7 @@ CREATE TABLE IF NOT EXISTS `attach` ( `os_storage` tinyint(1) NOT NULL DEFAULT '0', `os_path` mediumtext NOT NULL, `display_path` mediumtext NOT NULL, - `data` longblob NOT NULL, + `content` longblob NOT NULL, `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `allow_cid` mediumtext NOT NULL, @@ -398,15 +398,15 @@ CREATE TABLE IF NOT EXISTS `event` ( `event_hash` char(255) NOT NULL DEFAULT '', `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `edited` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `start` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', - `finish` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dtstart` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `dtend` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `summary` text NOT NULL, `description` text NOT NULL, `location` text NOT NULL, - `type` char(255) NOT NULL DEFAULT '', + `etype` char(255) NOT NULL DEFAULT '', `nofinish` tinyint(1) NOT NULL DEFAULT '0', `adjust` tinyint(1) NOT NULL DEFAULT '1', - `ignore` tinyint(1) NOT NULL DEFAULT '0', + `dismissed` tinyint(1) NOT NULL DEFAULT '0', `allow_cid` mediumtext NOT NULL, `allow_gid` mediumtext NOT NULL, `deny_cid` mediumtext NOT NULL, @@ -420,12 +420,12 @@ CREATE TABLE IF NOT EXISTS `event` ( `event_vdata` text NOT NULL, PRIMARY KEY (`id`), KEY `uid` (`uid`), - KEY `type` (`type`), - KEY `start` (`start`), - KEY `finish` (`finish`), + KEY `etype` (`etype`), + KEY `dtstart` (`dtstart`), + KEY `dtend` (`dtend`), KEY `adjust` (`adjust`), KEY `nofinish` (`nofinish`), - KEY `ignore` (`ignore`), + KEY `dismissed` (`dismissed`), KEY `aid` (`aid`), KEY `event_hash` (`event_hash`), KEY `event_xchan` (`event_xchan`), @@ -569,7 +569,7 @@ CREATE TABLE IF NOT EXISTS `item` ( `revision` int(10) unsigned NOT NULL DEFAULT '0', `verb` char(255) NOT NULL DEFAULT '', `obj_type` char(255) NOT NULL DEFAULT '', - `object` text NOT NULL, + `obj` text NOT NULL, `tgt_type` char(255) NOT NULL DEFAULT '', `target` text NOT NULL, `layout_mid` char(255) NOT NULL DEFAULT '', @@ -791,24 +791,24 @@ CREATE TABLE IF NOT EXISTS `menu_item` ( CREATE TABLE IF NOT EXISTS `notify` ( `id` int(11) NOT NULL AUTO_INCREMENT, `hash` char(64) NOT NULL DEFAULT '', - `name` char(255) NOT NULL DEFAULT '', + `xname` char(255) NOT NULL DEFAULT '', `url` char(255) NOT NULL DEFAULT '', `photo` char(255) NOT NULL DEFAULT '', - `date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', `msg` mediumtext NOT NULL, `aid` int(11) NOT NULL DEFAULT '0', `uid` int(11) NOT NULL DEFAULT '0', `link` char(255) NOT NULL DEFAULT '', `parent` char(255) NOT NULL DEFAULT '', `seen` tinyint(1) NOT NULL DEFAULT '0', - `type` int(11) NOT NULL DEFAULT '0', + `ntype` int(11) NOT NULL DEFAULT '0', `verb` char(255) NOT NULL DEFAULT '', `otype` char(16) NOT NULL DEFAULT '', PRIMARY KEY (`id`), - KEY `type` (`type`), + KEY `ntype` (`ntype`), KEY `seen` (`seen`), KEY `uid` (`uid`), - KEY `date` (`date`), + KEY `created` (`created`), KEY `hash` (`hash`), KEY `parent` (`parent`), KEY `link` (`link`), @@ -893,12 +893,12 @@ CREATE TABLE IF NOT EXISTS `photo` ( `description` text NOT NULL, `album` char(255) NOT NULL DEFAULT '', `filename` char(255) NOT NULL DEFAULT '', - `type` char(128) NOT NULL DEFAULT 'image/jpeg', + `mimetype` char(128) NOT NULL DEFAULT 'image/jpeg', `height` smallint(6) NOT NULL DEFAULT '0', `width` smallint(6) NOT NULL DEFAULT '0', - `size` int(10) unsigned NOT NULL DEFAULT '0', - `data` mediumblob NOT NULL, - `scale` tinyint(3) NOT NULL DEFAULT '0', + `filesize` int(10) unsigned NOT NULL DEFAULT '0', + `content` mediumblob NOT NULL, + `imgscale` tinyint(3) NOT NULL DEFAULT '0', `photo_usage` smallint(6) NOT NULL DEFAULT '0', `profile` tinyint(1) NOT NULL DEFAULT '0', `is_nsfw` tinyint(1) NOT NULL DEFAULT '0', @@ -913,13 +913,13 @@ CREATE TABLE IF NOT EXISTS `photo` ( PRIMARY KEY (`id`), KEY `uid` (`uid`), KEY `album` (`album`), - KEY `scale` (`scale`), + KEY `imgscale` (`imgscale`), KEY `profile` (`profile`), KEY `photo_flags` (`photo_flags`), - KEY `type` (`type`), + KEY `mimetype` (`mimetype`), KEY `aid` (`aid`), KEY `xchan` (`xchan`), - KEY `size` (`size`), + KEY `filesize` (`filesize`), KEY `resource_id` (`resource_id`), KEY `is_nsfw` (`is_nsfw`), KEY `os_storage` (`os_storage`), diff --git a/install/schema_postgres.sql b/install/schema_postgres.sql index bda1b8970..b637fea43 100644 --- a/install/schema_postgres.sql +++ b/install/schema_postgres.sql @@ -154,7 +154,7 @@ CREATE TABLE "attach" ( "os_storage" smallint NOT NULL DEFAULT '0', "os_path" text NOT NULL, "display_path" text NOT NULL, - "data" bytea NOT NULL, + "content" bytea NOT NULL, "created" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', "edited" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', "allow_cid" text NOT NULL, @@ -390,17 +390,17 @@ CREATE TABLE "event" ( "uid" bigint NOT NULL, "event_xchan" text NOT NULL DEFAULT '', "event_hash" text NOT NULL DEFAULT '', - "created" timestamp NOT NULL, - "edited" timestamp NOT NULL, - "start" timestamp NOT NULL, - "finish" timestamp NOT NULL, + "created" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', + "edited" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', + "dtstart" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', + "dtend" timestamp NOT NULL DEFAULT '0001-01-01 00:00:00', "summary" text NOT NULL, "description" text NOT NULL, "location" text NOT NULL, - "type" text NOT NULL, + "etype" text NOT NULL, "nofinish" numeric(1) NOT NULL DEFAULT '0', "adjust" numeric(1) NOT NULL DEFAULT '1', - "ignore" numeric(1) NOT NULL DEFAULT '0', + "dismissed" numeric(1) NOT NULL DEFAULT '0', "allow_cid" text NOT NULL, "allow_gid" text NOT NULL, "deny_cid" text NOT NULL, @@ -415,12 +415,12 @@ CREATE TABLE "event" ( PRIMARY KEY ("id") ); create index "event_uid_idx" on event ("uid"); -create index "event_type_idx" on event ("type"); -create index "event_start_idx" on event ("start"); -create index "event_finish_idx" on event ("finish"); +create index "event_etype_idx" on event ("etype"); +create index "event_dtstart_idx" on event ("dtstart"); +create index "event_dtend_idx" on event ("dtend"); create index "event_adjust_idx" on event ("adjust"); create index "event_nofinish_idx" on event ("nofinish"); -create index "event_ignore_idx" on event ("ignore"); +create index "event_dismissed_idx" on event ("dismissed"); create index "event_aid_idx" on event ("aid"); create index "event_hash_idx" on event ("event_hash"); create index "event_xchan_idx" on event ("event_xchan"); @@ -560,7 +560,7 @@ CREATE TABLE "item" ( "revision" bigint NOT NULL DEFAULT '0', "verb" text NOT NULL DEFAULT '', "obj_type" text NOT NULL DEFAULT '', - "object" text NOT NULL, + "obj" text NOT NULL, "tgt_type" text NOT NULL DEFAULT '', "target" text NOT NULL, "layout_mid" text NOT NULL DEFAULT '', @@ -781,25 +781,25 @@ create index "mitem_flags" on menu_item ("mitem_flags"); CREATE TABLE "notify" ( "id" serial NOT NULL, "hash" char(64) NOT NULL, - "name" text NOT NULL, + "xname" text NOT NULL, "url" text NOT NULL, "photo" text NOT NULL, - "date" timestamp NOT NULL, + "created" timestamp NOT NULL, "msg" text NOT NULL DEFAULT '', "aid" bigint NOT NULL, "uid" bigint NOT NULL, "link" text NOT NULL, "parent" text NOT NULL DEFAULT '', "seen" numeric(1) NOT NULL DEFAULT '0', - "type" bigint NOT NULL, + "ntype" bigint NOT NULL, "verb" text NOT NULL, "otype" varchar(16) NOT NULL, PRIMARY KEY ("id") ); -create index "notify_type" on notify ("type"); +create index "notify_ntype" on notify ("ntype"); create index "notify_seen" on notify ("seen"); create index "notify_uid" on notify ("uid"); -create index "notify_date" on notify ("date"); +create index "notify_created" on notify ("created"); create index "notify_hash" on notify ("hash"); create index "notify_parent" on notify ("parent"); create index "notify_link" on notify ("link"); @@ -882,12 +882,12 @@ CREATE TABLE "photo" ( "description" text NOT NULL, "album" text NOT NULL, "filename" text NOT NULL, - "type" varchar(128) NOT NULL DEFAULT 'image/jpeg', + "mimetype" varchar(128) NOT NULL DEFAULT 'image/jpeg', "height" numeric(6) NOT NULL, "width" numeric(6) NOT NULL, - "size" bigint NOT NULL DEFAULT '0', - "data" bytea NOT NULL, - "scale" numeric(3) NOT NULL, + "filesize" bigint NOT NULL DEFAULT '0', + "content" bytea NOT NULL, + "imgscale" numeric(3) NOT NULL DEFAULT '0', "profile" numeric(1) NOT NULL DEFAULT '0', "photo_usage" smallint NOT NULL DEFAULT '0', "is_nsfw" smallint NOT NULL DEFAULT '0', @@ -903,13 +903,13 @@ CREATE TABLE "photo" ( ); create index "photo_uid" on photo ("uid"); create index "photo_album" on photo ("album"); -create index "photo_scale" on photo ("scale"); +create index "photo_imgscale" on photo ("imgscale"); create index "photo_profile" on photo ("profile"); create index "photo_flags" on photo ("photo_flags"); create index "photo_type" on photo ("type"); create index "photo_aid" on photo ("aid"); create index "photo_xchan" on photo ("xchan"); -create index "photo_size" on photo ("size"); +create index "photo_filesize" on photo ("filesize"); create index "photo_resource_id" on photo ("resource_id"); create index "photo_usage" on photo ("photo_usage"); create index "photo_is_nsfw" on photo ("is_nsfw"); diff --git a/install/update.php b/install/update.php index dd0131ee8..3e18c9840 100644 --- a/install/update.php +++ b/install/update.php @@ -1,6 +1,6 @@ Date: Wed, 1 Jun 2016 22:05:17 -0700 Subject: [PATCH 02/19] check all return values --- install/update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install/update.php b/install/update.php index 3e18c9840..908f60498 100644 --- a/install/update.php +++ b/install/update.php @@ -2249,7 +2249,7 @@ function update_r1175() { } - if($r1) + if($r1 && $r2 && $r3 && $r4) return UPDATE_SUCCESS; return UPDATE_FAILED; From 0f1fcd97433cd3b1251daee8a9064a189cb5c132 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 2 Jun 2016 16:38:15 -0700 Subject: [PATCH 03/19] install system apps if a) they have never been installed, or b) if the app version changes --- Zotlabs/Lib/Apps.php | 41 ++++++++++++++++++++++++++++++----------- 1 file changed, 30 insertions(+), 11 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 6d2ef4e45..7e232af02 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -13,6 +13,8 @@ require_once('include/channel.php'); class Apps { + static public $installed_system_apps = null; + static public function get_system_apps($translate = true) { $ret = array(); @@ -49,22 +51,35 @@ class Apps { static public function import_system_apps() { if(! local_channel()) return; - - // Eventually we want to look at modification dates and update system apps. - - $installed = get_pconfig(local_channel(),'system','apps_installed'); - if($installed) - return; $apps = self::get_system_apps(false); + + + self::$installed_system_apps = q("select * from app where app_system = 1 and app_channel = %d", + intval(local_channel()) + ); + if($apps) { foreach($apps as $app) { - $app['uid'] = local_channel(); - $app['guid'] = hash('whirlpool',$app['name']); - $app['system'] = 1; - self::app_install(local_channel(),$app); + if(self::check_install_system_app($app)) { + $app['uid'] = local_channel(); + $app['guid'] = hash('whirlpool',$app['name']); + $app['system'] = 1; + self::app_install(local_channel(),$app); + } } } - set_pconfig(local_channel(),'system','apps_installed',1); + } + + static public function check_install_system_app($app) { + if((! is_array(self::$installed_system_apps)) || (! count(self::$installed_system_apps))) { + return true; + } + foreach(self::$installed_system_apps as $iapp) { + if(($iapp['app_id'] == hash('whirlpool',$app['name'])) && ($iapp['app_version'] != $app['version'])) { + return true; + } + } + return false; } @@ -111,6 +126,10 @@ class Apps { if(array_key_exists('target',$ret)) $ret['target'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['target']); + if(array_key_exists('version',$ret)) + $ret['version'] = str_replace(array('\'','"'),array(''','&dquot;'),$ret['version']); + + if(array_key_exists('requires',$ret)) { $requires = explode(',',$ret['requires']); foreach($requires as $require) { From 4a3ec65409f1b89f7f96ca0b102716735be2108e Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 2 Jun 2016 16:45:00 -0700 Subject: [PATCH 04/19] adjust algorithm to ensure new system apps are installed. --- Zotlabs/Lib/Apps.php | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index 7e232af02..fd713a3f8 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -70,16 +70,25 @@ class Apps { } } + /** + * Install the system app if no system apps have been installed, or if a new system app + * is discovered, or if the version of a system app changes. + */ + static public function check_install_system_app($app) { if((! is_array(self::$installed_system_apps)) || (! count(self::$installed_system_apps))) { return true; } + $notfound = true; foreach(self::$installed_system_apps as $iapp) { - if(($iapp['app_id'] == hash('whirlpool',$app['name'])) && ($iapp['app_version'] != $app['version'])) { - return true; + if($iapp['app_id'] == hash('whirlpool',$app['name'])) { + $notfound = false; + if($iapp['app_version'] != $app['version']) { + return true; + } } } - return false; + return $notfound; } From e596bf025bc2cb700d2603871286df1102d41031 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 2 Jun 2016 17:08:47 -0700 Subject: [PATCH 05/19] preserve app categories when updating a system app --- Zotlabs/Lib/Apps.php | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/Zotlabs/Lib/Apps.php b/Zotlabs/Lib/Apps.php index fd713a3f8..9dd4bf2d7 100644 --- a/Zotlabs/Lib/Apps.php +++ b/Zotlabs/Lib/Apps.php @@ -60,12 +60,30 @@ class Apps { if($apps) { foreach($apps as $app) { - if(self::check_install_system_app($app)) { - $app['uid'] = local_channel(); - $app['guid'] = hash('whirlpool',$app['name']); - $app['system'] = 1; - self::app_install(local_channel(),$app); - } + $id = self::check_install_system_app($app); + // $id will be boolean true or false to install an app, or an integer id to update an existing app + if($id === false) + continue; + if($id !== true) { + // if we already installed this app, but it changed, preserve any categories we created + $s = ''; + $r = q("select * from term where otype = %d and oid = d", + intval(TERM_OBJ_APP), + intval($id) + ); + if($r) { + foreach($r as $t) { + if($s) + $s .= ','; + $s .= $t['term']; + } + $app['categories'] = $s; + } + } + $app['uid'] = local_channel(); + $app['guid'] = hash('whirlpool',$app['name']); + $app['system'] = 1; + self::app_install(local_channel(),$app); } } } @@ -84,7 +102,7 @@ class Apps { if($iapp['app_id'] == hash('whirlpool',$app['name'])) { $notfound = false; if($iapp['app_version'] != $app['version']) { - return true; + return intval($iapp['app_id']); } } } From f9075e2a2feca0f37fdf568be6e6e53460aa9034 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 2 Jun 2016 18:42:51 -0700 Subject: [PATCH 06/19] some initial emoji reaction work --- boot.php | 1 + include/text.php | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 5b3a614f1..16c5fed11 100755 --- a/boot.php +++ b/boot.php @@ -473,6 +473,7 @@ define ( 'NAMESPACE_YMEDIA', 'http://search.yahoo.com/mrss/' ); * activity stream defines */ +define ( 'ACTIVITY_REACT', NAMESPACE_ZOT . '/activity/react' ); define ( 'ACTIVITY_LIKE', NAMESPACE_ACTIVITY_SCHEMA . 'like' ); define ( 'ACTIVITY_DISLIKE', NAMESPACE_ZOT . '/activity/dislike' ); define ( 'ACTIVITY_AGREE', NAMESPACE_ZOT . '/activity/agree' ); diff --git a/include/text.php b/include/text.php index 551cb72bc..834eec920 100644 --- a/include/text.php +++ b/include/text.php @@ -734,6 +734,10 @@ function get_tags($s) { // '=' needs to be avoided because when the replacement is made (in handle_tag()) it has to be ignored there // Feel free to allow '=' if the issue with '=' is solved in handle_tag() // added / ? and [ to avoid issues with hashchars in url paths + + // added ; to single word tags to allow emojis and other unicode character constructs in bbcode + // (this would actually be &#xnnnnn; but the ampersand will have been escaped to & by the time we see it.) + if(preg_match_all('/(? Date: Thu, 2 Jun 2016 20:31:34 -0700 Subject: [PATCH 07/19] experimental emoji support --- Zotlabs/Module/React.php | 50 +++++++++++++++++++++++++++++++++++++++ images/emoji/1f37a.png | Bin 0 -> 1340 bytes images/emoji/1f37b.png | Bin 0 -> 2100 bytes images/emoji/1f37e.png | Bin 0 -> 1205 bytes images/emoji/1f3a4.png | Bin 0 -> 1165 bytes images/emoji/1f3b5.png | Bin 0 -> 419 bytes images/emoji/1f3c6.png | Bin 0 -> 863 bytes images/emoji/1f44b.png | Bin 0 -> 1311 bytes images/emoji/1f44c.png | Bin 0 -> 979 bytes images/emoji/1f44d.png | Bin 0 -> 814 bytes images/emoji/1f44e.png | Bin 0 -> 815 bytes images/emoji/1f44f.png | Bin 0 -> 1456 bytes images/emoji/1f47d.png | Bin 0 -> 839 bytes images/emoji/1f48b.png | Bin 0 -> 842 bytes images/emoji/1f493.png | Bin 0 -> 699 bytes images/emoji/1f497.png | Bin 0 -> 675 bytes images/emoji/1f4a3.png | Bin 0 -> 702 bytes images/emoji/1f4a4.png | Bin 0 -> 540 bytes images/emoji/1f595.png | Bin 0 -> 893 bytes images/emoji/1f5a4.png | Bin 0 -> 435 bytes images/emoji/1f5e8.png | Bin 0 -> 390 bytes images/emoji/1f607.png | Bin 0 -> 935 bytes images/emoji/1f608.png | Bin 0 -> 1078 bytes images/emoji/1f60a.png | Bin 0 -> 812 bytes images/emoji/1f60b.png | Bin 0 -> 896 bytes images/emoji/1f60c.png | Bin 0 -> 785 bytes images/emoji/1f60d.png | Bin 0 -> 1069 bytes images/emoji/1f60e.png | Bin 0 -> 824 bytes images/emoji/1f60f.png | Bin 0 -> 775 bytes images/emoji/1f619.png | Bin 0 -> 648 bytes images/emoji/1f61a.png | Bin 0 -> 888 bytes images/emoji/1f61b.png | Bin 0 -> 752 bytes images/emoji/1f61c.png | Bin 0 -> 1061 bytes images/emoji/1f61d.png | Bin 0 -> 867 bytes images/emoji/1f61e.png | Bin 0 -> 757 bytes images/emoji/1f61f.png | Bin 0 -> 715 bytes images/emoji/1f622.png | Bin 0 -> 1123 bytes images/emoji/1f628.png | Bin 0 -> 1002 bytes images/emoji/1f62a.png | Bin 0 -> 1185 bytes images/emoji/1f62b.png | Bin 0 -> 1132 bytes images/emoji/1f62c.png | Bin 0 -> 694 bytes images/emoji/1f62d.png | Bin 0 -> 1241 bytes images/emoji/1f62e.png | Bin 0 -> 575 bytes images/emoji/1f62f.png | Bin 0 -> 634 bytes images/emoji/1f631.png | Bin 0 -> 1588 bytes images/emoji/1f634.png | Bin 0 -> 1075 bytes images/emoji/1f64b.png | Bin 0 -> 1669 bytes images/emoji/1f64f.png | Bin 0 -> 1122 bytes images/emoji/1f6ab.png | Bin 0 -> 555 bytes images/emoji/1f918.png | Bin 0 -> 894 bytes images/emoji/1f919.png | Bin 0 -> 894 bytes images/emoji/1f91d.png | Bin 0 -> 1369 bytes images/emoji/262e.png | Bin 0 -> 933 bytes images/emoji/263a.png | Bin 0 -> 636 bytes images/emoji/2665.png | Bin 0 -> 449 bytes images/emoji/26a1.png | Bin 0 -> 413 bytes images/emoji/270c.png | Bin 0 -> 1009 bytes images/emoji/2714.png | Bin 0 -> 438 bytes images/emoji/2716.png | Bin 0 -> 298 bytes images/emoji/2754.png | Bin 0 -> 449 bytes images/emoji/README | 2 ++ 61 files changed, 52 insertions(+) create mode 100644 Zotlabs/Module/React.php create mode 100644 images/emoji/1f37a.png create mode 100644 images/emoji/1f37b.png create mode 100644 images/emoji/1f37e.png create mode 100644 images/emoji/1f3a4.png create mode 100644 images/emoji/1f3b5.png create mode 100644 images/emoji/1f3c6.png create mode 100644 images/emoji/1f44b.png create mode 100644 images/emoji/1f44c.png create mode 100644 images/emoji/1f44d.png create mode 100644 images/emoji/1f44e.png create mode 100644 images/emoji/1f44f.png create mode 100644 images/emoji/1f47d.png create mode 100644 images/emoji/1f48b.png create mode 100644 images/emoji/1f493.png create mode 100644 images/emoji/1f497.png create mode 100644 images/emoji/1f4a3.png create mode 100644 images/emoji/1f4a4.png create mode 100644 images/emoji/1f595.png create mode 100644 images/emoji/1f5a4.png create mode 100644 images/emoji/1f5e8.png create mode 100644 images/emoji/1f607.png create mode 100644 images/emoji/1f608.png create mode 100644 images/emoji/1f60a.png create mode 100644 images/emoji/1f60b.png create mode 100644 images/emoji/1f60c.png create mode 100644 images/emoji/1f60d.png create mode 100644 images/emoji/1f60e.png create mode 100644 images/emoji/1f60f.png create mode 100644 images/emoji/1f619.png create mode 100644 images/emoji/1f61a.png create mode 100644 images/emoji/1f61b.png create mode 100644 images/emoji/1f61c.png create mode 100644 images/emoji/1f61d.png create mode 100644 images/emoji/1f61e.png create mode 100644 images/emoji/1f61f.png create mode 100644 images/emoji/1f622.png create mode 100644 images/emoji/1f628.png create mode 100644 images/emoji/1f62a.png create mode 100644 images/emoji/1f62b.png create mode 100644 images/emoji/1f62c.png create mode 100644 images/emoji/1f62d.png create mode 100644 images/emoji/1f62e.png create mode 100644 images/emoji/1f62f.png create mode 100644 images/emoji/1f631.png create mode 100644 images/emoji/1f634.png create mode 100644 images/emoji/1f64b.png create mode 100644 images/emoji/1f64f.png create mode 100644 images/emoji/1f6ab.png create mode 100644 images/emoji/1f918.png create mode 100644 images/emoji/1f919.png create mode 100644 images/emoji/1f91d.png create mode 100644 images/emoji/262e.png create mode 100644 images/emoji/263a.png create mode 100644 images/emoji/2665.png create mode 100644 images/emoji/26a1.png create mode 100644 images/emoji/270c.png create mode 100644 images/emoji/2714.png create mode 100644 images/emoji/2716.png create mode 100644 images/emoji/2754.png create mode 100644 images/emoji/README diff --git a/Zotlabs/Module/React.php b/Zotlabs/Module/React.php new file mode 100644 index 000000000..85a1e2350 --- /dev/null +++ b/Zotlabs/Module/React.php @@ -0,0 +1,50 @@ +7H?`k)~i1(d20CH0X) zQLsX>D0NWYRH{4-Bq0O>i3tzo6+;4qU3J#8bcyG8k=dCy!@BAB<6wP$MW=26d}e0)wNc-# zZkH(=WpV-NdB3u89(tYf9}dXx)v`x5@&civM64_nD)OE+|54vkDp3`S=VbY{@(0hF z9#l8|+kzS;s5)m3O)R9s2LKyaW1}iWuotQJM-}mC$1PM>ifSIA?R=y@3V0DA9c@iU z^%bb{LX||^+}@_>(t%qcO|ghz-<+V~D9C767OK9Fh{JNLWS}e(Juj2Al+>x_Px;Th zK){OyFMH~Aa1b4G$T4B6NG{C^v<5*Dg2cwO7^W=+OhryLnR2?vjZ8|k!UN-G3Y}Zk zeZvDClW$+=^}Z?aX`=@WqbQ-BJ%4Sdj%k1+vPl^e!KRVJ%QA)A|;vpjJF34+X= zsD8d72{=Xj;GxUpr52HT-B#b7m&=t1Vjs&`KBBFCI_-I{0Xq`r1vP$4GMxKu=rdlQ zBi}rke>c)M;U*lF*Z(SPbwBSb+w@S4;+S-o^^@7P1rcY0&-BO7#EX5NF%L+!j=fjP z-47bpXDr)p6@TGS%2eu|@KBqyVqHEXpKN!`$t|4q?&=nbmKcq{7dN)r{71j%Ef8VT z=7J#3ijrR{tO8kh>BdRXY*wP%p3}WgrmZ&(8NVFJ@-{3YrXEnacVf^4DdBwLMQlYv zazarjQfGeR&sRr}taF7jBGN@=gI*{-S>~k4Xt}W@VfA~xL7RS~(6aW|!p{dAq8uQJ zcXaeQTxsK}W<_xuca-e$Q2gG$lA|nllKX69zpHpoo3x1YOk0y2Y|RaJ5t&+RV(WJ7 zxQH09trR`%G9UU_6KB@ZvDs^Lh1XN@zQ^ZNCVo2E7!%Lo#F{}8Cu8x#i0aD%Kti0l(PDa-(eluIwyOx*@;loc3-(t^Rx3oA*iG$qjIS)&1 zyzCtWNwhmm|J*EAeSeU{C40vyX-~tj>vrW$o{#Gwv}WDg*YcGdD)wnd+^^vu4Cf}ed55iW_aMr0TrLdVfKP5?ABS(c)5H_I>)~k^#(5m0z4-bT z3l<)C(IL0*?6xu@v|$X+<&|^}@TK&uWo{eIEBzS)?xG8)R}g7q&Q~c^jH$7sW$#+b z<*^1AWM@PXcGPXtb(q>U+U`;E*MTLVrzq7UFuiF*l zy~-jMpC;E4@8ln$E@OpJZa2GetDqwP;xO(9c*FFWzX;}GI;N}d?B4alO)thRGYjcV l@4S$~px}alYxHs9l$|FjRc_Nz;{rY_MD-8yE7=*D^f%2|b55~Gq=ZlXfS9FM#iO^90_ zqt0ZCsDv?tW||qsV?4&>F`gr4@4M$(>-=-?UF+=i*`M#{`}ux;-@W!)d+mp47h5?Q zWf>R@CTDMF?G9Cx_};Yx;y;N0{0f6fz|l?@ZJ^fj+4$cFgVy>#F+SYQ93pLxply&C zVYDyKbA{_mAP9cjSX&nGcvJN8kx#2DbJG(8qpU8`*5-D8nDKU=KMFC2+4+^nhD`2g z9|Rhcy|}Vg()xZI&>m<6X-NFH11+2!>u1x+e+B-Ejj=y$o0C%YS2m)zmqa8dQD-2~7Y~_0Pb@In z08sCPORVh-(3b!(3dG^AAAx}kNC2O6#5`Or`iL8u;=dmprm@EW+5>16z$zKyOf_}U zm=iql5#srY*?Dkn8WLXxD&__^v)7`}bh6V`;ESaK@%1T;jK;p4kWI~cY zf&;x*0|zZG(6u1O0tzZ1NC7FN)y5uYGSYBCP8orZMiIz_415Ryb)4dhe3_5tgd~xZ z#7PjWY!I_PMa&>tOiB9x5oC}f?m!SPrYsZ)Vxfu@KL!D=ew*DQlr4@e;a6v#n!ECs zCPqH9C{%NTYWz_cOv=dK`iF~g@IjgsjirA;ax_!D2a8^m`ud;*;gZh-h)=I7cWfCm zaLBG)j*bvhe$1t7S$kiVrCrscijwNDQjc@WNq4Js?cC+>_T(7&nkivgCF@U^bjKOk z*R*2V6{1`Hn!RwR{VsVJIem^$M@Q*uEv=izIv0Bu4hJNnI;e4h^3?tiPod5}W6#rg z@04eXN0psE8Z}D~60R?Akfi=mC`}*pWUsch{O-=cUuSlOzE(QqgiGrj)(K_@x0M`B zr(^e|R*HtamebGzAuQrmkm)+zUQ5wxp$f5{on1LqpmO7sO=knf%`rPU*}FmeN>A6k zv7xX#H{%#`tQWwSUzMLfX?m;SQ})i?o1zWN-FcfqO=sewa@{q*$D0!<#N`AqZ@z_H zG}6pp?NYHc@kAry$g!_CQ0t7k6K?#ei7HC8waQx2Nlea;WS}79c8tOm%vuqSqg{hD z2-zurBmMSw$#ZusN(-@>`PZ|&!D0CnG%VoZRP%L9SrGre257t))Sp*^79% z=PNsW7z#mkurl567CIZY@T9Zb!!}E$l2PCk;1>n6_|E-Eql>+zrgpJ|)#U!y%X!VG zd<%nW9IA8R%beY*-yr$sPbX_PVt{?h z%jy(-ee8YdYzbo%yxVCB<1w91uL%N%e+W*;u}RH_#jeD3ya`f6epVfy=~%XJp8YzO zAno;FZ?}_yv|^V(dQq+XB&|XV=pTDuB3z^f9ckQs?VB|hW+aP5)%Cz(^h0c$F9Lw@uhk@!R* zwep~a#_HI*MqtscFP+NIucjSV_VK19bho6)g}IRfTw`vM-q^lr{o3ZEc7RIH3{iAg zPlzcjORDa$2-7qQ-VC-q&c7U2Y^XDwDjg-9^j45{Y^{vV2$aycg1$YzbvODa^Mg2# z(B3Yb7O$%A94pj+z(mjAFZBtQclaxsN3W9pn()USrfGf z=$G!@rN5~o$Y0(GmG#@SE1&dWPku4u%2Khv)n16a^*l#YAx3a)E0R`I7IbKrS_vcF ze?>vIUJEIk>R-FQnqbj-X%{^8j!BDNv!%mCNGLVtdky^V`?y(RYUzX5K@plSdB literal 0 HcmV?d00001 diff --git a/images/emoji/1f37e.png b/images/emoji/1f37e.png new file mode 100644 index 0000000000000000000000000000000000000000..285a79a93d0010483d48b4adf5c92d573f112966 GIT binary patch literal 1205 zcmV;m1WNmfP)(axD(tVi_H4&2(H1M#vOt?1a}DT5ZobyJHe%_IX%^Ps=1Z@ zM?-c0AywbZY-Fpx)33ZO9eBI{n< z$wDJKLj9H02#F|7zBci7aIB|?ze%E2zrD?!Bk#LpFFUI z&`@i$08%ENg3$VR1yY~I3!n@o2w4?We5N2_9RyH7cp1QpXD^bkoV!H5altZm-|_R* z84I`4A=D3DBO@C4c>gx{DS$x}R_L8Pq$8jV6arO3swLTANC7A-fE-9r`z9|y)gyoc z&;m#qL_+{E2tnXm04bN(UE%B{F$F+f!LEXY1>o=1)cUs_wTHT3`L^ouQwP+;C+#yH z#w!n9PXXj?)TgPi1cTlNK&^l2@D7RwMB>_mcTpD{yw|_F0hK1xDu%^Yt{GA$V5c=8;Vo=+{9E75~LTW9Ja+>;llc!x>3{v8ocb*&^edLPtv!`y< zVMM%ZJaO7U*|1X#Ky>lVX|mDCN`ju>c=@1IU!7He*u@P_4b%kGUzPXk5K>S82?PsJ zfe7LmP(bQu>#V)7nvWI*LQXnQeFgfJBd8Lsjin-gblRtU)q0R=t zB|;Es_yUH?dqvNw<(q&wk%P$f5Mq#lVv^ls5R&PNE1AZ9gXe>qn=l^3kILS6e^j zBR@zQ-jjUIkC9$(x%&pX+#3V9`qpGDfO~H`K>hW}8O~Nf3~GY}AxK!u(;_FPdv{(t zl3AlXFL!m@-2-C*eD%gjy7isz27JV?+4eSSnhqh78L5h-IXaNHo;+HIVBfD@9t;J@ z4Iz;BQ8)`AG$BN`^ytgS|M>(eBVL4}g$PSA%uDC3`J~OaLVq1mg1Z zmW21;d|>^_%g3v~Kb2gXQ-NeopIuZPHBghJq5%6T1nL@-=Ii&4S7v1y_DcwZlax7w6O<1A%WLq?4(DJ&swEL?=TI zLSF(96IHwN?LonEljOvE|T=@4Fi z_P|_Eb-J%(#GhHKvvUXhzwUPlGnFaEjO0IjZG5Mx&mZVn>2e5l8}fv;mdIQUAZtaw zIRxoq08xwbP2C}KF@&l`d4dMU%EbU=%kp$gN8cx|1rW3?kN53qHg~ZKivL2MaCA-3 zzC7XTlvuSaPvou!FxalV`>R3$s?N#tv7oc^d`7^bNay4!fRI%{cjWnih~=w3DCw3w z+bL2A4#+zYLWks=Lx6O*QK&Y`~s4qX2LK>V8+ TCuShc00000NkvXXu0mjfPp~a7 literal 0 HcmV?d00001 diff --git a/images/emoji/1f3a4.png b/images/emoji/1f3a4.png new file mode 100644 index 0000000000000000000000000000000000000000..d4e6b0def25c26b551a2101f0ac0a669d42fe3fb GIT binary patch literal 1165 zcmV;81akX{P)W?qMxnH}ahR1jtchdEK06NNeP5p;ykud4Nyt7~LWYo1iI z&Z_EL-naXIBgx(Exx*{cTK~fz85sRv!)rh-49Mr>Yk&6LUmL)Kpa#USpaMBivmk(@ zfeH+sv(SB5P|TVDhmlA)V)1epTmuTkfGo8D3#fx?lCSg5M@HXy&tr7v`Ioa$Vr)_g zEUb?+dbYgEk2{6l|MW*nBO$#2N8TZzeEwBU^DM!n2tR7VfipnWBcT`*egPmy1PMiK z0SkZ`Bc%kjM?&2`63wL-NrD9`wgBC;Ll%Gy;0&<9(F#8T0Ob?{DnOAX*ti0~6aqA$*b-t2C_@FH>Qg)SA8TE(*b-uw!Fiy70?>}VM^ju0 z@dYdh2(N$z6koy&3b^uy+lwZA0tt10JP+h z=SV2Q^M6Y$06}sVEQtj7?@Gto6u^T$;WJ|l=RZ$pbVzh-uu!8 zkxHm>NX za|s4yhf4Sd$Aw1_MkZz{@GVF?LP7ZX?P7(K=@qHpTxWLc=$D& zb~q*tUrte^8L$BuCZLWT{tRB9>(76tV@^5eV0g!_{CIlksh7LL=hMEBVKS)2C|39d zzUTIfZ+?1k2kblc6nf#c4}IY+$fhjOYc`za5{d}nS#R%=aOydi(#vmu?h9{#>NwLH z5HR3Dka^xljYOV2Oi?T^0mg?}(`B2}{2?e&Bg$mLcKkxF1 z^nOyw%hzmhTb~|#_H}n0 zJj06ttQ+rosJN!Q$8~Wow0ptmB=in1h9p1%+t#yO%uyllHNJN00000NkvXXu0mjf;SU?I literal 0 HcmV?d00001 diff --git a/images/emoji/1f3b5.png b/images/emoji/1f3b5.png new file mode 100644 index 0000000000000000000000000000000000000000..06691ef61bbfce4b73a18dedf215b58cd795895e GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!FN2a5zb*lVkr6pfoxbL?jDV9sGs6)D2F+z>7?TPbBxDrW*gFm~CK)tHNIR_b6*OaD zSUQ=(AZVANPGo&0LnHx7fa z%Qv<&@}BTbp1O!FM`LJz+hwWboFyt=akR{0D#GvNdN!< literal 0 HcmV?d00001 diff --git a/images/emoji/1f3c6.png b/images/emoji/1f3c6.png new file mode 100644 index 0000000000000000000000000000000000000000..ac2895c18965956f94fabf1756cf532e28368191 GIT binary patch literal 863 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!dINkyT!HkbO$hX3pXmQ{hH#Ou zJ9)lr=Y(_rp4R?zTouj*GJYPA1d`u&^MBsL{AC*(NaT>ruOssR&glI;squZU(D%I} zKm&ogzHH|JiU1iu_KQzUbO54rbE<%7PfHw-eSNn6y_Ft(o>Q%X4$>_N@(X4Vc<=E4 z|Nry%4gUY1-(T?m|N4f2{r?q!LJ2?&6iaAGSik@M{{KK#4t3ktZe?I#3h{Jt45?sz zJH55&v4I3zz2d%de@Be?xXYx=BJ_psN4f$ta#yMutCTzcHogRFuHR%$btloVaB2zZ{kv^}{g)SwjdgA`_`3GC zcV2OMdzNe4;imEpUarP7I+Jqlwq)gqh&zP3zv5e=w`_gmVa0=r39nWe-Ar6jTbLqX zc8fWjeG13azULDdPPn>w$ug>jZ*E`w?~mY*kQ_cosT);gs}9=bylV4moURr)Rj%*% zbBAJqr6*(VUOkW$lf7_3ewojO%)-CfncbH!`8?s>a7q4m+eePxRE1ne#Yq}B%K8o! zW;v`su=+qm#P{4I3z+T;iD<20@VoU>xM4-pqWA}j+b=&3V_#-garc|+@&oU_g>G1$ z&$`^qgLQS>!LBW5y=G@=&XqEG?HqeiogonEc4IP}uvYlTr1R9anSI z;++a^Pd2}P>Kg0M9Ie}R39(7qKYgCf{r*|-%+t*sw)NKE6i%fZG-rPQYS%imC+MsF zM*T*wV>|XrKl#?q^-f++&c1o~?&XCCKYMpS*B9Dwze!&62V<;+^pX3W{1S%I50|%-o! z3xkU|t$hSXK-u4ylK);y`Efk{-KtO^7l{7dO#8eu3aB2g49)<`0>yzOL)Nf6agv&azAd3gxK}NU$Fka!TbO33j+Q- z^zT<_`2XIa;Qssf3jGfM{};UP-|zqU>N^8B7)zV-I^{}$Sc(;XU$&V5Tu{~qe`=l|!^XZKo8s<)r_cjBtT zf`S_gEi$(GLASDmFTLy#UAubnFN=3ydl_>lE*3uK)6K_u(S6(D>BrW+z4|JC!*PSz zUrG)=+K|Ch%y!En?hC^lt7hSKuP?u}d>r;~N&)-y`HQ&&jvttDscF~7uAUd;eui(@9`a& z{6WmLi(|QqjJ?`QpU3PArI&DsDai;-dUN-oohX~|70;GBqlin~vielXpn@i)w+Ltx?2+mYS7YYq!Bt(xL+etE6v z!SAe2lkce?SASxy_FIp+!97e+$;H6p(20o*YPM6@?5C`0w=f89aqPKp^=Yp3mWieg zELS2mon|<8NJpAQThC@zeLc}d!k|-t{qV26m7yJx;etFd(dkxgxvrJk9Q)QQeaY-9 zxPC5Vw!QA#B^s^=N>2Q{SJ=W^_hxfZo#l+uD>Jp4zIHT}Z+If9>B`Z{7kMMk;P}d~ zrBN)-PFez&{!VC}X*;Lt#uQP;i~7bK(OD}vJT~!M=+rHCeNZ98SX#-_6IZ-pa(vx8 zmUQkKzEA73B)nWbwoC4|JZr0Viz{BmC4eb*>D)C+Z$8N!S{K!SUnQMErC&g!%K75v zgjEt1mMt2!{u>Op`50Q9knBllidCIrn@P z&k3HKy;6#svUsf+R%f*+=*V&LKCx{G?-V%09lZ0o&!67~$A4_QD*a{C)Hf=XC5g+D z!?guPxh^kQe(AtoAK4!-c2sbCMQfk65#rm$R`X?LLPFFlmvu93*FA3Ecu>=Kaq24d z8_&5V#UcV@_r6j4ZN&MhcKX8I471wfmvY#$GQ4N_zV+e7LxNi)Tr^S`7*!5)J-V=K zUR>9LxPzLSM=A_wF`jYjUb5QU|Aq4{rLBf5uSu8OQ2Sc=ue?g+y!7={zP}Cs z)`VQKo*_8*-Zk!}hh6KwpV%L*{iC#U#+@ZoCG=iySa|C7qUI%5MAi{YicA Z{RyhKiX=YFI1bGC44$rjF6*2UngF#hjY|Lk literal 0 HcmV?d00001 diff --git a/images/emoji/1f44c.png b/images/emoji/1f44c.png new file mode 100644 index 0000000000000000000000000000000000000000..028d69b0de312aa29b1975ff07cfc6236a688ca9 GIT binary patch literal 979 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!4hQ&zxB}__che#0$Ek$h7n33E zcdJAHUP}S8KWqwrvpg8cc(XhN$ObZAFAf4Ch%zAK{kkw9`^%o_U+0q`3?TXMW*U%u zw<;7!emxKiB!6E@{&771=jnuxTO+?6i31w-d1n;FD6AyVgm-JhAX1;UMZR4g0%QY? z`g0}a?TV0(TOxqy+o4#X;DYHB(t+M^ED7=pW)N^tFnIqz;r)MuhX4ET{|^xO|9-v0 z|N9018~&gFKmUKh|Nj3V;PC(b{qqG0`x^oj-Y2X#NI2iGaDIQm{rB_tGaa*JU|_2A zba4!+U_5)Zym^+F2>I86FJ>HhyYGoxi* z)-MWO^+kK%U*;<>o@c6CHCX-K@}6y))R)V3Ga@XP&QB?nO2`h0x?A|_$)8KY1<{g?1dW=%30?GN~TA={;-W( zReV#I>D?RJhxD(u>0NV5`=&5w`t0OWDbEC)rg{}@xW?@wxODx3P9>$ZzKK}@l2P@y z+xS?tp4;d)-3&2toS0zbyh3D-gLvJ3C+}@HmT{~!6Ak!y^xl;tZpU})ZR6hV=Mr*M z#>(~hf~~o4KG*6P&OXYdRa+y-TQVa@A@%v3+FRchO?P~lQN7A_#Z8M<;_vD%OP#zr zQTvmgX!nCx?e1>zN+OKm*KcH%_8d8(rg4AkLh)_W4)vY1k%|^hZs_^ryGd=2*{pNV zxT9tjaLg>8wCb)yfA30H>+PMI+KVTCZgM*&`!>?&XVQY_Y$^9YOn9Gp|FCksuFCs( zm*?tMU*7CX*%ox3+rePz8n-k}>z#~h!D2>d?lc6*9_VUlUBwdG;4N7zlW~&y*CmFN z%&i43O<(3Q*VQhwU2bQz$9mF6MVGWs+iss{+f*VqnWrr2@l~PMnaa*3kxEt(Q&aY> zy4UDpptQ35&E@s)*HnoM8Txx<)y>rWdbrJJLWD}W_`-$>=_M_tmzpQ#b#R~9G0*Cu z)0u$0MLr#sE|qqooD&azU*d7%b&CE2NzF4oryt+1wozSLDYT`p&VG|euHjRKX%ULMN#kI~^)*o;$Nv7vI~Bcn_s6Dxe*c+bEq(bG T-`S-EOx6sZu6{1-oD!Mqc^2hP`H_L{rm6#zyJS# z!TGtKl3M$T%Phho znN6CrzD%B~Gec5g(kg@YMN4FO0<)URTzIwKvaIcp*d&#slGk9?%o?4;{I^4>$K{gf zC!v5dY#J|FZr|_}dc)LI@{Ni0_X*GE4L-lV$yIhJU&@fX%%mG_ zcXE|tbxCl}WT=wA=P0Q$qjBm(zN@hhbona(sjhmgwmih&?4YsUNx7w2?`EuhFgs6b z&mODz3QNP5l77)TwhxsvKId57x5;mKl=y_{`|gi-Em%G|9L(W9(P}y84pW}Q+dqH2 zBoDtl@b}3KTjm2xryLa*33z(c|BAxr2XAY+O>NF^`rqfT@z|KR-|BQMFx@bCy85}S Ib4q9e0K$KqYybcN literal 0 HcmV?d00001 diff --git a/images/emoji/1f44e.png b/images/emoji/1f44e.png new file mode 100644 index 0000000000000000000000000000000000000000..b63da2f20a8378786d90a9078bbf90e9b3486152 GIT binary patch literal 815 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!_6GQbxB}_di-XY6`*mR-HidsZ z5c_d!S_C)e!=?y`_HT#d-mVOJw>tFGHjo2=3V__t zyP|+1aC1Ivj^J>cqz&|deMyjCFoQz>`Tz3;{)54OFzL{s(4X-C|9*x0|NlGupYO20 zVg361@8=sh2;2{NpYXoFzrf)A`}qO)&le=DUoOA%CIbWGBTpB{kP61D*Pb@rHV|NW zu=n(lnohGbXF~E$z5gG!w`gnE+Bt6?eZQ|PrMa;F(%D>2$y0K%Pp2{-;BWe{nWJO! zhxQlmetlP65ES~ymnDAVvatFC-#fo?CLMKZev{YOV(M{2^8s5&gm`-%W9ouqyN>W= z+$v{yHYN0cQ}>!%4(+9}&g<)QS@%iYYuC)1e3rra8cRoeY^F%>+h~J_^Q}6pYZAR~ zrhVdBCGm0T&Qkv5Yb^nNjNB}bI1Xq|o06NlMIo%_WZCR@3f1P4JKrj7*K4}5uH7k=q7M|a7$rQC_;BdPQ3c%vu44L6XWX5lI%jsu$5R!Tv!-+3n0PjOGiPbh z7q-xyiR*5y5aC|X_(tgI%qAi8>yey^8%@tVVZAZY_~&O6U8`1OQQMB-dCeV1{yU}1 zE#R8Vy!OlVx4Jv4)z3BFIXgjwTY-g@nN9R_`-Po7pG3G=O*GnD#WrY57%XpM++D+H wzw6JuqMP-vKmByEJZo38kF}TiFaJBniu|m|{w2Sz0uv5{r>mdKI;Vst0GQmREdT%j literal 0 HcmV?d00001 diff --git a/images/emoji/1f44f.png b/images/emoji/1f44f.png new file mode 100644 index 0000000000000000000000000000000000000000..b0ffe9289205ea061876135e7c61613218447aa2 GIT binary patch literal 1456 zcmV;h1yA~kP)BCA>%T6E7$&j8X@^?Qw8qu13B?zJ3j54l6?@UTOthjEAIVJ6rF$-vLp05%RQ z`NYA52q5YOIijR|-k;G;iYTeHL_gv>sCATQZ9vby;}R?-I& zQmA^&4EEcbnhs+Hscl#vAfmrP3{FWb;)#QCusx&@V~9bfqz@z|jn?!==ynuC{4=|@ zCB!`#2vg9y8b$s=4p)NIBOLGb^GnMa2p8aChe};p4oT4_K-9IvhC|vTG%nw}bl(g} zhLAh7Dk!s#=P}X9n*pRCNaOs@r2XmHMSRYnQ*sX*UTMYa^S`~mnifU&`^V-DMEL%( zIs4CN*E1qynkfEqWMz=Yw4(_CVj)s)lNKUexO>X}@oo|p!86D&Z<%X2Y&aN)+#$LA z{Kw}X9wdA;0YHq2tm_6{0i-1U{qjaeh>Z&`tc^LsnS=Gvb#(L4?69?!_jp7Cn^|{A z9omQt2*K$7`slhKA&~yz$pwow*f_K1?=NpOyLT^wu#f!o)>I3>YlxV6)#O_PHepU~ zPIqe@K&mrl_v>q`R@UHSW{t~)|B3MRt+U-{|NiEh-c+@(UhP>QU)?%q&umW#A=>N^ zePn^GVM^lH_ph_x?JQjJ{Bu2TDOlgEf_&2_E;#+f3O0rsM+RUswAo?PKfkaf28rJh zT=S1xbMlep%g;ZtIgRxwts+BhR-XRA53gP0KMc{A$buXbS%?JzWDQjkc=p#D^C*LE z7Kj&AE`pe!Pkwi64rv^0eWckzIFy2{p~~p@53jc{$lcp#ur8E!W?$1Lod1f{zhefQ zq*@;!W~Z1L#N2{7_spt2$4{K=Wd&&Ti{M%iHmhoVc#qEsgG6gptwHHPG;-SPlog=u zU_<~-8^h0GgJO2PaP*vk640DGS}O8h8xJWrmV^X&9x zk%bKMYoTe)<(!K`dbwiX0A>BeC z6D0`Z#EEkT0CDg&xpnHp!?A0=^0NinCPr!zgT%vptE-0)oxn6HhKaieWCws&3ImnT zaaEVO&Qhmz*B`PZBb30Jr2Z^*9sx1ZA%Yl(v}dRlMtt-dz5W9u=JE=y-QA1;0000< KMNUMnLSTY@cd?oP literal 0 HcmV?d00001 diff --git a/images/emoji/1f47d.png b/images/emoji/1f47d.png new file mode 100644 index 0000000000000000000000000000000000000000..3b90e97433b9c042d6bc656dbd6080e971e97351 GIT binary patch literal 839 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!S^|7RT!HlQ=b^-)^(TXu?+*g1 zENk}j4fJw#_Y95pp0_n{+UmgARPX(FL)xbM$HXOMWM%g)3|O~*{r~^}KY#hMbJy;) ze4o5Z--{P7b@%ixTD)ZY<&ePOkdo5!x?Vqsy$6#0JAv-dDGBlmW)KKy*nj?ifx`Uv z>m3aK|L+GHgB>K?w~f8%$iTql=IP=XQo(rk`pv3U1~M!kSW-gPxJYi1!FXUP@!3P+XLulqRrs{Xfd#+eD)wtX-VnI^cW=g4NpJv>Jyn^#nQe&4W}JGf$Y z*EYjFy{^$b`5QAh8C1M9|D5|{EO3mc!OPgl|Ng^}CGsg@|FhH9HtJPOKWkdI;JM^` zuH3cES)P7H8&kG9t^eM0n)RfO=%uD!{vQZ1{pS1gM;@$__EAt%=trO{;66=}I;8m8Ak@804 zqWppzOBtT?hcP^RGvn~zy_`F4C6}@+sn~H#++}aNcVl~#ZuQ;bNSDV>&gMH!^fEY< zot&Rudlr^)Fa6mdKI;Vst0N;C?JOBUy literal 0 HcmV?d00001 diff --git a/images/emoji/1f48b.png b/images/emoji/1f48b.png new file mode 100644 index 0000000000000000000000000000000000000000..85e6dcfc4e8d980bf57d9139f51f1e058025336f GIT binary patch literal 842 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!rUm$fxB}^u?(QU^Gwz-*y(8cH z#9Z_Af9(?uWB?IR@UeH;1FsMW7e9Hy!yBmhvWM?0pQuY7K2N;E&v|$~_l~^c>G!}Z z6sULC^$W9rE;A|#@(X5AXmAkte?GzB{`~jr3j+H0-)~U3|Ng(j`SwJ*8l8u8UFodws6`ZG|%zDkpYsdaBo z>v<=xwKguLB?r}x-99?4OZeTR!@_#+9-Z9F{UC0S&pgw{@b#LkdQPhgYz_bZp1s}0 ztM!{ExOP@`%_$HwI_rA5_LfuYAw@0ok1g7dc{&K%?$>e2+X0L97D4)U6IT<%Z zq!Rk}C@`$MxUpx8l!WBN)^r;u{hdMoZ!r}IZFD+&VtL8LoBWO&AAepFdEm>H`2B)> z8>aDpaS0YV@Z$%|n%B*tCR6@6!jRY5Wt{ zEMB;7)u|Ka&$wjvmhb!h?q6-}^?xT% zZw1rruDr{0q&M82$5_q7vtgxLbD>!7^aI37ecBw8 z+`9*TCl&fV4Sted^fU6n+fPXu4}3EB^6-VmigUgR3keRsY@+-}@!#+F>}QszcmDdH Sv>%xC7(8A5T-G@yGywpB?UQ)` literal 0 HcmV?d00001 diff --git a/images/emoji/1f493.png b/images/emoji/1f493.png new file mode 100644 index 0000000000000000000000000000000000000000..0bcf2d1d567053ef7480cb2b3630828a422729a3 GIT binary patch literal 699 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!Hles7jI$`z;e)pfN(SyN$cD9h<8k$!sP!o&h#HgX=t2A=&Z1N0CS?XK zo^2XjqN}$nEW+e6FQ4aiwd-43G8cGr`^snYbn2Ok)#?Nb#kMW!50!Yq^M%!*ZmGV6 zxnn%Xog44xGX7$650zgnlUl1&yyaDLtMz0%lS2Jh&J!oU{LNWYI-Mz<=f1pSdT9RY zW37*>CX4H>t-5?FzxC6DJYTQ9K+X*}pzihQ?C3ow@=Znha zx;&c}A3L*I%XP!X?Ln(bp1q#u&lb2!X6E<5vER6+=`Xwgd1wCPlslT$tp;DYT3$YS ze{MnM+e-a{*v5#}g|l3;a*ktbO0tN22WQ%mvv4F FO#t#2Ib;9; literal 0 HcmV?d00001 diff --git a/images/emoji/1f497.png b/images/emoji/1f497.png new file mode 100644 index 0000000000000000000000000000000000000000..d6e694e972f124f3fe481ebbe0458b7b3a698000 GIT binary patch literal 675 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!Hles7jI$`z;e)pfsbuwEfxew%@eA_D^xpQnpsNCo5DX)o73Rp4n}*s^xZmp%V4 zpDWN!T%nXYZU6J#)<-+%=3U?Wa#1^)kMSrxaxFWj;~j{#v5_cGV_8IYn*!V_H?17-yK2R;`1|)+O)5I!zi)J#BNo|VntBd2_?4SBiAM*$VzcOk3W_vl%M lzAE44zXa_u{`u*txY_}Q4%wLB%>ro0KStkgyPc~F%AqVXoD#5~ zbJty~0CEz10YP}WIsquR-k|e^cQHpUV;S(FoOO$3Epv& zE&N_d4r~BLLh*mhEWrTj30Q&o_2tEg9^n&L23Lv#4A{6OConn!X=A{`NDgcPg`8Ox zB%pvUR(KtR7NEcIe{?KIfNh6cygwme4Z@pP;TJFbns_pt0RipL0ZGR{Lff3-8J%Sk z=g#R9CG3tqmu>wpAjCn3Im1Olu;onQsx%x`89(0R+D=I|O2uwXb5 zdIB3?L;r{cTXq@YQ26%g1HFE@4+A*~F8B-#pbMeEm|eox$M@pxn}_FGY<4{(5(@NL z!u#DmD=fOk@F8nT0Rx+-gRwOUO~MnRNkF|)3ZMg`QwdOj4vL5!eg<@4Ea+-&eaBqe z*bmXM1gwAxp^qUz7bHN$xEG*;ke3!P7A8PvUjFiPX#qc6O3-fH*C;{x;d4vqfiCgukkTHUm4k?0-&jB1iBTPm~s* kfISmfa_Ii1l~$sb->W;RucB{wGynhq07*qoM6N<$g77{kKmY&$ literal 0 HcmV?d00001 diff --git a/images/emoji/1f4a4.png b/images/emoji/1f4a4.png new file mode 100644 index 0000000000000000000000000000000000000000..9bc72b4469f95b1a744dc36bfbb8c16e192ab0f9 GIT binary patch literal 540 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!FOH+D9azgavitKy890 zL4Lsu0qg&tH<L4w2nhP)e&+|b_om&GcK1bZpSnwTX5yWF>#pQZyZA(YymG*UGO?+-SiaF|EdVYRl$^q=$y~+yQs4|@JTKl}g1o&S$!!NvdID+98DvL7~u|9`yb|I_XNpY8{8 z|K4o+cW>tJOUXaZt@wTW(9bg&KxOY%h5k4m|6xn%*JIOvUElTX)Pj#YYrpJ?21@gSzN@7ISx)cic10AxUvy>#@&fPw_bUV# zynjFc|NQ&s{|C%J|G!{86T_vA3=B*no-U3d6^vJ}eob2JAaLNJXJ2Q)j4JOtmo0?K z>;H%E>dtwRaPji{`LF(QY+(AoF5t)P278x954?5s9^Gtaxpz{<&dyfeX77X7(iPw2 z{#T^QeH69{7CPyzAZjw3g2nVR#SuFMjxm@R9^{@+hTR5EBS(`GR_m%nUVKIg~ZpTqpI#nmC@ zW@E8JqV$gv!4)h#KAqAJ^!aP&Ik>5wEp~{%kn8Y8Y69;rPMuulj7kYv1?5Qz;s*XL zqIcOpEs0~Eo83@->+DO7dTY^KJ4eYnqb0&0r6S^(Vv7@U?N0lJq)CFLQWAJqKb6Mw<&;$VSXw&8Z literal 0 HcmV?d00001 diff --git a/images/emoji/1f5a4.png b/images/emoji/1f5a4.png new file mode 100644 index 0000000000000000000000000000000000000000..b4068c3e6e80b381c2ebfe43b6d3c966a436e406 GIT binary patch literal 435 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!FNmvpY#h`&w}}P@7;$ zkY6x^LI3{$?;9M>-%k)ISg$ZY;9w_5BLf4YoTrOpNX4zU*A7l@;3mc6HuvZM z^>dT>ChJCe@rK{OIYCWTq{4>pkVxdx8O&0O$B$_FF&;bPG;7lX{aEhIM?K1SGiIq? zJJRgS|Ml9wzZv~Gon^0kTi!ntuH5GIt&$DtJlUDv|LBs}N&fi>rNXPhmcE+KkPsf$^6&q56;#gCgr7~XS*-RF9= zqTDB_tmI``@xQg5>Twnum%RRe|8L+jN%0rmvVn;*w@>U?@Lx}R`lIjhZIc&$YTfW{ rpTMbP0l+XkKJr%T4 literal 0 HcmV?d00001 diff --git a/images/emoji/1f5e8.png b/images/emoji/1f5e8.png new file mode 100644 index 0000000000000000000000000000000000000000..00c05959bcd9ac7e892677e69c45ae46908f60d0 GIT binary patch literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!0t0+PT!FOz#hZ9g!L0`;K7Ri4 z=WpBnr~m)|fBExQ_1(w!zWs>0a(m9xSC_whL(|J79ybYSsB}q?Uob<#{r?RD=M~-? zH~_W6K*0R|_4_~a-!A|vJL&1-7*fIb_L^x^gMmQnLwC0F?Z58}^Ip9*A<;Ho{I@p8 zfvT>>FU+1+U9g$o^MldPPV$rOn;4^KNy|?}bjWhLTyprM%xspx>^Unn^N{R*o+n2Y z)BEDtPCW|vbWEQ)bYbY8kDnWtToAhUBemhxqX6UM`plkTIh$H6>m(N}d%J7f!~VCY zQ<%*bur|dnnR{s6^nc2U3eI+0CieKq>3w`~**B}Ju-SRKWExv0L$gVPqtpQv-im!X s3%HG2S|x?%39$*Z8mBDc?B5)=cAn0*z9#9TKuoxxB_XfmH&xEp=-W1@4T?| z@aAJ@r(e3zo4Dak&gRD(j;*?Tx#j=e^cUBw`t}~1d0_9CTZQG@ZbHo5eQE(vB~TVW zy16sFr^r0bPknxi{hQPA$CmpSglj)K6y2O@JgwS#^ECI$1pTj9lK0H>UfJt>enW7z z;;wZ-r|Xsk`2{mLC>S)X-~ayq`2c~0{`>z?LBah0`{(xuyjR$NKjFMVf%_>&DFz0n zB2O2`kP5~yJ;S(}dZ$jvyzdhcY6=r7-eMTdh~cFj0vRI)}}ds*2w`%`yaQ$I+_ zpS`lS#ayzDyW;F7u83_fmVD{A+!GqxYWiYL=j{c`v7#Z?%=(IHy?tC|>qF~1n=I`2 z@04D@{VmrS4L+5IoH^ItM`o?v8uZgE$>E*GmL~s=rCZhY4n6k_-D@E*z0T^+`kx+m zq~=e|*M483mbd*-@}`@cq+>fQ_tlklH-zq9tDRN6-8UKu7t7w`!=;I z@BGMj6jBXac7U*#9QR~9hFVDQL zbXxJ8Q=IYEqX&n#%dxM{XW`*+yVc9lR?%>Hvu6~;2IIXm;_Xjzo{uqcV4PgJ?(*p` z*ETS|SuuZd4||BofuyB(*C@PfJz~(Fmt&G}TO;Dmz3YemA7r-E^;vRW^Ki(&IZt+r zU7kMO_p95+D1$xA$91%lef| zUOa!gB|PZQg$uo{b-TB1{POuzc0%~2bEl6T+V}g|u@HCLUwij{EiC-|`0>AQ-@aB= z)pdpE$8LFqAdFBpMNELlJ${glDqFm ze7Wy?WWV6igRLrOi%LG}_%_`x6p68rVGT|ZVw@@3WGQzD7)MKa(deq|*lulhH-C#rft+gCRQ^Rb9bD$VY8377 zvI-Pfk$GWC_hV_PD~=C57mJJS$@s#<)HTCAZEt6w* zESOF9*Elgt9Ly-+omBpOgXC1{g-0Dc%YVmh++ExzdG+pG&!b`=POYE+|Jb7K_a8xyABAU2W))6a66qILIZe$oM)~nlW0t~${#_>fXIXFM zOiC9x^LOIiDck?JEGlkSj;!!p~wX$uWcchPp-eA z)fnc$xTa`RRu?l@2D9wCj0vFyuIw4zOePCXhZ<(uu6yO*CMdf(c#9>RX$Z7Te^$wvaP5lsx|?$tF9<3pI8KZ6I9AkJ zJ^3Wd_b~5YnMYoC-`&%&QQ@@w$5VM~t8Js1BhH(tmq?AKjzs8LsUll6hx%-p7WuGjN zvv)i6(l+y)>(>R>RbKwp-1Xs+Eo=4q@`*YR#XofmIeqqCuFPsNPicL>qI_Tf#P|o( tkL!QA{8aqc+t1v8Dt`UkzwiHA>*MX~a%Q%Ns{r!`gQu&X%Q~loCIDK6GI;<1 literal 0 HcmV?d00001 diff --git a/images/emoji/1f60a.png b/images/emoji/1f60a.png new file mode 100644 index 0000000000000000000000000000000000000000..aac1a424ad4e8d344dbac828b85fc4d85b9d9714 GIT binary patch literal 812 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!rUm$fxB}__chiYPH+P0ltF|r( z*FLt~Kg~~levAFrE6FQ+otra__ssJ?zajX|>G(&7qI-(WH&1i_e;uuoFc=mexv{woOY!6l! z9y!95?0tM|uKxS~1<{d*3OuhAoUU7b^T+v?2A{gWF>~`SFfSD^v7X-hj-5wG=f!;M zDgn0#BCXBE$J%+aHhy^WA(5qbQDX5|WsA%!1+tGh=Oh}f+gr?Y?vPd8<4h*m_md6M z3K-4)<^EGInAlmX?^dvI;?}wcNhPkX1sglo)MqG~q)l+-&It%UP;%^N4wsmr^Y6FghReMw>v|iSRr(&3OgVCpW5?8xhw~U; zUE`RL%k-q&VSQ;sl!xPQZ;mTzS+cTJ2f#ZgKB42RG(&7qI-(WH&1h~Owj*&Hg#I0^Z$yv z|0i>9W@P>^tnUf8eUz2|zqR`Rwam>4!T)uXlV z`n^pmew|oU8D#V+z5M^=ih=;$ulZHS+QR?OD*KUL_5V=r|K-L1FJy^H)%O9tAy5+J z7tCN#Fn|C5^#Sh%8tyyvE1dteblN8d2BsKK7srqa#=F;Bs~#KhFg(!CD77dIc~*Aj z%$I-urIzL!YqXX<{`>gJWHt3;_V>dVMrb*&+7qbrqraqZMY ztY=iGEiaIbI8iA6znXvACoz$S>>HX6%>Vt2WsQr-J)!f)8-AFld|-W|P$QSmI>GzE z{Z@9%$~FHT^43Y_TTYmrY<7svS;AAY^}rFqO{=#BHZTOaF6CMl)#4@Fv7v&|&F1`t zgz!jCz6{?hvld(p%x--4;wSr-Z7#ms6t6leWiLoA4(T*+n10*UnSV>rEQbKb4vp1? z630S2JKk<#*!8QPQ%Tl!!B>ITFaJi#Zd`u))za|Wf=N8LQhY?uvK+f>;TsEd2l3Ub77a?1fho^3a{*uVZTr4zW!_C)ful8#1R_|w~q8;f!bO4vTVd3OKNo}7v9`Ez}*ecsu}zvk<<%Hz9NNy~B9|LuMD`Sa`9 z+gC06@a^ok+uMHU+ZOEkc;fRl=j+n_wfWW+`yRfCUbOiA_s`-XsfC~XIBPP1X^_Fw L)z4*}Q$iB}&RD%s literal 0 HcmV?d00001 diff --git a/images/emoji/1f60c.png b/images/emoji/1f60c.png new file mode 100644 index 0000000000000000000000000000000000000000..715ad0bf53f70a626f7817dfa80c0025755a3921 GIT binary patch literal 785 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!dINkyT!HleyXi!tSEr($91i<< zA^z^(pj~rp=Qrt0ELB~(I=G=6hB z{_B!5+efMk|DR6U#%yD0w)utF^=A{}-EUqtII;i|xKTRG#)I9qsNhncK zi+k;vRZ{++<(DqF>Knc1Xhes-_uXROi~O9r^W@&Q8}=PvcFZZ3&-e0_wJROGb_LR%i5d-Qr~UUgtGx0LS$5}t#cQvgGmhNMZ=5@|-TTgpB{5BD z(b*nt$*~}a=dr!xZ+DgD`Y}s`PL}NUy;jtJSIsEv_)eAsvClov25VM6^E~ML@Z=ol znMF@MkKdJGXsj00D$+l|wqxeE_u?8i-De~)$;?&cE>oHPTAtk@e%yUljEI>s}C!L#$BD`9l7aVuEd_+wYfj?KOVSa zaN$~7KSN|jN~3Lq(c`C9#R1{QMY9+Wi!q3rA6(3D{752G_vex|oY$7upZL^Y`OopP z{i|Q?x&L>(kFxlq-CzIm)B4(fM=$UH^{@UvgL`<6n3m1F`M{*a;OXk;vd$@?2>@aN BbyENU literal 0 HcmV?d00001 diff --git a/images/emoji/1f60d.png b/images/emoji/1f60d.png new file mode 100644 index 0000000000000000000000000000000000000000..73fbee29d4eef6c12fd2175873f9a1b2333841e7 GIT binary patch literal 1069 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!UIqAsxB}@f>FLPmdwcr7%jy5` zrvK=JihnIj|9c$7{+gHm?_B!#*7R@n>31p)u>H#jIPG}sUth(cw+#a74e|+(! z#o=I|^oi0JW^+{Ku?xmZY-iR?$V#s;Dmgm6;MV^?zkj!GUAw!fTXmjP_VT^!!`{V5 zTskYoKXd9w*>x}TnwPH=E&aG

=8mx3Tt&jch$i*O=}%Ehv(%2zY(o*@JnFsA2RE z;XB`NOj2$r?}}tqQ<%Db@+Rd!a3QKs!L?<~qfw{FBbPJqCZ>G|nsSE7>@0ezAA%heIz^ le;Nj^3BI$$s_(^pE2jDu%Yt$OgQu&X%Q~loCIDdME%pEa literal 0 HcmV?d00001 diff --git a/images/emoji/1f60e.png b/images/emoji/1f60e.png new file mode 100644 index 0000000000000000000000000000000000000000..20011735110992abb08ce5937c3bf74aa1d22fc3 GIT binary patch literal 824 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!W(N3#xB}__chiYSpD(8#TOYS% zazs;kPMMJlH&1i#DKg(P&->VN|7q3Ml?nPY%_F^m zj#DlP@(X4#D44(h|N4OU0uA>a`W4Q<{|^D{|Nj>NvK#{b2b^2*Vg~~QleVXeV@L(# znKN4%T?`ox2e8Yu{atRG_N%ab{qzs}drIet+eI*YmUQY*>W-M={nUNylchEvS8v&y zG1dNRTYS;;W%E8>oe^WezR#f3dy-()!wKJ5BwmuIKLj?+{Lvxp4o&?e7_>^VAk>*?6wq`kbU}rDE3O zJ8>V*N!3>SEaZ_~RaJgu*D2FeYPI)UZ0>Dgh<)FBXadV)5tTi~j(pEmG?GO90*)$i z=50w@nY(t1?ww28Oks(W1RtsFX#8(p%J`}#ll8^tn`|-vSmrCNUC0)(MD)OawHU@H zLWc7hWB#)+SZrjm6Zd6MY1|TUT;6Q@O>;-}JjM*mYL0?SI#1t(Zg{fI;Nnl`W&BL9 z?x+a=x_hBmBw+uRJ~ND_>^F{y7=$4i3@M{6u+Vb z|6Y2wl10>ilgN@wPv35xRN|;#r*eZwDQd<$J~6?QpY$i^Ty47~wQG0bCM$!l`% literal 0 HcmV?d00001 diff --git a/images/emoji/1f60f.png b/images/emoji/1f60f.png new file mode 100644 index 0000000000000000000000000000000000000000..87852109988ca9b14373c617a94f05e8254e2315 GIT binary patch literal 775 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!CIt9|xB}__chiYSuTDihIUM%! zLj2vmLA&PI&TrD0SgJCkMq_Qi>4}wYKdvV)>omN!&F|o1$MYM!HczvBb2|R~hTzT9 z+>b5ye{?AN>y_l2JHz+P^R7(LPxDi6&NMCv*Ph>E-&15ht=f8Juk)+;!{>o+5-17s z3uZ7Vn7{x3`hfQW4fh@T70&-!I_(n!1CyAii(^Oy8tO0>_6J82rWqjZN zG+}aFYS`y#VZWFCKV4`mpZ@P)=?Sj~hVwRvPnf`^yhpUv%jDdTj{5Z-$~B@#zw~;2 z2>zt%GRslH`z3R`;-S8TxDAeG`u8Uo=@fYRhp=hST;$HFqxwamZR?D8D>$wxxtc4M zalB_Tc=yCL(5d0-Y=+~j@_Ly3KW&TL8asb~r@%prughNkZCbQb!YxP1iaSAMtEPW( z;2GO_bF0=$%?h1P!_E7joz^;-D8aVqbOmQ|@5R6Q+qJYeZF;)wz50`$Gjf`_ z0=&+lqI{^ zHI7U2T4D69ODv2!AzEb<-m&V~@kp)yyS~BqLHO0TvmbZ`ubzGES38G5gR5f8+J;3; zcU@L3SuR=jb>)qVE>&-tubSN`7i3-ADCPU~wD{%EKbg*_I9s;sZ(2I{sP@f}^N%Ly zyng)i-_B!_z zna^*rKepWe>y_j*KlOre?eiOgH&1h)R&Cv!XU-Ru|MM#! zdKkAfpIFkAo$ocPoLMiz{$IR}eZ_+(fjyQR*M_K=Y!^HS9zk{4lJHOm%e4)y>^AK;yxlj59-H)>Mjqa#aUtPZA z?CTz{gvD!KEqj~bvBIvcciD9wWgbJ%fSX^{g^j|Fq4r{+0ERv$hQ z%;A{XfBvepZiB%LmBW`65~|K_*sr!BEY~t@{#KI%o&{1DICdZWv%0q@LATIg-R91Z zF|GB?)YX$Jh(E^IdxO&*-!ofoWbeB;ZSD|hGSNqu-4_|K$yujMsk{~5k2e38mu zkGgO@IFPVS$jL!`a;^XFD4%=hd2Kc?jJUCtF?x1aUM8R98Jni&3mds>o5P*HH}l?I zB&!u5RJ7rSCi}GHn#UQhpFQ5d@Z;jMkV6aet>O-NCcS@jr%Z>@IqNm!ec?;i;d9jE z+h_inq`LpvN&Q)$RK@u3_ N44$rjF6*2Ung9bMHzxo9 literal 0 HcmV?d00001 diff --git a/images/emoji/1f61a.png b/images/emoji/1f61a.png new file mode 100644 index 0000000000000000000000000000000000000000..b684d7d4d6c0615dee4b885fd0ff65d46ca93020 GIT binary patch literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!<^=eJxB}__chiYPj}Ao_glktO z=pS3|pXR6DoN0V>XZZOI!97Lh^IPmUPjjDEZN0MB`OWG0|7WxRZ_od~sqp{ay#JRn zzg|h+Gtc|Ywv_*KOaHf5{XdcO|4{D#MJ4}lWc=@`{6D?y|MiUj%ZvXX$@#xK|Nq*e z{|9paPpY`GZcYNwea0n0e!&a|1@rg+4|p%oaNnU{;rxHR;QjxC`TzHuJU`{dz`zvY z>Eakt!FcA{^`=c$BCH8Ir*CN9HYjVcJYx0t@BO#!oEaP~o#oGWZ%UOcTlM+>)tBFX zX?&@^+xK~jW546!D(2&t3QXJ)7apLFcCneS%oBZvb|HtK-r;E=#+h8zX z(!K8>*XtYGxBDAx-|joZ(5CTh*4O!uHH&L?mTh=iWoHze`|m*5gNsZ%U-d{WX5|my zitq5)Cu`j$cuS!2wCMAPS#JZ6wVMQKod|fouVn($ss|HpY}m@Y&|TU@l|`fX3)hZU z_k}Np`D(N7t`%`@k63$%VZYO-a2rOUf4df(5#m32YWbZ{`$Ifl3QAZ6@$cUzw{p+g zFyV8RMMC_~z0Xg)QQI{^$)$O9z@2+tp)HekU&vl++0|9PbJ?y}i^b+v6ebEP*j*9w z@HC5^rY(L}Z_%sEC%*=sa?|kL|IM&xpUcthlbc1{?Z2n*KJcJOxa+kmXNT5TQ}sDV z4>Nvm__6G&xZCj%4}0}H%w^$$rLNsSL|iY{vEO0Vvv+E5zaGleZ1f;@3u{j23FSpc zPl*V0&yp5l6y2eyAY{tE;?7ck%k7p6=5H%=h7{PFu;KSKvFXMSYj!LMS$$Ay*1TOS<%$iW zrrutYl~B6D^JJ5e^onEC)Mp>r8zt+$b@5r9Na2^koxHNY^-g>{z2qL_Zmk_ZC0IJ+ z7=Lpg>v~mv=*dj&bE~=Uez~uamlAmE%;GHzJu8E!e>!IN^la@ZYndtKl^X9$0`I+D iyyvlJ<@NFhj12XKjk}vw9!LU{D1)b~pUXO@geCx`($cj6 literal 0 HcmV?d00001 diff --git a/images/emoji/1f61b.png b/images/emoji/1f61b.png new file mode 100644 index 0000000000000000000000000000000000000000..25757341f9604c7fecf535e8b45d4c3003d0d538 GIT binary patch literal 752 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!dINkyT!HleyXi!tn>)idPjmlz zC3#x4b()`gPmy^+xc0H-{{IW>Kc<#Fip-hcV*e$h;{1l-AK6tad!2vfR_~eT{pe8i z%lN|ot=0c0SG-Rt`9G`d|JH*4*D^n)m;b+z^?zN_|BAZ*S2F)EFHUibWd%A&uO!GX zn8Bc6{{H^~?*$s}JM=4@|Bn~!Z+htt)XDh7)5S5Qg7M81*1n?#0?y_S*iKdapRMP9 zD!*VCkAKe9FsqX9wTUqvdz4tyP0E!;{4_3J*|l|JM^f*)kJ7Cwr$pYabrrk)EdKsN zkLf@A>l|2}=f9cbB-%Cg?~|4T{{AmSIaVy-t77PUc&D4sW!L3D4QJlEL{8Ya@BRa( zW2+Y&Vx8h=lQ3slri+8d> zx%{f(LXFkebq`%-*z-nYzubXXP7hO#E`^7iE1v3|`eeyqe&+V+_Ts5;m^>y+unGKF z(eR(4^Yn>?DV-e&GoRJ!ZfHM!+1x!`Ar8SJy<8u-KEz#E*|1Q9P4q$~e?fDi5TkdXj#5HVGh@!Osd)koi#Qfs zV!Z4-{p6em8R#&?GT(=3^Mz3#Z~t;zbH zd|?txdEx%M%Nv!C_!zy?y`jVAI&X{Kgl{f#V!Mn29j{66ig?4VY47qzTG(c@%oiKy p4>IDl-Jfjd@7d(=<*&C5L)+9m|F5TKdI3`kgQu&X%Q~loCIH(xc~t-a literal 0 HcmV?d00001 diff --git a/images/emoji/1f61c.png b/images/emoji/1f61c.png new file mode 100644 index 0000000000000000000000000000000000000000..4817eaa3dc67c0820bc5b59d1c5ce96b87cda517 GIT binary patch literal 1061 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!UIqAsxB}__chiYQk6Zq~S@r+j z=Ks%n|KBhC|7yYi-*5f{!KY*YA6EVU`S}0eZ~s5+{r_V6qkGq>PX&>t$M&u}w%ort)3~Q9_Uo18o+9%-n-)&1wrG+$MPZor0-`pAg|I3B{h4mj(%N|AM%x|&(l2P#^yJ}^x^RL|MJ@dRD9g2P#U--YZ z`v2sL_bDa+XO;cmTJZl`=BM=X{};0UuPgdrQTP8!=Ktlz`zGwH0{YgsB*-tA!JuIN z{{I2*1sd)<^edbPd4X)Of8Cc$_ZS$M=6bp~hEy<~xqQ9pkpU0uh1MrYRmWSjs@fO+ z|35!B@Qvi`q(|Fr{h52#&HnQG|5Pt_#VH0J%m1u0Zaly&m@+9Wy|{AEl=G>RuRLeD zC$zKwX{*hgPpseHb^loL!oq!J56h{g+x68aba+%=saCo1^&h7yBmbf=CI3?^H0}4b zeyp3CwKiET_X6Z<}Uj z8!P6+f{to(uB-AMMM?h}R#(Ua4-m1doL-1$h} z&t>;j$pe*Jm8~AO%QnpH;nj;-7yq%w_U?kae%C+WZdjq6Yr5gB*sPxqEg5PvGY`MD zWca$y_Ut{zj4h=<*YN#k=*#$)wz+yO(+~C^o25_2XKdfJ|A36zw!N3w!)ATBmN}AfcexXu=UBpJAHE_a^Utf%W7UZ#d>Pq}JpXBwBb({*O?k1Iic>vrE?xaR%GmACW1TNaqy@HFgo zVCR#qZ2Ql|taN_i!fcacZY}E$C&wqdG~akGY;&CR>E(_GFU4!0FWsVlD%I_at(P66 YcH6;*EMt3JU=CpLboFyt=akR{0P^EGlK=n! literal 0 HcmV?d00001 diff --git a/images/emoji/1f61d.png b/images/emoji/1f61d.png new file mode 100644 index 0000000000000000000000000000000000000000..5c0401e9b1d3d0f1ed2f6c978d83aa99df2e6f3f GIT binary patch literal 867 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!rUm$fxB}__chiYPZ%)VG+!_A$ zO7gMg{?n?h)BMy6!nG?C^v`by?kO^#-(vshQ1qU8-p!fDD|?+cPjmlYSpPA#>``RS zmyC)Z*;T)Ct6#7>`2{l=6wKfMKj6JU!+nQ-h4cRjf&E27%Wp9-FnN2rIEGX(o}JEm>9GM% ztN8*pF2&^wjg0U7FW|m;WB;mag?AU$IVrvYy7wa{SdE z>9LuAFuwvC|7i$k-s43E{n#zBaF4;Rt+47 z4460rCDg%qM^h#}@2!$L z&2p$-v+ps(5|)oY?h80~I!p^^)ZkoYqs;WHW_AOweDdU#YkI$KnXzb!rpJ8o$&IWt zgd8N2oCPyDEi$|xXYd}Z+PG59$I;0wbl2MBK8}B06?~pocX&&p+5GcAzWx_ ze_wff`Q?hZbvA#h9`-JedtJTz`sd8z{U5J=*Z#?TKf0cgePvoNFikRey85}Sb4q9e E03YD5DF6Tf literal 0 HcmV?d00001 diff --git a/images/emoji/1f61e.png b/images/emoji/1f61e.png new file mode 100644 index 0000000000000000000000000000000000000000..efe4e67e23cc6690e2af681643741146b8184af4 GIT binary patch literal 757 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!x&nMcT!HleyXi!tCx^pcor;=K zqcO2mG=&_U#}$ZndjY8WS-`y zKCRmN=Faf>E%pWB+Rd59j}Aqj-w<4xpnq(+|C`hCo2R+2>~-FCu165)8vc?XzhDM~ zg8BRZ2fP<(xbM)faDKzapm_`oOx&I>jv*C{XRm*6TC5BXSS`1cMdgU>-YDC7J`bZWpZqcP7bl~t z(M#R=zK+>em;3AZ_CA~SJ)+_RQ~ts~PdN6p@T_@N*c6aId4obi!veb=TZ2a@=O2~f zIlJ^dzr^dh#mf?Mw66I-;1yoj%yQ4+*eu2$b^r4d7QH**?lAqr#w7>aH*qUZXkk3c zXu{zbv_4R;WX-iHmjqg$?T=Z%;P6@|kL5MOPxwDGeysmncezvHs!r3jGVu=oL(1G` z(HT>VPp$0!dv@M4K0A#c?6Yp?|FJqE7`0)^(qs;)hZCnwa}qxF_i;#D{=(ziWS*_O zQ`pt8t1{8}%jc)3Zm4tEN$!q2S8DucLtdJs!b3srh6Yh3J|bkJF{AaN~+mD06cE8-vay)HZyTi2@iE^!XS zq$4}Joo!}c_MVn1v+w9<``93x`LY$Wo0n}~$QT#UBd}-5%)*b0veHtvY)rhoZ?0}_ zT5I~Md$+GdOZO*T>rh^I_tpo2bB2?Tq?<6@{dP|BP$2sj_MT|Nuj}I@zm@8`EB7ZX zvwx(bb58CpOXp0Rz0bb2>-3YAj=l?x=`QNMG b{(o6wL{oM*Fvzb5rWgiKS3j3^P6*DJ}*na0PK`%kO3zPU5JGC{u}T>It&$)`XE@s|Yo z1v3~F%-{b%;JrY@eTRO9^BXn>&0}C-yyxlS7*fG_cKX#rs|^HN_>GRfey1B%`+xiD z1p7&orr3Uq<-3`<`D6Tl{Yh(9cm#?@{?gmEIAg^EP1%bXcMT36F)5i?;e6QLq**#| zX2y{%vo>!(cr@=t`{h=K*yoQ=WC}P<_V~DwS$E#s2O^KE|Nd)u9I(21-qm~yDgUG@ zjSI8)Eq$3`c3vw|mfL#T^X{iAi~E`W#>6e%6+6@3bMuequg`9~e_!vJhQa(ivF@WK zlF=%6wa>4p_@^5efBd$k)QjG@+-Zj^{H8s#zqjYtPKN%2uR^)^7;=eTxs-3qVGyl$ z)@1Jl2kjmw)~Jc$3!A5)Ec9%tY8c%e4H?MrxZFOJs z^3I*zy{PYI!3LMgl6QipGCI53xWc!)nYRDQNM2r09)IWXm&BKzoSu8AbpEdg3U-wp{d%u9 i_ka7KVpsb=dS3X$l$|-H|IPpt0fVQjpUXO@geCx&BVh;t literal 0 HcmV?d00001 diff --git a/images/emoji/1f622.png b/images/emoji/1f622.png new file mode 100644 index 0000000000000000000000000000000000000000..b7877f8a1737914542c4bc621b03079577888c97 GIT binary patch literal 1123 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz$hNz6XFWw{=b_}Bzko!>dE1- zj~C+a?hV>C$98^`&csrcwf&~ow)y?Io_u1Z+l(5G&C@KGbs8RA?09~I*Z=#4|KF_o z|MT&GAb7Rl|KD%_Urc}V^2z)O6$O!|X@2UD?p?1;aoW6m^0B?^ZeBil{=}Z<{D7}t zKJ`?^uDJZ|{PSO_8{dEZ^)G+hhp#`rPCfZ$>i(nW&riB}sq^ctf{N|;HXUD`zvcOx z)A8pw1aF?^esgE|{1*Gl1pTj9lJlFIkDi^Cy7XGp&T9qX+C4?)D|?;O5`Ev?s5rLV z|Iwl7J@dTND(m;0THLeeEYKDpdUUlB!nk;0g2#vanZTflEeY}qW-ut2zyE*0dx3`g z4*d$}L4KhIIG^zUy}|t4%eS5}Ffh&Yba4!+U_5glpl5_ob?~w9KF9rc_It%$s?yH7dv)me|Y;-?#u1h-zHqh@4s{8@IUR}$30i27nawpEU{u< zv!kfKA*J}IlL~8B$i{}Qok5ZvHH(=Xo_cL9n8@b(OX{iy_mbc8Q(c;`OP?*-70DR7 z^Tvu0t)m$oQCnR8=ds8BS(h*=e_G?jQ;D&r((_u>{TZ%DFv`x9de>^x+VF3=L-5L3 zlgbV@`WLZme6Z^3yOO}=cbPt!ZDc8Yxaj)(d0*Kb?y2f+HO~vZYi;Y`^W6umC zYWgFU+KESa5|nagxz9fJNhx4rI?n-)nk}`W3w4@STnI95h+#d|ly%|KL(vOOj(0yS zx&3;1=Kk+hS8y=sO2@#NREPwuZ6i@m}8av)u_UyYDUHe7J6v zz`IR657+$`c-Od?Ir)WLWtN2U{|i?yGThskFVm=YxsvVt%?bbQ=N5mF<&EEG7xg1v aj&XzTHJf=Zv*m$Vg2B_(&t;ucLK6V#gllL3 literal 0 HcmV?d00001 diff --git a/images/emoji/1f628.png b/images/emoji/1f628.png new file mode 100644 index 0000000000000000000000000000000000000000..eb8b347cef9350b9b6cd735bf45fa12e8f9d159f GIT binary patch literal 1002 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!ZU^{;xB}__chd=?AJ>zg91gp? zH|WGlw~rU%A?gn0I09x3=GO^EAuz8@&EMtor|~_y32z z|9`*v4+L*k{r~&z|EFXB-);W?xaI%%n>R0?oYtD%Qx*IF)q-Pt*QNQX7etzV{qpJm zi|KD(K55PmIDcZ#=H-+B-!J@nCHee@;LX$Ady33&?hKz+ZT;qSd}WH${0S9%HZ5E^ zyY11T=z?(V`7QR93HryD`>*VEZq77*_vsh3D~`HM^4R9ewv&!ie;v7Q?qcs}w`+>!Uve;K|Bfp&=H1(0@AxG}zs-A=NAt{oAE(H7 zRF>YK>$PmX@Rf}}cEuFQv@tU5SyI$5$)z><)Ezz1ZSViPn3pZu8R0qg@$Y}90&R@c z8TZZjVs-hXKEufX*`W1j`S(3jy!Kms*~M&2G0TM3q>T{_iZUlUe;)4jN;Ns9npb7^ z;M@wHh^bnevRETZ6ds?c-;gB{!Yn51!LBufWpUp+D+Z0m6t9v6jX}&;9HK%NbOs4e zaah2`x&GXX%&pdM#j3cn7%KXAu`TWn>+g|^iZx}pUdOb&rPkz=_owV^OsxS@af?-Z+t znd@0~)E#A)?vk6pnU-2IHNDC~t-(#Sc@?j%f^dQJMIZhGCbQLwtIs;{cd)Dp$e*_H z)*A7KOh&&CuPc=Pu9BX2YX7TQ;=w0sHpZ;&xR|vy=8WQ-uIZaM+zV(qE49S?UVu#W z=hwG)|Gvgh+Z^^jF~@2XtNW#!mu@`nJMpge(2Kr|?-F{9`KxmFJ$9A<zw>BTen$47wsw@PEw!kdTfXA(Y)0kVxweougyyO5b)um+HQm862&(eBU@!xmMvn^ zc`XvSkzH-w8q2_z8$wSO=|x^^6k-3c*UvTf^BPu7F&n1!O8T?rJ-%u6t}kKk{#8}a zjxWF3*>d^SON;RR&w04MR_}Xvy!x-!yMqf)Fa7syviiS^U-jqJ{yO~mynXHe{rSm> WPv2hV>RAd*)eN4lelF{r5}E*b`Sm;i literal 0 HcmV?d00001 diff --git a/images/emoji/1f62a.png b/images/emoji/1f62a.png new file mode 100644 index 0000000000000000000000000000000000000000..836b41077173be7d74dc0eafef53ce4a70f2dce0 GIT binary patch literal 1185 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz^E4B6XFWw{=b_}B)YjXe9t`Z zW6S*u!nM=<)GHJ8A03LGR&Bj`n)}LL=bj?-`7QQuPRD<}lH8nWeE)vg%X@`EFSf0G z++Xx;`N;)*mp)tO>ur(Zqn_xg9_geWu(ToBTRqxY-QPmZ&s;6eP5u0a z;Gnx}fp+=#=f$|H0~ukbX9GzfO3HQ$v{DPPRRgla9n>maY-aiUE(;FM^VhkXmiND~ zeomloL4Yn$w&Cf*X_3xf^Q#_Z<a;0s<`*KfP=WB;x?iJvBXwe1r!1b#A-9{rJY?Dxtt?93>efy5Fez)0_VWIuBWr4LvGMl*|NZA^&hpJ#TJVLp<$g|B z+tdvmiTcJ(7Tz0#D%f)@Bv%#L9`K#VG|$`WY-8;8R{5(b4BMV_E3R3?tl-`$!=Rqc zD*vNW+F|RKSEj3`)=u2WJw@Zjg^Ge~p#{+qI*o!$I1QFA%1bU1n|Mqp$FXO_&-Yt@ z%*j$bwq5X~_zE}0`A>cw+44b5rAzYu_q9)+KjrG)(8O=#dZ|SC)`=xLw^uIQrqR%2 z<--{DxS>qbx?X*O&eAu(q8yg)-hJqQ!s0k{|X+DTmzjN z4>qm&d>Y@qmMvbr+MkWBMP6V&hezFd-s9`t7w~&GKXG{VYHFt2!k@i-OTu1FTzTw= zW{k?(e*t+bPn0}Pu<^PmH2>UNqpL@j1O*?M5;Xa8Tm8g4O6e)9B1LD+4qwPx*LbPU z>}bj=SJ9|hVG~mo=HF{_Xl4p)2o;TrZSs}bzrsu-fj8os>YCYkc}7RwLJp`fX=_!^ zGQE4->}hqh)|TD_PNoX!ySBbPQC=46<#4j3`0nlLU-=&G;(y+-^T$g;hR1LJMqHCT zIHhaNoH=V=sU5OO$k}Jjxh!<;Rm%g0{T9`xoX&C$Cm)0_U!MN_dHV9@9~W}0zc^v* z;@<`V%Xk{PH=ovi`{@^(gIeyH%ir?ev$e6a-8$_OQd020AoTG=Ilqse7q9A`ef(C# zap@iLlG9?P{m+NrIxU=Y`91IBx{Kuv*RO9s@LK!957)~(^6wSw2s0Bu8MUtR@W%D6qb40jodIR2&|i^tB*>{o_}63BwobE_InS_4!J|Q~k2T%BQuWkh*|}G|o=dZqN5-d5 zmU}y9PA70zE1!fv;=)_cuv2+pFYL=-jB+=FX)~#fLvUF&pOARQy{_Wk*Z=?jv!|2w z^zwORLaCdEgKtn|Oea}FCsR8nR6QnEJ|<&JCt*n^PB$h@H6~z4CtO7*TSF&aMkh}= zCQ&*jS2--EQ&Zh$ZvSzAo?1xsZF!qkNU2>;;%aZRU{j1&J(gKR&t_!VXlZazE%62% zr2qf`4|GyaQvfh>ioSXr2&B^5NZ~~qt(6QsE>H$a3pHURUsy*W)L1DRQCP==7*?=> zSRt^mLX4+WquK&Vv`v9XW8sKbj;&4v(nbLm!p!9Ke`M~Ayw6R>!iZTU8W{R>fsmvT z4eFd~HG%~WiAUgQ1h?fvK*TuoUO9A1iy)UfRiIh@l zg|b>nDHE-20Tq#OZ~+C7mPsIfLy(jy`rr|WRVMy|OvPRSKYq!-637%?%RDl{KMR-w z7?J!Z0ht19Y;JAuEZN@L+yJoI-wSAfjorPSRkrpaG=2fPNbEWskhx>;06>cdYwRi$ zCBWg12TwM&F_{<%5J$%+r$RhK*MO9Q_|Y738W-vQ{NWCeyNC08-WK_Y!-lK?+t_1e z9wky5TS+|fX2pjrKIUm4bb!Up0z5sjWa48U4VpX(QN}A&MfrE5sw$u;vzIk8RNVgc y!}jaP{nsxXuU~myzjVER?R)*=`TEuOllckqnZ}8Xa@K$V0000)idPjmlz zC3#x4b()`gPm%et<^BcX+I!}Czd0R0zs0_%Dt6`Uwmq8`-n@MB|NsA$DNc{>T|d7e zxH3V%Aky^M-gV8H#$UgDdh_y0bAG_I*6hv8C%>J$D-!4k{*oZSU6529tKXBnCXMTk%9ut0b;pxzbC-zW%Sn z9G-c9ls%WSWq!I)?3K0fR^9iTO||!rJ1ttmsI~K={ZzLl+w|EkO=uLgzcgdVQI|_I zI^MT`Vp7yx@q{(x!vjX=wO<2x`W}B+$F!KItwyD%G-u@nai!zdGdn*2*z8vNbK#E^ zjdPFlUdv7kcr2`YF8S+3*H5b$E6=Yy_nOU0#nG8JqGg_enFz7H@P&lxl*-fsxdq}z5L8sWs8{>bGaE-FKrfW;9YJkIz_kP?j=Ts zDKP;aED~a;m%m9&;9Rj{ky%U#uVDDSt6w;+CHTsUx$Rv|WTyLD91JK(UU<#SNNe6* zsl2z>j`<%r^_8iLL9o_cNH3f(neX{)*87DbcV!JqIN6tOW9P{}BKgX5Uh~2!^J>D6 zHvXUR)c)B|{#pMPulv8@t^K>-`ZE8t`~P2hy8qix{dxaZzn6c?E*@X%Y2-G&2^jYb Mp00i_>zopr0187?7ytkO literal 0 HcmV?d00001 diff --git a/images/emoji/1f62d.png b/images/emoji/1f62d.png new file mode 100644 index 0000000000000000000000000000000000000000..e4f818360e1fc1d518add4f14e6579eaea71174d GIT binary patch literal 1241 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz$g;n6XFWw{=b_}Bzko!YJQW> z!Nrc(w)x%N8#JRvV`8bwlfz->H+X%#5Wjhv<=TGJAJ>zYbsC;n>9%W*?dECj^IPn{ zUP-P@&`DKc-)G)^lnO5ONAEz$SUq3E>q$ka(2 zzuqcHU3zW)gor)!yl?Idzj>*1&#A@p5AAt$wXtIRy*D>1ns#10dUn=|BU_sD1NLlM zc=PhfuU|g>|Np=5 z440UaAirP+gM#_{{|CGmXt?jtuW%k{1qI;!{`Cz8_X~gqB?vg2pD*nt`I3QwS;EuB zF{Fa=%%!VIEe0Yi7nGb+SoezPt^WUiqUZxf7T&9$w{V|viT|g6p5N)qp#$IVTnbc3 z5OmyPsyp?V%GxK>_6W^Ty^{53!A1}HY3cPxRxO@$e*U=|4{B!FS~mK&JfBdWvElPN zUUf$Hq%HiPc+}H>>+}_rYxr^ zqU%33Gk8Kw1#cQFD6LB?Q*2sz(*Ch4n|Dl2SPCysV7$PB$%da>?XHTt&6;ATdZxxz z{RKCRmCxEoVM#$##jYfkxJ>_kVYg9nt?tGJd+zl}9?0gddGm~a+kx2qoQh@Kx0z}V zZg}voVo~bf+I{Bnaj$a^8;F##@A}O%iM4We=l6Tn=ilu4UwtKKg>s%*J@CctVVf=W`2>c|J^!+G_7aGi}%VEz%O{@Wb-SmCs%W&nxQR6BanST_vX5 zDMHUXuj`Q)gY-%jm8VHdqZV^yUG>_iqoSIlQmcLasB|e;GS`nK;=zyOS*5BB7tWcT zwa1k$N^3!9(KTtW=-$aHk!KJ5oHN&}O3(XNlyf7etm&Ppr>8v>*f!M1yi}S9%g(FUXfg!2$4pLMoy;R9F5FAS9Wc39T-da*s%_a(tPU7NQbN!xR_sBgxByFc&U5jyPq@n22(cY!!YgZOfdN$0Bc zn&y1#KT)S{61G>URpV=zllm6fdGFr6n#=qn$BMm9!$<;5J|c1CHQ^9zOJ#>PJ#I~)@q%$8(2q`}pr#$~A4b4J9z zO>5o^_eo5dmxu2VlDk--{=$JS) zh%#+#Y7spV{=Y#b&PyPiR#LylRVoYqTZxPg=b5r!!NT6VHdME@6(B zRkVEOrT4Ity}s(%!kArml{i@MzfpYq;~B%ts^xFKGH#1$N)4XS{UGVB(jn9QhSu8} zUzoo%FJXW2kG-a*q5En~<&^6MPg11<Pwq6_w&z@}<^3lTh1E))lJ>J49!azcQJ>+drGhV+zN?S(+?v9MkoaR)|W7a*I|e zZ9QW7>9C;f#;}x=EsqN(E}dQ(d3gP-oK*Z8?4pA1}oJxSo7>Z_vTTjx%aBCYGu^IUKgE)9~6hzxho%=Qnt5p5|To(i%Q0waJhBO zTHmY2Bl1b^pKczvO^05_P2CU__U%Qs#Y)}RFTP%EsyjbpC(qgwixldE6#gG9Fxh83 zb5Ww%oIAXSe_mO1Ve-GrM~jw5EKb}Tl(WsN@tflN)AdodlJ_IC1bxDHf2`PEwPCW* z-|I0~&Ob2k*Z;;W5usnk|5ftc75(Sz{AK0eE!X5sFK4x>s9)su^K}-Z_~wgQ9qdcr z#V=rP-PSB=HQ}j@!*v0#AB*2Rb@eUra&UNFU^BO`-B=}TcL38bv3dH-)x|y5eDk@h zlp*8S#r$B~X=_pE#}z>`jN5IW=~|dFuvzCiU5Ztx))3r;`r^tpa>atBwJyyR39f0v5Dr;$j%ABwyt`3 zcGLd)irw;d1ugwH51qq*+z_{`xaEF7{xt8()$#2z+-zdNNM-PJ^>bP0l+XkK>25Ag literal 0 HcmV?d00001 diff --git a/images/emoji/1f631.png b/images/emoji/1f631.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab43a0d3f64aeae0a06a4b19a35d3fe77935133 GIT binary patch literal 1588 zcmb7EeKgZ+9RE#1N?t08lAGE@ZbEn1DzVLmW{o?RVnt;tZ+9GQU3n=MLfu?WdD(R( zT8d%UB-6_*ToavUZt}K?$osm8{qE1{+;h*l|J-w*^L;+w&+~b{pXWK}dCvK=Nklgt zZDVZ!0CWg=3>nJKt5a(Yga!P>2>^g`NS;1eXbJY6|Ig@aBugHflQts_FBxE%K|>)=dhU{TUO`E!c6`XV?{0Z#J3kHz3fro5eXk9|N; zOzP{Z0--T00te$~6i?p@PJ`2p;GZ&y_(^g&=^POuYOH)x&558MoEVemUcHbJf2t@u zRyjWlewi40FO_w_0vCtDmCxXC3fLdnQ+~9cho2NtR(j7W-vse;-QsBb%QIak+5&sI zt`pCFhMxIH_*zLGdqb5&bsnNJFNnzNk3pCbg@kaSn+D;NLXV=9BM?cZ+tKg{pF{9q zPXy&K{3I3uiJk}HR2PK5E5aKEm(~0FI>SFSdJ&QE(*#5S4$=1*H{D7N@<1GSf{zKw zUJh``5{E(OGEqF5_gE+cj7+Es@SgkKe@S{~C^TFd9>03g_YS#K*CKzsvNIrpWL$XSF)|4eGl|W=?pT_8?cEeY63}9di__NvsNEbvI-z*_BH)agv=3; zwI3`3!7E?A&i_7Q>K~!$Z%WIe>Dla9A*uji4WEEH>JtlVzm-~9Vxxye3Ol=)Q!nMp z_kpuuLamLdddybD1A&{)j>UlC&mX|jVA)2!8<%dYtUvXdhQ!t}>Aie4i``l)9>j zWvq3?Y5u5E-O9ieYGpW~9bv!eTOx6v7MFCnDIM3l@%N{M4?F7>_6EPk{Ty=wKRLN` za%z+*p}#0qGs&)ZHr;7ZsBSBr5310=qm5Q@3nS%r1>4H>vjTGBdvpzq%g2qn3>NS0 z`vF#>pI+y@H}+*>czm%QX73NA7A<2mli}56nC(VQW9al@>Iy$v&=Y2*@eJT5 zb&SZh)Iv!CiwwetA<~eT+JW2-%=bz5C1Sg3#g6S4UOOxZ&0F;ZPacc!fE$({n{_QVI z81EK?a?ooJ`s^C<)K4bGEFmc5LhY&w!=Y&co#W2^#V^y3xITKpz9!q8;>{&cNLe*N z4XPlFFCEk6o2fSMeo)?Xg^LNPaRC}E@E#Uxd}8G~{OEnh(q;{18@eXPrPwtrJ)%o{1Kvcmu;6ZVhX}IN$yZsqWZ~P-H_kJS z#1lDQ*m@25t)BhEv=%4K_@GL__j8E4mNp#Q;?&Hz$-42=bh07C6p{LV-0QgX$i;yc z>$~|WbLnku53MlsGF=nB%08f=H|2QY+c076(zi&VmX}v*?V$SoDO8kN3U8;E*}H7U z7ndXPkse){OHc3dMv;=h3&V;z-_U7)SZN}oETtil@kmt?&P?p&E$m(mvE}|Nd!54ka->j-f$4##i(^OyRJjvvuo2tR}a5m`(RHd?{}C z^rmU6k6=gAvI8wbN_JDVXKhK0nsCC1_t?C^ij`sedc_?BSDRnSo8cy>tiLpU+5*og z_akAuuQ8s?dbV5RZ~UPb2g7T5c-v|_zVuv7=bR+(-!Nm533H}V+GlZ*c_&VZHa1o5 zZau`5bUJj(@jZI_rD-SDKAvxG=2mxqioC-0cNZ+~`agbBbKfnG!)dYaW5Z-7&#c4+ ze21i#UXyRGz1pl&`s7X2l{%UA%wJCYQ#^Q$!9rw_O^(3SpE*XYiH(cwC-3dseo;j4 z$&a_Z^8>wQTUPr07TD<<;UHwYAy79_OEw@pp>h7_uy_~A+3ObWZCf<)24luzgQ<@r zKPz$H+*`%%%)OOcOhf8hgMRq(i|ifUU#@aaGtNF)qxg~|w(536%2vrFZaprYDU3={ z>&0Rrlgjz~#VzLP{S>x|NT|QF>(0-AOxF3^KUd7M{`p;e zLgYh+@8TcMuPd4K)B1Try616#UX|(-J|He;d$y&%NcO_XONU)5)@^I3 zu~RxkCw^I3&mTKbA*LwVo&bsJdM#vR%!w?nJFW*Pow!ZFkpoy`6{H$!t4|C5Qba>(3=f`Eq~h%I~>Q zUlM40YtO&U{Tj29-Co+;yqx}g@%(*Z+ot<%oc~Jxu2lbv>xaekfZ2w@)78&qol`;+ E0KAJ7xc~qF literal 0 HcmV?d00001 diff --git a/images/emoji/1f64b.png b/images/emoji/1f64b.png new file mode 100644 index 0000000000000000000000000000000000000000..7c803b31553760e6cac8a88587fd9286f2b9689c GIT binary patch literal 1669 zcmV;027394P)#2 zWM}>~%}P)2|MaAl*EzDUz+KrFt;rF>hcY+}6~;9t3b2k@f$+>c2?RJR{Hg{d_pHQ8 zp%CB6mxcuZA~~(ky13L;Xa-Z>mkQw7Y|u;A2m=5slmW1AUWqilWdTzv0PwP>S4=DX z1fa=pcrS9zZ+uJKX8jvPyX-_qLYyxGz>F7W{8Tlf;}yhh_ZRdua*Qdj3IH(wiE`uI z(8ZQKF>w`O_Pq}}c@+RqJp0?tzjmrz`TyDI>rDvFoJwwIG4+&c^E?5d%^2m(sfGHEP^BMtgnm)wrFDNcU zwGf=hoxcq6rAOy`(2awC{NL6;05FXm-TOJN41!=exJ{+*8tX`knoPHkM)3YHP0{O@ z(7{PpY3GOxlK}V(0RdeWz7>I?Kh;0l45Oe_G5&*a+4S;WGJRu}FYG@caYUigC`E9!D(yTDu zI@wy^02}3a7zf)D})VeWE9Q!YIYgvt&RIpR? zN_J{p)sEk(dTAS#E@*=xDf5Vnw&+tU1Thc`Fn|bq-Xx9t zhPLPZcpSv^0)Vl-Vps>@6a&BpsFU>Fo3YPT0A>p_SGBY&Y3SnFqZBc?4?Vrs!*K1R zy!Y=|=k8aon2kymvQdjluK$mTY>%-prv64~9l#7R07&Nv@Hl=9lH!Sbi6?#a$|btE zy^T)*xR;!qv2IxgiW_9g1YBd&7b>Z$bp6rMgT( zPhui{0>C}q4t=Kn)5mQbKu#RmiF+7JKL(blbpXd?0N_dB^BnLb_AjhUY)+oSY~h|! z`E#KS+MIc7{ClQ04y$p zyStln5ZpNaX8rY;7{E1E0Qm9v#p`@ysW(FWU4S|O7OLRki4JsoZwGpOu04d`@i%h- zqCSxYFhVr|Y(zc}N4K?Zl(M`NL5T}H(dAK{>Gbd}1fBcECH{ZhLmRYBUD+9Z1&1DE z0C@Zf4nSs4f(F8j=p_62cvs4p8c7KwhR}tdd%~!pF8$hz&^B}0Pv|Rr^CJKNk)$;1 z00iI7J=oogZcO@xp!D&PlsIZA#r!?cQ}`S1@pkCr&nt1dwKVSx6SEJE@DG6C!_ve3 zJus^L+W@=sIzL=}W`$NXVCHXE;W(YI$$IKKll)?=E&QtRw*R|KPj;(r} zwe+OPjtAavcy@D7;W7U)MRU;hc%>-Q z^)>*_JCl`+r>rCan5Qx7ukVW%(DIN9+vBMDq?k{;n3I)`QuG1~TJ0`%##8CUb$@ET zzZ?KQgVgx<0$?QpK)s7G&I9L^#t`-ZP@e<L5G(jM@%MULATcee-HeO>-LyegTV8O+REOwR&EsI-qlBC;ir=S09gFBM7Ga8>;(YIm~{&DHX0MH}0PFXnts634VzzNV(fBjg3+aO$sAdJua0MwfVVBXKr>TneRKo}A_0LIMv zBE-iKx;z0OtN}pG8ULqid=2g2c$@&RGWfmEU18RY@sG;-7=j1@VNC$_W{m%f4{4dg z(zozysUCn!4|5(c-~@=u>H&cA0U%~vf?jSRJZ#RfYw$RLf$ANwi}=z z-JjaI_((p(z=~)0Kc}|=!fDV607F72Ey_Sy@oRnkRsjSo73Zr{425v(!_O*D8QKnSTfnEH?lWrY>B5S!W6S zOsU@Q+o9PDTz@qLn;{0PH!(es=(vS+gX{G^5_5g zvgwO_zV2DM*=T*QQ_sZfQ$NS9w|~`K{z*T!>7|pHo|D$HHM37?2Cbj{?$kL!)z=G) zEcxtTtZZvmIp)dfyZFtCnL$R!_s(zDkN>1-%u-`t?NRdOXOBVD?_WCFXLS#S*&R7% z|9O*Ue(&VKfDeDu9%=J3X|3W>WLv9Mpseja!QLs4eWHk~V9?|SO;?BQy6c1unjYlL zbt*k@p5Bu(73&I+=d>5+3357=$o1{9SE&OB(~Nf)rUZH%>QH2! zbxOc!#)a#~Z48FL*BhT`SH2R+ynw@3gPozRp@D;;=>XG&1H6sO9~e~TFz>m*!p|_n zLxxd3h&_0w!hw*s`JJjg7Fq13eTr8mJOrkBOE0;=>FaU(baeu!P{cd-?i@kx7ht3pFF8Ku=f4wSF-1K=y2?_oAwqMeGHzi KelF{r5}E)`9q+0D literal 0 HcmV?d00001 diff --git a/images/emoji/1f918.png b/images/emoji/1f918.png new file mode 100644 index 0000000000000000000000000000000000000000..4aa6e7e0a44a18d0626d1e1f0ebffb101d088df1 GIT binary patch literal 894 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!mInBQxB}__chlkM_od{w%R^o- z4g!jNJrMh5c`%Ui>wFSW1R@9_e;kj8Fh1{$f=B^H-mMCSuz^~>?1=`FaPIqcVLHJe>eE|IgKwk6Rz9`yKB8@BiNrVDNuEkh=f> z{rdm^-_I9la2A`|!oa{3=;`7ZQo(q3YI^c)1A(^lCj;3}z1HQqcdV$_IHU0R|NrTd zD$8{YHeLE!^YM!E%XhAe_Ir2R9lB|``TNSZcK@2*e`HQSoL;Bk(k}Dz6SJH{UyRLK z2HT=$SBLtL3$OUw_VRPMomsQ!qo5;?NtxEcC0V&KkCMHb}#lu z_BArB*?Nq}wlcM*CP!HwUAFGPnvI!nnr1GI+OV{0-w8Wq_k-t_tbMLB!7L>-SHiP) z+m)E3PppnX3Cue?Alx^>^c~Q^rzWdqtVvS6tCe!8}S-;di>^8b~@5f7-owp)5 zRdmA-^ms4I_I%zu^+1c|bN3IS_l}e?ac({@nxEshB|m1-Tvnm9@Wz&(ry?&ra^GX# z#8Yg|xbcINfLP{&t#uQ`BBEjw*lZU3ZQnSv>#0K)-{ydpKTQ#->Rfwf#222}`c*7M zrmarklQh?xweJ$r^bgpw?mznb-nKVRVHtC?>)OS)zP(+sB7$l4(!CAOPw?jmygn6o zfGZ$8an5r|=}YovOo~?+npkG>eqK4(VF%ZQRhBhkHFH#ED0iOT+j6X9zBaLZ^={mQBCI35oagrIk; zLm>>H_}djBK=!9?k$D@EU$FkD)|yic3{0k;E{-7;jAz5HH_bK> zxFXoelG*9mGX3?tzd6ia`v3n&W=354D(ro0&yI5$rq=gNe^*<)I?^|~T(_I?lmPs{+oBYe3>nz^5@9|;5&i>Y?^5stsd%FMAY^*Qqt(O!0_55#h z_cz5IGBJ<&7k~S60f zw}wpWoUWbSaCp~MRkL?Ya?f@13R`8~9eimPlF+`5d5h9CjrUL4`@h=uJyhgT_F~*A zu=MJl4iDBRPTr!^IHDW2Z?ud#sl^|~yRG4tn&V9$u_%s2hI8BfQyw@>h!Q(C#q@cC zXo^kUF45wig^ec#HnKbplHC>?CM9#sjj6#eU)x5jK>6r0mWGIQt(b&PCY!9!s}-Z3 zyEJaelbZOF$>yF-U8{)Aslyk&l5+D!PjBy^9nsi+D(54U_RLQ_hLSet(rx9R)ckQi z*f(vXz{Zn_XXhQV4%hipmDJ52ACM>0SNWLvm&}UqjQgMMvn{F#=-R61tC@A~Yda^m zL(<`x!mApd=duIqV&dBLjy8X-EX}ocZm7TKo|_}i8zAT>1oV+HQnitIEnnTxoMXVG_B&fsMRS9G#8W$V z5udQSX=gmRrgK`gt~Y6&cYEq%JLQAgZzMt&=4jn8Ugh-I`B&>j(MvlXtoC+0wp;X3 e-JyT}HSC+h0}O(zC(Z^YMFvk-KbLh*2~7a_(Zx;x literal 0 HcmV?d00001 diff --git a/images/emoji/1f91d.png b/images/emoji/1f91d.png new file mode 100644 index 0000000000000000000000000000000000000000..75e8d58e9d7c26dcbc7ee49c1dd5e2cc83d3e30b GIT binary patch literal 1369 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+yeRz*rUF6XFWwy6>1oJhGmW|9Wu{ z1f|c&aNXDq6hRh*%R(3%=Ea0e%LXcNUfsIyXx9I`=@9Yv>%u;6jr?&u{^#k0FMFcj zED!#AAokb!q|ZB}_Ro)W+cv>rQO)NY89?0Q~1A|X@9S!oZOS*vcA)HcA5Lk z{NI<7->nKgcRI6Tb*|&GM(4HdEB9tQEUCM7J~Lrap55FE+nL27bMtbR<=RXublcK5 zaZAqJo!N(uW!cZKdVVG2+mX0!hq9bjH21E|a9-QtHZ}Lfj+j#m!XZ8a8VF>}niCIn z@VCQp5SIW+pqt;V4g0ty0w@l26;K4|cp&+Hec0O-Az$`J1D*8qOyZY)F(AdK5H+ErEUR+eqBkBUogXYf&cFf6bc#~=JzKA+~03t;2_ZO|9wF~ z!~XaG*C)(Rxc~qEeg}o~|53pH0u(M5&U~O)ze27<7dSNRKc8^k$}BjRfq_}T)5S5Qg7HniDN}=ih;!!t2S*?NQ$Kn)H|N=&j)h+* zZ)y1>!Qhb}_{@yqK+W;!gzt_k!=WBUo*A9b`OU#t^c@ z%2*{*bt9f#}Aya}BRuym5t7(en1m z-3&1&_H2^cpWK$eR`1BW5=Z_d{jXoknXVt2DCepX@T_%xMfzoZ`}*4~RSbm&u?8)N zpXE5D`q+j}aLR0Os#Ed4&}-pUTCr>&-~EeRg*u@IeHM;|O-vkKN&@P^tdl!}OW7TN zPdR3CZV6Xfq29fHdLCZsa^ja*x;wl#{+hEuXPR#xr(^bAmNJK#Yi39YHC_F|(&&71 z%}gM(^#{u)qxwMc12*1;ZH1k#9^k@j)>f7=#@m{9eH7oBBxx7_#EesXzLf>AH*ujH;ZgTR!wMn$@L6=C}!KneVM` z=h3Sj2N2-c` zCbI9IGxwFzC&dnZ5B#pFGOm*uP;{$pIdWAqDe!a>k{{V2m9T2`SqD5;o-a7ulE)` zP=Dh#<3mX$cTOeKy^XUIK9!s*e{tyK?{5A#%l`ZfKm73I{lKQ0{=4()|CR3iD!ZFo gR`$)j>UGcT51-R;bMGu)3e2Spp00i_>zopr04fQ-qyPW_ literal 0 HcmV?d00001 diff --git a/images/emoji/262e.png b/images/emoji/262e.png new file mode 100644 index 0000000000000000000000000000000000000000..86033faf477fd294e08a95a08b55c1cbe263f5f6 GIT binary patch literal 933 zcmV;W16urvP)JUwmI$** z>8ge~HS><&?b)ZIIhCUxDKq?usMj*zi1LYOFEYoQ_4&Krirn>XX|KVZQ{_bM%(051 z-7%iDG@~Iqurn$ErKS~y8Fxdqr1>d367;#m0Kk0{CPJ{wndb{*02suSQ~0Ea`9GI0 zjVOuoh`ea>C8Xt<*^>u7b)sDf01*^&dNdCJD+ zh_a%c5>tsfQ67e2xEoL9LsZ=Qjm&{sfMkvSAVA1ksGjrU5$%_~i* z4Jm3xPE;cR{hF(_?aUf+2=czG%=6wn z&3$FBbDE#}{1*F1hoaAK2<|B||9U04In(&qa{p=7);D*CS0?BeglqS4#hnCNz+V#N z7tCN#Fn|C5fcF9o_Z|8b&TrTlG>?ISalfaFV@L(#+v%;FmKyN1b^lpzA=7mG_x`7) zX)r~>%Ztu@NK|WO7vcJ~gn_U9xx`bAWYx1% zEM&@#sITIfZ}R!b!wr8vDc!MUm~WSQ-~K?Fl7p-9)oTXAP25vw*{v*0x*_^L!SV7X z>)hh3h+>8dqNVp4XCMB5qw&6) zMUmE%x9&;M+URL1`1Q=()|fwy%d$TI>lCw}ptGd*=(#Ldpzopr04{qj Aod5s; literal 0 HcmV?d00001 diff --git a/images/emoji/2665.png b/images/emoji/2665.png new file mode 100644 index 0000000000000000000000000000000000000000..393c3ed52674a2856b2a6993fc63ca41567a3ce6 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!3<7*YT!Hles7m5d+qb0;fqDc= zg8YIR3>x`rad+vPjK-Is@@aZFqDRY`CbQz{ved%4+)V=fO%CkE( zwsWn1eC+bgo4fO;D~SnICjCn@T+GFyZBQRPGr#XZ);6UFXWxVfoRVC4h%M<|N2r)W z0w?FDly;uTeI*Lt7+(Anw-CRfaQn>##n(05Cf%}9DQEYc6*#-++^nqSzW16hFY5oW zC6hHkRNcX~np>muyyV^w7f#n@Nz2`w6&q66^d(3-K{$#z7hf|LjRw`e}y&yIBKwxg|?0hqwo!c0v z#GJmYmz(g1z454AbW2Tz%q~x>&x_9OSz)aI>P+{un|61_H#%x8HF|6r1`JmQPgg&e IbxsLQ0BUf{2mk;8 literal 0 HcmV?d00001 diff --git a/images/emoji/26a1.png b/images/emoji/26a1.png new file mode 100644 index 0000000000000000000000000000000000000000..47e68e48e49e4e09bfb5712c6970d2f1a979b46d GIT binary patch literal 413 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!HlebA}|LM@EO3fZ7C0 zg8YIR?(Yu}n4e(qzd_-A!Fz}G{dW}7fmSebc)B=-RNT6HHPG*Xf`IEqZ|~C#x+VWt zo30Er_}E@)Usd*@=;Q%;@olnpNB?rDcTbwx8l&(uD{X4%^u60|$MuF@O`98fu}))+ zRqnLNvKuNc)9#vC9uzFR5ivdYl0#QTgUH7|1=lkQt~?DQh3uM-*rJXw1s!4UU!gij zISwegz%^&bmcrvTa=H&YW_;AVpReHGrTl2axAi5zU5i}4%=@~GS3)rTtYG0c3#DKG zmj=r?oR0q`@u1klob^%3)Tx`Ve0+6_q06GdTgIW5U1STZcwXh7ZaYV52O;(kJ=%}{ z&lalNJu{W1-9q8sEe5|rhPzHK0%xUeHL-hMWeYgM7$fW3>v8Fv{U^p>-$mX{b-MNg P7+?&Zu6{1-oD!M^Z zQeXB&0~z0r#6h_4R)qo?@7IL^$$vM~z8{PKc_tC49msvVJmklzgiqTd->wXKyCMWg z0&R5RZTJUtu~kWsUob<${r~^pHz+jpJN*COU+{nae}(@E>;Jzu_`l!azrg?d|L5-y z2>8GLzrgwb4*$>pe?Q-$;Qapm{rl&?zZpE4m4Sh2ho_5UNCo5BY3)Ie4FuYFUx(;h zxE*XiV9}N^C%9)v+`az?HBSBMl1N`P_uTYX+cy8spE&9KnUk7J7Z(Z{%{;g4v&)Go z_fGuKxmoO&|D@aHNXtFV8Tvv7>g`sOSsnO}o@R-ev^XV^rO&A2A-Cm>^^+_$R>dfZJeRCsIi&BB!?qoMpmV?uImDm${Nopdpg&? zSP(R=?Ss~?{j9NG&RT1HnM6x{orB`s#ZwkYOC?;@*r&}X%bOYKHc6t(nQM*G?`CVO zHd76ziQLRUt}^Fzwv_+? literal 0 HcmV?d00001 diff --git a/images/emoji/2716.png b/images/emoji/2716.png new file mode 100644 index 0000000000000000000000000000000000000000..e47cc1b685d167f150075da93668f322d320ed2c GIT binary patch literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!_yc@GT!FN2a5x;DSNX366k;g} z@(X4#c%Q($hPM#NKj!J;7*cWT?Q}=JW&@rBY;XVHw<(-aqjADx+BVr26OV{(QT2+e z-?FXtj<4+RvSa5h^F9^JwM{*q@Fy{%lIL79viX4 zp^I3iOrP*cC?xK%?ZW*@_m|Z8{9GjQp6&5ng+0GHMp`|tf`lls_ljqf|qM+}~>elF{r5}E*26nq8% literal 0 HcmV?d00001 diff --git a/images/emoji/2754.png b/images/emoji/2754.png new file mode 100644 index 0000000000000000000000000000000000000000..6e7824c75f6c5b1e8cc0b118dae56e1f8ba70181 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I3?%1nZ+ru!j01c^T!HkmbsI=RUa!CA0ksL1 z1o;IsC?xdnfB%1dgM&c9`S}L-1LB#ZpEEEp>Ug?1hEy=Vz52ZAg@6F-gUKz;oQ3!Q zr{>>0CRY3V-uwRvTpucPe=ju2*G!geJMr>o3m@OzHEEMpoKw|1Kgs#Rw(My?SIeH) zx*PTI(wfgrTIZ)VNS!uoH@cW(JXzFd+dr<1uhX9kTYH&3%h03sCPuq_rLj7$EDYs^-Mf*r!#Qb$CXfy&_N>gTe~DWM4f DDcH#K literal 0 HcmV?d00001 diff --git a/images/emoji/README b/images/emoji/README new file mode 100644 index 000000000..ab478b753 --- /dev/null +++ b/images/emoji/README @@ -0,0 +1,2 @@ +These files supplied by emojione. License is CC BY 4.0. Attribution is required for commercial use. +See http://emojione.com From 7ae376b6cdd1c5b2b4662838c81899cff7c82780 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 2 Jun 2016 22:06:19 -0700 Subject: [PATCH 08/19] menu entries for basic emoji support. I could use a bit of help theming this. It may also be better rendered as a panel of buttons than a dropdown menu. Eventually we should probably allow the system admin to configure the emojis they want; as there are a large number. I only brought in a small collection that I thought would be most useful as post reactions. --- view/tpl/conv_item.tpl | 25 +++++++++++++++++++++++++ view/tpl/jot-header.tpl | 8 ++++++++ 2 files changed, 33 insertions(+) diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index d9c60fc3b..06cf16b34 100755 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -113,6 +113,31 @@ {{/if}} + {{if $item.like}} + + +

+ + {{/if}} + + + diff --git a/view/tpl/jot-header.tpl b/view/tpl/jot-header.tpl index aeb661008..43df2e175 100755 --- a/view/tpl/jot-header.tpl +++ b/view/tpl/jot-header.tpl @@ -349,6 +349,14 @@ function enableOnUser(){ } } + function jotReact(id,icon) { + if(id && icon) { + $.get('{{$baseurl}}/react?f=&postid=' + id + '&emoji=' + icon); + if(timer) clearTimeout(timer); + timer = setTimeout(NavUpdate,1000); + } + } + function jotClearLocation() { $('#jot-coord').val(''); $('#profile-nolocation-wrapper').attr('disabled', true); From f8949ed5d1f277a3246fecf04d3ee4619ba10b51 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Thu, 2 Jun 2016 22:12:56 -0700 Subject: [PATCH 09/19] restrict emoji reactions to the top level for now. --- view/tpl/conv_item.tpl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index 06cf16b34..b498420e3 100755 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -113,6 +113,7 @@ {{/if}} + {{if $item.toplevel}} {{if $item.like}} +
+ {{if $item.toplevel && $item.like}} + {{/if}} - {{if $item.dislike}} - - {{/if}} - {{if $item.isevent}} - - - - {{/if}} - - {{if $item.canvote}} - - - - {{/if}} - - {{if $item.toplevel}} - {{if $item.like}} - - - - - {{/if}} - {{/if}} - - - - - + + +
From dcba30a6aa3129d2d00fbebc281fc6e15c7785a6 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 14:52:00 -0700 Subject: [PATCH 11/19] strings --- util/hmessages.po | 717 ++++++++++++++++++++++------------------------ 1 file changed, 336 insertions(+), 381 deletions(-) diff --git a/util/hmessages.po b/util/hmessages.po index d912e7ab6..572114522 100644 --- a/util/hmessages.po +++ b/util/hmessages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-05-27 00:02-0700\n" +"POT-Creation-Date: 2016-06-03 00:02-0700\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -21,7 +21,7 @@ msgstr "" msgid "parent" msgstr "" -#: ../../Zotlabs/Storage/Browser.php:131 ../../include/text.php:2632 +#: ../../Zotlabs/Storage/Browser.php:131 ../../include/text.php:2605 msgid "Collection" msgstr "" @@ -46,14 +46,14 @@ msgid "Schedule Outbox" msgstr "" #: ../../Zotlabs/Storage/Browser.php:164 ../../Zotlabs/Module/Photos.php:798 -#: ../../Zotlabs/Module/Photos.php:1243 ../../Zotlabs/Lib/Apps.php:440 -#: ../../Zotlabs/Lib/Apps.php:515 ../../include/conversation.php:1032 +#: ../../Zotlabs/Module/Photos.php:1243 ../../Zotlabs/Lib/Apps.php:486 +#: ../../Zotlabs/Lib/Apps.php:561 ../../include/conversation.php:1032 #: ../../include/widgets.php:1503 msgid "Unknown" msgstr "" #: ../../Zotlabs/Storage/Browser.php:226 ../../Zotlabs/Module/Fbrowser.php:85 -#: ../../Zotlabs/Lib/Apps.php:170 ../../include/conversation.php:1639 +#: ../../Zotlabs/Lib/Apps.php:216 ../../include/conversation.php:1639 #: ../../include/nav.php:93 msgid "Files" msgstr "" @@ -75,7 +75,7 @@ msgstr "" #: ../../Zotlabs/Storage/Browser.php:231 ../../Zotlabs/Storage/Browser.php:308 #: ../../Zotlabs/Module/Cover_photo.php:357 -#: ../../Zotlabs/Module/Photos.php:825 ../../Zotlabs/Module/Photos.php:1367 +#: ../../Zotlabs/Module/Photos.php:825 ../../Zotlabs/Module/Photos.php:1368 #: ../../Zotlabs/Module/Profile_photo.php:368 ../../include/widgets.php:1516 msgid "Upload" msgstr "" @@ -92,7 +92,7 @@ msgid "Type" msgstr "" #: ../../Zotlabs/Storage/Browser.php:237 -#: ../../Zotlabs/Module/Sharedwithme.php:101 ../../include/text.php:1325 +#: ../../Zotlabs/Module/Sharedwithme.php:101 ../../include/text.php:1329 msgid "Size" msgstr "" @@ -111,7 +111,7 @@ msgstr "" #: ../../Zotlabs/Module/Editwebpage.php:146 #: ../../Zotlabs/Module/Layouts.php:190 ../../Zotlabs/Module/Menu.php:112 #: ../../Zotlabs/Module/Settings.php:652 ../../Zotlabs/Module/Thing.php:260 -#: ../../Zotlabs/Module/Webpages.php:187 ../../Zotlabs/Lib/Apps.php:291 +#: ../../Zotlabs/Module/Webpages.php:187 ../../Zotlabs/Lib/Apps.php:337 #: ../../Zotlabs/Lib/ThreadItem.php:96 ../../include/channel.php:937 #: ../../include/channel.php:941 ../../include/menu.php:108 #: ../../include/page_widgets.php:8 ../../include/page_widgets.php:36 @@ -128,7 +128,7 @@ msgstr "" #: ../../Zotlabs/Module/Editwebpage.php:170 ../../Zotlabs/Module/Group.php:177 #: ../../Zotlabs/Module/Photos.php:1173 ../../Zotlabs/Module/Settings.php:653 #: ../../Zotlabs/Module/Thing.php:261 ../../Zotlabs/Module/Webpages.php:189 -#: ../../Zotlabs/Lib/Apps.php:292 ../../Zotlabs/Lib/ThreadItem.php:116 +#: ../../Zotlabs/Lib/Apps.php:338 ../../Zotlabs/Lib/ThreadItem.php:116 #: ../../include/conversation.php:657 msgid "Delete" msgstr "" @@ -178,8 +178,7 @@ msgstr "" #: ../../Zotlabs/Module/Events.php:265 ../../Zotlabs/Module/Filestorage.php:24 #: ../../Zotlabs/Module/Filestorage.php:79 #: ../../Zotlabs/Module/Filestorage.php:94 -#: ../../Zotlabs/Module/Filestorage.php:121 -#: ../../Zotlabs/Module/Fsuggest.php:82 ../../Zotlabs/Module/Group.php:13 +#: ../../Zotlabs/Module/Filestorage.php:121 ../../Zotlabs/Module/Group.php:13 #: ../../Zotlabs/Module/Id.php:76 ../../Zotlabs/Module/Invite.php:17 #: ../../Zotlabs/Module/Invite.php:91 ../../Zotlabs/Module/Item.php:210 #: ../../Zotlabs/Module/Item.php:218 ../../Zotlabs/Module/Item.php:1070 @@ -216,7 +215,7 @@ msgstr "" #: ../../include/attach.php:352 ../../include/attach.php:359 #: ../../include/attach.php:437 ../../include/attach.php:895 #: ../../include/attach.php:966 ../../include/attach.php:1118 -#: ../../include/items.php:3438 +#: ../../include/items.php:3440 msgid "Permission denied." msgstr "" @@ -279,7 +278,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin.php:164 ../../Zotlabs/Module/Admin.php:1235 #: ../../Zotlabs/Module/Admin.php:1541 ../../Zotlabs/Module/Display.php:40 #: ../../Zotlabs/Module/Filestorage.php:33 ../../Zotlabs/Module/Thing.php:89 -#: ../../Zotlabs/Module/Viewsrc.php:24 ../../include/items.php:3359 +#: ../../Zotlabs/Module/Viewsrc.php:24 ../../include/items.php:3361 msgid "Item not found." msgstr "" @@ -364,7 +363,7 @@ msgstr "" msgid "Site settings updated." msgstr "" -#: ../../Zotlabs/Module/Admin.php:400 ../../include/text.php:2853 +#: ../../Zotlabs/Module/Admin.php:400 ../../include/text.php:2826 msgid "Default" msgstr "" @@ -389,11 +388,11 @@ msgstr "" #: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Mitem.php:158 #: ../../Zotlabs/Module/Mitem.php:159 ../../Zotlabs/Module/Mitem.php:232 #: ../../Zotlabs/Module/Mitem.php:233 ../../Zotlabs/Module/Photos.php:666 -#: ../../Zotlabs/Module/Profiles.php:649 ../../Zotlabs/Module/Removeme.php:61 +#: ../../Zotlabs/Module/Profiles.php:647 ../../Zotlabs/Module/Removeme.php:61 #: ../../Zotlabs/Module/Settings.php:581 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 #: ../../view/theme/redbasic/php/config.php:105 -#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1698 +#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1699 msgid "No" msgstr "" @@ -409,11 +408,11 @@ msgstr "" #: ../../Zotlabs/Module/Menu.php:157 ../../Zotlabs/Module/Mitem.php:158 #: ../../Zotlabs/Module/Mitem.php:159 ../../Zotlabs/Module/Mitem.php:232 #: ../../Zotlabs/Module/Mitem.php:233 ../../Zotlabs/Module/Photos.php:666 -#: ../../Zotlabs/Module/Profiles.php:649 ../../Zotlabs/Module/Removeme.php:61 +#: ../../Zotlabs/Module/Profiles.php:647 ../../Zotlabs/Module/Removeme.php:61 #: ../../Zotlabs/Module/Settings.php:581 ../../include/dir_fns.php:143 #: ../../include/dir_fns.php:144 ../../include/dir_fns.php:145 #: ../../view/theme/redbasic/php/config.php:105 -#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1698 +#: ../../view/theme/redbasic/php/config.php:130 ../../boot.php:1699 msgid "Yes" msgstr "" @@ -446,9 +445,8 @@ msgstr "" #: ../../Zotlabs/Module/Chat.php:238 ../../Zotlabs/Module/Connect.php:98 #: ../../Zotlabs/Module/Connedit.php:731 ../../Zotlabs/Module/Events.php:475 #: ../../Zotlabs/Module/Events.php:672 -#: ../../Zotlabs/Module/Filestorage.php:162 -#: ../../Zotlabs/Module/Fsuggest.php:112 ../../Zotlabs/Module/Group.php:85 -#: ../../Zotlabs/Module/Import.php:546 +#: ../../Zotlabs/Module/Filestorage.php:162 ../../Zotlabs/Module/Group.php:85 +#: ../../Zotlabs/Module/Import.php:550 #: ../../Zotlabs/Module/Import_items.php:120 #: ../../Zotlabs/Module/Invite.php:146 ../../Zotlabs/Module/Locs.php:121 #: ../../Zotlabs/Module/Mail.php:378 ../../Zotlabs/Module/Mitem.php:235 @@ -456,7 +454,7 @@ msgstr "" #: ../../Zotlabs/Module/Pdledit.php:66 ../../Zotlabs/Module/Photos.php:677 #: ../../Zotlabs/Module/Photos.php:1052 ../../Zotlabs/Module/Photos.php:1092 #: ../../Zotlabs/Module/Photos.php:1210 ../../Zotlabs/Module/Poke.php:186 -#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Rate.php:170 +#: ../../Zotlabs/Module/Profiles.php:687 ../../Zotlabs/Module/Rate.php:170 #: ../../Zotlabs/Module/Settings.php:590 ../../Zotlabs/Module/Settings.php:703 #: ../../Zotlabs/Module/Settings.php:731 ../../Zotlabs/Module/Settings.php:754 #: ../../Zotlabs/Module/Settings.php:842 @@ -1003,7 +1001,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin.php:1037 ../../Zotlabs/Module/Admin.php:1046 #: ../../Zotlabs/Module/Id.php:17 ../../Zotlabs/Module/Id.php:18 -#: ../../include/network.php:2151 ../../boot.php:1696 +#: ../../include/network.php:2151 ../../boot.php:1697 msgid "Email" msgstr "" @@ -1183,7 +1181,7 @@ msgid "Toggle" msgstr "" #: ../../Zotlabs/Module/Admin.php:1312 ../../Zotlabs/Module/Admin.php:1595 -#: ../../Zotlabs/Lib/Apps.php:169 ../../include/nav.php:208 +#: ../../Zotlabs/Lib/Apps.php:215 ../../include/nav.php:208 #: ../../include/widgets.php:638 msgid "Settings" msgstr "" @@ -1240,7 +1238,7 @@ msgstr "" msgid "Install new repo" msgstr "" -#: ../../Zotlabs/Module/Admin.php:1385 ../../Zotlabs/Lib/Apps.php:284 +#: ../../Zotlabs/Module/Admin.php:1385 ../../Zotlabs/Lib/Apps.php:330 msgid "Install" msgstr "" @@ -1264,7 +1262,7 @@ msgid "Install a New Plugin Repository" msgstr "" #: ../../Zotlabs/Module/Admin.php:1415 ../../Zotlabs/Module/Settings.php:77 -#: ../../Zotlabs/Module/Settings.php:616 ../../Zotlabs/Lib/Apps.php:284 +#: ../../Zotlabs/Module/Settings.php:616 ../../Zotlabs/Lib/Apps.php:330 msgid "Update" msgstr "" @@ -1363,7 +1361,7 @@ msgstr "" #: ../../Zotlabs/Module/Admin.php:2013 ../../Zotlabs/Module/Admin.php:2033 #: ../../Zotlabs/Module/Filer.php:53 ../../Zotlabs/Module/Rbmark.php:32 #: ../../Zotlabs/Module/Rbmark.php:104 ../../include/widgets.php:201 -#: ../../include/text.php:942 ../../include/text.php:954 +#: ../../include/text.php:946 ../../include/text.php:958 msgid "Save" msgstr "" @@ -1447,7 +1445,7 @@ msgstr "" #: ../../Zotlabs/Module/Appman.php:115 ../../Zotlabs/Module/Appman.php:116 #: ../../Zotlabs/Module/Events.php:449 ../../Zotlabs/Module/Events.php:454 -#: ../../Zotlabs/Module/Profiles.php:711 ../../Zotlabs/Module/Profiles.php:715 +#: ../../Zotlabs/Module/Profiles.php:709 ../../Zotlabs/Module/Profiles.php:713 #: ../../include/datetime.php:245 msgid "Required" msgstr "" @@ -1508,7 +1506,7 @@ msgstr "" msgid "Block Name" msgstr "" -#: ../../Zotlabs/Module/Blocks.php:151 ../../include/text.php:2277 +#: ../../Zotlabs/Module/Blocks.php:151 ../../include/text.php:2250 msgid "Blocks" msgstr "" @@ -1561,7 +1559,7 @@ msgid "l, F j" msgstr "" #: ../../Zotlabs/Module/Cal.php:308 ../../Zotlabs/Module/Events.php:637 -#: ../../include/text.php:1744 +#: ../../include/text.php:1717 msgid "Link to Source" msgstr "" @@ -1689,7 +1687,7 @@ msgid "No chatrooms available" msgstr "" #: ../../Zotlabs/Module/Chat.php:252 ../../Zotlabs/Module/Manage.php:143 -#: ../../Zotlabs/Module/Profiles.php:780 +#: ../../Zotlabs/Module/Profiles.php:778 msgid "Create New" msgstr "" @@ -1880,15 +1878,15 @@ msgstr "" msgid "Recent activity" msgstr "" -#: ../../Zotlabs/Module/Connections.php:302 ../../Zotlabs/Lib/Apps.php:162 -#: ../../include/nav.php:186 ../../include/text.php:871 +#: ../../Zotlabs/Module/Connections.php:302 ../../Zotlabs/Lib/Apps.php:208 +#: ../../include/nav.php:186 ../../include/text.php:875 msgid "Connections" msgstr "" #: ../../Zotlabs/Module/Connections.php:306 ../../Zotlabs/Module/Search.php:44 -#: ../../Zotlabs/Lib/Apps.php:182 ../../include/nav.php:165 -#: ../../include/acl_selectors.php:276 ../../include/text.php:941 -#: ../../include/text.php:953 +#: ../../Zotlabs/Lib/Apps.php:228 ../../include/nav.php:165 +#: ../../include/acl_selectors.php:276 ../../include/text.php:945 +#: ../../include/text.php:957 msgid "Search" msgstr "" @@ -1944,7 +1942,7 @@ msgstr "" msgid "Connection has been removed." msgstr "" -#: ../../Zotlabs/Module/Connedit.php:519 ../../Zotlabs/Lib/Apps.php:173 +#: ../../Zotlabs/Module/Connedit.php:519 ../../Zotlabs/Lib/Apps.php:219 #: ../../include/conversation.php:954 ../../include/nav.php:86 msgid "View Profile" msgstr "" @@ -2076,7 +2074,7 @@ msgstr "" msgid "Connection Default Permissions" msgstr "" -#: ../../Zotlabs/Module/Connedit.php:702 ../../include/items.php:3926 +#: ../../Zotlabs/Module/Connedit.php:702 ../../include/items.php:3928 #, php-format msgid "Connection: %s" msgstr "" @@ -2222,30 +2220,30 @@ msgstr "" msgid "Unable to process image." msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:233 ../../include/items.php:4270 +#: ../../Zotlabs/Module/Cover_photo.php:233 ../../include/items.php:4272 msgid "female" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:234 ../../include/items.php:4271 +#: ../../Zotlabs/Module/Cover_photo.php:234 ../../include/items.php:4273 #, php-format msgid "%1$s updated her %2$s" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:235 ../../include/items.php:4272 +#: ../../Zotlabs/Module/Cover_photo.php:235 ../../include/items.php:4274 msgid "male" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:236 ../../include/items.php:4273 +#: ../../Zotlabs/Module/Cover_photo.php:236 ../../include/items.php:4275 #, php-format msgid "%1$s updated his %2$s" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4275 +#: ../../Zotlabs/Module/Cover_photo.php:238 ../../include/items.php:4277 #, php-format msgid "%1$s updated their %2$s" msgstr "" -#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/channel.php:1805 +#: ../../Zotlabs/Module/Cover_photo.php:240 ../../include/channel.php:1661 msgid "cover photo" msgstr "" @@ -2327,12 +2325,12 @@ msgstr "" msgid "Homepage: " msgstr "" -#: ../../Zotlabs/Module/Directory.php:306 ../../include/channel.php:1327 +#: ../../Zotlabs/Module/Directory.php:306 ../../include/channel.php:1183 msgid "Age:" msgstr "" #: ../../Zotlabs/Module/Directory.php:311 ../../include/event.php:52 -#: ../../include/channel.php:1027 ../../include/text.php:1484 +#: ../../include/event.php:84 ../../include/channel.php:1027 #: ../../include/bb2diaspora.php:507 msgid "Location:" msgstr "" @@ -2341,11 +2339,11 @@ msgstr "" msgid "Description:" msgstr "" -#: ../../Zotlabs/Module/Directory.php:322 ../../include/channel.php:1343 +#: ../../Zotlabs/Module/Directory.php:322 ../../include/channel.php:1199 msgid "Hometown:" msgstr "" -#: ../../Zotlabs/Module/Directory.php:324 ../../include/channel.php:1351 +#: ../../Zotlabs/Module/Directory.php:324 ../../include/channel.php:1207 msgid "About:" msgstr "" @@ -2557,7 +2555,7 @@ msgstr "" #: ../../Zotlabs/Module/Events.php:254 ../../Zotlabs/Module/Like.php:373 #: ../../Zotlabs/Module/Tagger.php:51 ../../include/conversation.php:123 -#: ../../include/event.php:922 ../../include/text.php:1955 +#: ../../include/event.php:949 ../../include/text.php:1928 msgid "event" msgstr "" @@ -2620,7 +2618,7 @@ msgid "Edit Location" msgstr "" #: ../../Zotlabs/Module/Events.php:464 ../../Zotlabs/Module/Locs.php:117 -#: ../../Zotlabs/Module/Profiles.php:477 ../../Zotlabs/Module/Profiles.php:700 +#: ../../Zotlabs/Module/Profiles.php:477 ../../Zotlabs/Module/Profiles.php:698 #: ../../Zotlabs/Module/Pubsites.php:41 ../../include/js_strings.php:25 msgid "Location" msgstr "" @@ -2663,7 +2661,7 @@ msgstr "" msgid "Failed to remove event" msgstr "" -#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:174 +#: ../../Zotlabs/Module/Fbrowser.php:29 ../../Zotlabs/Lib/Apps.php:220 #: ../../include/conversation.php:1632 ../../include/nav.php:92 msgid "Photos" msgstr "" @@ -2732,23 +2730,6 @@ msgstr "" msgid "Channel added." msgstr "" -#: ../../Zotlabs/Module/Fsuggest.php:24 ../../Zotlabs/Module/Fsuggest.php:96 -msgid "Contact not found." -msgstr "" - -#: ../../Zotlabs/Module/Fsuggest.php:67 -msgid "Friend suggestion sent." -msgstr "" - -#: ../../Zotlabs/Module/Fsuggest.php:101 -msgid "Suggest Friends" -msgstr "" - -#: ../../Zotlabs/Module/Fsuggest.php:103 -#, php-format -msgid "Suggest a friend for %s" -msgstr "" - #: ../../Zotlabs/Module/Group.php:24 msgid "Privacy group created." msgstr "" @@ -2758,7 +2739,7 @@ msgid "Could not create privacy group." msgstr "" #: ../../Zotlabs/Module/Group.php:42 ../../Zotlabs/Module/Group.php:141 -#: ../../include/items.php:3893 +#: ../../include/items.php:3895 msgid "Privacy group not found." msgstr "" @@ -2812,7 +2793,7 @@ msgid "Help:" msgstr "" #: ../../Zotlabs/Module/Help.php:85 ../../Zotlabs/Module/Help.php:90 -#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Lib/Apps.php:177 +#: ../../Zotlabs/Module/Layouts.php:183 ../../Zotlabs/Lib/Apps.php:223 #: ../../include/nav.php:159 msgid "Help" msgstr "" @@ -2848,7 +2829,7 @@ msgid "Full Name" msgstr "" #: ../../Zotlabs/Module/Id.php:19 ../../Zotlabs/Module/Id.php:20 -#: ../../Zotlabs/Module/Id.php:21 ../../Zotlabs/Lib/Apps.php:190 +#: ../../Zotlabs/Module/Id.php:21 ../../Zotlabs/Lib/Apps.php:236 msgid "Profile Photo" msgstr "" @@ -2880,11 +2861,11 @@ msgstr "" msgid "Timezone" msgstr "" -#: ../../Zotlabs/Module/Id.php:29 ../../Zotlabs/Module/Profiles.php:733 +#: ../../Zotlabs/Module/Id.php:29 ../../Zotlabs/Module/Profiles.php:731 msgid "Homepage URL" msgstr "" -#: ../../Zotlabs/Module/Id.php:30 ../../Zotlabs/Lib/Apps.php:188 +#: ../../Zotlabs/Module/Id.php:30 ../../Zotlabs/Lib/Apps.php:234 msgid "Language" msgstr "" @@ -2968,7 +2949,7 @@ msgstr "" msgid "Warning: Database versions differ by %1$d updates." msgstr "" -#: ../../Zotlabs/Module/Import.php:150 ../../include/import.php:84 +#: ../../Zotlabs/Module/Import.php:150 ../../include/import.php:86 msgid "Cloned channel not found. Import failed." msgstr "" @@ -2976,48 +2957,48 @@ msgstr "" msgid "No channel. Import failed." msgstr "" -#: ../../Zotlabs/Module/Import.php:506 +#: ../../Zotlabs/Module/Import.php:510 #: ../../include/Import/import_diaspora.php:142 msgid "Import completed." msgstr "" -#: ../../Zotlabs/Module/Import.php:528 +#: ../../Zotlabs/Module/Import.php:532 msgid "You must be logged in to use this feature." msgstr "" -#: ../../Zotlabs/Module/Import.php:533 +#: ../../Zotlabs/Module/Import.php:537 msgid "Import Channel" msgstr "" -#: ../../Zotlabs/Module/Import.php:534 +#: ../../Zotlabs/Module/Import.php:538 msgid "" "Use this form to import an existing channel from a different server/hub. You " "may retrieve the channel identity from the old server/hub via the network or " "provide an export file." msgstr "" -#: ../../Zotlabs/Module/Import.php:535 +#: ../../Zotlabs/Module/Import.php:539 #: ../../Zotlabs/Module/Import_items.php:119 msgid "File to Upload" msgstr "" -#: ../../Zotlabs/Module/Import.php:536 +#: ../../Zotlabs/Module/Import.php:540 msgid "Or provide the old server/hub details" msgstr "" -#: ../../Zotlabs/Module/Import.php:537 +#: ../../Zotlabs/Module/Import.php:541 msgid "Your old identity address (xyz@example.com)" msgstr "" -#: ../../Zotlabs/Module/Import.php:538 +#: ../../Zotlabs/Module/Import.php:542 msgid "Your old login email address" msgstr "" -#: ../../Zotlabs/Module/Import.php:539 +#: ../../Zotlabs/Module/Import.php:543 msgid "Your old login password" msgstr "" -#: ../../Zotlabs/Module/Import.php:540 +#: ../../Zotlabs/Module/Import.php:544 msgid "" "For either option, please choose whether to make this hub your new primary " "address, or whether your old location should continue this role. You will be " @@ -3025,16 +3006,16 @@ msgid "" "location for files, photos, and media." msgstr "" -#: ../../Zotlabs/Module/Import.php:541 +#: ../../Zotlabs/Module/Import.php:545 msgid "Make this hub my primary location" msgstr "" -#: ../../Zotlabs/Module/Import.php:542 +#: ../../Zotlabs/Module/Import.php:546 msgid "" "Import existing posts if possible (experimental - limited by available memory" msgstr "" -#: ../../Zotlabs/Module/Import.php:543 +#: ../../Zotlabs/Module/Import.php:547 msgid "" "This process may take several minutes to complete. Please submit the form " "only once and leave this page open until finished." @@ -3155,7 +3136,7 @@ msgstr "" msgid "You have reached your limit of %1$.0f webpages." msgstr "" -#: ../../Zotlabs/Module/Layouts.php:181 ../../include/text.php:2279 +#: ../../Zotlabs/Module/Layouts.php:181 ../../include/text.php:2252 msgid "Layouts" msgstr "" @@ -3208,12 +3189,12 @@ msgstr "" #: ../../Zotlabs/Module/Like.php:371 ../../Zotlabs/Module/Subthread.php:87 #: ../../Zotlabs/Module/Tagger.php:47 ../../include/conversation.php:120 -#: ../../include/text.php:1952 +#: ../../include/text.php:1925 msgid "photo" msgstr "" #: ../../Zotlabs/Module/Like.php:371 ../../Zotlabs/Module/Subthread.php:87 -#: ../../include/conversation.php:148 ../../include/text.php:1958 +#: ../../include/conversation.php:148 ../../include/text.php:1931 msgid "status" msgstr "" @@ -3349,7 +3330,7 @@ msgid "" "Password reset failed." msgstr "" -#: ../../Zotlabs/Module/Lostpass.php:90 ../../boot.php:1702 +#: ../../Zotlabs/Module/Lostpass.php:90 ../../boot.php:1703 msgid "Password Reset" msgstr "" @@ -3509,7 +3490,7 @@ msgstr "" msgid "Create a new channel" msgstr "" -#: ../../Zotlabs/Module/Manage.php:164 ../../Zotlabs/Lib/Apps.php:167 +#: ../../Zotlabs/Module/Manage.php:164 ../../Zotlabs/Lib/Apps.php:213 #: ../../include/nav.php:206 msgid "Channel Manager" msgstr "" @@ -3596,7 +3577,7 @@ msgstr "" msgid "Submit and proceed" msgstr "" -#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2278 +#: ../../Zotlabs/Module/Menu.php:107 ../../include/text.php:2251 msgid "Menus" msgstr "" @@ -3780,7 +3761,7 @@ msgctxt "mood" msgid "%1$s is %2$s" msgstr "" -#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Lib/Apps.php:179 +#: ../../Zotlabs/Module/Mood.php:135 ../../Zotlabs/Lib/Apps.php:225 msgid "Mood" msgstr "" @@ -4033,7 +4014,7 @@ msgid "Album name could not be decoded" msgstr "" #: ../../Zotlabs/Module/Photos.php:743 ../../Zotlabs/Module/Photos.php:1284 -#: ../../Zotlabs/Module/Photos.php:1301 +#: ../../Zotlabs/Module/Photos.php:1302 msgid "Contact Photos" msgstr "" @@ -4045,7 +4026,7 @@ msgstr "" msgid "Show Oldest First" msgstr "" -#: ../../Zotlabs/Module/Photos.php:792 ../../Zotlabs/Module/Photos.php:1334 +#: ../../Zotlabs/Module/Photos.php:792 ../../Zotlabs/Module/Photos.php:1335 #: ../../include/widgets.php:1497 msgid "View Photo" msgstr "" @@ -4184,7 +4165,7 @@ msgid "View all" msgstr "" #: ../../Zotlabs/Module/Photos.php:1130 ../../Zotlabs/Lib/ThreadItem.php:175 -#: ../../include/conversation.php:1741 ../../include/channel.php:1302 +#: ../../include/conversation.php:1741 ../../include/channel.php:1158 #: ../../include/taxonomy.php:403 msgctxt "noun" msgid "Like" @@ -4227,12 +4208,12 @@ msgstr "" msgid "Close" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1340 +#: ../../Zotlabs/Module/Photos.php:1341 msgid "View Album" msgstr "" -#: ../../Zotlabs/Module/Photos.php:1351 ../../Zotlabs/Module/Photos.php:1364 -#: ../../Zotlabs/Module/Photos.php:1365 +#: ../../Zotlabs/Module/Photos.php:1352 ../../Zotlabs/Module/Photos.php:1365 +#: ../../Zotlabs/Module/Photos.php:1366 msgid "Recent Photos" msgstr "" @@ -4244,13 +4225,11 @@ msgstr "" msgid "added your channel" msgstr "" -#: ../../Zotlabs/Module/Ping.php:323 ../../include/channel.php:1121 -#: ../../include/channel.php:1197 +#: ../../Zotlabs/Module/Ping.php:323 msgid "g A l F d" msgstr "" -#: ../../Zotlabs/Module/Ping.php:346 ../../include/channel.php:1167 -#: ../../include/channel.php:1237 +#: ../../Zotlabs/Module/Ping.php:346 msgid "[today]" msgstr "" @@ -4258,7 +4237,7 @@ msgstr "" msgid "posted an event" msgstr "" -#: ../../Zotlabs/Module/Poke.php:168 ../../Zotlabs/Lib/Apps.php:180 +#: ../../Zotlabs/Module/Poke.php:168 ../../Zotlabs/Lib/Apps.php:226 #: ../../include/conversation.php:960 msgid "Poke" msgstr "" @@ -4339,15 +4318,15 @@ msgstr "" msgid "Romantic Partner" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:435 ../../Zotlabs/Module/Profiles.php:738 +#: ../../Zotlabs/Module/Profiles.php:435 ../../Zotlabs/Module/Profiles.php:736 msgid "Likes" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:439 ../../Zotlabs/Module/Profiles.php:739 +#: ../../Zotlabs/Module/Profiles.php:439 ../../Zotlabs/Module/Profiles.php:737 msgid "Dislikes" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:443 ../../Zotlabs/Module/Profiles.php:746 +#: ../../Zotlabs/Module/Profiles.php:443 ../../Zotlabs/Module/Profiles.php:744 msgid "Work/Employment" msgstr "" @@ -4375,197 +4354,197 @@ msgstr "" msgid "Profile updated." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:646 +#: ../../Zotlabs/Module/Profiles.php:644 msgid "Hide your connections list from viewers of this profile" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:688 +#: ../../Zotlabs/Module/Profiles.php:686 msgid "Edit Profile Details" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:690 +#: ../../Zotlabs/Module/Profiles.php:688 msgid "View this profile" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:691 ../../Zotlabs/Module/Profiles.php:773 +#: ../../Zotlabs/Module/Profiles.php:689 ../../Zotlabs/Module/Profiles.php:771 #: ../../include/channel.php:959 msgid "Edit visibility" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:692 +#: ../../Zotlabs/Module/Profiles.php:690 msgid "Profile Tools" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:693 +#: ../../Zotlabs/Module/Profiles.php:691 msgid "Change cover photo" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:694 ../../include/channel.php:930 +#: ../../Zotlabs/Module/Profiles.php:692 ../../include/channel.php:930 msgid "Change profile photo" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:695 +#: ../../Zotlabs/Module/Profiles.php:693 msgid "Create a new profile using these settings" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:696 +#: ../../Zotlabs/Module/Profiles.php:694 msgid "Clone this profile" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:697 +#: ../../Zotlabs/Module/Profiles.php:695 msgid "Delete this profile" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:698 +#: ../../Zotlabs/Module/Profiles.php:696 msgid "Add profile things" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:699 ../../include/conversation.php:1526 +#: ../../Zotlabs/Module/Profiles.php:697 ../../include/conversation.php:1526 #: ../../include/widgets.php:105 msgid "Personal" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:701 +#: ../../Zotlabs/Module/Profiles.php:699 msgid "Relation" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:702 ../../include/datetime.php:48 +#: ../../Zotlabs/Module/Profiles.php:700 ../../include/datetime.php:48 msgid "Miscellaneous" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:704 +#: ../../Zotlabs/Module/Profiles.php:702 msgid "Import profile from file" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:705 +#: ../../Zotlabs/Module/Profiles.php:703 msgid "Export profile to file" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:706 +#: ../../Zotlabs/Module/Profiles.php:704 msgid "Your gender" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:707 +#: ../../Zotlabs/Module/Profiles.php:705 msgid "Marital status" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:708 +#: ../../Zotlabs/Module/Profiles.php:706 msgid "Sexual preference" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:711 +#: ../../Zotlabs/Module/Profiles.php:709 msgid "Profile name" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:713 +#: ../../Zotlabs/Module/Profiles.php:711 msgid "This is your default profile." msgstr "" -#: ../../Zotlabs/Module/Profiles.php:715 +#: ../../Zotlabs/Module/Profiles.php:713 msgid "Your full name" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:716 +#: ../../Zotlabs/Module/Profiles.php:714 msgid "Title/Description" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:719 +#: ../../Zotlabs/Module/Profiles.php:717 msgid "Street address" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:720 +#: ../../Zotlabs/Module/Profiles.php:718 msgid "Locality/City" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:721 +#: ../../Zotlabs/Module/Profiles.php:719 msgid "Region/State" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:722 +#: ../../Zotlabs/Module/Profiles.php:720 msgid "Postal/Zip code" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:723 +#: ../../Zotlabs/Module/Profiles.php:721 msgid "Country" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:728 +#: ../../Zotlabs/Module/Profiles.php:726 msgid "Who (if applicable)" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:728 +#: ../../Zotlabs/Module/Profiles.php:726 msgid "Examples: cathy123, Cathy Williams, cathy@example.com" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:729 +#: ../../Zotlabs/Module/Profiles.php:727 msgid "Since (date)" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:732 +#: ../../Zotlabs/Module/Profiles.php:730 msgid "Tell us about yourself" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:734 +#: ../../Zotlabs/Module/Profiles.php:732 msgid "Hometown" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:735 +#: ../../Zotlabs/Module/Profiles.php:733 msgid "Political views" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:736 +#: ../../Zotlabs/Module/Profiles.php:734 msgid "Religious views" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:737 +#: ../../Zotlabs/Module/Profiles.php:735 msgid "Keywords used in directory listings" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:737 +#: ../../Zotlabs/Module/Profiles.php:735 msgid "Example: fishing photography software" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:740 +#: ../../Zotlabs/Module/Profiles.php:738 msgid "Musical interests" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:741 +#: ../../Zotlabs/Module/Profiles.php:739 msgid "Books, literature" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:742 +#: ../../Zotlabs/Module/Profiles.php:740 msgid "Television" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:743 +#: ../../Zotlabs/Module/Profiles.php:741 msgid "Film/Dance/Culture/Entertainment" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:744 +#: ../../Zotlabs/Module/Profiles.php:742 msgid "Hobbies/Interests" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:745 +#: ../../Zotlabs/Module/Profiles.php:743 msgid "Love/Romance" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:747 +#: ../../Zotlabs/Module/Profiles.php:745 msgid "School/Education" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:748 +#: ../../Zotlabs/Module/Profiles.php:746 msgid "Contact information and social networks" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:749 +#: ../../Zotlabs/Module/Profiles.php:747 msgid "My other channels" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:769 ../../include/channel.php:955 +#: ../../Zotlabs/Module/Profiles.php:767 ../../include/channel.php:955 msgid "Profile Image" msgstr "" -#: ../../Zotlabs/Module/Profiles.php:779 ../../include/channel.php:937 +#: ../../Zotlabs/Module/Profiles.php:777 ../../include/channel.php:937 #: ../../include/nav.php:88 msgid "Edit Profiles" msgstr "" @@ -4578,7 +4557,7 @@ msgstr "" msgid "Profile Visibility Editor" msgstr "" -#: ../../Zotlabs/Module/Profperm.php:117 ../../include/channel.php:1393 +#: ../../Zotlabs/Module/Profperm.php:117 ../../include/channel.php:1249 msgid "Profile" msgstr "" @@ -4768,7 +4747,7 @@ msgid "Membership on this site is by invitation only." msgstr "" #: ../../Zotlabs/Module/Register.php:262 ../../include/nav.php:147 -#: ../../boot.php:1676 +#: ../../boot.php:1677 msgid "Register" msgstr "" @@ -5195,7 +5174,7 @@ msgstr "" msgid "Basic Settings" msgstr "" -#: ../../Zotlabs/Module/Settings.php:1040 ../../include/channel.php:1284 +#: ../../Zotlabs/Module/Settings.php:1040 ../../include/channel.php:1140 msgid "Full Name:" msgstr "" @@ -5633,7 +5612,7 @@ msgid "" msgstr "" #: ../../Zotlabs/Module/Setup.php:388 -msgid "PHP version 5.4 or greater is required." +msgid "PHP version 5.5 or greater is required." msgstr "" #: ../../Zotlabs/Module/Setup.php:389 @@ -6098,7 +6077,7 @@ msgid "post" msgstr "" #: ../../Zotlabs/Module/Tagger.php:57 ../../include/conversation.php:150 -#: ../../include/text.php:1960 +#: ../../include/text.php:1933 msgid "comment" msgstr "" @@ -6251,7 +6230,7 @@ msgstr "" msgid "Source of Item" msgstr "" -#: ../../Zotlabs/Module/Webpages.php:184 ../../Zotlabs/Lib/Apps.php:171 +#: ../../Zotlabs/Module/Webpages.php:184 ../../Zotlabs/Lib/Apps.php:217 #: ../../include/conversation.php:1685 ../../include/nav.php:106 msgid "Webpages" msgstr "" @@ -6276,89 +6255,89 @@ msgstr "" msgid "Lookup xchan beginning with (or webbie): " msgstr "" -#: ../../Zotlabs/Lib/Apps.php:158 +#: ../../Zotlabs/Lib/Apps.php:204 msgid "Site Admin" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:159 +#: ../../Zotlabs/Lib/Apps.php:205 msgid "Bug Report" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:160 +#: ../../Zotlabs/Lib/Apps.php:206 msgid "View Bookmarks" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:161 +#: ../../Zotlabs/Lib/Apps.php:207 msgid "My Chatrooms" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:163 +#: ../../Zotlabs/Lib/Apps.php:209 msgid "Firefox Share" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:164 +#: ../../Zotlabs/Lib/Apps.php:210 msgid "Remote Diagnostics" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:165 ../../include/features.php:89 +#: ../../Zotlabs/Lib/Apps.php:211 ../../include/features.php:89 msgid "Suggest Channels" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:166 ../../include/nav.php:110 -#: ../../boot.php:1694 +#: ../../Zotlabs/Lib/Apps.php:212 ../../include/nav.php:110 +#: ../../boot.php:1695 msgid "Login" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:168 ../../include/nav.php:179 +#: ../../Zotlabs/Lib/Apps.php:214 ../../include/nav.php:179 msgid "Grid" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:172 ../../include/nav.php:182 +#: ../../Zotlabs/Lib/Apps.php:218 ../../include/nav.php:182 msgid "Channel Home" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:175 ../../include/conversation.php:1649 +#: ../../Zotlabs/Lib/Apps.php:221 ../../include/conversation.php:1649 #: ../../include/conversation.php:1652 ../../include/nav.php:201 msgid "Events" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:176 ../../include/nav.php:167 +#: ../../Zotlabs/Lib/Apps.php:222 ../../include/nav.php:167 msgid "Directory" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:178 ../../include/nav.php:193 +#: ../../Zotlabs/Lib/Apps.php:224 ../../include/nav.php:193 msgid "Mail" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:181 ../../include/nav.php:96 +#: ../../Zotlabs/Lib/Apps.php:227 ../../include/nav.php:96 msgid "Chat" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:183 +#: ../../Zotlabs/Lib/Apps.php:229 msgid "Probe" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:184 +#: ../../Zotlabs/Lib/Apps.php:230 msgid "Suggest" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:185 +#: ../../Zotlabs/Lib/Apps.php:231 msgid "Random Channel" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:186 +#: ../../Zotlabs/Lib/Apps.php:232 msgid "Invite" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:187 ../../include/widgets.php:1384 +#: ../../Zotlabs/Lib/Apps.php:233 ../../include/widgets.php:1384 msgid "Features" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:189 +#: ../../Zotlabs/Lib/Apps.php:235 msgid "Post" msgstr "" -#: ../../Zotlabs/Lib/Apps.php:289 +#: ../../Zotlabs/Lib/Apps.php:335 msgid "Purchase" msgstr "" @@ -6765,7 +6744,7 @@ msgstr "" msgid "No username found in import file." msgstr "" -#: ../../include/Import/import_diaspora.php:41 ../../include/import.php:48 +#: ../../include/Import/import_diaspora.php:41 ../../include/import.php:50 msgid "Unable to create a unique channel address. Import failed." msgstr "" @@ -6951,8 +6930,8 @@ msgstr "" msgid "%1$s poked %2$s" msgstr "" -#: ../../include/conversation.php:243 ../../include/text.php:1029 -#: ../../include/text.php:1034 +#: ../../include/conversation.php:243 ../../include/text.php:1033 +#: ../../include/text.php:1038 msgid "poked" msgstr "" @@ -7217,42 +7196,42 @@ msgid_plural "Abstains" msgstr[0] "" msgstr[1] "" -#: ../../include/event.php:22 ../../include/text.php:1469 +#: ../../include/event.php:22 ../../include/event.php:69 #: ../../include/bb2diaspora.php:485 msgid "l F d, Y \\@ g:i A" msgstr "" -#: ../../include/event.php:30 ../../include/text.php:1473 +#: ../../include/event.php:30 ../../include/event.php:73 #: ../../include/bb2diaspora.php:491 msgid "Starts:" msgstr "" -#: ../../include/event.php:40 ../../include/text.php:1477 +#: ../../include/event.php:40 ../../include/event.php:77 #: ../../include/bb2diaspora.php:499 msgid "Finishes:" msgstr "" -#: ../../include/event.php:786 +#: ../../include/event.php:812 msgid "This event has been added to your calendar." msgstr "" -#: ../../include/event.php:985 +#: ../../include/event.php:1012 msgid "Not specified" msgstr "" -#: ../../include/event.php:986 +#: ../../include/event.php:1013 msgid "Needs Action" msgstr "" -#: ../../include/event.php:987 +#: ../../include/event.php:1014 msgid "Completed" msgstr "" -#: ../../include/event.php:988 +#: ../../include/event.php:1015 msgid "In Process" msgstr "" -#: ../../include/event.php:989 +#: ../../include/event.php:1016 msgid "Cancelled" msgstr "" @@ -7518,6 +7497,53 @@ msgstr "" msgid "Ask me" msgstr "" +#: ../../include/bbcode.php:123 ../../include/bbcode.php:844 +#: ../../include/bbcode.php:847 ../../include/bbcode.php:852 +#: ../../include/bbcode.php:855 ../../include/bbcode.php:858 +#: ../../include/bbcode.php:861 ../../include/bbcode.php:866 +#: ../../include/bbcode.php:869 ../../include/bbcode.php:874 +#: ../../include/bbcode.php:877 ../../include/bbcode.php:880 +#: ../../include/bbcode.php:883 +msgid "Image/photo" +msgstr "" + +#: ../../include/bbcode.php:162 ../../include/bbcode.php:894 +msgid "Encrypted content" +msgstr "" + +#: ../../include/bbcode.php:178 +#, php-format +msgid "Install %s element: " +msgstr "" + +#: ../../include/bbcode.php:182 +#, php-format +msgid "" +"This post contains an installable %s element, however you lack permissions " +"to install it on this site." +msgstr "" + +#: ../../include/bbcode.php:254 +#, php-format +msgid "%1$s wrote the following %2$s %3$s" +msgstr "" + +#: ../../include/bbcode.php:331 ../../include/bbcode.php:339 +msgid "Click to open/close" +msgstr "" + +#: ../../include/bbcode.php:339 +msgid "spoiler" +msgstr "" + +#: ../../include/bbcode.php:585 +msgid "Different viewers will see this text differently" +msgstr "" + +#: ../../include/bbcode.php:832 +msgid "$1 wrote:" +msgstr "" + #: ../../include/bookmarks.php:35 #, php-format msgid "%1$s's bookmarks" @@ -7638,15 +7664,15 @@ msgstr "" msgid "Visible to everybody" msgstr "" -#: ../../include/channel.php:1031 ../../include/channel.php:1286 +#: ../../include/channel.php:1031 ../../include/channel.php:1142 msgid "Gender:" msgstr "" -#: ../../include/channel.php:1032 ../../include/channel.php:1330 +#: ../../include/channel.php:1032 ../../include/channel.php:1186 msgid "Status:" msgstr "" -#: ../../include/channel.php:1033 ../../include/channel.php:1341 +#: ../../include/channel.php:1033 ../../include/channel.php:1197 msgid "Homepage:" msgstr "" @@ -7654,116 +7680,92 @@ msgstr "" msgid "Online Now" msgstr "" -#: ../../include/channel.php:1122 ../../include/channel.php:1198 -msgid "F d" -msgstr "" - -#: ../../include/channel.php:1178 -msgid "Birthday Reminders" -msgstr "" - -#: ../../include/channel.php:1179 -msgid "Birthdays this week:" -msgstr "" - -#: ../../include/channel.php:1230 -msgid "[No description]" -msgstr "" - -#: ../../include/channel.php:1248 -msgid "Event Reminders" -msgstr "" - -#: ../../include/channel.php:1249 -msgid "Events this week:" -msgstr "" - -#: ../../include/channel.php:1291 +#: ../../include/channel.php:1147 msgid "Like this channel" msgstr "" -#: ../../include/channel.php:1315 +#: ../../include/channel.php:1171 msgid "j F, Y" msgstr "" -#: ../../include/channel.php:1316 +#: ../../include/channel.php:1172 msgid "j F" msgstr "" -#: ../../include/channel.php:1323 +#: ../../include/channel.php:1179 msgid "Birthday:" msgstr "" -#: ../../include/channel.php:1336 +#: ../../include/channel.php:1192 #, php-format msgid "for %1$d %2$s" msgstr "" -#: ../../include/channel.php:1339 +#: ../../include/channel.php:1195 msgid "Sexual Preference:" msgstr "" -#: ../../include/channel.php:1345 +#: ../../include/channel.php:1201 msgid "Tags:" msgstr "" -#: ../../include/channel.php:1347 +#: ../../include/channel.php:1203 msgid "Political Views:" msgstr "" -#: ../../include/channel.php:1349 +#: ../../include/channel.php:1205 msgid "Religion:" msgstr "" -#: ../../include/channel.php:1353 +#: ../../include/channel.php:1209 msgid "Hobbies/Interests:" msgstr "" -#: ../../include/channel.php:1355 +#: ../../include/channel.php:1211 msgid "Likes:" msgstr "" -#: ../../include/channel.php:1357 +#: ../../include/channel.php:1213 msgid "Dislikes:" msgstr "" -#: ../../include/channel.php:1359 +#: ../../include/channel.php:1215 msgid "Contact information and Social Networks:" msgstr "" -#: ../../include/channel.php:1361 +#: ../../include/channel.php:1217 msgid "My other channels:" msgstr "" -#: ../../include/channel.php:1363 +#: ../../include/channel.php:1219 msgid "Musical interests:" msgstr "" -#: ../../include/channel.php:1365 +#: ../../include/channel.php:1221 msgid "Books, literature:" msgstr "" -#: ../../include/channel.php:1367 +#: ../../include/channel.php:1223 msgid "Television:" msgstr "" -#: ../../include/channel.php:1369 +#: ../../include/channel.php:1225 msgid "Film/dance/culture/entertainment:" msgstr "" -#: ../../include/channel.php:1371 +#: ../../include/channel.php:1227 msgid "Love/Romance:" msgstr "" -#: ../../include/channel.php:1373 +#: ../../include/channel.php:1229 msgid "Work/employment:" msgstr "" -#: ../../include/channel.php:1375 +#: ../../include/channel.php:1231 msgid "School/education:" msgstr "" -#: ../../include/channel.php:1395 +#: ../../include/channel.php:1251 msgid "Like this thing" msgstr "" @@ -7773,7 +7775,7 @@ msgid "" "form has been opened for too long (>3 hours) before submitting it." msgstr "" -#: ../../include/nav.php:82 ../../include/nav.php:113 ../../boot.php:1693 +#: ../../include/nav.php:82 ../../include/nav.php:113 ../../boot.php:1694 msgid "Logout" msgstr "" @@ -8238,7 +8240,7 @@ msgstr "" msgid "YYYY-MM-DD or MM-DD" msgstr "" -#: ../../include/datetime.php:272 ../../boot.php:2461 +#: ../../include/datetime.php:272 ../../boot.php:2462 msgid "never" msgstr "" @@ -8423,12 +8425,12 @@ msgstr "" msgid "Cannot connect to yourself." msgstr "" -#: ../../include/import.php:27 +#: ../../include/import.php:29 msgid "" "Cannot create a duplicate channel identifier on this system. Import failed." msgstr "" -#: ../../include/import.php:74 +#: ../../include/import.php:76 msgid "Channel clone failed. Import failed." msgstr "" @@ -8469,20 +8471,20 @@ msgstr "" msgid "Visible to specific connections." msgstr "" -#: ../../include/items.php:3909 +#: ../../include/items.php:3911 msgid "Privacy group is empty." msgstr "" -#: ../../include/items.php:3916 +#: ../../include/items.php:3918 #, php-format msgid "Privacy group: %s" msgstr "" -#: ../../include/items.php:3928 +#: ../../include/items.php:3930 msgid "Connection not found." msgstr "" -#: ../../include/items.php:4277 +#: ../../include/items.php:4279 msgid "profile photo" msgstr "" @@ -8812,272 +8814,272 @@ msgstr "" msgid "newer" msgstr "" -#: ../../include/text.php:859 +#: ../../include/text.php:863 msgid "No connections" msgstr "" -#: ../../include/text.php:884 +#: ../../include/text.php:888 #, php-format msgid "View all %s connections" msgstr "" -#: ../../include/text.php:1029 ../../include/text.php:1034 +#: ../../include/text.php:1033 ../../include/text.php:1038 msgid "poke" msgstr "" -#: ../../include/text.php:1035 +#: ../../include/text.php:1039 msgid "ping" msgstr "" -#: ../../include/text.php:1035 +#: ../../include/text.php:1039 msgid "pinged" msgstr "" -#: ../../include/text.php:1036 +#: ../../include/text.php:1040 msgid "prod" msgstr "" -#: ../../include/text.php:1036 +#: ../../include/text.php:1040 msgid "prodded" msgstr "" -#: ../../include/text.php:1037 +#: ../../include/text.php:1041 msgid "slap" msgstr "" -#: ../../include/text.php:1037 +#: ../../include/text.php:1041 msgid "slapped" msgstr "" -#: ../../include/text.php:1038 +#: ../../include/text.php:1042 msgid "finger" msgstr "" -#: ../../include/text.php:1038 +#: ../../include/text.php:1042 msgid "fingered" msgstr "" -#: ../../include/text.php:1039 +#: ../../include/text.php:1043 msgid "rebuff" msgstr "" -#: ../../include/text.php:1039 +#: ../../include/text.php:1043 msgid "rebuffed" msgstr "" -#: ../../include/text.php:1051 +#: ../../include/text.php:1055 msgid "happy" msgstr "" -#: ../../include/text.php:1052 +#: ../../include/text.php:1056 msgid "sad" msgstr "" -#: ../../include/text.php:1053 +#: ../../include/text.php:1057 msgid "mellow" msgstr "" -#: ../../include/text.php:1054 +#: ../../include/text.php:1058 msgid "tired" msgstr "" -#: ../../include/text.php:1055 +#: ../../include/text.php:1059 msgid "perky" msgstr "" -#: ../../include/text.php:1056 +#: ../../include/text.php:1060 msgid "angry" msgstr "" -#: ../../include/text.php:1057 +#: ../../include/text.php:1061 msgid "stupefied" msgstr "" -#: ../../include/text.php:1058 +#: ../../include/text.php:1062 msgid "puzzled" msgstr "" -#: ../../include/text.php:1059 +#: ../../include/text.php:1063 msgid "interested" msgstr "" -#: ../../include/text.php:1060 +#: ../../include/text.php:1064 msgid "bitter" msgstr "" -#: ../../include/text.php:1061 +#: ../../include/text.php:1065 msgid "cheerful" msgstr "" -#: ../../include/text.php:1062 +#: ../../include/text.php:1066 msgid "alive" msgstr "" -#: ../../include/text.php:1063 +#: ../../include/text.php:1067 msgid "annoyed" msgstr "" -#: ../../include/text.php:1064 +#: ../../include/text.php:1068 msgid "anxious" msgstr "" -#: ../../include/text.php:1065 +#: ../../include/text.php:1069 msgid "cranky" msgstr "" -#: ../../include/text.php:1066 +#: ../../include/text.php:1070 msgid "disturbed" msgstr "" -#: ../../include/text.php:1067 +#: ../../include/text.php:1071 msgid "frustrated" msgstr "" -#: ../../include/text.php:1068 +#: ../../include/text.php:1072 msgid "depressed" msgstr "" -#: ../../include/text.php:1069 +#: ../../include/text.php:1073 msgid "motivated" msgstr "" -#: ../../include/text.php:1070 +#: ../../include/text.php:1074 msgid "relaxed" msgstr "" -#: ../../include/text.php:1071 +#: ../../include/text.php:1075 msgid "surprised" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:70 +#: ../../include/text.php:1242 ../../include/js_strings.php:70 msgid "Monday" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:71 +#: ../../include/text.php:1242 ../../include/js_strings.php:71 msgid "Tuesday" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:72 +#: ../../include/text.php:1242 ../../include/js_strings.php:72 msgid "Wednesday" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:73 +#: ../../include/text.php:1242 ../../include/js_strings.php:73 msgid "Thursday" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:74 +#: ../../include/text.php:1242 ../../include/js_strings.php:74 msgid "Friday" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:75 +#: ../../include/text.php:1242 ../../include/js_strings.php:75 msgid "Saturday" msgstr "" -#: ../../include/text.php:1238 ../../include/js_strings.php:69 +#: ../../include/text.php:1242 ../../include/js_strings.php:69 msgid "Sunday" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:45 +#: ../../include/text.php:1246 ../../include/js_strings.php:45 msgid "January" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:46 +#: ../../include/text.php:1246 ../../include/js_strings.php:46 msgid "February" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:47 +#: ../../include/text.php:1246 ../../include/js_strings.php:47 msgid "March" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:48 +#: ../../include/text.php:1246 ../../include/js_strings.php:48 msgid "April" msgstr "" -#: ../../include/text.php:1242 +#: ../../include/text.php:1246 msgid "May" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:50 +#: ../../include/text.php:1246 ../../include/js_strings.php:50 msgid "June" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:51 +#: ../../include/text.php:1246 ../../include/js_strings.php:51 msgid "July" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:52 +#: ../../include/text.php:1246 ../../include/js_strings.php:52 msgid "August" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:53 +#: ../../include/text.php:1246 ../../include/js_strings.php:53 msgid "September" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:54 +#: ../../include/text.php:1246 ../../include/js_strings.php:54 msgid "October" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:55 +#: ../../include/text.php:1246 ../../include/js_strings.php:55 msgid "November" msgstr "" -#: ../../include/text.php:1242 ../../include/js_strings.php:56 +#: ../../include/text.php:1246 ../../include/js_strings.php:56 msgid "December" msgstr "" -#: ../../include/text.php:1319 ../../include/text.php:1323 +#: ../../include/text.php:1323 ../../include/text.php:1327 msgid "Unknown Attachment" msgstr "" -#: ../../include/text.php:1325 +#: ../../include/text.php:1329 msgid "unknown" msgstr "" -#: ../../include/text.php:1361 +#: ../../include/text.php:1365 msgid "remove category" msgstr "" -#: ../../include/text.php:1438 +#: ../../include/text.php:1442 msgid "remove from file" msgstr "" -#: ../../include/text.php:1765 ../../include/text.php:1836 +#: ../../include/text.php:1738 ../../include/text.php:1809 msgid "default" msgstr "" -#: ../../include/text.php:1773 +#: ../../include/text.php:1746 msgid "Page layout" msgstr "" -#: ../../include/text.php:1773 +#: ../../include/text.php:1746 msgid "You can create your own with the layouts tool" msgstr "" -#: ../../include/text.php:1815 +#: ../../include/text.php:1788 msgid "Page content type" msgstr "" -#: ../../include/text.php:1848 +#: ../../include/text.php:1821 msgid "Select an alternate language" msgstr "" -#: ../../include/text.php:1965 +#: ../../include/text.php:1938 msgid "activity" msgstr "" -#: ../../include/text.php:2274 +#: ../../include/text.php:2247 msgid "Design Tools" msgstr "" -#: ../../include/text.php:2280 +#: ../../include/text.php:2253 msgid "Pages" msgstr "" -#: ../../include/zot.php:701 +#: ../../include/zot.php:699 msgid "Invalid data packet" msgstr "" -#: ../../include/zot.php:717 +#: ../../include/zot.php:715 msgid "Unable to verify channel signature" msgstr "" @@ -9086,7 +9088,7 @@ msgstr "" msgid "Unable to verify site signature for %s" msgstr "" -#: ../../include/zot.php:3700 +#: ../../include/zot.php:3712 msgid "invalid target signature" msgstr "" @@ -9442,53 +9444,6 @@ msgstr "" msgid "%1$s has an updated %2$s, changing %3$s." msgstr "" -#: ../../include/bbcode.php:123 ../../include/bbcode.php:844 -#: ../../include/bbcode.php:847 ../../include/bbcode.php:852 -#: ../../include/bbcode.php:855 ../../include/bbcode.php:858 -#: ../../include/bbcode.php:861 ../../include/bbcode.php:866 -#: ../../include/bbcode.php:869 ../../include/bbcode.php:874 -#: ../../include/bbcode.php:877 ../../include/bbcode.php:880 -#: ../../include/bbcode.php:883 -msgid "Image/photo" -msgstr "" - -#: ../../include/bbcode.php:162 ../../include/bbcode.php:894 -msgid "Encrypted content" -msgstr "" - -#: ../../include/bbcode.php:178 -#, php-format -msgid "Install %s element: " -msgstr "" - -#: ../../include/bbcode.php:182 -#, php-format -msgid "" -"This post contains an installable %s element, however you lack permissions " -"to install it on this site." -msgstr "" - -#: ../../include/bbcode.php:254 -#, php-format -msgid "%1$s wrote the following %2$s %3$s" -msgstr "" - -#: ../../include/bbcode.php:331 ../../include/bbcode.php:339 -msgid "Click to open/close" -msgstr "" - -#: ../../include/bbcode.php:339 -msgid "spoiler" -msgstr "" - -#: ../../include/bbcode.php:582 -msgid "Different viewers will see this text differently" -msgstr "" - -#: ../../include/bbcode.php:832 -msgid "$1 wrote:" -msgstr "" - #: ../../include/dir_fns.php:141 msgid "Directory Options" msgstr "" @@ -9797,62 +9752,62 @@ msgstr "" msgid "Set size of followup author photos" msgstr "" -#: ../../boot.php:1160 +#: ../../boot.php:1161 #, php-format msgctxt "opensearch" msgid "Search %1$s (%2$s)" msgstr "" -#: ../../boot.php:1160 +#: ../../boot.php:1161 msgctxt "opensearch" msgid "$Projectname" msgstr "" -#: ../../boot.php:1472 +#: ../../boot.php:1473 #, php-format msgid "Update %s failed. See error logs." msgstr "" -#: ../../boot.php:1475 +#: ../../boot.php:1476 #, php-format msgid "Update Error at %s" msgstr "" -#: ../../boot.php:1675 +#: ../../boot.php:1676 msgid "" "Create an account to access services and applications within the Hubzilla" msgstr "" -#: ../../boot.php:1697 +#: ../../boot.php:1698 msgid "Password" msgstr "" -#: ../../boot.php:1698 +#: ../../boot.php:1699 msgid "Remember me" msgstr "" -#: ../../boot.php:1701 +#: ../../boot.php:1702 msgid "Forgot your password?" msgstr "" -#: ../../boot.php:2267 +#: ../../boot.php:2268 msgid "toggle mobile" msgstr "" -#: ../../boot.php:2416 +#: ../../boot.php:2417 msgid "Website SSL certificate is not valid. Please correct." msgstr "" -#: ../../boot.php:2419 +#: ../../boot.php:2420 #, php-format msgid "[hubzilla] Website SSL error for %s" msgstr "" -#: ../../boot.php:2460 +#: ../../boot.php:2461 msgid "Cron/Scheduled tasks not running." msgstr "" -#: ../../boot.php:2464 +#: ../../boot.php:2465 #, php-format msgid "[hubzilla] Cron tasks not running on %s" msgstr "" From 624f4641e2a8af91f519ac47ba1c72138734b17c Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 15:09:58 -0700 Subject: [PATCH 12/19] missed an object -> obj conversion in prepare_body --- include/text.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/text.php b/include/text.php index 834eec920..72db9c5ea 100644 --- a/include/text.php +++ b/include/text.php @@ -1473,7 +1473,7 @@ function prepare_body(&$item,$attach = false) { if($is_photo) { - $object = json_decode($item['object'],true); + $object = json_decode($item['obj'],true); // if original photo width is <= 640px prepend it to item body if($object['link'][0]['width'] && $object['link'][0]['width'] <= 640) { From e81ac9e0637c4533aeb144511b8f68ec8a99e257 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 16:04:54 -0700 Subject: [PATCH 13/19] turn emoji ability into a feature so that either a member or the site admin can disable it. Default is enabled. --- Zotlabs/Lib/ThreadItem.php | 1 + include/features.php | 1 + view/tpl/conv_item.tpl | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Zotlabs/Lib/ThreadItem.php b/Zotlabs/Lib/ThreadItem.php index 0ba0c0a13..65f00b867 100644 --- a/Zotlabs/Lib/ThreadItem.php +++ b/Zotlabs/Lib/ThreadItem.php @@ -347,6 +347,7 @@ class ThreadItem { 'has_tags' => $has_tags, // Item toolbar buttons + 'emojis' => (($this->is_toplevel() && $this->is_commentable() && feature_enabled($conv->get_profile_owner(),'emojis')) ? '1' : ''), 'like' => $like, 'dislike' => ((feature_enabled($conv->get_profile_owner(),'dislike')) ? $dislike : ''), 'share' => $share, diff --git a/include/features.php b/include/features.php index 38700f9f5..6d38bcfb4 100644 --- a/include/features.php +++ b/include/features.php @@ -94,6 +94,7 @@ function get_features($filtered = true) { t('Post/Comment Tools'), array('commtag', t('Community Tagging'), t('Ability to tag existing posts'),false,get_config('feature_lock','commtag')), array('categories', t('Post Categories'), t('Add categories to your posts'),false,get_config('feature_lock','categories')), + array('emojis', t('Emoji Reactions'), t('Add emoji reaction ability to posts'),true,get_config('feature_lock','emojis')), array('filing', t('Saved Folders'), t('Ability to file posts under folders'),false,get_config('feature_lock','filing')), array('dislike', t('Dislike Posts'), t('Ability to dislike posts/comments'),false,get_config('feature_lock','dislike')), array('star_posts', t('Star Posts'), t('Ability to mark special posts with a star indicator'),false,get_config('feature_lock','star_posts')), diff --git a/view/tpl/conv_item.tpl b/view/tpl/conv_item.tpl index 997c27259..662eeaf97 100755 --- a/view/tpl/conv_item.tpl +++ b/view/tpl/conv_item.tpl @@ -79,7 +79,7 @@ {{/if}}
- {{if $item.toplevel && $item.like}} + {{if $item.toplevel && $item.emojis}} {{/if}} From 1877df0e703489d44119cddf05621570a71d5bd5 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 18:39:11 -0700 Subject: [PATCH 15/19] missed table rename in event query in mod_manage --- Zotlabs/Module/Manage.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Zotlabs/Module/Manage.php b/Zotlabs/Module/Manage.php index 5ae79dbb2..4ca044c4a 100644 --- a/Zotlabs/Module/Manage.php +++ b/Zotlabs/Module/Manage.php @@ -93,9 +93,9 @@ class Manage extends \Zotlabs\Web\Controller { $channels[$x]['mail'] = intval($mails[0]['total']); - $events = q("SELECT type, start, adjust FROM `event` - WHERE `event`.`uid` = %d AND start < '%s' AND start > '%s' and `ignore` = 0 - ORDER BY `start` ASC ", + $events = q("SELECT etype, dtstart, adjust FROM `event` + WHERE `event`.`uid` = %d AND dtstart < '%s' AND dtstart > '%s' and `dismissed` = 0 + ORDER BY `dtstart` ASC ", intval($channels[$x]['channel_id']), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now + 7 days')), dbesc(datetime_convert('UTC', date_default_timezone_get(), 'now - 1 days')) @@ -108,14 +108,14 @@ class Manage extends \Zotlabs\Web\Controller { $str_now = datetime_convert('UTC', date_default_timezone_get(), 'now', 'Y-m-d'); foreach($events as $e) { $bd = false; - if($e['type'] === 'birthday') { + if($e['etype'] === 'birthday') { $channels[$x]['birthdays'] ++; $bd = true; } else { $channels[$x]['events'] ++; } - if(datetime_convert('UTC', ((intval($e['adjust'])) ? date_default_timezone_get() : 'UTC'), $e['start'], 'Y-m-d') === $str_now) { + if(datetime_convert('UTC', ((intval($e['adjust'])) ? date_default_timezone_get() : 'UTC'), $e['dtstart'], 'Y-m-d') === $str_now) { $channels[$x]['all_events_today'] ++; if($bd) $channels[$x]['birthdays_today'] ++; From af4352adf28ed56187a53b739098e78f423cb920 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 18:46:59 -0700 Subject: [PATCH 16/19] need to set item_origin on locally created reactions so they propagate properly --- Zotlabs/Module/React.php | 1 + 1 file changed, 1 insertion(+) diff --git a/Zotlabs/Module/React.php b/Zotlabs/Module/React.php index 85a1e2350..28c7c239c 100644 --- a/Zotlabs/Module/React.php +++ b/Zotlabs/Module/React.php @@ -30,6 +30,7 @@ class React extends \Zotlabs\Web\Controller { $n = array(); $n['aid'] = $channel['channel_account_id']; $n['uid'] = $channel['channel_id']; + $n['item_origin'] = true; $n['parent'] = $postid; $n['parent_mid'] = $i[0]['mid']; $n['mid'] = item_message_id(); From 0333dca550945ae4323bf7d361813e55e03c5d83 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 19:46:48 -0700 Subject: [PATCH 17/19] App::init() should be static --- boot.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boot.php b/boot.php index 16c5fed11..26bebe8f8 100755 --- a/boot.php +++ b/boot.php @@ -866,7 +866,7 @@ class App { /** * App constructor. */ - function init() { + public static function init() { // we'll reset this after we read our config file date_default_timezone_set('UTC'); From 20a79c7acf1850f431f4fd52972ea0b6acf8ce0c Mon Sep 17 00:00:00 2001 From: redmatrix Date: Fri, 3 Jun 2016 22:00:53 -0700 Subject: [PATCH 18/19] allow bbcode emojis (at least the single unicode character forms) --- include/bbcode.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/include/bbcode.php b/include/bbcode.php index 42741b392..ed332146f 100644 --- a/include/bbcode.php +++ b/include/bbcode.php @@ -66,6 +66,19 @@ function bb_unspacefy_and_trim($st) { } +function bb_emoji($mtch) { + $s = strtolower($mtch[1]); + if(strpos($s,'x')) { + $e = substr($s,strpos($s,'x')+1); + if(file_exists('images/emoji/' . $e . '.png')) { + return 'emoji'; + } + else { + return $mtch[0]; + } + } +} + function bb_extract_images($body) { $saved_image = array(); @@ -1001,6 +1014,7 @@ function bbcode($Text, $preserve_nl = false, $tryoembed = true, $cache = false) $Text = preg_replace_callback("/\[pre\](.*?)\[\/pre\]/ism", 'bb_unspacefy_and_trim', $Text); } + $Text = preg_replace_callback('/\[\&\;([#a-z0-9]+)\;\]/', 'bb_emoji', $Text); $Text = preg_replace('/\[\&\;([#a-z0-9]+)\;\]/', '&$1;', $Text); // fix any escaped ampersands that may have been converted into links From b84f7cd37fdad61e04878580645cab8c53c666f4 Mon Sep 17 00:00:00 2001 From: redmatrix Date: Sat, 4 Jun 2016 03:32:03 -0700 Subject: [PATCH 19/19] class functions called incorrectly --- Zotlabs/Module/Admin.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Zotlabs/Module/Admin.php b/Zotlabs/Module/Admin.php index 4cabd78ca..b2c6baf1d 100644 --- a/Zotlabs/Module/Admin.php +++ b/Zotlabs/Module/Admin.php @@ -1547,8 +1547,8 @@ class Admin extends \Zotlabs\Web\Controller { // Toggle theme status - toggle_theme($themes, $theme, $result); - $s = rebuild_theme_table($themes); + $this->toggle_theme($themes, $theme, $result); + $s = $this->rebuild_theme_table($themes); if($result) info( sprintf('Theme %s enabled.', $theme)); else @@ -1561,7 +1561,7 @@ class Admin extends \Zotlabs\Web\Controller { // display theme details require_once('library/markdown.php'); - if (theme_status($themes,$theme)) { + if ($this->theme_status($themes,$theme)) { $status="on"; $action= t("Disable"); } else { $status="off"; $action= t("Enable");