diff --git a/appnet/appnet.php b/appnet/appnet.php index bbcf9208..a672e065 100644 --- a/appnet/appnet.php +++ b/appnet/appnet.php @@ -15,8 +15,6 @@ - https://alpha.app.net/opendev/post/34396399 - location data */ -require_once('include/enotify.php'); - define('APPNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes function appnet_install() { @@ -27,7 +25,6 @@ function appnet_install() { register_hook('connector_settings', 'addon/appnet/appnet.php', 'appnet_settings'); register_hook('connector_settings_post','addon/appnet/appnet.php', 'appnet_settings_post'); register_hook('prepare_body', 'addon/appnet/appnet.php', 'appnet_prepare_body'); - register_hook('check_item_notification','addon/appnet/appnet.php', 'appnet_check_item_notification'); } @@ -39,7 +36,6 @@ function appnet_uninstall() { unregister_hook('connector_settings', 'addon/appnet/appnet.php', 'appnet_settings'); unregister_hook('connector_settings_post', 'addon/appnet/appnet.php', 'appnet_settings_post'); unregister_hook('prepare_body', 'addon/appnet/appnet.php', 'appnet_prepare_body'); - unregister_hook('check_item_notification','addon/appnet/appnet.php', 'appnet_check_item_notification'); } function appnet_module() {} @@ -68,18 +64,6 @@ function appnet_content(&$a) { return $o; } -function appnet_check_item_notification($a, &$notification_data) { - $own_id = get_pconfig($notification_data["uid"], 'appnet', 'ownid'); - - $own_user = q("SELECT `url` FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1", - intval($notification_data["uid"]), - dbesc("adn::".$own_id) - ); - - if ($own_user) - $notification_data["profiles"][] = $own_user[0]["url"]; -} - function appnet_plugin_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/appnet/" ); @@ -723,7 +707,7 @@ function appnet_fetchstream($a, $uid) { $lastid = $post["id"]; - if (($item != 0) AND ($postarray['contact-id'] != $me["id"]) AND !function_exists("check_item_notification")) { + if (($item != 0) AND ($postarray['contact-id'] != $me["id"])) { $r = q("SELECT `thread`.`iid` AS `parent` FROM `thread` INNER JOIN `item` ON `thread`.`iid` = `item`.`parent` AND `thread`.`uid` = `item`.`uid` WHERE `item`.`id` = %d AND `thread`.`mention` LIMIT 1", dbesc($item)); @@ -785,10 +769,6 @@ function appnet_fetchstream($a, $uid) { $parent_id = 0; logger('appnet_fetchstream: User '.$uid.' posted mention item '.$item); - - if ($item AND function_exists("check_item_notification")) - check_item_notification($item, $uid, NOTIFY_TAGSELF); - } else { $item = 0; $parent_id = 0; @@ -810,7 +790,7 @@ function appnet_fetchstream($a, $uid) { $lastid = $post["id"]; //if (($item != 0) AND ($postarray['contact-id'] != $me["id"])) { - if (($item != 0) AND !function_exists("check_item_notification")) { + if ($item != 0) { require_once('include/enotify.php'); notification(array( 'type' => NOTIFY_TAGSELF, diff --git a/curweather/curweather.php b/curweather/curweather.php index e28cc2b3..e416ba67 100644 --- a/curweather/curweather.php +++ b/curweather/curweather.php @@ -173,7 +173,7 @@ function curweather_plugin_settings(&$a,&$s) { '$noappidtext' => $noappidtext, '$info' => t('Enter either the name of your location or the zip code.'), '$curweather_loc' => array( 'curweather_loc', t('Your Location'), $curweather_loc, t('Identifier of your location (name or zip code), e.g. Berlin,DE or 14476,DE.') ), - '$curweather_units' => array( 'curweather_units', t('Units'), $curweather_units, t('select if the temperatur should be displayed in °C or °F'), array('metric'=>'°C', 'imperial'=>'°F')), + '$curweather_units' => array( 'curweather_units', t('Units'), $curweather_units, t('select if the temperatur should be displayed in °C or °F'), array('metric'=>'°C', 'imperial'=>'°F')), '$enabled' => array( 'curweather_enable', t('Show weather data'), $enable, '') )); return; diff --git a/curweather/lang/C/messages.po b/curweather/lang/C/messages.po index b2ed6e5e..cee9c343 100644 --- a/curweather/lang/C/messages.po +++ b/curweather/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-07-13 18:46+0200\n" +"POT-Creation-Date: 2016-03-12 08:10+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,114 +17,114 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: curweather.php:30 +#: curweather.php:31 msgid "Error fetching weather data.\\nError was: " msgstr "" -#: curweather.php:103 curweather.php:163 +#: curweather.php:111 curweather.php:172 msgid "Current Weather" msgstr "" -#: curweather.php:109 +#: curweather.php:118 msgid "Relative Humidity" msgstr "" -#: curweather.php:110 +#: curweather.php:119 msgid "Pressure" msgstr "" -#: curweather.php:111 +#: curweather.php:120 msgid "Wind" msgstr "" -#: curweather.php:112 +#: curweather.php:121 msgid "Last Updated" msgstr "" -#: curweather.php:113 +#: curweather.php:122 msgid "Data by" msgstr "" -#: curweather.php:114 +#: curweather.php:123 msgid "Show on map" msgstr "" -#: curweather.php:119 +#: curweather.php:128 msgid "There was a problem accessing the weather data. But have a look" msgstr "" -#: curweather.php:121 +#: curweather.php:130 msgid "at OpenWeatherMap" msgstr "" -#: curweather.php:137 +#: curweather.php:146 msgid "Current Weather settings updated." msgstr "" -#: curweather.php:152 +#: curweather.php:161 msgid "No APPID found, please contact your admin to optain one." msgstr "" -#: curweather.php:162 curweather.php:191 +#: curweather.php:171 curweather.php:200 msgid "Save Settings" msgstr "" -#: curweather.php:163 +#: curweather.php:172 msgid "Settings" msgstr "" -#: curweather.php:165 +#: curweather.php:174 msgid "Enter either the name of your location or the zip code." msgstr "" -#: curweather.php:166 +#: curweather.php:175 msgid "Your Location" msgstr "" -#: curweather.php:166 +#: curweather.php:175 msgid "" "Identifier of your location (name or zip code), e.g. Berlin,DE or " "14476,DE." msgstr "" -#: curweather.php:167 +#: curweather.php:176 msgid "Units" msgstr "" -#: curweather.php:167 -msgid "select if the temperatur should be displayed in °C or °F" +#: curweather.php:176 +msgid "select if the temperatur should be displayed in °C or °F" msgstr "" -#: curweather.php:168 +#: curweather.php:177 msgid "Show weather data" msgstr "" -#: curweather.php:181 +#: curweather.php:190 msgid "Curweather settings saved." msgstr "" -#: curweather.php:192 +#: curweather.php:201 msgid "Caching Interval" msgstr "" -#: curweather.php:192 +#: curweather.php:201 msgid "" "For how long should the weather data be cached? Choose according your " "OpenWeatherMap account type." msgstr "" -#: curweather.php:192 +#: curweather.php:201 msgid "no cache" msgstr "" -#: curweather.php:192 +#: curweather.php:201 msgid "minutes" msgstr "" -#: curweather.php:193 +#: curweather.php:202 msgid "Your APPID" msgstr "" -#: curweather.php:193 +#: curweather.php:202 msgid "Your API key provided by OpenWeatherMap" msgstr "" diff --git a/defaultfeatures/defaultfeatures.php b/defaultfeatures/defaultfeatures.php index c92547d8..dfe4a067 100755 --- a/defaultfeatures/defaultfeatures.php +++ b/defaultfeatures/defaultfeatures.php @@ -4,7 +4,6 @@ * Description: Choose which Additional Features are on by default for new users on the site. * Version: 1.0 * Author: Michael Johnston - * Status: Unsupported */ function defaultfeatures_install() { diff --git a/jappixmini.tgz b/jappixmini.tgz deleted file mode 100644 index 676f1472..00000000 Binary files a/jappixmini.tgz and /dev/null differ diff --git a/ldapauth/ldapauth.php b/ldapauth/ldapauth.php index 60273c3b..55c855af 100755 --- a/ldapauth/ldapauth.php +++ b/ldapauth/ldapauth.php @@ -47,7 +47,7 @@ * // attribute to get email - optional - default : 'mail' * $a->config['ldapauth']['ldap_autocreateaccount_emailattribute'] = 'mail'; * // attribute to get nickname - optional - default : 'givenName' - * $a->config['ldapauth']['ldap_autocreateaccount_nameattribute'] = 'cn'; + * $a->config['ldapauth']['ldap_autocreateaccount_nameattribute'] = 'givenName'; * * ...etc. */ @@ -90,29 +90,23 @@ function ldapauth_authenticate($username,$password) { if(! ((strlen($password)) && (function_exists('ldap_connect')) - && (strlen($ldap_server)))) { - logger("ldapauth: not configured or missing php-ldap module"); + && (strlen($ldap_server)))) return false; - } $connect = @ldap_connect($ldap_server); - if($connect === false) { - logger("ldapauth: could not connect to $ldap_server"); + if(! $connect) return false; - } @ldap_set_option($connect, LDAP_OPT_PROTOCOL_VERSION,3); @ldap_set_option($connect, LDAP_OPT_REFERRALS, 0); if((@ldap_bind($connect,$ldap_binddn,$ldap_bindpw)) === false) { - logger("ldapauth: could not bind $ldap_server as $ldap_binddn"); return false; } $res = @ldap_search($connect,$ldap_searchdn, $ldap_userattr . '=' . $username); if(! $res) { - logger("ldapauth: $ldap_userattr=$username,$ldap_searchdn not found"); return false; } diff --git a/mailstream/mailstream.php b/mailstream/mailstream.php index 02a1192b..5e476784 100644 --- a/mailstream/mailstream.php +++ b/mailstream/mailstream.php @@ -2,60 +2,46 @@ /** * Name: Mail Stream * Description: Mail all items coming into your network feed to an email address - * Version: 1.0 + * Version: 0.2 * Author: Matthew Exon */ function mailstream_install() { register_hook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); register_hook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); - register_hook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - register_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); + register_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); register_hook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); + $schema = file_get_contents(dirname(__file__).'/database.sql'); + $arr = explode(';', $schema); + foreach ($arr as $a) { + $r = q($a); + } + if (get_config('mailstream', 'dbversion') == '0.1') { q('ALTER TABLE `mailstream_item` DROP INDEX `uid`'); q('ALTER TABLE `mailstream_item` DROP INDEX `contact-id`'); q('ALTER TABLE `mailstream_item` DROP INDEX `plink`'); q('ALTER TABLE `mailstream_item` CHANGE `plink` `uri` char(255) NOT NULL'); - set_config('mailstream', 'dbversion', '0.2'); } if (get_config('mailstream', 'dbversion') == '0.2') { q('DELETE FROM `pconfig` WHERE `cat` = "mailstream" AND `k` = "delay"'); - set_config('mailstream', 'dbversion', '0.3'); } if (get_config('mailstream', 'dbversion') == '0.3') { q('ALTER TABLE `mailstream_item` CHANGE `created` `created` timestamp NOT NULL DEFAULT now()'); q('ALTER TABLE `mailstream_item` CHANGE `completed` `completed` timestamp NULL DEFAULT NULL'); - set_config('mailstream', 'dbversion', '0.4'); } if (get_config('mailstream', 'dbversion') == '0.4') { q('ALTER TABLE `mailstream_item` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin'); - set_config('mailstream', 'dbversion', '0.5'); - } - if (get_config('mailstream', 'dbversion') == '0.5') { - set_config('mailstream', 'dbversion', '1.0'); - } - - if (get_config('retriever', 'dbversion') != '1.0') { - $schema = file_get_contents(dirname(__file__).'/database.sql'); - $arr = explode(';', $schema); - foreach ($arr as $a) { - $r = q($a); - } - set_config('mailstream', 'dbversion', '1.0'); } + set_config('mailstream', 'dbversion', '0.5'); } function mailstream_uninstall() { unregister_hook('plugin_settings', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings'); unregister_hook('plugin_settings_post', 'addon/mailstream/mailstream.php', 'mailstream_plugin_settings_post'); - unregister_hook('post_local', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); unregister_hook('post_remote', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); - unregister_hook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_local_hook'); unregister_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_remote_hook'); - unregister_hook('post_local_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); - unregister_hook('post_remote_end', 'addon/mailstream/mailstream.php', 'mailstream_post_hook'); unregister_hook('cron', 'addon/mailstream/mailstream.php', 'mailstream_cron'); unregister_hook('incoming_mail', 'addon/mailstream/mailstream.php', 'mailstream_incoming_mail'); } @@ -84,12 +70,10 @@ function mailstream_generate_id($a, $uri) { // http://www.jwz.org/doc/mid.html $host = $a->get_hostname(); $resource = hash('md5', $uri); - $message_id = "<" . $resource . "@" . $host . ">"; - logger('mailstream: Generated message ID ' . $message_id . ' for URI ' . $uri, LOGGER_DEBUG); - return $message_id; + return "<" . $resource . "@" . $host . ">"; } -function mailstream_post_hook(&$a, &$item) { +function mailstream_post_remote_hook(&$a, &$item) { if (!get_pconfig($item['uid'], 'mailstream', 'enabled')) { return; } @@ -102,16 +86,10 @@ function mailstream_post_hook(&$a, &$item) { if (!$item['uri']) { return; } - if (get_pconfig($item['uid'], 'mailstream', 'nolikes')) { - if ($item['verb'] == ACTIVITY_LIKE) { - return; - } - } - $message_id = mailstream_generate_id($a, $item['uri']); q("INSERT INTO `mailstream_item` (`uid`, `contact-id`, `uri`, `message-id`) " . "VALUES (%d, '%s', '%s', '%s')", intval($item['uid']), - intval($item['contact-id']), dbesc($item['uri']), dbesc($message_id)); + intval($item['contact-id']), dbesc($item['uri']), dbesc(mailstream_generate_id($a, $item['uri']))); $r = q('SELECT * FROM `mailstream_item` WHERE `uid` = %d AND `contact-id` = %d AND `uri` = "%s"', intval($item['uid']), intval($item['contact-id']), dbesc($item['uri'])); if (count($r) != 1) { logger('mailstream_post_remote_hook: Unexpected number of items returned from mailstream_item', LOGGER_NORMAL); @@ -126,7 +104,7 @@ function mailstream_post_hook(&$a, &$item) { logger('mailstream_post_remote_hook: no user ' . $item['uid'], LOGGER_NORMAL); return; } - mailstream_send($a, $ms_item['message-id'], $item, $user); + mailstream_send($a, $ms_item, $item, $user); } function mailstream_get_user($uid) { @@ -139,67 +117,39 @@ function mailstream_get_user($uid) { } function mailstream_do_images($a, &$item, &$attachments) { - if (!get_pconfig($item['uid'], 'mailstream', 'attachimg')) { - return; - } - $attachments = array(); $baseurl = $a->get_baseurl(); - preg_match_all("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", $item["body"], $matches1); - preg_match_all("/\[img\](.*?)\[\/img\]/ism", $item["body"], $matches2); - foreach (array_merge($matches1[3], $matches2[1]) as $url) { - $redirects; - $cookiejar = tempnam(get_temppath(), 'cookiejar-mailstream-'); - $attachments[$url] = array( - 'data' => fetch_url($url, true, $redirects, 0, Null, $cookiejar), - 'guid' => hash("crc32", $url), - 'filename' => basename($url), - 'type' => $a->get_curl_content_type()); - if (strlen($attachments[$url]['data'])) { + $id = 1; + $matches = array(); + preg_match_all("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", $item["body"], $matches); + if (count($matches)) { + foreach ($matches[3] as $url) { + $attachments[$url] = array(); + } + } + preg_match_all("/\[img\](.*?)\[\/img\]/ism", $item["body"], $matches); + if (count($matches)) { + foreach ($matches[1] as $url) { + $attachments[$url] = array(); + } + } + foreach ($attachments as $url=>$cid) { + if (strncmp($url, $baseurl, strlen($baseurl))) { + unset($attachments[$url]); // Not a local image, don't replace + } + else { + $attachments[$url]['guid'] = substr($url, strlen($baseurl) + strlen('/photo/')); + $r = q("SELECT `data`, `filename`, `type` FROM `photo` WHERE `resource-id` = '%s'", dbesc($attachments[$url]['guid'])); + $attachments[$url]['data'] = $r[0]['data']; + $attachments[$url]['filename'] = $r[0]['filename']; + $attachments[$url]['type'] = $r[0]['type']; $item['body'] = str_replace($url, 'cid:' . $attachments[$url]['guid'], $item['body']); - continue; } } - return $attachments; -} - -function mailstream_sender($item) { - $r = q('SELECT * FROM `contact` WHERE `id` = %d', $item['contact-id']); - if (count($r)) { - $contact = $r[0]; - if ($contact['name'] != $item['author-name']) { - return $contact['name'] . ' - ' . $item['author-name']; - } - } - return $item['author-name']; -} - -function mailstream_decode_subject($subject) { - $html = bbcode($subject); - if (!$html) { - return $subject; - } - $notags = strip_tags($html); - if (!$notags) { - return $subject; - } - $noentity = html_entity_decode($notags); - if (!$noentity) { - return $notags; - } - $nocodes = preg_replace_callback("/(&#[0-9]+;)/", function($m) { return mb_convert_encoding($m[1], "UTF-8", "HTML-ENTITIES"); }, $noentity); - if (!$nocodes) { - return $noentity; - } - $trimmed = trim($nocodes); - if (!$trimmed) { - return $nocodes; - } - return $trimmed; } function mailstream_subject($item) { if ($item['title']) { - return mailstream_decode_subject($item['title']); + return $item['title']; } $parent = $item['thr-parent']; // Don't look more than 100 levels deep for a subject, in case of loops @@ -212,7 +162,7 @@ function mailstream_subject($item) { break; } if ($r[0]['title']) { - return t('Re:') . ' ' . mailstream_decode_subject($r[0]['title']); + return t('Re:') . ' ' . $r[0]['title']; } $parent = $r[0]['thr-parent']; } @@ -226,10 +176,7 @@ function mailstream_subject($item) { return t("Diaspora post"); } if ($contact['network'] === 'face') { - $text = mailstream_decode_subject($item['body']); - // For some reason these do show up in Facebook - $text = preg_replace('/\xA0$/', '', $text); - $subject = (strlen($text) > 150) ? (substr($text, 0, 140) . '...') : $text; + $subject = (strlen($item['body']) > 150) ? (substr($item['body'], 0, 140) . '...') : $item['body']; return preg_replace('/\\s+/', ' ', $subject); } if ($contact['network'] === 'feed') { @@ -241,13 +188,10 @@ function mailstream_subject($item) { return t("Friendica Item"); } -function mailstream_send($a, $message_id, $item, $user) { +function mailstream_send($a, $ms_item, $item, $user) { if (!$item['visible']) { return; } - if (!$message_id) { - return; - } require_once(dirname(__file__).'/class.phpmailer.php'); require_once('include/bbcode.php'); $attachments = array(); @@ -263,9 +207,9 @@ function mailstream_send($a, $message_id, $item, $user) { $mail = new PHPmailer; try { $mail->XMailer = 'Friendica Mailstream Plugin'; - $mail->SetFrom($frommail, mailstream_sender($item)); + $mail->SetFrom($frommail, $item['author-name']); $mail->AddAddress($address, $user['username']); - $mail->MessageID = $message_id; + $mail->MessageID = $ms_item['message-id']; $mail->Subject = mailstream_subject($item); if ($item['thr-parent'] != $item['uri']) { $mail->addCustomHeader('In-Reply-To: ' . mailstream_generate_id($a, $item['thr-parent'])); @@ -273,7 +217,7 @@ function mailstream_send($a, $message_id, $item, $user) { $mail->addCustomHeader('X-Friendica-Mailstream-URI: ' . $item['uri']); $mail->addCustomHeader('X-Friendica-Mailstream-Plink: ' . $item['plink']); $encoding = 'base64'; - foreach ($attachments as $url => $image) { + foreach ($attachments as $url=>$image) { $mail->AddStringEmbeddedImage($image['data'], $image['guid'], $image['filename'], $encoding, $image['type']); } $mail->IsHTML(true); @@ -285,59 +229,36 @@ function mailstream_send($a, $message_id, $item, $user) { '$upstream' => t('Upstream'), '$local' => t('Local'), '$item' => $item)); - mailstream_html_wrap($mail->Body); if (!$mail->Send()) { throw new Exception($mail->ErrorInfo); } logger('mailstream_send sent message ' . $mail->MessageID . ' ' . $mail->Subject, LOGGER_DEBUG); } catch (phpmailerException $e) { - logger('mailstream_send PHPMailer exception sending message ' . $message_id . ': ' . $e->errorMessage(), LOGGER_NORMAL); + logger('mailstream_send PHPMailer exception sending message ' . $ms_item['message-id'] . ': ' . $e->errorMessage(), LOGGER_NORMAL); } catch (Exception $e) { - logger('mailstream_send exception sending message ' . $message_id . ': ' . $e->getMessage(), LOGGER_NORMAL); + logger('mailstream_send exception sending message ' . $ms_item['message-id'] . ': ' . $e->getMessage(), LOGGER_NORMAL); } // In case of failure, still set the item to completed. Otherwise // we'll just try to send it over and over again and it'll fail // every time. - q('UPDATE `mailstream_item` SET `completed` = now() WHERE `message-id` = "%s"', dbesc($message_id)); -} - -/** - * Email tends to break if you send excessively long lines. To make - * bbcode's output suitable for transmission, we try to break things - * up so that lines are about 200 characters. - */ -function mailstream_html_wrap(&$text) -{ - $lines = str_split($text, 200); - for ($i = 0; $i < count($lines); $i++) - { - $lines[$i] = preg_replace('/ /', "\n", $lines[$i], 1); - } - $text = implode($lines); + q("UPDATE `mailstream_item` SET `completed` = now() WHERE `id` = %d", intval($ms_item['id'])); } function mailstream_cron($a, $b) { - // Only process items older than an hour in cron. This is because - // we want to give mailstream_post_remote_hook a fair chance to - // send the email itself before cron jumps in. Only if - // mailstream_post_remote_hook fails for some reason will this get - // used, and in that case it's worth holding off a bit anyway. - $ms_item_ids = q("SELECT `mailstream_item`.`message-id`, `mailstream_item`.`uri`, `item`.`id` FROM `mailstream_item` JOIN `item` ON (`mailstream_item`.`uid` = `item`.`uid` AND `mailstream_item`.`uri` = `item`.`uri` AND `mailstream_item`.`contact-id` = `item`.`contact-id`) WHERE `mailstream_item`.`completed` IS NULL AND `mailstream_item`.`created` < DATE_SUB(NOW(), INTERVAL 1 HOUR) AND `item`.`visible` = 1 ORDER BY `mailstream_item`.`created` LIMIT 100"); - logger('mailstream_cron processing ' . count($ms_item_ids) . ' items', LOGGER_DEBUG); - foreach ($ms_item_ids as $ms_item_id) { - if (!$ms_item_id['message-id'] || !strlen($ms_item_id['message-id'])) { - logger('mailstream_cron: Item ' . $ms_item_id['id'] . ' URI ' . $ms_item_id['uri'] . ' has no message-id', LOGGER_NORMAL); - } - $items = q('SELECT * FROM `item` WHERE `id` = %d', $ms_item_id['id']); + $ms_items = q("SELECT * FROM `mailstream_item` WHERE `completed` IS NULL LIMIT 100"); + logger('mailstream_cron processing ' . count($ms_items) . ' items', LOGGER_DEBUG); + foreach ($ms_items as $ms_item) { + $items = q("SELECT * FROM `item` WHERE `uid` = %d AND `uri` = '%s' AND `contact-id` = %d", + intval($ms_item['uid']), dbesc($ms_item['uri']), intval($ms_item['contact-id'])); $item = $items[0]; - $users = q("SELECT * FROM `user` WHERE `uid` = %d", intval($item['uid'])); + $users = q("SELECT * FROM `user` WHERE `uid` = %d", intval($ms_item['uid'])); $user = $users[0]; if ($user && $item) { - mailstream_send($a, $ms_item_id['message-id'], $item, $user); + mailstream_send($a, $ms_item, $item, $user); } else { - logger('mailstream_cron: Unable to find item ' . $ms_item_id['id'], LOGGER_NORMAL); - q("UPDATE `mailstream_item` SET `completed` = now() WHERE `message-id` = %d", intval($ms_item['message-id'])); + logger('mailstream_cron: Unable to find item ' . $ms_item['uri'], LOGGER_NORMAL); + q("UPDATE `mailstream_item` SET `completed` = now() WHERE `id` = %d", intval($ms_item['id'])); } } mailstream_tidy(); @@ -346,29 +267,17 @@ function mailstream_cron($a, $b) { function mailstream_plugin_settings(&$a,&$s) { $enabled = get_pconfig(local_user(), 'mailstream', 'enabled'); $address = get_pconfig(local_user(), 'mailstream', 'address'); - $nolikes = get_pconfig(local_user(), 'mailstream', 'nolikes'); - $attachimg= get_pconfig(local_user(), 'mailstream', 'attachimg'); $template = get_markup_template('settings.tpl', 'addon/mailstream/'); $s .= replace_macros($template, array( - '$enabled' => array( - 'mailstream_enabled', - t('Enabled'), - $enabled), '$address' => array( 'mailstream_address', t('Email Address'), $address, t("Leave blank to use your account email address")), - '$nolikes' => array( - 'mailstream_nolikes', - t('Exclude Likes'), - $nolikes, - t("Check this to omit mailing \"Like\" notifications")), - '$attachimg' => array( - 'mailstream_attachimg', - t('Attach Images'), - $attachimg, - t("Download images in posts and attach them to the email. Useful for reading email while offline.")), + '$enabled' => array( + 'mailstream_enabled', + t('Enabled'), + $enabled), '$title' => t('Mail Stream Settings'), '$submit' => t('Save Settings'))); } @@ -380,24 +289,12 @@ function mailstream_plugin_settings_post($a,$post) { else { del_pconfig(local_user(), 'mailstream', 'address'); } - if ($_POST['mailstream_nolikes']) { - set_pconfig(local_user(), 'mailstream', 'nolikes', $_POST['mailstream_enabled']); - } - else { - del_pconfig(local_user(), 'mailstream', 'nolikes'); - } if ($_POST['mailstream_enabled']) { set_pconfig(local_user(), 'mailstream', 'enabled', $_POST['mailstream_enabled']); } else { del_pconfig(local_user(), 'mailstream', 'enabled'); } - if ($_POST['mailstream_attachimg']) { - set_pconfig(local_user(), 'mailstream', 'attachimg', $_POST['mailstream_attachimg']); - } - else { - del_pconfig(local_user(), 'mailstream', 'attachimg'); - } } function mailstream_tidy() { diff --git a/mailstream/templates/settings.tpl b/mailstream/templates/settings.tpl index 37610828..bd24e38f 100644 --- a/mailstream/templates/settings.tpl +++ b/mailstream/templates/settings.tpl @@ -1,8 +1,11 @@ -
+ +

{{$title}}

+
+ diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index 1702971c..0a5f50b9 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -7,7 +7,6 @@ */ require('addon/pumpio/oauth/http.php'); require('addon/pumpio/oauth/oauth_client.php'); -require_once('include/enotify.php'); define('PUMPIO_DEFAULT_POLL_INTERVAL', 5); // given in minutes @@ -19,7 +18,6 @@ function pumpio_install() { register_hook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); register_hook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); register_hook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); - register_hook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); } function pumpio_uninstall() { @@ -30,7 +28,6 @@ function pumpio_uninstall() { unregister_hook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); unregister_hook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); unregister_hook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); - unregister_hook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); } function pumpio_module() {} @@ -60,14 +57,6 @@ function pumpio_content(&$a) { return $o; } -function pumpio_check_item_notification($a, &$notification_data) { - $hostname = get_pconfig($notification_data["uid"], 'pumpio','host'); - $username = get_pconfig($notification_data["uid"], "pumpio", "user"); - - $notification_data["profiles"][] = "https://".$hostname."/".$username; -} - - function pumpio_registerclient(&$a, $host) { $url = "https://".$host."/api/client/register"; @@ -868,19 +857,17 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = tru // Searching for the liked post // Two queries for speed issues - $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `network` = '%s' LIMIT 1", + $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($post->object->id), - intval($uid), - dbesc(NETWORK_PUMPIO) + intval($uid) ); if (count($r)) $orig_post = $r[0]; else { - $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d AND `network` = '%s' LIMIT 1", + $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", dbesc($post->object->id), - intval($uid), - dbesc(NETWORK_PUMPIO) + intval($uid) ); if (!count($r)) @@ -1319,44 +1306,42 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if (link_compare($own_id, $postarray['author-link'])) return $top_item; - if (!function_exists("check_item_notification")) { - $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0", - dbesc($postarray['parent-uri']), - intval($uid) - ); + $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 AND `deleted` = 0", + dbesc($postarray['parent-uri']), + intval($uid) + ); - if(count($myconv)) { + if(count($myconv)) { - foreach($myconv as $conv) { - // now if we find a match, it means we're in this conversation + foreach($myconv as $conv) { + // now if we find a match, it means we're in this conversation - if(!link_compare($conv['author-link'],$importer_url) AND !link_compare($conv['author-link'],$own_id)) - continue; + if(!link_compare($conv['author-link'],$importer_url) AND !link_compare($conv['author-link'],$own_id)) + continue; - require_once('include/enotify.php'); + require_once('include/enotify.php'); - $conv_parent = $conv['parent']; + $conv_parent = $conv['parent']; - notification(array( - 'type' => NOTIFY_COMMENT, - 'notify_flags' => $user[0]['notify-flags'], - 'language' => $user[0]['language'], - 'to_name' => $user[0]['username'], - 'to_email' => $user[0]['email'], - 'uid' => $user[0]['uid'], - 'item' => $postarray, - 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($top_item)), - 'source_name' => $postarray['author-name'], - 'source_link' => $postarray['author-link'], - 'source_photo' => $postarray['author-avatar'], - 'verb' => ACTIVITY_POST, - 'otype' => 'item', - 'parent' => $conv_parent, - )); + notification(array( + 'type' => NOTIFY_COMMENT, + 'notify_flags' => $user[0]['notify-flags'], + 'language' => $user[0]['language'], + 'to_name' => $user[0]['username'], + 'to_email' => $user[0]['email'], + 'uid' => $user[0]['uid'], + 'item' => $postarray, + 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($top_item)), + 'source_name' => $postarray['author-name'], + 'source_link' => $postarray['author-link'], + 'source_photo' => $postarray['author-avatar'], + 'verb' => ACTIVITY_POST, + 'otype' => 'item', + 'parent' => $conv_parent, + )); - // only send one notification - break; - } + // only send one notification + break; } } } diff --git a/rendertime/rendertime.php b/rendertime/rendertime.php index 22afa039..b5e486c6 100755 --- a/rendertime/rendertime.php +++ b/rendertime/rendertime.php @@ -26,7 +26,7 @@ function rendertime_page_end(&$a, &$o) { $duration = microtime(true)-$a->performance["start"]; - if (is_site_admin() AND ($_GET["mode"] != "minimal") AND !$a->is_mobile AND !$a->is_tablet) { + if (is_site_admin() AND ($_GET["mode"] != "minimal") AND !$a->is_mobile AND !$a->is_tablet) $o = $o.'
'.sprintf(t("Performance: Database: %s, Network: %s, Rendering: %s, Parser: %s, I/O: %s, Other: %s, Total: %s"), round($a->performance["database"], 3), round($a->performance["network"], 3), @@ -41,23 +41,4 @@ function rendertime_page_end(&$a, &$o) { //round($a->performance["plugin"], 3) )."
"; - if (get_config("rendertime", "callstack")) { - $o .= "
";
-			$o .= "\nDatabase:\n";
-			foreach ($a->callstack["database"] AS $func => $time) {
-				$time = round($time, 3);
-				if ($time > 0)
-					$o .= $func.": ".$time."\n";
-			}
-
-			$o .= "\nNetwork:\n";
-			foreach ($a->callstack["network"] AS $func => $time) {
-				$time = round($time, 3);
-				if ($time > 0)
-					$o .= $func.": ".$time."\n";
-			}
-
-			$o .= "
"; - } - } } diff --git a/retriever/database.sql b/retriever/database.sql index 1661c169..2513dd28 100644 --- a/retriever/database.sql +++ b/retriever/database.sql @@ -14,6 +14,7 @@ CREATE TABLE IF NOT EXISTS `retriever_item` ( `item-uid` int(10) unsigned NOT NULL DEFAULT '0', `contact-id` int(10) unsigned NOT NULL DEFAULT '0', `resource` int(11) NOT NULL, + `parent` int(11) NOT NULL, `finished` tinyint(1) unsigned NOT NULL DEFAULT '0', KEY `resource` (`resource`), KEY `all` (`item-uri`, `item-uid`, `contact-id`), @@ -30,7 +31,5 @@ CREATE TABLE IF NOT EXISTS `retriever_resource` ( `last-try` timestamp NULL DEFAULT NULL, `num-tries` int(11) NOT NULL DEFAULT 0, `data` mediumtext NOT NULL, - `http-code` smallint(1) unsigned NULL DEFAULT NULL, - `redirect-url` varchar(800) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin diff --git a/retriever/retriever.php b/retriever/retriever.php index a05e2e3f..04834018 100644 --- a/retriever/retriever.php +++ b/retriever/retriever.php @@ -2,13 +2,10 @@ /** * Name: Retrieve Feed Content * Description: Follow the permalink of RSS/Atom feed items and replace the summary with the full content. - * Version: 1.0 + * Version: 0.2 * Author: Matthew Exon */ -require_once('include/html2bbcode.php'); -require_once('include/Photo.php'); - function retriever_install() { register_hook('plugin_settings', 'addon/retriever/retriever.php', 'retriever_plugin_settings'); register_hook('plugin_settings_post', 'addon/retriever/retriever.php', 'retriever_plugin_settings_post'); @@ -16,6 +13,12 @@ function retriever_install() { register_hook('contact_photo_menu', 'addon/retriever/retriever.php', 'retriever_contact_photo_menu'); register_hook('cron', 'addon/retriever/retriever.php', 'retriever_cron'); + $schema = file_get_contents(dirname(__file__).'/database.sql'); + $arr = explode(';', $schema); + foreach ($arr as $a) { + $r = q($a); + } + $r = q("SELECT `id` FROM `pconfig` WHERE `cat` LIKE 'retriever_%%'"); if (count($r) || (get_config('retriever', 'dbversion') == '0.1')) { $retrievers = array(); @@ -30,21 +33,17 @@ function retriever_install() { q("INSERT INTO `retriever_rule` (`uid`, `contact-id`, `data`) VALUES (%d, %d, '%s')", intval($uid), intval($k), dbesc(json_encode($v))); } - q("DELETE FROM `pconfig` WHERE `cat` LIKE 'retriever_%%'"); - set_config('retriever', 'dbversion', '0.2'); + q("DELETE FROM `pconfig` WHERE `cat` LIKE 'retriever%%'"); } if (get_config('retriever', 'dbversion') == '0.2') { q("ALTER TABLE `retriever_resource` DROP COLUMN `retriever`"); - set_config('retriever', 'dbversion', '0.3'); } if (get_config('retriever', 'dbversion') == '0.3') { q("ALTER TABLE `retriever_item` MODIFY COLUMN `item-uri` varchar(800) CHARACTER SET ascii NOT NULL"); q("ALTER TABLE `retriever_resource` MODIFY COLUMN `url` varchar(800) CHARACTER SET ascii NOT NULL"); - set_config('retriever', 'dbversion', '0.4'); } if (get_config('retriever', 'dbversion') == '0.4') { q("ALTER TABLE `retriever_item` ADD COLUMN `finished` tinyint(1) unsigned NOT NULL DEFAULT '0'"); - set_config('retriever', 'dbversion', '0.5'); } if (get_config('retriever', 'dbversion') == '0.5') { q('ALTER TABLE `retriever_resource` CHANGE `created` `created` timestamp NOT NULL DEFAULT now()'); @@ -52,7 +51,6 @@ function retriever_install() { q('ALTER TABLE `retriever_resource` CHANGE `last-try` `last-try` timestamp NULL DEFAULT NULL'); q('ALTER TABLE `retriever_item` DROP KEY `all`'); q('ALTER TABLE `retriever_item` ADD KEY `all` (`item-uri`, `item-uid`, `contact-id`)'); - set_config('retriever', 'dbversion', '0.6'); } if (get_config('retriever', 'dbversion') == '0.6') { q('ALTER TABLE `retriever_item` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin'); @@ -60,7 +58,6 @@ function retriever_install() { q('ALTER TABLE `retriever_resource` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin'); q('ALTER TABLE `retriever_resource` CHANGE `url` `url` varchar(800) CHARACTER SET ascii COLLATE ascii_bin NOT NULL'); q('ALTER TABLE `retriever_rule` CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin'); - set_config('retriever', 'dbversion', '0.7'); } if (get_config('retriever', 'dbversion') == '0.7') { $r = q("SELECT `id`, `data` FROM `retriever_rule`"); @@ -116,26 +113,8 @@ function retriever_install() { $r = q('UPDATE `retriever_rule` SET `data` = "%s" WHERE `id` = %d', dbesc(json_encode($data)), $rr['id']); logger('retriever_install: retriever ' . $rr['id'] . ' new config ' . json_encode($data), LOGGER_DATA); } - set_config('retriever', 'dbversion', '0.8'); - } - if (get_config('retriever', 'dbversion') == '0.8') { - q("ALTER TABLE `retriever_resource` ADD COLUMN `http-code` smallint(1) unsigned NULL DEFAULT NULL"); - set_config('retriever', 'dbversion', '0.9'); - } - if (get_config('retriever', 'dbversion') == '0.9') { - q("ALTER TABLE `retriever_item` DROP COLUMN `parent`"); - q("ALTER TABLE `retriever_resource` ADD COLUMN `redirect-url` varchar(800) CHARACTER SET ascii COLLATE ascii_bin NULL DEFAULT NULL"); - set_config('retriever', 'dbversion', '0.10'); - } - - if (get_config('retriever', 'dbversion') != '0.10') { - $schema = file_get_contents(dirname(__file__).'/database.sql'); - $arr = explode(';', $schema); - foreach ($arr as $a) { - $r = q($a); - } - set_config('retriever', 'dbversion', '0.10'); } + set_config('retriever', 'dbversion', '0.8'); } function retriever_uninstall() { @@ -179,18 +158,13 @@ function retriever_retrieve_items($max_items) { } $retrieve_items = $max_items - $retriever_item_count; - logger('retriever_retrieve_items: asked for maximum ' . $max_items . ', already retrieved ' . $retriever_item_count . ', retrieve ' . $retrieve_items, LOGGER_DEBUG); do { $r = q("SELECT * FROM `retriever_resource` WHERE `completed` IS NULL AND (`last-try` IS NULL OR %s) ORDER BY `last-try` ASC LIMIT %d", dbesc(implode($schedule_clauses, ' OR ')), intval($retrieve_items)); - if (!is_array($r)) { - break; - } if (count($r) == 0) { break; } - logger('retriever_retrieve_items: found ' . count($r) . ' waiting resources in database', LOGGER_DEBUG); foreach ($r as $rr) { retrieve_resource($rr); $retriever_item_count++; @@ -208,24 +182,22 @@ function retriever_retrieve_items($max_items) { if (!$r) { $r = array(); } - logger('retriever_retrieve_items: items waiting even though resource has completed: ' . count($r), LOGGER_DEBUG); foreach ($r as $rr) { $resource = q("SELECT * FROM retriever_resource WHERE `id` = %d", $rr['resource']); $retriever_item = retriever_get_retriever_item($rr['item']); if (!$retriever_item) { - logger('retriever_retrieve_items: no retriever item with id ' . $rr['item'], LOGGER_NORMAL); + logger('retriever_retrieve_items: no retriever item with id ' . $rr['item']); continue; } $item = retriever_get_item($retriever_item); if (!$item) { - logger('retriever_retrieve_items: no item ' . $retriever_item['item-uri'], LOGGER_NORMAL); + logger('retriever_retrieve_items: no item ' . $retriever_item['item-uri']); continue; } $retriever = get_retriever($item['contact-id'], $item['uid']); if (!$retriever) { logger('retriever_retrieve_items: no retriever for item ' . - $retriever_item['item-uri'] . ' ' . $retriever_item['uid'] . ' ' . $item['contact-id'], - LOGGER_NORMAL); + $retriever_item['item-uri'] . ' ' . $retriever_item['uid'] . ' ' . $item['contact-id']); continue; } retriever_apply_completed_resource_to_item($retriever, $item, $resource[0]); @@ -240,37 +212,22 @@ function retriever_tidy() { q("DELETE FROM retriever_resource WHERE completed IS NULL AND created < DATE_SUB(now(), INTERVAL 3 MONTH)"); $r = q("SELECT retriever_item.id FROM retriever_item LEFT OUTER JOIN retriever_resource ON (retriever_item.resource = retriever_resource.id) WHERE retriever_resource.id is null"); - logger('retriever_tidy: found ' . count($r) . ' retriever_items with no retriever_resource'); foreach ($r as $rr) { q('DELETE FROM retriever_item WHERE id = %d', intval($rr['id'])); } } function retrieve_resource($resource) { - $a = get_app(); - logger('retrieve_resource: ' . ($resource['num-tries'] + 1) . ' attempt at resource ' . $resource['id'] . ' ' . $resource['url'], LOGGER_DEBUG); - $redirects; - $cookiejar = tempnam(get_temppath(), 'cookiejar-retriever-'); - $fetch_result = z_fetch_url($resource['url'], $resource['binary'], $redirects, array('cookiejar' => $cookiejar)); - unlink($cookiejar); - $resource['data'] = $fetch_result['body']; - $resource['http-code'] = $a->get_curl_code(); - $resource['type'] = $a->get_curl_content_type(); - $resource['redirect-url'] = $fetch_result['redirect_url']; - logger('retrieve_resource: got code ' . $resource['http-code'] . - ' retrieving resource ' . $resource['id'] . - ' final url ' . $resource['redirect-url'], LOGGER_DEBUG); - q("UPDATE `retriever_resource` SET `last-try` = now(), `num-tries` = `num-tries` + 1, `http-code` = %d, `redirect-url` = '%s' WHERE id = %d", - intval($resource['http-code']), - dbesc($resource['redirect-url']), + q("UPDATE `retriever_resource` SET `last-try` = now(), `num-tries` = `num-tries` + 1 WHERE id = %d", intval($resource['id'])); - if ($resource['data']) { + $data = fetch_url($resource['url'], $resource['binary'], $resource['type']); + $resource['type'] = get_app()->get_curl_content_type(); + if ($data) { + $resource['data'] = $data; q("UPDATE `retriever_resource` SET `completed` = now(), `data` = '%s', `type` = '%s' WHERE id = %d", - dbesc($resource['data']), - dbesc($resource['type']), - intval($resource['id'])); + dbesc($data), dbesc($resource['type']), intval($resource['id'])); retriever_resource_completed($resource); } } @@ -347,7 +304,6 @@ function apply_retrospective($retriever, $num) { intval($retriever['contact-id']), intval($num)); foreach ($r as $item) { q('UPDATE `item` SET `visible` = 0 WHERE `id` = %d', $item['id']); - q('UPDATE `thread` SET `visible` = 0 WHERE `iid` = %d', $item['id']); retriever_on_item_insert($retriever, $item); } } @@ -374,53 +330,18 @@ function retriever_on_item_insert($retriever, &$item) { function add_retriever_resource($url, $binary = false) { logger('add_retriever_resource: ' . $url, LOGGER_DEBUG); - - $scheme = parse_url($url, PHP_URL_SCHEME); - if ($scheme == 'data') { - $fp = fopen($url, 'r'); - $meta = stream_get_meta_data($fp); - $type = $meta['mediatype']; - $data = stream_get_contents($fp); - fclose($fp); - - $url = 'md5://' . hash('md5', $url); - $r = q("SELECT * FROM `retriever_resource` WHERE `url` = '%s'", dbesc($url)); - $resource = $r[0]; - if (count($r)) { - logger('add_retriever_resource: Resource ' . $url . ' already requested', LOGGER_DEBUG); - return $resource; - } - - logger('retrieve_resource: got data URL type ' . $resource['type'], LOGGER_DEBUG); - q("INSERT INTO `retriever_resource` (`type`, `binary`, `url`, `completed`, `data`) " . - "VALUES ('%s', %d, '%s', now(), '%s')", - dbesc($type), - intval($binary ? 1 : 0), - dbesc($url), - dbesc($data)); - $r = q("SELECT * FROM `retriever_resource` WHERE `url` = '%s'", dbesc($url)); - $resource = $r[0]; - if (count($r)) { - retriever_resource_completed($resource); - } - return $resource; - } - - if (strlen($url) > 800) { - logger('add_retriever_resource: URL is longer than 800 characters', LOGGER_NORMAL); - } - $r = q("SELECT * FROM `retriever_resource` WHERE `url` = '%s'", dbesc($url)); $resource = $r[0]; if (count($r)) { logger('add_retriever_resource: Resource ' . $url . ' already requested', LOGGER_DEBUG); - return $resource; + return $r[0]; + } + else { + q("INSERT INTO `retriever_resource` (`binary`, `url`) " . + "VALUES (%d, '%s')", intval($binary ? 1 : 0), dbesc($url)); + $r = q("SELECT * FROM `retriever_resource` WHERE `url` = '%s'", dbesc($url)); + return $r[0]; } - - q("INSERT INTO `retriever_resource` (`binary`, `url`) " . - "VALUES (%d, '%s')", intval($binary ? 1 : 0), dbesc($url)); - $r = q("SELECT * FROM `retriever_resource` WHERE `url` = '%s'", dbesc($url)); - return $r[0]; } function add_retriever_item(&$item, $resource) { @@ -450,26 +371,38 @@ function retriever_get_encoding($resource) { return 'utf-8'; } -function retriever_apply_xslt_text($xslt_text, $doc) { - if (!$xslt_text) { - logger('retriever_apply_xslt_text: empty XSLT text', LOGGER_NORMAL); - return $doc; +function retriever_construct_xpath($spec) { + if (gettype($spec) != "array") { + return; } - $xslt_doc = new DOMDocument(); - if (!$xslt_doc->loadXML($xslt_text)) { - logger('retriever_apply_xslt_text: could not load XML', LOGGER_NORMAL); - return $doc; + $components = array(); + foreach ($spec as $clause) { + if (!$clause['attribute']) { + $components[] = $clause['element']; + continue; + } + if ($clause['attribute'] === 'class') { + $components[] = + $clause['element'] . + "[contains(concat(' ', normalize-space(@class), ' '), ' " . + $clause['value'] . " ')]"; + } + else { + $components[] = + $clause['element'] . '[@' . + $clause['attribute'] . "='" . + $clause['value'] . "']"; + } } - $xp = new XsltProcessor(); - $xp->importStylesheet($xslt_doc); - $result = $xp->transformToDoc($doc); - return $result; + // It would be better to do this in smarty3 in extract.tpl + return implode('|', $components); } function retriever_apply_dom_filter($retriever, &$item, $resource) { - logger('retriever_apply_dom_filter: applying XSLT to ' . $item['id'] . ' ' . $item['uri'] . ' contact ' . $item['contact-id'], LOGGER_DEBUG); + logger('retriever_apply_dom_filter: applying XSLT to ' . $item['id'] . ' ' . $item['plink'], LOGGER_DEBUG); + require_once('include/html2bbcode.php'); - if (!$retriever['data']['include'] && !$retriever['data']['customxslt']) { + if (!$retriever['data']['include']) { return; } if (!$resource['data']) { @@ -478,42 +411,33 @@ function retriever_apply_dom_filter($retriever, &$item, $resource) { } $encoding = retriever_get_encoding($resource); - $content = mb_convert_encoding($resource['data'], 'HTML-ENTITIES', $encoding); - $doc = new DOMDocument('1.0', 'UTF-8'); + logger('@@@ item type ' . $resource['type'] . ' encoding ' . $encoding); + $extracter_template = get_markup_template('extract.tpl', 'addon/retriever/'); + $doc = new DOMDocument('1.0', 'utf-8'); if (strpos($resource['type'], 'html') !== false) { - @$doc->loadHTML($content); + @$doc->loadHTML($resource['data']); } else { - $doc->loadXML($content); + $doc->loadXML($resource['data']); } + logger('@@@ actual encoding of document is ' . $doc->encoding); - $params = array('$spec' => $retriever['data']); - $extract_template = get_markup_template('extract.tpl', 'addon/retriever/'); - $extract_xslt = replace_macros($extract_template, $params); - if ($retriever['data']['include']) { - $doc = retriever_apply_xslt_text($extract_xslt, $doc); - } - if ($retriever['data']['customxslt']) { - $doc = retriever_apply_xslt_text($retriever['data']['customxslt'], $doc); - } - if (!$doc) { - logger('retriever_apply_dom_filter: failed to apply extract XSLT template', LOGGER_NORMAL); - return; - } - - $components = parse_url($resource['redirect-url']); + $components = parse_url($item['plink']); $rooturl = $components['scheme'] . "://" . $components['host']; $dirurl = $rooturl . dirname($components['path']) . "/"; - $params = array('$dirurl' => $dirurl, '$rooturl' => $rooturl); - $fix_urls_template = get_markup_template('fix-urls.tpl', 'addon/retriever/'); - $fix_urls_xslt = replace_macros($fix_urls_template, $params); - $doc = retriever_apply_xslt_text($fix_urls_xslt, $doc); - if (!$doc) { - logger('retriever_apply_dom_filter: failed to apply fix urls XSLT template', LOGGER_NORMAL); - return; - } - $item['body'] = html2bbcode($doc->saveXML()); + $params = array('$include' => retriever_construct_xpath($retriever['data']['include']), + '$exclude' => retriever_construct_xpath($retriever['data']['exclude']), + '$pageurl' => $item['plink'], + '$dirurl' => $dirurl, + '$rooturl' => $rooturl); + $xslt = replace_macros($extracter_template, $params); + $xmldoc = new DOMDocument(); + $xmldoc->loadXML($xslt); + $xp = new XsltProcessor(); + $xp->importStylesheet($xmldoc); + $transformed = $xp->transformToXML($doc); + $item['body'] = html2bbcode($transformed); if (!strlen($item['body'])) { logger('retriever_apply_dom_filter retriever ' . $retriever['id'] . ' item ' . $item['id'] . ': output was empty', LOGGER_NORMAL); return; @@ -561,9 +485,8 @@ function retriever_check_item_completed(&$item) q("UPDATE `item` SET `visible` = %d WHERE `id` = %d", intval($item['visible']), intval($item['id'])); - q("UPDATE `thread` SET `visible` = %d WHERE `iid` = %d", - intval($item['visible']), - intval($item['id'])); +// disable due to possible security issue +// proc_run('php', "include/notifier.php", 'edit_post', $item['id']); } } @@ -639,6 +562,8 @@ function retriever_store_photo($item, &$resource) { } function retriever_transform_images(&$item, $resource) { + require_once('include/Photo.php'); + if (!$resource["data"]) { logger('retriever_transform_images: no data available for ' . $resource['id'] . ' ' . $resource['url'], LOGGER_NORMAL); @@ -691,7 +616,7 @@ function retriever_content($a) { if (x($_POST["id"])) { $retriever = get_retriever($a->argv[1], local_user(), true); $retriever["data"] = array(); - foreach (array('pattern', 'replace', 'enable', 'images', 'customxslt') as $setting) { + foreach (array('pattern', 'replace', 'enable', 'images') as $setting) { if (x($_POST['retriever_' . $setting])) { $retriever["data"][$setting] = $_POST['retriever_' . $setting]; } @@ -747,15 +672,8 @@ function retriever_content($a) { t('Retrospectively Apply'), '0', t('Reapply the rules to this number of posts')), - '$customxslt' => array( - 'retriever_customxslt', - t('Custom XSLT'), - $retriever['data']['customxslt'], - t("When standard rules aren't enough, apply custom XSLT to the article")), '$title' => t('Retrieve Feed Content'), '$help' => $a->get_baseurl() . '/retriever/help', - '$help_t' => t('Get Help'), - '$submit_t' => t('Submit'), '$submit' => t('Save Settings'), '$id' => ($retriever["id"] ? $retriever["id"] : "create"), '$tag_t' => t('Tag'), @@ -788,13 +706,6 @@ function retriever_post_remote_hook(&$a, &$item) { retriever_on_item_insert($retriever, $item); } else { - if (get_pconfig($item["uid"], 'retriever', 'oembed')) { - // Convert to HTML and back to take advantage of bbcode's resolution of oembeds. - $body = html2bbcode(bbcode($item['body'])); - if ($body) { - $item['body'] = $body; - } - } if (get_pconfig($item["uid"], 'retriever', 'all_photos')) { retrieve_images($item, null); } @@ -804,35 +715,21 @@ function retriever_post_remote_hook(&$a, &$item) { function retriever_plugin_settings(&$a,&$s) { $all_photos = get_pconfig(local_user(), 'retriever', 'all_photos'); - $oembed = get_pconfig(local_user(), 'retriever', 'oembed'); + $all_photos_mu = ($all_photos == 'on') ? ' checked="true"' : ''; $template = get_markup_template('/settings.tpl', 'addon/retriever/'); $s .= replace_macros($template, array( - '$allphotos' => array( - 'retriever_all_photos', - t('All Photos'), - $all_photos, - t('Check this to retrieve photos for all posts')), - '$oembed' => array( - 'retriever_oembed', - t('Resolve OEmbed'), - $oembed, - t('Check this to attempt to retrieve embedded content for all posts - useful e.g. for Facebook posts')), '$submit' => t('Save Settings'), '$title' => t('Retriever Settings'), - '$help' => $a->get_baseurl() . '/retriever/help')); + '$help' => $a->get_baseurl() . '/retriever/help', + '$all_photos' => $all_photos_mu, + '$all_photos_t' => t('All Photos'))); } function retriever_plugin_settings_post($a,$post) { - if ($_POST['retriever_all_photos']) { - set_pconfig(local_user(), 'retriever', 'all_photos', $_POST['retriever_all_photos']); + if ($_POST['all_photos']) { + set_pconfig(local_user(), 'retriever', 'all_photos', $_POST['all_photos']); } else { del_pconfig(local_user(), 'retriever', 'all_photos'); } - if ($_POST['retriever_oembed']) { - set_pconfig(local_user(), 'retriever', 'oembed', $_POST['retriever_oembed']); - } - else { - del_pconfig(local_user(), 'retriever', 'oembed'); - } } diff --git a/retriever/templates/extract.tpl b/retriever/templates/extract.tpl index fd38bde6..36b91813 100644 --- a/retriever/templates/extract.tpl +++ b/retriever/templates/extract.tpl @@ -1,26 +1,18 @@ +{{* + * AUTOMATICALLY GENERATED TEMPLATE + * DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN + * + *}} -{{function clause_xpath}} -{{if !$clause.attribute}} -{{$clause.element}}{{elseif $clause.attribute == 'class'}} -{{$clause.element}}[contains(concat(' ', normalize-space(@class), ' '), '{{$clause.value}}')]{{else}} -{{$clause.element}}[@{{$clause.attribute}}='{{$clause.value}}']{{/if}} -{{/function}} - -{{foreach $spec.include as $clause}} - + -{{/foreach}} - -{{foreach $spec.exclude as $clause}} - -{{/foreach}} @@ -28,4 +20,22 @@ - +{{if $exclude}} + +{{/if}} + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/retriever/templates/fix-urls.tpl b/retriever/templates/fix-urls.tpl deleted file mode 100644 index 5bb665ab..00000000 --- a/retriever/templates/fix-urls.tpl +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/retriever/templates/help.tpl b/retriever/templates/help.tpl index 10b421d0..23ae297b 100644 --- a/retriever/templates/help.tpl +++ b/retriever/templates/help.tpl @@ -1,3 +1,8 @@ +{{* + * AUTOMATICALLY GENERATED TEMPLATE + * DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN + * + *}}

Retriever Plugin Help

This plugin replaces the short excerpts you normally get in RSS feeds @@ -142,7 +147,7 @@ Photos" box in the "Retriever Settings" section and click "Submit".

Configure Feeds:

-{{foreach $feeds as $feed}} -{{include file='contact_template.tpl' contact=$feed}} -{{/foreach}} +{{ for $feeds as $feed }} +{{ inc contact_template.tpl with $contact=$feed }}{{ endinc }} +{{ endfor }}
diff --git a/retriever/templates/rule-config.tpl b/retriever/templates/rule-config.tpl index 228d0326..79add59a 100644 --- a/retriever/templates/rule-config.tpl +++ b/retriever/templates/rule-config.tpl @@ -1,3 +1,8 @@ +{{* + * AUTOMATICALLY GENERATED TEMPLATE + * DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN + * + *}}

{{$title}}

-

{{$help_t}}

+

Get Help

{{include file="field_checkbox.tpl" field=$enable}} @@ -106,7 +111,6 @@ function retriever_remove_row(id, number)
-{{include file="field_textarea.tpl" field=$customxslt}} - +
diff --git a/retriever/templates/settings.tpl b/retriever/templates/settings.tpl index 8bfe8db0..3bc71559 100644 --- a/retriever/templates/settings.tpl +++ b/retriever/templates/settings.tpl @@ -1,9 +1,22 @@ +{{* + * AUTOMATICALLY GENERATED TEMPLATE + * DO NOT EDIT THIS FILE, CHANGES WILL BE OVERWRITTEN + * + *}}

{{$title}}

Get Help

-{{include file="field_checkbox.tpl" field=$allphotos}} -{{include file="field_checkbox.tpl" field=$oembed}} - + + + + + + + + + + +
{{$all_photos_t}}:
diff --git a/smileybutton/smileybutton.php b/smileybutton/smileybutton.php index d8c15330..50a61606 100755 --- a/smileybutton/smileybutton.php +++ b/smileybutton/smileybutton.php @@ -130,9 +130,10 @@ function show_button($a, &$b) { $b = <<< EOT
smiley - +
+ + '."\n";