diff --git a/.gitignore b/.gitignore index 39340a42..36ccc906 100644 --- a/.gitignore +++ b/.gitignore @@ -15,7 +15,7 @@ report/ .buildpath .externalToolBuilders .settings -#ignore OSX .DS_Store files +#ignore OSX .DS_Store files .DS_Store /nbproject/private/ diff --git a/.tx/config b/.tx/config index 50b8ef45..599edaee 100644 --- a/.tx/config +++ b/.tx/config @@ -1,12 +1,6 @@ [main] host = https://www.transifex.com -[friendica.addon_appnet_messagespo] -file_filter = appnet/lang//messages.po -source_file = appnet/lang/C/messages.po -source_lang = en -type = PO - [friendica.addon_blackout_messagespo] file_filter = blackout/lang//messages.po source_file = blackout/lang/C/messages.po @@ -37,12 +31,6 @@ source_file = buglink/lang/C/messages.po source_lang = en type = PO -[friendica.addon_cal_messagespo] -file_filter = cal/lang//messages.po -source_file = cal/lang/C/messages.po -source_lang = en -type = PO - [friendica.addon_communityhome_messagespo] file_filter = communityhome/lang//messages.po source_file = communityhome/lang/C/messages.po @@ -73,24 +61,12 @@ source_file = dwpost/lang/C/messages.po source_lang = en type = PO -[friendica.addon_editplain_messagespo] -file_filter = editplain/lang//messages.po -source_file = editplain/lang/C/messages.po -source_lang = en -type = PO - [friendica.addon_forumdirectory_messagespo] file_filter = forumdirectory/lang//messages.po source_file = forumdirectory/lang/C/messages.po source_lang = en type = PO -[friendica.addon_forumlist_messagespo] -file_filter = forumlist/lang//messages.po -source_file = forumlist/lang/C/messages.po -source_lang = en -type = PO - [friendica.addon_fromapp_messagespo] file_filter = fromapp/lang//messages.po source_file = fromapp/lang/C/messages.po @@ -115,12 +91,6 @@ source_file = gnot/lang/C/messages.po source_lang = en type = PO -[friendica.addon_gpluspost_messagespo] -file_filter = gpluspost/lang//messages.po -source_file = gpluspost/lang/C/messages.po -source_lang = en -type = PO - [friendica.addon_gravatar_messagespo] file_filter = gravatar/lang//messages.po source_file = gravatar/lang/C/messages.po @@ -301,6 +271,12 @@ source_file = rendertime/lang/C/messages.po source_lang = en type = PO +[friendica.addon_securemail_messagespo] +file_filter = securemail/lang//messages.po +source_file = securemail/lang/C/messages.po +source_lang = en +type = PO + [friendica.addon_showmore_messagespo] file_filter = showmore/lang//messages.po source_file = showmore/lang/C/messages.po @@ -313,12 +289,6 @@ source_file = smileybutton/lang/C/messages.po source_lang = en type = PO -[friendica.addon_snautofollow_messagespo] -file_filter = snautofollow/lang//messages.po -source_file = snautofollow/lang/C/messages.po -source_lang = en -type = PO - [friendica.addon_startpage_messagespo] file_filter = startpage/lang//messages.po source_file = startpage/lang/C/messages.po @@ -361,9 +331,9 @@ source_file = twitter/lang/C/messages.po source_lang = en type = PO -[friendica.addon_uhremotestorage_messagespo] -file_filter = uhremotestorage/lang//messages.po -source_file = uhremotestorage/lang/C/messages.po +[friendica.addon_viewsrc_messagespo] +file_filter = viewsrc/lang//messages.po +source_file = viewsrc/lang/C/messages.po source_lang = en type = PO @@ -385,6 +355,12 @@ source_file = wppost/lang/C/messages.po source_lang = en type = PO +[friendica.addon_xmpp_messagespo] +file_filter = xmpp/lang//messages.po +source_file = xmpp/lang/C/messages.po +source_lang = en +type = PO + [friendica.addon_yourls_messagespo] file_filter = yourls/lang//messages.po source_file = yourls/lang/C/messages.po diff --git a/INSTALL.txt b/INSTALL.txt index f45e86b8..8b248bd0 100644 --- a/INSTALL.txt +++ b/INSTALL.txt @@ -4,9 +4,10 @@ To install all addons using git, cd into your top level Friendica directory and -git clone https://github.com/friendica/friendica-addons.git addon + git clone https://github.com/friendica/friendica-addons.git addon + util/composer.phar install -d addon -This will clone the entire repository in a directory called addon. They can now be activated in the plugins section of your admin panel. +This will clone the entire repository in a directory called addon. They can now be activated in the addons section of your admin panel. ******************** * Install Manually * @@ -15,4 +16,4 @@ This will clone the entire repository in a directory called addon. They can now 1. Download the archive (Download ZIP button) containing the addons. 2. Unzip the contents of the archive to your harddrive. 3. Upload the extracted directory and all it's contents to /path/to/friendica/addon. You will need to create the addon directory if this is the first addon you have installed. -4. Activate the addon in the plugins section of your admin panel. +4. Activate the addon in the addons section of your admin panel. diff --git a/README.md b/README.md index 52fdbb2e..deffa2a5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ Addons for Friendica ==================== -This repository is a collection of plugins for the [Friendica Social Communications Server](https://github.com/friendica/friendica). -You can add these plugins to the /addon directory of your Friendica installation +This repository is a collection of addons for the [Friendica Social Communications Server](https://github.com/friendica/friendica). +You can add these addons to the /addon directory of your Friendica installation do extend the functionality of your node. After uploading the addons to your server, you need to activate the desired addons @@ -14,7 +14,7 @@ in cases the addon developers have choosen not to include them here. Connectors ---------- -Among these plugins there are also the [connectors](https://github.com/friendica/friendica/blob/master/doc/Connectors.md) for various other networks +Among these addons there are also the [connectors](https://github.com/friendica/friendica/blob/master/doc/Connectors.md) for various other networks (e.g. Twitter, pump.io, Google+) that are needed for communication when the protocoll is not supported by Friendica core (DFRN, OStatus and Diaspora). @@ -28,7 +28,7 @@ Development The addon interface of Friendica is very flexible and powerful, so if you are missing functionality, your chances are high it may be added with an addon. -See the [documentation](https://github.com/friendica/friendica/blob/master/doc/Plugins.md) for more informations on the plugin development. +See the [documentation](https://github.com/friendica/friendica/blob/master/doc/Addons.md) for more informations on the addon development. Addons can be translated like any other part of Friendica. Translations for the addons included in this repository are done at the [Transifex project](https://www.transifex.com/projects/p/friendica/) for Friendica. diff --git a/blackout/README.md b/blackout/README.md index 1974ef7b..1bf536ca 100644 --- a/blackout/README.md +++ b/blackout/README.md @@ -8,12 +8,12 @@ blackout addon About ----- -This plugin will allow you to enter a date/time period during which +This addon will allow you to enter a date/time period during which all your ~friendica visitors from the web will be redirected to a page you can configure in the admin panel as well. Calls to the API and the communication with other ~friendica nodes is -not effected from this plugin. +not effected from this addon. If you enter a period the current date would be affected none of the currently logged in users will be effected as well. But if they log diff --git a/blackout/blackout.php b/blackout/blackout.php index 3678969e..ec7215ab 100644 --- a/blackout/blackout.php +++ b/blackout/blackout.php @@ -9,12 +9,12 @@ * About * ===== * - * This plugin will allow you to enter a date/time period during which + * This addon will allow you to enter a date/time period during which * all your ~friendica visitors from the web will be redirected to a page * you can configure in the admin panel as well. * * Calls to the API and the communication with other ~friendica nodes is - * not effected from this plugin. + * not effected from this addon. * * If you enter a period the current date would be affected none of the * currently logged in users will be effected as well. But if they log @@ -49,13 +49,16 @@ * THE SOFTWARE. */ +use Friendica\Core\Config; +use Friendica\Core\Addon; +use Friendica\Core\L10n; function blackout_install() { - register_hook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); + Addon::registerHook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); } function blackout_uninstall() { - unregister_hook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); + Addon::unregisterHook('page_header', 'addon/blackout/blackout.php', 'blackout_redirect'); } function blackout_redirect ($a, $b) { // if we have a logged in user, don't throw her out @@ -86,20 +89,20 @@ function blackout_redirect ($a, $b) { } } -function blackout_plugin_admin(&$a, &$o) { - $mystart = get_config('blackout','begindate'); +function blackout_addon_admin(&$a, &$o) { + $mystart = Config::get('blackout','begindate'); if (! is_string($mystart)) { $mystart = "YYYY-MM-DD:hhmm"; } $myend = get_config('blackout','enddate'); if (! is_string($myend)) { $myend = "YYYY-MM-DD:hhmm"; } $myurl = get_config('blackout','url'); if (! is_string($myurl)) { $myurl = "http://www.example.com"; } $t = get_markup_template( "admin.tpl", "addon/blackout/" ); - - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - '$rurl' => array("rurl", "Redirect URL", $myurl, "all your visitors from the web will be redirected to this URL"), - '$startdate' => array("startdate", "Begin of the Blackout
(YYYY-MM-DD hh:mm)", $mystart, "format is YYYY year, MM month, DD day, hh hour and mm minute"), - '$enddate' => array("enddate", "End of the Blackout
(YYYY-MM-DD hh:mm)", $myend, ""), + + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$rurl' => ["rurl", "Redirect URL", $myurl, "all your visitors from the web will be redirected to this URL"], + '$startdate' => ["startdate", "Begin of the Blackout
(YYYY-MM-DD hh:mm)", $mystart, "format is YYYY year, MM month, DD day, hh hour and mm minute"], + '$enddate' => ["enddate", "End of the Blackout
(YYYY-MM-DD hh:mm)", $myend, ""], )); $date1 = DateTime::createFromFormat('Y-m-d G:i', $mystart); @@ -110,7 +113,7 @@ function blackout_plugin_admin(&$a, &$o) { $o = '

Please double check that the current settings for the blackout. Begin will be '.$mystart.' and it will end '.$myend.'.

' . $o; } } -function blackout_plugin_admin_post (&$a) { +function blackout_addon_admin_post (&$a) { $begindate = trim($_POST['startdate']); $enddate = trim($_POST['enddate']); $url = trim($_POST['rurl']); diff --git a/blackout/lang/it/messages.po b/blackout/lang/it/messages.po index b9b5ec30..1b0c6f62 100644 --- a/blackout/lang/it/messages.po +++ b/blackout/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014 +# fabrixxm , 2014,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2014-09-10 10:22+0000\n" +"PO-Revision-Date: 2018-03-19 19:50+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/blockem/blockem.php b/blockem/blockem.php index 223a1990..6f2b6d89 100644 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -1,41 +1,39 @@ * */ +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; -function blockem_install() { - register_hook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); - register_hook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); - register_hook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); - register_hook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); - register_hook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); - register_hook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); - register_hook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); +function blockem_install() +{ + Addon::registerHook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); + Addon::registerHook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); + Addon::registerHook('addon_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); + Addon::registerHook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); + Addon::registerHook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); + Addon::registerHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store'); } - -function blockem_uninstall() { - unregister_hook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); - unregister_hook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); - unregister_hook('plugin_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); - unregister_hook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); - unregister_hook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); - unregister_hook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store' ); - +function blockem_uninstall() +{ + Addon::unregisterHook('prepare_body', 'addon/blockem/blockem.php', 'blockem_prepare_body'); + Addon::unregisterHook('display_item', 'addon/blockem/blockem.php', 'blockem_display_item'); + Addon::unregisterHook('addon_settings', 'addon/blockem/blockem.php', 'blockem_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/blockem/blockem.php', 'blockem_addon_settings_post'); + Addon::unregisterHook('conversation_start', 'addon/blockem/blockem.php', 'blockem_conversation_start'); + Addon::unregisterHook('item_photo_menu', 'addon/blockem/blockem.php', 'blockem_item_photo_menu'); + Addon::unregisterHook('enotify_store', 'addon/blockem/blockem.php', 'blockem_enotify_store'); } - - - - -function blockem_addon_settings(&$a,&$s) { +function blockem_addon_settings(&$a, &$s) +{ if(! local_user()) return; @@ -45,24 +43,25 @@ function blockem_addon_settings(&$a,&$s) { $a->page['htmlhead'] .= '' . "\r\n"; - $words = get_pconfig(local_user(),'blockem','words'); + $words = PConfig::get(local_user(), 'blockem', 'words'); if(! $words) $words = ''; $s .= ''; - $s .= '

' . t('"Blockem"') . '

'; + $s .= '

' . L10n::t('"Blockem"') . '

'; $s .= '
'; $s .= ''; + $s .= '
'; return; @@ -74,12 +73,11 @@ function blockem_addon_settings_post(&$a,&$b) { return; if($_POST['blockem-submit']) { - set_pconfig(local_user(),'blockem','words',trim($_POST['blockem-words'])); - info( t('BLOCKEM Settings saved.') . EOL); + PConfig::set(local_user(),'blockem','words',trim($_POST['blockem-words'])); + info(L10n::t('BLOCKEM Settings saved.') . EOL); } } - function blockem_enotify_store(&$a,&$b) { $words = get_pconfig($b['uid'],'blockem','words'); @@ -139,17 +137,15 @@ function blockem_prepare_body(&$a,&$b) { } if($found) { $rnd = random_string(8); - $b['html'] = ''; + $b['html'] = ''; } } - function blockem_display_item(&$a,&$b) { if(strstr($b['output']['body'],'id="blockem-wrap-')) $b['output']['thumb'] = $a->get_baseurl() . "/images/person-80.jpg"; } - function blockem_conversation_start(&$a,&$b) { if(! local_user()) @@ -194,9 +190,9 @@ function blockem_item_photo_menu(&$a,&$b) { } } if($blocked) - $b['menu'][ t('Unblock Author')] = 'javascript:blockemUnblock(\'' . $author . '\');'; + $b['menu'][L10n::t('Unblock Author')] = 'javascript:blockemUnblock(\'' . $author . '\');'; else - $b['menu'][ t('Block Author')] = 'javascript:blockemBlock(\'' . $author . '\');'; + $b['menu'][L10n::t('Block Author')] = 'javascript:blockemBlock(\'' . $author . '\');'; } function blockem_module() {} @@ -227,7 +223,7 @@ function blockem_init(&$a) { $words = implode(',',$newarr); } - set_pconfig(local_user(),'blockem','words',$words); - info( t('blockem settings updated') . EOL ); + PConfig::set(local_user(),'blockem','words',$words); + info(L10n::t('blockem settings updated') . EOL ); killme(); } diff --git a/blockem/lang/C/messages.po b/blockem/lang/C/messages.po index 39c4f231..ad7ea9c2 100644 --- a/blockem/lang/C/messages.po +++ b/blockem/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,35 +17,41 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: blockem.php:53 blockem.php:57 +#: blockem.php:51 blockem.php:55 msgid "\"Blockem\"" msgstr "" -#: blockem.php:61 -msgid "Comma separated profile URLS to block" +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." msgstr "" -#: blockem.php:65 +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "" + +#: blockem.php:64 msgid "Save Settings" msgstr "" -#: blockem.php:78 +#: blockem.php:77 msgid "BLOCKEM Settings saved." msgstr "" -#: blockem.php:142 +#: blockem.php:140 #, php-format -msgid "Blocked %s - Click to open/close" +msgid "Hidden content by %s - Click to open/close" msgstr "" -#: blockem.php:197 +#: blockem.php:193 msgid "Unblock Author" msgstr "" -#: blockem.php:199 +#: blockem.php:195 msgid "Block Author" msgstr "" -#: blockem.php:231 +#: blockem.php:227 msgid "blockem settings updated" msgstr "" diff --git a/blockem/lang/de/messages.po b/blockem/lang/de/messages.po index c2384d61..14665878 100644 --- a/blockem/lang/de/messages.po +++ b/blockem/lang/de/messages.po @@ -4,50 +4,57 @@ # # # Translators: -# bavatar , 2014-2015 +# Tobias Diekershoff , 2014 +# Tobias Diekershoff , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-07-27 05:29+0000\n" -"Last-Translator: bavatar \n" -"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" +"PO-Revision-Date: 2018-02-10 17:32+0000\n" +"Last-Translator: Tobias Diekershoff \n" +"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blockem.php:51 -msgid "\"Blockem\" Settings" -msgstr "\"Blockem\"-Einstellungen" +#: blockem.php:51 blockem.php:55 +msgid "\"Blockem\"" +msgstr "\"Blockem\"" -#: blockem.php:53 -msgid "Comma separated profile URLS to block" -msgstr "Profil-URLs, die geblockt werden sollen (durch Kommas getrennt)" +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Verbirgt Inhalte von Kontakten durch kollabieren der Beiträge. Des weiteren wird das Profilbild durch einen generischen Avatar ersetzt." -#: blockem.php:57 -msgid "Submit" -msgstr "Senden" +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "Komma separierte Liste von Profil URLs" -#: blockem.php:70 +#: blockem.php:64 +msgid "Save Settings" +msgstr "Einstellungen speichern" + +#: blockem.php:77 msgid "BLOCKEM Settings saved." msgstr "BLOCKEM-Einstellungen gesichert." -#: blockem.php:105 +#: blockem.php:140 #, php-format -msgid "Blocked %s - Click to open/close" -msgstr "%s blockiert - Zum Öffnen/Schließen klicken" +msgid "Hidden content by %s - Click to open/close" +msgstr "Verborgene Inhalte von %s - Zum Öffnen/Schließen klicken" -#: blockem.php:160 +#: blockem.php:193 msgid "Unblock Author" msgstr "Autor freischalten" -#: blockem.php:162 +#: blockem.php:195 msgid "Block Author" msgstr "Autor blockieren" -#: blockem.php:194 +#: blockem.php:227 msgid "blockem settings updated" msgstr "blockem Einstellungen aktualisiert" diff --git a/blockem/lang/de/strings.php b/blockem/lang/de/strings.php index d3089c4d..e9de08dc 100644 --- a/blockem/lang/de/strings.php +++ b/blockem/lang/de/strings.php @@ -5,11 +5,12 @@ function string_plural_select_de($n){ return ($n != 1);; }} ; -$a->strings["\"Blockem\" Settings"] = "\"Blockem\"-Einstellungen"; -$a->strings["Comma separated profile URLS to block"] = "Profil-URLs, die geblockt werden sollen (durch Kommas getrennt)"; -$a->strings["Submit"] = "Senden"; +$a->strings["\"Blockem\""] = "\"Blockem\""; +$a->strings["Hides user's content by collapsing posts. Also replaces their avatar with generic image."] = "Verbirgt Inhalte von Kontakten durch kollabieren der Beiträge. Des weiteren wird das Profilbild durch einen generischen Avatar ersetzt."; +$a->strings["Comma separated profile URLS:"] = "Komma separierte Liste von Profil URLs"; +$a->strings["Save Settings"] = "Einstellungen speichern"; $a->strings["BLOCKEM Settings saved."] = "BLOCKEM-Einstellungen gesichert."; -$a->strings["Blocked %s - Click to open/close"] = "%s blockiert - Zum Öffnen/Schließen klicken"; +$a->strings["Hidden content by %s - Click to open/close"] = "Verborgene Inhalte von %s - Zum Öffnen/Schließen klicken"; $a->strings["Unblock Author"] = "Autor freischalten"; $a->strings["Block Author"] = "Autor blockieren"; $a->strings["blockem settings updated"] = "blockem Einstellungen aktualisiert"; diff --git a/blockem/lang/en-gb/messages.po b/blockem/lang/en-gb/messages.po new file mode 100644 index 00000000..6bcc7b9b --- /dev/null +++ b/blockem/lang/en-gb/messages.po @@ -0,0 +1,59 @@ +# ADDON blockem +# Copyright (C) +# This file is distributed under the same license as the Friendica blockem addon package. +# +# +# Translators: +# Andy H3 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" +"PO-Revision-Date: 2018-03-15 14:10+0000\n" +"Last-Translator: Andy H3 \n" +"Language-Team: English (United Kingdom) (http://www.transifex.com/Friendica/friendica/language/en_GB/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_GB\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: blockem.php:51 blockem.php:55 +msgid "\"Blockem\"" +msgstr "\"Blockem\"" + +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image." + +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "Comma separated profile URLs:" + +#: blockem.php:64 +msgid "Save Settings" +msgstr "Save settings" + +#: blockem.php:77 +msgid "BLOCKEM Settings saved." +msgstr "Blockem settings saved." + +#: blockem.php:140 +#, php-format +msgid "Hidden content by %s - Click to open/close" +msgstr "Hidden content by %s - Reveal/hide" + +#: blockem.php:193 +msgid "Unblock Author" +msgstr "Unblock author" + +#: blockem.php:195 +msgid "Block Author" +msgstr "Block author" + +#: blockem.php:227 +msgid "blockem settings updated" +msgstr "Blockem settings updated" diff --git a/blockem/lang/en-gb/strings.php b/blockem/lang/en-gb/strings.php new file mode 100644 index 00000000..d31cebe7 --- /dev/null +++ b/blockem/lang/en-gb/strings.php @@ -0,0 +1,16 @@ +strings["\"Blockem\""] = "\"Blockem\""; +$a->strings["Hides user's content by collapsing posts. Also replaces their avatar with generic image."] = "Hides user's content by collapsing posts. Also replaces their avatar with generic image."; +$a->strings["Comma separated profile URLS:"] = "Comma separated profile URLs:"; +$a->strings["Save Settings"] = "Save settings"; +$a->strings["BLOCKEM Settings saved."] = "Blockem settings saved."; +$a->strings["Hidden content by %s - Click to open/close"] = "Hidden content by %s - Reveal/hide"; +$a->strings["Unblock Author"] = "Unblock author"; +$a->strings["Block Author"] = "Block author"; +$a->strings["blockem settings updated"] = "Blockem settings updated"; diff --git a/blockem/lang/en-us/messages.po b/blockem/lang/en-us/messages.po new file mode 100644 index 00000000..362c4891 --- /dev/null +++ b/blockem/lang/en-us/messages.po @@ -0,0 +1,59 @@ +# ADDON blockem +# Copyright (C) +# This file is distributed under the same license as the Friendica blockem addon package. +# +# +# Translators: +# Andy H3 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" +"PO-Revision-Date: 2018-03-15 14:14+0000\n" +"Last-Translator: Andy H3 \n" +"Language-Team: English (United States) (http://www.transifex.com/Friendica/friendica/language/en_US/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: en_US\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: blockem.php:51 blockem.php:55 +msgid "\"Blockem\"" +msgstr "\"Blockem\"" + +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Hides user's content by collapsing posts. Also replaces their avatar with generic image." + +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "Comma separated profile URLs:" + +#: blockem.php:64 +msgid "Save Settings" +msgstr "Save settings" + +#: blockem.php:77 +msgid "BLOCKEM Settings saved." +msgstr "Blockem settings saved." + +#: blockem.php:140 +#, php-format +msgid "Hidden content by %s - Click to open/close" +msgstr "Hidden content by %s - Reveal/hide" + +#: blockem.php:193 +msgid "Unblock Author" +msgstr "Unblock author" + +#: blockem.php:195 +msgid "Block Author" +msgstr "Block author" + +#: blockem.php:227 +msgid "blockem settings updated" +msgstr "Blockem settings updated" diff --git a/blockem/lang/en-us/strings.php b/blockem/lang/en-us/strings.php new file mode 100644 index 00000000..ad88b546 --- /dev/null +++ b/blockem/lang/en-us/strings.php @@ -0,0 +1,16 @@ +strings["\"Blockem\""] = "\"Blockem\""; +$a->strings["Hides user's content by collapsing posts. Also replaces their avatar with generic image."] = "Hides user's content by collapsing posts. Also replaces their avatar with generic image."; +$a->strings["Comma separated profile URLS:"] = "Comma separated profile URLs:"; +$a->strings["Save Settings"] = "Save settings"; +$a->strings["BLOCKEM Settings saved."] = "Blockem settings saved."; +$a->strings["Hidden content by %s - Click to open/close"] = "Hidden content by %s - Reveal/hide"; +$a->strings["Unblock Author"] = "Unblock author"; +$a->strings["Block Author"] = "Block author"; +$a->strings["blockem settings updated"] = "Blockem settings updated"; diff --git a/blockem/lang/it/messages.po b/blockem/lang/it/messages.po index 5e619da5..ea72109e 100644 --- a/blockem/lang/it/messages.po +++ b/blockem/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014 +# fabrixxm , 2014,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2014-09-10 10:23+0000\n" +"POT-Creation-Date: 2018-02-09 13:00+0100\n" +"PO-Revision-Date: 2018-03-19 13:14+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -19,35 +19,41 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blockem.php:53 blockem.php:57 +#: blockem.php:51 blockem.php:55 msgid "\"Blockem\"" msgstr "\"Blockem\"" -#: blockem.php:61 -msgid "Comma separated profile URLS to block" -msgstr "Lista, separata da virgola, di indirizzi da bloccare" +#: blockem.php:59 +msgid "" +"Hides user's content by collapsing posts. Also replaces their avatar with " +"generic image." +msgstr "Nascondi il contenuto degli utenti collassando i messaggi. Sostituisce anche gli avatar con un'immagine generica." -#: blockem.php:65 +#: blockem.php:60 +msgid "Comma separated profile URLS:" +msgstr "URL profili separati da virgola:" + +#: blockem.php:64 msgid "Save Settings" msgstr "Salva Impostazioni" -#: blockem.php:78 +#: blockem.php:77 msgid "BLOCKEM Settings saved." msgstr "Impostazioni BLOCKEM salvate." -#: blockem.php:142 +#: blockem.php:140 #, php-format -msgid "Blocked %s - Click to open/close" -msgstr "%s bloccato - Clicca per aprire/chiudere" +msgid "Hidden content by %s - Click to open/close" +msgstr "Contenuto di %s nascosto - Clicca per aprire/chiudere" -#: blockem.php:197 +#: blockem.php:193 msgid "Unblock Author" msgstr "Sblocca autore" -#: blockem.php:199 +#: blockem.php:195 msgid "Block Author" msgstr "Blocca autore" -#: blockem.php:231 +#: blockem.php:227 msgid "blockem settings updated" msgstr "Impostazioni 'blockem' aggiornate." diff --git a/blockem/lang/it/strings.php b/blockem/lang/it/strings.php index 85f8a0ac..f3997eda 100644 --- a/blockem/lang/it/strings.php +++ b/blockem/lang/it/strings.php @@ -6,10 +6,11 @@ function string_plural_select_it($n){ }} ; $a->strings["\"Blockem\""] = "\"Blockem\""; -$a->strings["Comma separated profile URLS to block"] = "Lista, separata da virgola, di indirizzi da bloccare"; +$a->strings["Hides user's content by collapsing posts. Also replaces their avatar with generic image."] = "Nascondi il contenuto degli utenti collassando i messaggi. Sostituisce anche gli avatar con un'immagine generica."; +$a->strings["Comma separated profile URLS:"] = "URL profili separati da virgola:"; $a->strings["Save Settings"] = "Salva Impostazioni"; $a->strings["BLOCKEM Settings saved."] = "Impostazioni BLOCKEM salvate."; -$a->strings["Blocked %s - Click to open/close"] = "%s bloccato - Clicca per aprire/chiudere"; +$a->strings["Hidden content by %s - Click to open/close"] = "Contenuto di %s nascosto - Clicca per aprire/chiudere"; $a->strings["Unblock Author"] = "Sblocca autore"; $a->strings["Block Author"] = "Blocca autore"; $a->strings["blockem settings updated"] = "Impostazioni 'blockem' aggiornate."; diff --git a/blogger/blogger.php b/blogger/blogger.php index 892e8a45..97d488bc 100644 --- a/blogger/blogger.php +++ b/blogger/blogger.php @@ -1,5 +1,4 @@ ' - . t('Post to blogger') . ''; - } + $bl_post = PConfig::get(local_user(), 'blogger', 'post'); + if (intval($bl_post) == 1) { + $bl_defpost = PConfig::get(local_user(), 'blogger', 'post_by_default'); + $selected = ((intval($bl_defpost) == 1) ? ' checked="checked" ' : ''); + $b .= '
' + . L10n::t('Post to blogger') . '
'; + } } -function blogger_settings(&$a,&$s) { - - if(! local_user()) - return; +function blogger_settings(&$a, &$s) +{ + if (! local_user()) { + return; + } /* Add our stylesheet to the page so we can make our settings look nice */ @@ -55,11 +64,11 @@ function blogger_settings(&$a,&$s) { /* Get the current state of our config variables */ - $enabled = get_pconfig(local_user(),'blogger','post'); - $checked = (($enabled) ? ' checked="checked" ' : ''); - $css = (($enabled) ? '' : '-disabled'); + $enabled = PConfig::get(local_user(), 'blogger', 'post'); + $checked = (($enabled) ? ' checked="checked" ' : ''); + $css = (($enabled) ? '' : '-disabled'); - $def_enabled = get_pconfig(local_user(),'blogger','post_by_default'); + $def_enabled = PConfig::get(local_user(), 'blogger', 'post_by_default'); $def_checked = (($def_enabled) ? ' checked="checked" ' : ''); @@ -67,65 +76,59 @@ function blogger_settings(&$a,&$s) { $bl_password = get_pconfig(local_user(), 'blogger', 'bl_password'); $bl_blog = get_pconfig(local_user(), 'blogger', 'bl_blog'); + /* Add some HTML to the existing form */ + $s .= ''; + $s .= '

'. L10n::t('Blogger Export').'

'; + $s .= '
'; + $s .= ''; } -function blogger_settings_post(&$a,&$b) { - - if(x($_POST,'blogger-submit')) { - - set_pconfig(local_user(),'blogger','post',intval($_POST['blogger'])); - set_pconfig(local_user(),'blogger','post_by_default',intval($_POST['bl_bydefault'])); - set_pconfig(local_user(),'blogger','bl_username',trim($_POST['bl_username'])); - set_pconfig(local_user(),'blogger','bl_password',trim($_POST['bl_password'])); - set_pconfig(local_user(),'blogger','bl_blog',trim($_POST['bl_blog'])); - +function blogger_settings_post(&$a, &$b) +{ + if (x($_POST, 'blogger-submit')) { + PConfig::set(local_user(), 'blogger', 'post', intval($_POST['blogger'])); + PConfig::set(local_user(), 'blogger', 'post_by_default', intval($_POST['bl_bydefault'])); + PConfig::set(local_user(), 'blogger', 'bl_username', trim($_POST['bl_username'])); + PConfig::set(local_user(), 'blogger', 'bl_password', trim($_POST['bl_password'])); + PConfig::set(local_user(), 'blogger', 'bl_blog', trim($_POST['bl_blog'])); } } -function blogger_post_local(&$a,&$b) { - +function blogger_post_local(&$a, &$b) +{ // This can probably be changed to allow editing by pointing to a different API endpoint if($b['edit']) @@ -137,11 +140,11 @@ function blogger_post_local(&$a,&$b) { if($b['private'] || $b['parent']) return; - $bl_post = intval(get_pconfig(local_user(),'blogger','post')); + $bl_post = intval(PConfig::get(local_user(), 'blogger', 'post')); - $bl_enable = (($bl_post && x($_REQUEST,'blogger_enable')) ? intval($_REQUEST['blogger_enable']) : 0); + $bl_enable = (($bl_post && x($_REQUEST, 'blogger_enable')) ? intval($_REQUEST['blogger_enable']) : 0); - if($b['api_source'] && intval(get_pconfig(local_user(),'blogger','post_by_default'))) + if ($b['api_source'] && intval(PConfig::get(local_user(), 'blogger', 'post_by_default'))) { $bl_enable = 1; if(! $bl_enable) @@ -155,28 +158,24 @@ function blogger_post_local(&$a,&$b) { -function blogger_send(&$a,&$b) { +function blogger_send(&$a, &$b) +{ + if ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) { + return; + } - if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) - return; - - if(! strstr($b['postopts'],'blogger')) - return; - - if($b['parent'] != $b['id']) - return; + if (! strstr($b['postopts'], 'blogger')) { + return; + } - $bl_username = xmlify(get_pconfig($b['uid'],'blogger','bl_username')); - $bl_password = xmlify(get_pconfig($b['uid'],'blogger','bl_password')); - $bl_blog = get_pconfig($b['uid'],'blogger','bl_blog'); + $bl_username = xmlify(PConfig::get($b['uid'], 'blogger', 'bl_username')); + $bl_password = xmlify(PConfig::get($b['uid'], 'blogger', 'bl_password')); + $bl_blog = PConfig::get($b['uid'], 'blogger', 'bl_blog'); - if($bl_username && $bl_password && $bl_blog) { - - require_once('include/bbcode.php'); - - $title = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; - $post = $title . bbcode($b['body']); + if ($bl_username && $bl_password && $bl_blog) { + $title = '' . (($b['title']) ? $b['title'] : L10n::t('Post from Friendica')) . ''; + $post = $title . BBCode::convert($b['body']); $post = xmlify($post); $xml = <<< EOT @@ -197,10 +196,11 @@ EOT; logger('blogger: data: ' . $xml, LOGGER_DATA); - if($bl_blog !== 'test') - $x = post_url($bl_blog,$xml); + if ($bl_blog !== 'test') { + $x = Network::post($bl_blog, $xml); + } + logger('posted to blogger: ' . (($x) ? $x : ''), LOGGER_DEBUG); } } - diff --git a/blogger/lang/C/messages.po b/blogger/lang/C/messages.po index 1f99bc65..f04bbb39 100644 --- a/blogger/lang/C/messages.po +++ b/blogger/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Blogger Export" msgstr "" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "" #: blogger.php:87 diff --git a/blogger/lang/ca/strings.php b/blogger/lang/ca/strings.php index 354d354a..572617ca 100644 --- a/blogger/lang/ca/strings.php +++ b/blogger/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "Enviament a blogger"; $a->strings["Blogger Post Settings"] = "Ajustos d'enviament a blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Habilita el Plugin d'Enviaments a Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Habilita el Addon d'Enviaments a Blogger"; $a->strings["Blogger username"] = "Nom d'usuari a blogger"; $a->strings["Blogger password"] = "Contrasenya a blogger"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/blogger/lang/cs/messages.po b/blogger/lang/cs/messages.po index 0d2a1227..e2389585 100644 --- a/blogger/lang/cs/messages.po +++ b/blogger/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "Blogger Export" msgstr "Blogger Export" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Povolit Blogger Post Plugin" +msgid "Enable Blogger Post Addon" +msgstr "Povolit Blogger Post Addon" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/de/messages.po b/blogger/lang/de/messages.po index 61cb7863..0ecdfd79 100644 --- a/blogger/lang/de/messages.po +++ b/blogger/lang/de/messages.po @@ -28,8 +28,8 @@ msgid "Blogger Export" msgstr "Blogger Export" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Blogger-Post-Plugin aktivieren" +msgid "Enable Blogger Post Addon" +msgstr "Blogger-Post-Addon aktivieren" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/de/strings.php b/blogger/lang/de/strings.php index 8e44b4c2..549b6a2b 100644 --- a/blogger/lang/de/strings.php +++ b/blogger/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to blogger"] = "Auf Blogger posten"; $a->strings["Blogger Export"] = "Blogger Export"; -$a->strings["Enable Blogger Post Plugin"] = "Blogger-Post-Plugin aktivieren"; +$a->strings["Enable Blogger Post Addon"] = "Blogger-Post-Addon aktivieren"; $a->strings["Blogger username"] = "Blogger-Benutzername"; $a->strings["Blogger password"] = "Blogger-Passwort"; $a->strings["Blogger API URL"] = "Blogger-API-URL"; diff --git a/blogger/lang/eo/strings.php b/blogger/lang/eo/strings.php index 5ab29790..a7783cd8 100644 --- a/blogger/lang/eo/strings.php +++ b/blogger/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "Afiŝi al blogger"; $a->strings["Blogger Post Settings"] = "Agordo pri Blogger Afiŝoj"; -$a->strings["Enable Blogger Post Plugin"] = "Ŝalti la Blogger afiŝo kromprogramon"; +$a->strings["Enable Blogger Post Addon"] = "Ŝalti la Blogger afiŝo kromprogramon"; $a->strings["Blogger username"] = "Blogger uzantonomo"; $a->strings["Blogger password"] = "Blogger pasvorto"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/blogger/lang/es/messages.po b/blogger/lang/es/messages.po index 86b1dcb7..66b6804f 100644 --- a/blogger/lang/es/messages.po +++ b/blogger/lang/es/messages.po @@ -27,8 +27,8 @@ msgid "Blogger Export" msgstr "Esportar Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Activar plugin de entrada de Blogger" +msgid "Enable Blogger Post Addon" +msgstr "Activar addon de entrada de Blogger" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/es/strings.php b/blogger/lang/es/strings.php index 01441ae5..47e44a49 100644 --- a/blogger/lang/es/strings.php +++ b/blogger/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to blogger"] = "Entrada para blogger"; $a->strings["Blogger Export"] = "Esportar Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Activar plugin de entrada de Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Activar addon de entrada de Blogger"; $a->strings["Blogger username"] = "Nombre de usuario de Blogger"; $a->strings["Blogger password"] = "Contraseña de Blogger"; $a->strings["Blogger API URL"] = "URL API de Blogger"; diff --git a/blogger/lang/fr/messages.po b/blogger/lang/fr/messages.po index 0438f3d8..497bf0be 100644 --- a/blogger/lang/fr/messages.po +++ b/blogger/lang/fr/messages.po @@ -28,7 +28,7 @@ msgid "Blogger Export" msgstr "" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Activer le connecteur Blogger" #: blogger.php:87 diff --git a/blogger/lang/fr/strings.php b/blogger/lang/fr/strings.php index 2265182a..89a429ae 100644 --- a/blogger/lang/fr/strings.php +++ b/blogger/lang/fr/strings.php @@ -7,7 +7,7 @@ function string_plural_select_fr($n){ ; $a->strings["Post to blogger"] = "Poster sur Blogger"; $a->strings["Blogger Export"] = ""; -$a->strings["Enable Blogger Post Plugin"] = "Activer le connecteur Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Activer le connecteur Blogger"; $a->strings["Blogger username"] = "Nom d'utilisateur Blogger"; $a->strings["Blogger password"] = "Mot de passe Blogger"; $a->strings["Blogger API URL"] = "URL de l'API de Blogger"; diff --git a/blogger/lang/is/messages.po b/blogger/lang/is/messages.po index 1c76cf74..e29ce496 100644 --- a/blogger/lang/is/messages.po +++ b/blogger/lang/is/messages.po @@ -28,7 +28,7 @@ msgid "Blogger Export" msgstr "Flytja út blogg" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Virkja sendiviðbót fyrir blogg" #: blogger.php:87 diff --git a/blogger/lang/is/strings.php b/blogger/lang/is/strings.php index 01f532f6..deab7af8 100644 --- a/blogger/lang/is/strings.php +++ b/blogger/lang/is/strings.php @@ -7,7 +7,7 @@ function string_plural_select_is($n){ ; $a->strings["Post to blogger"] = "Senda færslu á bloggara"; $a->strings["Blogger Export"] = "Flytja út blogg"; -$a->strings["Enable Blogger Post Plugin"] = "Virkja sendiviðbót fyrir blogg"; +$a->strings["Enable Blogger Post Addon"] = "Virkja sendiviðbót fyrir blogg"; $a->strings["Blogger username"] = "Notandanafn bloggara"; $a->strings["Blogger password"] = "Aðgangsorð bloggara"; $a->strings["Blogger API URL"] = "API slóð bloggs"; diff --git a/blogger/lang/it/messages.po b/blogger/lang/it/messages.po index 6babcabf..9ee69d62 100644 --- a/blogger/lang/it/messages.po +++ b/blogger/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014 +# fabrixxm , 2014,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-06-22 13:18+0200\n" -"PO-Revision-Date: 2014-09-10 10:24+0000\n" +"PO-Revision-Date: 2018-03-19 13:21+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -28,8 +28,8 @@ msgid "Blogger Export" msgstr "Esporta Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" -msgstr "Abilita il plugin di invio a Blogger" +msgid "Enable Blogger Post Addon" +msgstr "Abilita il componente aggiuntivo di invio a Blogger" #: blogger.php:87 msgid "Blogger username" diff --git a/blogger/lang/it/strings.php b/blogger/lang/it/strings.php index deea28a5..80b7b5fa 100644 --- a/blogger/lang/it/strings.php +++ b/blogger/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to blogger"] = "Invia a Blogger"; $a->strings["Blogger Export"] = "Esporta Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Abilita il plugin di invio a Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Abilita il componente aggiuntivo di invio a Blogger"; $a->strings["Blogger username"] = "Nome utente Blogger"; $a->strings["Blogger password"] = "Password Blogger"; $a->strings["Blogger API URL"] = "Indirizzo API Blogger"; diff --git a/blogger/lang/nb-no/strings.php b/blogger/lang/nb-no/strings.php index de7246bc..3c5a03df 100644 --- a/blogger/lang/nb-no/strings.php +++ b/blogger/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = ""; $a->strings["Blogger Post Settings"] = ""; -$a->strings["Enable Blogger Post Plugin"] = ""; +$a->strings["Enable Blogger Post Addon"] = ""; $a->strings["Blogger username"] = ""; $a->strings["Blogger password"] = ""; $a->strings["Blogger API URL"] = ""; diff --git a/blogger/lang/pl/strings.php b/blogger/lang/pl/strings.php index a08b447b..c2e7e2d6 100644 --- a/blogger/lang/pl/strings.php +++ b/blogger/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "Post na blogger"; $a->strings["Blogger Post Settings"] = "Ustawienia postów na Blogger"; -$a->strings["Enable Blogger Post Plugin"] = ""; +$a->strings["Enable Blogger Post Addon"] = ""; $a->strings["Blogger username"] = "Nazwa użytkownika na Blogger"; $a->strings["Blogger password"] = "Hasło do Blogger"; $a->strings["Blogger API URL"] = ""; diff --git a/blogger/lang/pt-br/messages.po b/blogger/lang/pt-br/messages.po index af8a5ba0..6b22fc20 100644 --- a/blogger/lang/pt-br/messages.po +++ b/blogger/lang/pt-br/messages.po @@ -29,7 +29,7 @@ msgid "Blogger Export" msgstr "Exportador Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Habilitar plug-in para publicar no Blogger" #: blogger.php:87 diff --git a/blogger/lang/pt-br/strings.php b/blogger/lang/pt-br/strings.php index dcd10fab..74a79aca 100644 --- a/blogger/lang/pt-br/strings.php +++ b/blogger/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to blogger"] = "Publicar no Blogger"; $a->strings["Blogger Export"] = "Exportador Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Habilitar plug-in para publicar no Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Habilitar plug-in para publicar no Blogger"; $a->strings["Blogger username"] = "Nome de usuário no Blogger"; $a->strings["Blogger password"] = "Senha do Blogger"; $a->strings["Blogger API URL"] = "URL da API do Blogger"; diff --git a/blogger/lang/ro/messages.po b/blogger/lang/ro/messages.po index 8ba21d2f..de35da2b 100644 --- a/blogger/lang/ro/messages.po +++ b/blogger/lang/ro/messages.po @@ -27,7 +27,7 @@ msgid "Blogger Export" msgstr "Export pe Blogger " #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Activare Modul Postare pe Blogger " #: blogger.php:87 diff --git a/blogger/lang/ro/strings.php b/blogger/lang/ro/strings.php index f89fd4b9..f6aac95d 100644 --- a/blogger/lang/ro/strings.php +++ b/blogger/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to blogger"] = "Postați pe Blogger"; $a->strings["Blogger Export"] = "Export pe Blogger "; -$a->strings["Enable Blogger Post Plugin"] = "Activare Modul Postare pe Blogger "; +$a->strings["Enable Blogger Post Addon"] = "Activare Modul Postare pe Blogger "; $a->strings["Blogger username"] = "Utilizator Blogger"; $a->strings["Blogger password"] = "Parolă Blogger "; $a->strings["Blogger API URL"] = "URL Cheie API Blogger "; diff --git a/blogger/lang/ru/messages.po b/blogger/lang/ru/messages.po index 38942ed6..93d8ce3f 100644 --- a/blogger/lang/ru/messages.po +++ b/blogger/lang/ru/messages.po @@ -28,7 +28,7 @@ msgid "Blogger Export" msgstr "Экспорт в Blogger" #: blogger.php:82 -msgid "Enable Blogger Post Plugin" +msgid "Enable Blogger Post Addon" msgstr "Включить плагин Blogger" #: blogger.php:87 diff --git a/blogger/lang/ru/strings.php b/blogger/lang/ru/strings.php index a718ce74..3c2e1a29 100644 --- a/blogger/lang/ru/strings.php +++ b/blogger/lang/ru/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ru($n){ ; $a->strings["Post to blogger"] = "Написать в Blogger"; $a->strings["Blogger Export"] = "Экспорт в Blogger"; -$a->strings["Enable Blogger Post Plugin"] = "Включить плагин Blogger"; +$a->strings["Enable Blogger Post Addon"] = "Включить плагин Blogger"; $a->strings["Blogger username"] = "Имя пользователя Blogger"; $a->strings["Blogger password"] = "Пароль Blogger"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/blogger/lang/zh-cn/strings.php b/blogger/lang/zh-cn/strings.php index 6134a7d1..d9b71731 100644 --- a/blogger/lang/zh-cn/strings.php +++ b/blogger/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to blogger"] = "转播到blogger"; $a->strings["Blogger Post Settings"] = "Blogger转播设置"; -$a->strings["Enable Blogger Post Plugin"] = "使Blogger转播插件可用"; +$a->strings["Enable Blogger Post Addon"] = "使Blogger转播插件可用"; $a->strings["Blogger username"] = "Blogger用户名"; $a->strings["Blogger password"] = "Blogger密码"; $a->strings["Blogger API URL"] = "Blogger API URL"; diff --git a/buffer/README.md b/buffer/README.md index 2ba2b01e..f97cf07b 100644 --- a/buffer/README.md +++ b/buffer/README.md @@ -5,4 +5,4 @@ Please register an app at [http://bufferapp.com/developers/api](http://bufferapp Please use (your server address)/buffer/connect as Callback URL. After the registration please enter the values for "Client ID" and "Client Secret" in the -[administration](admin/plugins/buffer). +[administration](admin/addons/buffer). diff --git a/buffer/buffer.php b/buffer/buffer.php index ca33708c..9b0979ee 100644 --- a/buffer/buffer.php +++ b/buffer/buffer.php @@ -5,22 +5,30 @@ * Version: 0.2 * Author: Michael Vogel */ -require('addon/buffer/bufferapp.php'); +require 'addon/buffer/bufferapp.php'; + +use Friendica\App; +use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Plaintext; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function buffer_install() { - register_hook('post_local', 'addon/buffer/buffer.php', 'buffer_post_local'); - register_hook('notifier_normal', 'addon/buffer/buffer.php', 'buffer_send'); - register_hook('jot_networks', 'addon/buffer/buffer.php', 'buffer_jot_nets'); - register_hook('connector_settings', 'addon/buffer/buffer.php', 'buffer_settings'); - register_hook('connector_settings_post', 'addon/buffer/buffer.php', 'buffer_settings_post'); + Addon::registerHook('post_local', 'addon/buffer/buffer.php', 'buffer_post_local'); + Addon::registerHook('notifier_normal', 'addon/buffer/buffer.php', 'buffer_send'); + Addon::registerHook('jot_networks', 'addon/buffer/buffer.php', 'buffer_jot_nets'); + Addon::registerHook('connector_settings', 'addon/buffer/buffer.php', 'buffer_settings'); + Addon::registerHook('connector_settings_post', 'addon/buffer/buffer.php', 'buffer_settings_post'); } function buffer_uninstall() { - unregister_hook('post_local', 'addon/buffer/buffer.php', 'buffer_post_local'); - unregister_hook('notifier_normal', 'addon/buffer/buffer.php', 'buffer_send'); - unregister_hook('jot_networks', 'addon/buffer/buffer.php', 'buffer_jot_nets'); - unregister_hook('connector_settings', 'addon/buffer/buffer.php', 'buffer_settings'); - unregister_hook('connector_settings_post', 'addon/buffer/buffer.php', 'buffer_settings_post'); + Addon::unregisterHook('post_local', 'addon/buffer/buffer.php', 'buffer_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/buffer/buffer.php', 'buffer_send'); + Addon::unregisterHook('jot_networks', 'addon/buffer/buffer.php', 'buffer_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/buffer/buffer.php', 'buffer_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/buffer/buffer.php', 'buffer_settings_post'); } function buffer_module() {} @@ -28,7 +36,7 @@ function buffer_module() {} function buffer_content(&$a) { if(! local_user()) { - notice( t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.') . EOL); return ''; } @@ -50,28 +58,30 @@ function buffer_content(&$a) { return $o; } -function buffer_plugin_admin(&$a, &$o){ - $t = get_markup_template( "admin.tpl", "addon/buffer/" ); +function buffer_addon_admin(&$a, &$o) +{ + $t = get_markup_template("admin.tpl", "addon/buffer/"); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - // name, label, value, help, [extra values] - '$client_id' => array('client_id', t('Client ID'), get_config('buffer', 'client_id' ), ''), - '$client_secret' => array('client_secret', t('Client Secret'), get_config('buffer', 'client_secret' ), ''), - )); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + // name, label, value, help, [extra values] + '$client_id' => ['client_id', L10n::t('Client ID'), Config::get('buffer', 'client_id'), ''], + '$client_secret' => ['client_secret', L10n::t('Client Secret'), Config::get('buffer', 'client_secret'), ''], + ]); } -function buffer_plugin_admin_post(&$a){ - $client_id = ((x($_POST,'client_id')) ? notags(trim($_POST['client_id'])) : ''); - $client_secret = ((x($_POST,'client_secret')) ? notags(trim($_POST['client_secret'])): ''); - set_config('buffer','client_id',$client_id); - set_config('buffer','client_secret',$client_secret); - info( t('Settings updated.'). EOL ); +function buffer_addon_admin_post(&$a) +{ + $client_id = ((x($_POST, 'client_id')) ? notags(trim($_POST['client_id'])) : ''); + $client_secret = ((x($_POST, 'client_secret')) ? notags(trim($_POST['client_secret'])): ''); + Config::set('buffer', 'client_id', $client_id); + Config::set('buffer', 'client_secret', $client_secret); + info(L10n::t('Settings updated.'). EOL); } function buffer_connect(&$a) { if (isset($_REQUEST["error"])) { - $o = t('Error when registering buffer connection:')." ".$_REQUEST["error"]; + $o = L10n::t('Error when registering buffer connection:')." ".$_REQUEST["error"]; return $o; } // Start a session. This is necessary to hold on to a few keys the callback script will also need @@ -90,9 +100,9 @@ function buffer_connect(&$a) { $o .= 'Connect to Buffer!'; } else { logger("buffer_connect: authenticated"); - $o .= t("You are now authenticated to buffer. "); - $o .= '
'.t("return to the connector page").''; - set_pconfig(local_user(), 'buffer','access_token', $buffer->access_token); + $o .= L10n::t("You are now authenticated to buffer. "); + $o .= '
'.L10n::t("return to the connector page").''; + PConfig::set(local_user(), 'buffer','access_token', $buffer->access_token); } return($o); @@ -107,7 +117,7 @@ function buffer_jot_nets(&$a,&$b) { $buffer_defpost = get_pconfig(local_user(),'buffer','post_by_default'); $selected = ((intval($buffer_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to Buffer') . '
'; + . L10n::t('Post to Buffer') . ''; } } @@ -132,11 +142,11 @@ function buffer_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

'. t('Buffer Export').'

'; + $s .= '

'. L10n::t('Buffer Export').'

'; $s .= '
'; $s .= ''; } @@ -173,16 +179,12 @@ function dwpost_send(&$a,&$b) { $dw_blog = 'http://www.dreamwidth.org/interface/xmlrpc'; if($dw_username && $dw_password && $dw_blog) { - - require_once('include/bbcode.php'); - require_once('include/datetime.php'); - $title = $b['title']; - $post = bbcode($b['body']); + $post = BBCode::convert($b['body']); $post = xmlify($post); $tags = dwpost_get_tags($b['tag']); - $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s'); + $date = DateTimeFormat::convert($b['created'], $tz); $year = intval(substr($date,0,4)); $mon = intval(substr($date,5,2)); $day = intval(substr($date,8,2)); @@ -218,10 +220,10 @@ EOT; logger('dwpost: data: ' . $xml, LOGGER_DATA); - if($dw_blog !== 'test') - $x = post_url($dw_blog,$xml,array("Content-Type: text/xml")); + if($dw_blog !== 'test') { + $x = Network::post($dw_blog, $xml, ["Content-Type: text/xml"]); + } logger('posted to dreamwidth: ' . ($x) ? $x : '', LOGGER_DEBUG); - } } diff --git a/dwpost/lang/C/messages.po b/dwpost/lang/C/messages.po index 6bed922f..c81e9f0f 100644 --- a/dwpost/lang/C/messages.po +++ b/dwpost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Dreamwidth Post Settings" msgstr "" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "" #: dwpost.php:77 diff --git a/dwpost/lang/ca/strings.php b/dwpost/lang/ca/strings.php index 6ad56a9b..3b7df6d0 100644 --- a/dwpost/lang/ca/strings.php +++ b/dwpost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Missatge a Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Configuració d'enviaments a Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Habilitat el plugin d'enviaments a Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Habilitat el addon d'enviaments a Dreamwidth"; $a->strings["dreamwidth username"] = "Nom d'usuari a Dreamwidth"; $a->strings["dreamwidth password"] = "Contrasenya a Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Enviar per defecte a Dreamwidth"; diff --git a/dwpost/lang/cs/messages.po b/dwpost/lang/cs/messages.po index 2291657a..fb01a38e 100644 --- a/dwpost/lang/cs/messages.po +++ b/dwpost/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "Dreamwidth Post Settings" msgstr "Dreamwidth nastavení příspěvků" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Povolit dreamwidth Plugin" +msgid "Enable dreamwidth Post Addon" +msgstr "Povolit dreamwidth Addon" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/cs/strings.php b/dwpost/lang/cs/strings.php index 6d02b09f..df348a83 100644 --- a/dwpost/lang/cs/strings.php +++ b/dwpost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to Dreamwidth"] = "Poslat na Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Dreamwidth nastavení příspěvků"; -$a->strings["Enable dreamwidth Post Plugin"] = "Povolit dreamwidth Plugin"; +$a->strings["Enable dreamwidth Post Addon"] = "Povolit dreamwidth Addon"; $a->strings["dreamwidth username"] = "dreamwidth uživatelské jméno"; $a->strings["dreamwidth password"] = "dreamwidth heslo"; $a->strings["Post to dreamwidth by default"] = "Defaultně umístit na dreamwidth"; diff --git a/dwpost/lang/de/messages.po b/dwpost/lang/de/messages.po index 81507eed..07e6beb6 100644 --- a/dwpost/lang/de/messages.po +++ b/dwpost/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "Dreamwidth Post Settings" msgstr "Dreamwidth Veröffentlichungs-Einstellungen" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Dreamwidth Post Plugin aktivieren" +msgid "Enable dreamwidth Post Addon" +msgstr "Dreamwidth Post Addon aktivieren" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/de/strings.php b/dwpost/lang/de/strings.php index a8095899..a810f79e 100644 --- a/dwpost/lang/de/strings.php +++ b/dwpost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to Dreamwidth"] = "In Dreamwidth veröffentlichen"; $a->strings["Dreamwidth Post Settings"] = "Dreamwidth Veröffentlichungs-Einstellungen"; -$a->strings["Enable dreamwidth Post Plugin"] = "Dreamwidth Post Plugin aktivieren"; +$a->strings["Enable dreamwidth Post Addon"] = "Dreamwidth Post Addon aktivieren"; $a->strings["dreamwidth username"] = "Dreamwidth Benutzername"; $a->strings["dreamwidth password"] = "Dreamwidth Passwort"; $a->strings["Post to dreamwidth by default"] = "Standardmäßig bei Dreamwidth veröffentlichen"; diff --git a/dwpost/lang/eo/strings.php b/dwpost/lang/eo/strings.php index 967d4b9b..d0c96db6 100644 --- a/dwpost/lang/eo/strings.php +++ b/dwpost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Afiŝi al Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Agordoj por Afiŝoj al Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Ŝalti la Dreamwidth Kromprogramon"; +$a->strings["Enable dreamwidth Post Addon"] = "Ŝalti la Dreamwidth Kromprogramon"; $a->strings["dreamwidth username"] = "Dreamwidth salutnomo"; $a->strings["dreamwidth password"] = "Dreamwidth pasvorto"; $a->strings["Post to dreamwidth by default"] = "Defaŭlte afiŝi al Dreamwidth"; diff --git a/dwpost/lang/es/messages.po b/dwpost/lang/es/messages.po index 10368bb2..18036677 100644 --- a/dwpost/lang/es/messages.po +++ b/dwpost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "Dreamwidth Post Settings" msgstr "Ajustes de publicación de Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Activar el plugin de publicación dreamwidth" +msgid "Enable dreamwidth Post Addon" +msgstr "Activar el addon de publicación dreamwidth" #: dwpost.php:77 msgid "dreamwidth username" diff --git a/dwpost/lang/es/strings.php b/dwpost/lang/es/strings.php index 646b945b..4c5c116f 100644 --- a/dwpost/lang/es/strings.php +++ b/dwpost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to Dreamwidth"] = "Publicar en Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Ajustes de publicación de Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Activar el plugin de publicación dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Activar el addon de publicación dreamwidth"; $a->strings["dreamwidth username"] = "Nombre de usuario de dreamwidth"; $a->strings["dreamwidth password"] = "Contraseña de dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Publicar en dreamwidth por defecto"; diff --git a/dwpost/lang/fr/messages.po b/dwpost/lang/fr/messages.po index d0010280..1277d590 100644 --- a/dwpost/lang/fr/messages.po +++ b/dwpost/lang/fr/messages.po @@ -29,7 +29,7 @@ msgid "Dreamwidth Post Settings" msgstr "Paramètres pour Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "" #: dwpost.php:77 diff --git a/dwpost/lang/fr/strings.php b/dwpost/lang/fr/strings.php index 138d9d8a..5ecda471 100644 --- a/dwpost/lang/fr/strings.php +++ b/dwpost/lang/fr/strings.php @@ -7,7 +7,7 @@ function string_plural_select_fr($n){ ; $a->strings["Post to Dreamwidth"] = "Publier sur Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Paramètres pour Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = "Nom d'utilisateur Dreamwidth"; $a->strings["dreamwidth password"] = "Mot de passe dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Poster sur Dreamwidth par défaut"; diff --git a/dwpost/lang/is/strings.php b/dwpost/lang/is/strings.php index 96f1f78b..e5fee400 100644 --- a/dwpost/lang/is/strings.php +++ b/dwpost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = ""; $a->strings["Dreamwidth Post Settings"] = ""; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = ""; $a->strings["dreamwidth password"] = ""; $a->strings["Post to dreamwidth by default"] = ""; diff --git a/dwpost/lang/it/messages.po b/dwpost/lang/it/messages.po index dbd21016..9ce05fe2 100644 --- a/dwpost/lang/it/messages.po +++ b/dwpost/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014 +# fabrixxm , 2014,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-10-22 07:54+0000\n" +"PO-Revision-Date: 2018-03-19 13:21+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -21,15 +21,15 @@ msgstr "" #: dwpost.php:39 msgid "Post to Dreamwidth" -msgstr "Posta su Dreamwidth" +msgstr "Invia a Dreamwidth" #: dwpost.php:70 msgid "Dreamwidth Post Settings" -msgstr "Impostazioni di invio a Dreamwidth" +msgstr "Impostazioni Invio a Dreeamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" -msgstr "Abilita il plugin di invio a Dreamwidth" +msgid "Enable dreamwidth Post Addon" +msgstr "Abilita il componente aggiuntivo di invio a Dreamwidth" #: dwpost.php:77 msgid "dreamwidth username" @@ -45,4 +45,4 @@ msgstr "Invia sempre a Dreamwidth" #: dwpost.php:93 msgid "Submit" -msgstr "Invia" +msgstr "Salva" diff --git a/dwpost/lang/it/strings.php b/dwpost/lang/it/strings.php index 5cded6e1..0f40abc6 100644 --- a/dwpost/lang/it/strings.php +++ b/dwpost/lang/it/strings.php @@ -5,10 +5,10 @@ function string_plural_select_it($n){ return ($n != 1);; }} ; -$a->strings["Post to Dreamwidth"] = "Posta su Dreamwidth"; -$a->strings["Dreamwidth Post Settings"] = "Impostazioni di invio a Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Abilita il plugin di invio a Dreamwidth"; +$a->strings["Post to Dreamwidth"] = "Invia a Dreamwidth"; +$a->strings["Dreamwidth Post Settings"] = "Impostazioni Invio a Dreeamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Abilita il componente aggiuntivo di invio a Dreamwidth"; $a->strings["dreamwidth username"] = "Nome utente Dreamwidth"; $a->strings["dreamwidth password"] = "password Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Invia sempre a Dreamwidth"; -$a->strings["Submit"] = "Invia"; +$a->strings["Submit"] = "Salva"; diff --git a/dwpost/lang/nb-no/strings.php b/dwpost/lang/nb-no/strings.php index 37677e6d..c4ea612b 100644 --- a/dwpost/lang/nb-no/strings.php +++ b/dwpost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = ""; $a->strings["Dreamwidth Post Settings"] = ""; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = ""; $a->strings["dreamwidth password"] = ""; $a->strings["Post to dreamwidth by default"] = ""; diff --git a/dwpost/lang/pl/strings.php b/dwpost/lang/pl/strings.php index 237c95d9..9f1ff04e 100644 --- a/dwpost/lang/pl/strings.php +++ b/dwpost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Opublikuj na Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = ""; -$a->strings["Enable dreamwidth Post Plugin"] = ""; +$a->strings["Enable dreamwidth Post Addon"] = ""; $a->strings["dreamwidth username"] = ""; $a->strings["dreamwidth password"] = ""; $a->strings["Post to dreamwidth by default"] = ""; diff --git a/dwpost/lang/pt-br/messages.po b/dwpost/lang/pt-br/messages.po index 26c3bba6..f0e49e4e 100644 --- a/dwpost/lang/pt-br/messages.po +++ b/dwpost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "Dreamwidth Post Settings" msgstr "Configurações de publicação no Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "Habilitar plug-in para publicar no Dreamwidth" #: dwpost.php:77 diff --git a/dwpost/lang/pt-br/strings.php b/dwpost/lang/pt-br/strings.php index 329cf9e3..03dc7d2d 100644 --- a/dwpost/lang/pt-br/strings.php +++ b/dwpost/lang/pt-br/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "Publicar no Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Configurações de publicação no Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Habilitar o plugin de publicação no Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Habilitar o addon de publicação no Dreamwidth"; $a->strings["dreamwidth username"] = "Nome de usuário do Dreamwidth"; $a->strings["dreamwidth password"] = "Senha do Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Publicar no Dreamwidth por padrão"; diff --git a/dwpost/lang/ro/messages.po b/dwpost/lang/ro/messages.po index f2fd9e0c..91285968 100644 --- a/dwpost/lang/ro/messages.po +++ b/dwpost/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "Dreamwidth Post Settings" msgstr "Configurări Postări Dreamwidth " #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "Activare Modul Postare pe Dreamwidth" #: dwpost.php:77 diff --git a/dwpost/lang/ro/strings.php b/dwpost/lang/ro/strings.php index d50f3803..ed3ece27 100644 --- a/dwpost/lang/ro/strings.php +++ b/dwpost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to Dreamwidth"] = "Postați pe Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Configurări Postări Dreamwidth "; -$a->strings["Enable dreamwidth Post Plugin"] = "Activare Modul Postare pe Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Activare Modul Postare pe Dreamwidth"; $a->strings["dreamwidth username"] = "Utilizator Dreamwidth"; $a->strings["dreamwidth password"] = "Parola Dreamwidth "; $a->strings["Post to dreamwidth by default"] = "Postați implicit pe Dreamwidth"; diff --git a/dwpost/lang/ru/messages.po b/dwpost/lang/ru/messages.po index fc01bce0..93e400e5 100644 --- a/dwpost/lang/ru/messages.po +++ b/dwpost/lang/ru/messages.po @@ -28,7 +28,7 @@ msgid "Dreamwidth Post Settings" msgstr "Настройки сообщений Dreamwidth" #: dwpost.php:72 -msgid "Enable dreamwidth Post Plugin" +msgid "Enable dreamwidth Post Addon" msgstr "Включить плагин отправки сообщений в Dreamwidth" #: dwpost.php:77 diff --git a/dwpost/lang/ru/strings.php b/dwpost/lang/ru/strings.php index db1b2755..7b6e5f47 100644 --- a/dwpost/lang/ru/strings.php +++ b/dwpost/lang/ru/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ru($n){ ; $a->strings["Post to Dreamwidth"] = "Отправить в Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Настройки сообщений Dreamwidth"; -$a->strings["Enable dreamwidth Post Plugin"] = "Включить плагин отправки сообщений в Dreamwidth"; +$a->strings["Enable dreamwidth Post Addon"] = "Включить плагин отправки сообщений в Dreamwidth"; $a->strings["dreamwidth username"] = "Имя пользователя Dreamwidth"; $a->strings["dreamwidth password"] = "Пароль Dreamwidth"; $a->strings["Post to dreamwidth by default"] = "Отправлять сообщения в Dreamwidth по умолчанию"; diff --git a/dwpost/lang/zh-cn/strings.php b/dwpost/lang/zh-cn/strings.php index 93e075c6..131cd9fa 100644 --- a/dwpost/lang/zh-cn/strings.php +++ b/dwpost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Dreamwidth"] = "转播到Dreamwidth"; $a->strings["Dreamwidth Post Settings"] = "Dreamwidth转播设置"; -$a->strings["Enable dreamwidth Post Plugin"] = "使Dreamwidth转播插件可用"; +$a->strings["Enable dreamwidth Post Addon"] = "使Dreamwidth转播插件可用"; $a->strings["dreamwidth username"] = "Dreamwidth用户名"; $a->strings["dreamwidth password"] = "Dreamwidth密码"; $a->strings["Post to dreamwidth by default"] = "默认地转播到Dreamwidth"; diff --git a/fortunate/fortunate.php b/fortunate/fortunate.php index 427d620c..8c15caa6 100644 --- a/fortunate/fortunate.php +++ b/fortunate/fortunate.php @@ -5,31 +5,34 @@ * Version: 1.0 * Author: Mike Macgirvin */ +use Friendica\Core\Addon; +use Friendica\Util\Network; // IMPORTANT: SET THIS to your fortunate server -define ('FORTUNATE_SERVER', 'hostname.com'); +define('FORTUNATE_SERVER', 'hostname.com'); -function fortunate_install() { - register_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); - if(FORTUNATE_SERVER == 'hostname.com' && is_site_admin()) { - notice('Fortunate plugin requires configuration. See README'); +function fortunate_install() +{ + Addon::registerHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); + if (FORTUNATE_SERVER == 'hostname.com' && is_site_admin()) { + notice('Fortunate addon requires configuration. See README'); } } -function fortunate_uninstall() { - unregister_hook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); +function fortunate_uninstall() +{ + Addon::unregisterHook('page_end', 'addon/fortunate/fortunate.php', 'fortunate_fetch'); } -function fortunate_fetch(&$a,&$b) { - +function fortunate_fetch(&$a, &$b) +{ $a->page['htmlhead'] .= '' . "\r\n"; - if(FORTUNATE_SERVER != 'hostname.com') { - $s = fetch_url('http://' . FORTUNATE_SERVER . '/cookie.php?numlines=2&equal=1&rand=' . mt_rand()); + if (FORTUNATE_SERVER != 'hostname.com') { + $s = Network::fetchUrl('http://' . FORTUNATE_SERVER . '/cookie.php?numlines=2&equal=1&rand=' . mt_rand()); $b .= '
' . $s . '
'; } } - diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index a709c9b1..751384a8 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -1,204 +1,215 @@ -*/ + * Name: Forum Directory + * Description: Add a directory of forums hosted on your server, with verbose descriptions. + * Version: 1.0 + * Author: Thomas Willingham + */ -function forumdirectory_install() { -register_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); +use Friendica\Content\Nav; +use Friendica\Content\Widget; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Database\DBM; +use Friendica\Model\Profile; +use Friendica\Util\Temporal; + +require_once 'boot.php'; +require_once 'include/dba.php'; +require_once 'include/text.php'; + +function forumdirectory_install() +{ + Addon::registerHook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); } -function forumdirectory_uninstall() { -unregister_hook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); +function forumdirectory_uninstall() +{ + Addon::unregisterHook('app_menu', 'addon/forumdirectory/forumdirectory.php', 'forumdirectory_app_menu'); } -function forumdirectory_module() { -return; +function forumdirectory_module() +{ + return; } -function forumdirectory_app_menu($a,&$b) { -$b['app_menu'][] = ''; +function forumdirectory_app_menu($a, &$b) +{ + $b['app_menu'][] = ''; } -function forumdirectory_init(&$a) { - $a->page['htmlhead'] .= ''; +function forumdirectory_init(&$a) +{ + $a->page['htmlhead'] .= ''; $a->set_pager_itemspage(60); - if(local_user()) { - require_once('include/contact_widgets.php'); - - $a->page['aside'] .= findpeople_widget(); - - } - else + if (local_user()) { + $a->page['aside'] .= Widget::findPeople(); + } else { unset($_SESSION['theme']); - - + } } - -function forumdirectory_post(&$a) { - if(x($_POST,'search')) +function forumdirectory_post(&$a) +{ + if (x($_POST, 'search')) { $a->data['search'] = $_POST['search']; + } } - - -function forumdirectory_content(&$a) { - - if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) { - notice( t('Public access denied.') . EOL); +function forumdirectory_content(&$a) +{ + if ((Config::get('system', 'block_public')) && (!local_user()) && (!remote_user())) { + notice(L10n::t('Public access denied.') . EOL); return; } $o = ''; - nav_set_selected('directory'); + Nav::setSelected('directory'); - if(x($a->data,'search')) + if (x($a->data, 'search')) { $search = notags(trim($a->data['search'])); - else - $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); + } else { + $search = ((x($_GET, 'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); + } $tpl = get_markup_template('directory_header.tpl'); $globaldir = ''; - $gdirpath = get_config('system','directory'); - if(strlen($gdirpath)) { + $gdirpath = Config::get('system', 'directory'); + if (strlen($gdirpath)) { $globaldir = ''; + . Profile::zrl($gdirpath, true) . '">' . L10n::t('Global Directory') . ''; } $admin = ''; - $o .= replace_macros($tpl, array( - '$search' => $search, + $o .= replace_macros($tpl, [ + '$search' => $search, '$globaldir' => $globaldir, - '$desc' => t('Find on this site'), - '$admin' => $admin, - '$finding' => (strlen($search) ? '

' . t('Finding: ') . "'" . $search . "'" . '

' : ""), - '$sitedir' => t('Site Directory'), - '$submit' => t('Find') - )); + '$desc' => L10n::t('Find on this site'), + '$admin' => $admin, + '$finding' => (strlen($search) ? '

' . L10n::t('Finding: ') . "'" . $search . "'" . '

' : ""), + '$sitedir' => L10n::t('Site Directory'), + '$submit' => L10n::t('Find') + ]); - if($search) - $search = dbesc($search); - $sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : ""); + $sql_extra = ''; + if (strlen($search)) { + $sql_extra = " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country-name`," + . "`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` )" + . " AGAINST ('" . dbesc($search) . "' IN BOOLEAN MODE) "; + } - $publish = ((get_config('system','publish_all')) ? '' : " AND `publish` = 1 " ); + $publish = Config::get('system', 'publish_all') ? '' : " AND `publish` = 1 "; - - $r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra "); - if(count($r)) + $r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid`" + . " WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra "); + if (DBM::is_result($r)) { $a->set_pager_total($r[0]['total']); + } $order = " ORDER BY `name` ASC "; - - $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra $order LIMIT %d , %d ", + $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`" + . " FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is-default` = 1 $publish" + . " AND `user`.`blocked` = 0 AND `page-flags` = 2 $sql_extra $order LIMIT %d , %d ", intval($a->pager['start']), intval($a->pager['itemspage']) ); - if(count($r)) { - if(in_array('small', $a->argv)) + if (DBM::is_result($r)) { + if (in_array('small', $a->argv)) { $photo = 'thumb'; - else + } else { $photo = 'photo'; + } - foreach($r as $rr) { - - + foreach ($r as $rr) { $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); $pdesc = (($rr['pdesc']) ? $rr['pdesc'] . '
' : ''); $details = ''; - if(strlen($rr['locality'])) + if (strlen($rr['locality'])) { $details .= $rr['locality']; - if(strlen($rr['region'])) { - if(strlen($rr['locality'])) + } + + if (strlen($rr['region'])) { + if (strlen($rr['locality'])) { $details .= ', '; + } $details .= $rr['region']; } - if(strlen($rr['country-name'])) { - if(strlen($details)) + if (strlen($rr['country-name'])) { + if (strlen($details)) { $details .= ', '; + } $details .= $rr['country-name']; } - if(strlen($rr['dob'])) { - if(($years = age($rr['dob'],$rr['timezone'],'')) != 0) - $details .= '
' . t('Age: ') . $years ; - } - if(strlen($rr['gender'])) - $details .= '
' . t('Gender: ') . $rr['gender']; - if($rr['page-flags'] == PAGE_NORMAL) - $page_type = "Personal Profile"; - if($rr['page-flags'] == PAGE_SOAPBOX) - $page_type = "Fan Page"; - if($rr['page-flags'] == PAGE_COMMUNITY) - $page_type = "Community Forum"; - if($rr['page-flags'] == PAGE_FREELOVE) - $page_type = "Open Forum"; - if($rr['page-flags'] == PAGE_PRVGROUP) - $page_type = "Private Group"; + if (strlen($rr['dob']) && ($years = Temporal::getAgeByTimezone($rr['dob'], $rr['timezone'], '')) != 0) { + $details .= '
' . L10n::t('Age: ') . $years; + } + + if (strlen($rr['gender'])) { + $details .= '
' . L10n::t('Gender: ') . $rr['gender']; + } + + switch ($rr['page-flags']) { + case PAGE_NORMAL : $page_type = "Personal Profile"; break; + case PAGE_SOAPBOX : $page_type = "Fan Page" ; break; + case PAGE_COMMUNITY: $page_type = "Community Forum" ; break; + case PAGE_FREELOVE : $page_type = "Open Forum" ; break; + case PAGE_PRVGROUP : $page_type = "Private Group" ; break; + } $profile = $rr; - if((x($profile,'address') == 1) - || (x($profile,'locality') == 1) - || (x($profile,'region') == 1) - || (x($profile,'postal-code') == 1) - || (x($profile,'country-name') == 1)) - $location = t('Location:'); + $location = ''; + if (x($profile, 'address') == 1 + || x($profile, 'locality') == 1 + || x($profile, 'region') == 1 + || x($profile, 'postal-code') == 1 + || x($profile, 'country-name') == 1 + ) { + $location = L10n::t('Location:'); + } - $gender = ((x($profile,'gender') == 1) ? t('Gender:') : False); + $gender = x($profile, 'gender') == 1 ? L10n::t('Gender:') : false; + $marital = x($profile, 'marital') == 1 ? L10n::t('Status:') : false; + $homepage = x($profile, 'homepage') == 1 ? L10n::t('Homepage:') : false; + $about = x($profile, 'about') == 1 ? L10n::t('About:') : false; - $marital = ((x($profile,'marital') == 1) ? t('Status:') : False); + $tpl = get_markup_template('forumdirectory_item.tpl', 'addon/forumdirectory/'); - $homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False); - - $about = ((x($profile,'about') == 1) ? t('About:') : False); - -# $tpl = file_get_contents( dirname(__file__).'/forumdirectory_item.tpl'); - $tpl = get_markup_template( 'forumdirectory_item.tpl', 'addon/forumdirectory/' ); - - $entry = replace_macros($tpl,array( - '$id' => $rr['id'], + $entry = replace_macros($tpl, [ + '$id' => $rr['id'], '$profile_link' => $profile_link, - '$photo' => $a->get_cached_avatar_image($rr[$photo]), - '$alt_text' => $rr['name'], - '$name' => $rr['name'], - '$details' => $pdesc . $details, - '$page_type' => $page_type, - '$profile' => $profile, - '$location' => template_escape($location), - '$gender' => $gender, - '$pdesc' => $pdesc, - '$marital' => $marital, - '$homepage' => $homepage, - '$about' => $about, - - )); - - $arr = array('contact' => $rr, 'entry' => $entry); - - unset($profile); - unset($location); + '$photo' => $rr[$photo], + '$alt_text' => $rr['name'], + '$name' => $rr['name'], + '$details' => $pdesc . $details, + '$page_type' => $page_type, + '$profile' => $profile, + '$location' => $location, + '$gender' => $gender, + '$pdesc' => $pdesc, + '$marital' => $marital, + '$homepage' => $homepage, + '$about' => $about, + ]); $o .= $entry; - } $o .= "
\r\n"; $o .= paginate($a); - + } else { + info(L10n::t("No entries \x28some entries may be hidden\x29.") . EOL); } - else - info( t("No entries \x28some entries may be hidden\x29.") . EOL); return $o; } diff --git a/forumdirectory/lang/it/messages.po b/forumdirectory/lang/it/messages.po index ca53442c..99fbee13 100644 --- a/forumdirectory/lang/it/messages.po +++ b/forumdirectory/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-09-10 12:04+0000\n" +"PO-Revision-Date: 2017-09-20 06:07+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/fromapp/fromapp.php b/fromapp/fromapp.php index de858744..a3944d6d 100644 --- a/fromapp/fromapp.php +++ b/fromapp/fromapp.php @@ -6,42 +6,44 @@ * Author: Commander Zot * */ +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; - -function fromapp_install() { - - register_hook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); - register_hook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); - register_hook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); - +function fromapp_install() +{ + Addon::registerHook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); + Addon::registerHook('addon_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); + Addon::registerHook('addon_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); logger("installed fromapp"); } -function fromapp_uninstall() { - - unregister_hook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); - unregister_hook('plugin_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); - unregister_hook('plugin_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); - - +function fromapp_uninstall() +{ + Addon::unregisterHook('post_local', 'addon/fromapp/fromapp.php', 'fromapp_post_hook'); + Addon::unregisterHook('addon_settings', 'addon/fromapp/fromapp.php', 'fromapp_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/fromapp/fromapp.php', 'fromapp_settings_post'); logger("removed fromapp"); } -function fromapp_settings_post($a,$post) { - if(! local_user() || (! x($_POST,'fromapp-submit'))) +function fromapp_settings_post($a, $post) +{ + if (!local_user() || (! x($_POST, 'fromapp-submit'))) { return; + } - set_pconfig(local_user(),'fromapp','app',$_POST['fromapp-input']); - set_pconfig(local_user(),'fromapp','force',intval($_POST['fromapp-force'])); + PConfig::set(local_user(), 'fromapp', 'app', $_POST['fromapp-input']); + PConfig::set(local_user(), 'fromapp', 'force', intval($_POST['fromapp-force'])); - info( t('Fromapp settings updated.') . EOL); + info(L10n::t('Fromapp settings updated.') . EOL); } -function fromapp_settings(&$a,&$s) { - - if(! local_user()) +function fromapp_settings(&$a, &$s) +{ + if (!local_user()) { return; + } /* Add our stylesheet to the page so we can make our settings look nice */ @@ -49,11 +51,9 @@ function fromapp_settings(&$a,&$s) { /* Get the current state of our config variable */ - $fromapp = get_pconfig(local_user(),'fromapp','app'); - if($fromapp === false) - $fromapp = ''; + $fromapp = PConfig::get(local_user(), 'fromapp', 'app', ''); - $force = intval(get_pconfig(local_user(),'fromapp','force')); + $force = intval(PConfig::get(local_user(), 'fromapp', 'force')); $force_enabled = (($force) ? ' checked="checked" ' : ''); @@ -61,26 +61,25 @@ function fromapp_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

' . t('FromApp Settings') . '

'; + $s .= '

' . L10n::t('FromApp Settings') . '

'; $s .= '
'; $s .= ''; - + $s .= '
'; } function fromapp_post_hook(&$a,&$item) { diff --git a/fromapp/lang/it/messages.po b/fromapp/lang/it/messages.po index 4d491446..983eb6f9 100644 --- a/fromapp/lang/it/messages.po +++ b/fromapp/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:11+0000\n" +"PO-Revision-Date: 2017-09-20 06:07+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/fromgplus/fromgplus.php b/fromgplus/fromgplus.php index 097bac18..b2c9b97f 100644 --- a/fromgplus/fromgplus.php +++ b/fromgplus/fromgplus.php @@ -9,24 +9,32 @@ define('FROMGPLUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes -require_once('mod/share.php'); -require_once('mod/parse_url.php'); -require_once('include/text.php'); +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Object\Image; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; + +require_once 'mod/share.php'; +require_once 'mod/parse_url.php'; +require_once 'include/text.php'; function fromgplus_install() { - register_hook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - register_hook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); - register_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); + Addon::registerHook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::registerHook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::registerHook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); } function fromgplus_uninstall() { - unregister_hook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - unregister_hook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); - unregister_hook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); + Addon::unregisterHook('connector_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::unregisterHook('cron', 'addon/fromgplus/fromgplus.php', 'fromgplus_cron'); // Old hooks - unregister_hook('plugin_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/fromgplus/fromgplus.php', 'fromgplus_addon_settings_post'); } function fromgplus_addon_settings(&$a,&$s) { @@ -44,27 +52,27 @@ function fromgplus_addon_settings(&$a,&$s) { $account = get_pconfig(local_user(),'fromgplus','account'); $s .= ''; - $s .= '

'. t('Google+ Mirror').'

'; + $s .= '

'. L10n::t('Google+ Mirror').'

'; $s .= '
'; $s .= ''; $s .= ''; return; @@ -85,23 +93,25 @@ function fromgplus_addon_settings_post(&$a,&$b) { if (!$enable) del_pconfig(local_user(),'fromgplus','lastdate'); - info( t('Google+ Import Settings saved.') . EOL); + info(L10n::t('Google+ Import Settings saved.') . EOL); } } -function fromgplus_plugin_admin(&$a, &$o){ - $t = get_markup_template("admin.tpl", "addon/fromgplus/"); +function fromgplus_addon_admin(&$a, &$o) +{ + $t = get_markup_template("admin.tpl", "addon/fromgplus/"); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - '$key' => array('key', t('Key'), trim(get_config('fromgplus', 'key')), t('')), - )); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$key' => ['key', L10n::t('Key'), trim(Config::get('fromgplus', 'key')), L10n::t('')], + ]); } -function fromgplus_plugin_admin_post(&$a){ - $key = ((x($_POST,'key')) ? trim($_POST['key']) : ''); - set_config('fromgplus','key',$key); - info( t('Settings updated.'). EOL ); +function fromgplus_addon_admin_post(&$a) +{ + $key = ((x($_POST, 'key')) ? trim($_POST['key']) : ''); + Config::set('fromgplus', 'key', $key); + info(L10n::t('Settings updated.'). EOL); } function fromgplus_cron($a,$b) { @@ -305,9 +315,7 @@ function fromgplus_cleantext($text) { } function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { - require_once("include/Photo.php"); - require_once("include/items.php"); - require_once("include/network.php"); + require_once 'include/items.php'; $post = ""; $quote = ""; @@ -318,13 +326,13 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { switch($attachment->objectType) { case "video": $pagedata["type"] = "video"; - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); break; case "article": $pagedata["type"] = "link"; - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $images = fromgplus_cleanupgoogleproxy($attachment->fullImage, $attachment->image); @@ -373,7 +381,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { break; case "photo-album": - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; @@ -394,7 +402,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { case "album": $pagedata["type"] = "link"; - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $thumb = $attachment->thumbnails[0]; @@ -407,7 +415,7 @@ function fromgplus_handleattachments($a, $uid, $item, $displaytext, $shared) { break; case "audio": - $pagedata["url"] = original_url($attachment->url); + $pagedata["url"] = Network::finalUrl($attachment->url); $pagedata["title"] = fromgplus_html2bbcode($attachment->displayName); $post .= "\n\n[bookmark=".$pagedata["url"]."]".$pagedata["title"]."[/bookmark]\n"; break; @@ -432,7 +440,7 @@ function fromgplus_fetch($a, $uid) { $account = get_pconfig($uid,'fromgplus','account'); $key = get_config('fromgplus','key'); - $result = fetch_url("https://www.googleapis.com/plus/v1/people/".$account."/activities/public?alt=json&pp=1&key=".$key."&maxResults=".$maxfetch); + $result = Network::fetchUrl("https://www.googleapis.com/plus/v1/people/".$account."/activities/public?alt=json&pp=1&key=".$key."&maxResults=".$maxfetch); //$result = file_get_contents("google.txt"); //file_put_contents("google.txt", $result); @@ -510,12 +518,12 @@ function fromgplus_fetch($a, $uid) { if (function_exists("share_header")) $post .= share_header($item->object->actor->displayName, $item->object->actor->url, $item->object->actor->image->url, "", - datetime_convert('UTC','UTC',$item->object->published),$item->object->url); + DateTimeFormat::utc($item->object->published),$item->object->url); else $post .= "[share author='".str_replace("'", "'",$item->object->actor->displayName). "' profile='".$item->object->actor->url. "' avatar='".$item->object->actor->image->url. - "' posted='".datetime_convert('UTC','UTC',$item->object->published). + "' posted='".DateTimeFormat::utc($item->object->published). "' link='".$item->object->url."']"; $post .= fromgplus_html2bbcode($item->object->content); diff --git a/fromgplus/lang/it/messages.po b/fromgplus/lang/it/messages.po index d47e5cb6..e064622a 100644 --- a/fromgplus/lang/it/messages.po +++ b/fromgplus/lang/it/messages.po @@ -11,7 +11,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2016-11-12 16:52+0000\n" -"PO-Revision-Date: 2017-01-18 10:38+0000\n" +"PO-Revision-Date: 2017-09-20 06:07+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/geocoordinates/geocoordinates.php b/geocoordinates/geocoordinates.php index 34f850cb..3c272c9b 100644 --- a/geocoordinates/geocoordinates.php +++ b/geocoordinates/geocoordinates.php @@ -5,16 +5,23 @@ * Version: 0.1 * Author: Michael Vogel */ +use Friendica\Core\Addon; +use Friendica\Core\Cache; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Util\Network; -function geocoordinates_install() { - register_hook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); - register_hook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); +function geocoordinates_install() +{ + Addon::registerHook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); + Addon::registerHook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); } -function geocoordinates_uninstall() { - unregister_hook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); - unregister_hook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); +function geocoordinates_uninstall() +{ + Addon::unregisterHook('post_local', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); + Addon::unregisterHook('post_remote', 'addon/geocoordinates/geocoordinates.php', 'geocoordinates_post_hook'); } function geocoordinates_resolve_item(&$item) { @@ -43,7 +50,7 @@ function geocoordinates_resolve_item(&$item) { return; } - $s = fetch_url("https://api.opencagedata.com/geocode/v1/json?q=".$coords[0].",".$coords[1]."&key=".$key."&language=".$language); + $s = Network::fetchUrl("https://api.opencagedata.com/geocode/v1/json?q=".$coords[0].",".$coords[1]."&key=".$key."&language=".$language); if (!$s) { logger("API could not be queried", LOGGER_DEBUG); @@ -74,22 +81,24 @@ function geocoordinates_post_hook($a, &$item) { geocoordinates_resolve_item($item); } -function geocoordinates_plugin_admin(&$a,&$o) { +function geocoordinates_addon_admin(&$a, &$o) +{ $t = get_markup_template("admin.tpl", "addon/geocoordinates/"); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - '$api_key' => array('api_key', t('API Key'), get_config('geocoordinates', 'api_key' ), ''), - '$language' => array('language', t('Language code (IETF format)'), get_config('geocoordinates', 'language' ), ''), - )); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$api_key' => ['api_key', L10n::t('API Key'), Config::get('geocoordinates', 'api_key'), ''], + '$language' => ['language', L10n::t('Language code (IETF format)'), Config::get('geocoordinates', 'language'), ''], + ]); } -function geocoordinates_plugin_admin_post(&$a) { - $api_key = ((x($_POST,'api_key')) ? notags(trim($_POST['api_key'])) : ''); - set_config('geocoordinates','api_key',$api_key); +function geocoordinates_addon_admin_post(&$a) +{ + $api_key = ((x($_POST, 'api_key')) ? notags(trim($_POST['api_key'])) : ''); + Config::set('geocoordinates', 'api_key', $api_key); - $language = ((x($_POST,'language')) ? notags(trim($_POST['language'])) : ''); - set_config('geocoordinates','language',$language); - info(t('Settings updated.'). EOL); + $language = ((x($_POST, 'language')) ? notags(trim($_POST['language'])) : ''); + Config::set('geocoordinates', 'language', $language); + info(L10n::t('Settings updated.'). EOL); } diff --git a/geonames/geonames.php b/geonames/geonames.php index c10653a7..905dfdc5 100644 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -12,36 +12,41 @@ * $a->config['geonames']['username'] = 'your_username'; * Also visit http://geonames.org/manageaccount and enable access to the free web services * - * When plugin is installed, the system calls the plugin + * When addon is installed, the system calls the addon * name_install() function, located in 'addon/name/name.php', * where 'name' is the name of the addon. * If the addon is removed from the configuration list, the * system will call the name_uninstall() function. * */ - +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Util\Network; +use Friendica\Util\XML; function geonames_install() { /** * - * Our plugin will attach in three places. + * Our addon will attach in three places. * The first is just prior to storing a local post. * */ - register_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); + Addon::registerHook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - register_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - register_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); + Addon::registerHook('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); + Addon::registerHook('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); logger("installed geonames"); } @@ -57,9 +62,9 @@ function geonames_uninstall() { * */ - unregister_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - unregister_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); - unregister_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); + Addon::unregisterHook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); + Addon::unregisterHook('addon_settings', 'addon/geonames/geonames.php', 'geonames_addon_admin'); + Addon::unregisterHook('addon_settings_post', 'addon/geonames/geonames.php', 'geonames_addon_admin_post'); logger("removed geonames"); @@ -74,7 +79,7 @@ function geonames_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -108,12 +113,12 @@ function geonames_post_hook($a, &$item) { * */ - $s = fetch_url('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); + $s = Network::fetchUrl('http://api.geonames.org/findNearbyPlaceName?lat=' . $coords[0] . '&lng=' . $coords[1] . '&username=' . $geo_account); if(! $s) return; - $xml = parse_xml_string($s); + $xml = XML::parseString($s); if($xml->geoname->name && $xml->geoname->countryName) $item['location'] = $xml->geoname->name . ', ' . $xml->geoname->countryName; @@ -135,25 +140,25 @@ function geonames_post_hook($a, &$item) { * */ -function geonames_plugin_admin_post($a,$post) { +function geonames_addon_admin_post($a,$post) { if(! local_user() || (! x($_POST,'geonames-submit'))) return; set_pconfig(local_user(),'geonames','enable',intval($_POST['geonames'])); - info( t('Geonames settings updated.') . EOL); + info(L10n::t('Geonames settings updated.') . EOL); } /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ -function geonames_plugin_admin(&$a,&$s) { +function geonames_addon_admin(&$a,&$s) { if(! local_user()) return; @@ -176,14 +181,14 @@ function geonames_plugin_admin(&$a,&$s) { /* Add some HTML to the existing form */ $s .= '
'; - $s .= '

' . t('Geonames Settings') . '

'; + $s .= '

' . L10n::t('Geonames Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; /* provide a submit button */ - $s .= '
'; + $s .= '
'; } diff --git a/geonames/lang/C/messages.po b/geonames/lang/C/messages.po index 49210658..81c239d2 100644 --- a/geonames/lang/C/messages.po +++ b/geonames/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Geonames Settings" msgstr "" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "" #: geonames.php:187 diff --git a/geonames/lang/ca/strings.php b/geonames/lang/ca/strings.php index 058ef8e5..259e81f4 100644 --- a/geonames/lang/ca/strings.php +++ b/geonames/lang/ca/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Actualitzada la configuració de Geonames."; $a->strings["Geonames Settings"] = "Configuració de Geonames"; -$a->strings["Enable Geonames Plugin"] = "Habilitar Plugin de Geonames"; +$a->strings["Enable Geonames Addon"] = "Habilitar Addon de Geonames"; $a->strings["Submit"] = "Enviar"; diff --git a/geonames/lang/cs/messages.po b/geonames/lang/cs/messages.po index d88aef60..98d8f14f 100644 --- a/geonames/lang/cs/messages.po +++ b/geonames/lang/cs/messages.po @@ -28,7 +28,7 @@ msgid "Geonames Settings" msgstr "Nastavení Geonames" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "Povolit Geonames rozšíření" #: geonames.php:187 diff --git a/geonames/lang/cs/strings.php b/geonames/lang/cs/strings.php index 134a6a77..dfd52e6c 100644 --- a/geonames/lang/cs/strings.php +++ b/geonames/lang/cs/strings.php @@ -7,5 +7,5 @@ function string_plural_select_cs($n){ ; $a->strings["Geonames settings updated."] = "Geonames nastavení aktualizováno."; $a->strings["Geonames Settings"] = "Nastavení Geonames"; -$a->strings["Enable Geonames Plugin"] = "Povolit Geonames rozšíření"; +$a->strings["Enable Geonames Addon"] = "Povolit Geonames rozšíření"; $a->strings["Submit"] = "Odeslat"; diff --git a/geonames/lang/de/messages.po b/geonames/lang/de/messages.po index 7629b1b5..fdc3ed63 100644 --- a/geonames/lang/de/messages.po +++ b/geonames/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "Geonames Settings" msgstr "Geonames Einstellungen" #: geonames.php:181 -msgid "Enable Geonames Plugin" -msgstr "Geonames Plugin aktivieren" +msgid "Enable Geonames Addon" +msgstr "Geonames Addon aktivieren" #: geonames.php:187 msgid "Submit" diff --git a/geonames/lang/de/strings.php b/geonames/lang/de/strings.php index cf1838fb..26f2246e 100644 --- a/geonames/lang/de/strings.php +++ b/geonames/lang/de/strings.php @@ -7,5 +7,5 @@ function string_plural_select_de($n){ ; $a->strings["Geonames settings updated."] = "Geonames Einstellungen aktualisiert"; $a->strings["Geonames Settings"] = "Geonames Einstellungen"; -$a->strings["Enable Geonames Plugin"] = "Geonames Plugin aktivieren"; +$a->strings["Enable Geonames Addon"] = "Geonames Addon aktivieren"; $a->strings["Submit"] = "Senden"; diff --git a/geonames/lang/eo/strings.php b/geonames/lang/eo/strings.php index a6127e68..65cd16a3 100644 --- a/geonames/lang/eo/strings.php +++ b/geonames/lang/eo/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Ĝidatigis la Geonames agordojn."; $a->strings["Geonames Settings"] = "Geonames Agordoj"; -$a->strings["Enable Geonames Plugin"] = "Ŝalti la Geonames Kromprogramon"; +$a->strings["Enable Geonames Addon"] = "Ŝalti la Geonames Kromprogramon"; $a->strings["Submit"] = "Sendi"; diff --git a/geonames/lang/es/messages.po b/geonames/lang/es/messages.po index f372d792..84de85aa 100644 --- a/geonames/lang/es/messages.po +++ b/geonames/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "Geonames Settings" msgstr "Ajustes de Geonombres" #: geonames.php:181 -msgid "Enable Geonames Plugin" -msgstr "Habilitar Plugin de Geonombres" +msgid "Enable Geonames Addon" +msgstr "Habilitar Addon de Geonombres" #: geonames.php:187 msgid "Submit" diff --git a/geonames/lang/es/strings.php b/geonames/lang/es/strings.php index d9a85aa1..d2cb635d 100644 --- a/geonames/lang/es/strings.php +++ b/geonames/lang/es/strings.php @@ -7,5 +7,5 @@ function string_plural_select_es($n){ ; $a->strings["Geonames settings updated."] = "Ajustes de geonombres actualizados."; $a->strings["Geonames Settings"] = "Ajustes de Geonombres"; -$a->strings["Enable Geonames Plugin"] = "Habilitar Plugin de Geonombres"; +$a->strings["Enable Geonames Addon"] = "Habilitar Addon de Geonombres"; $a->strings["Submit"] = "Enviar"; diff --git a/geonames/lang/fr/strings.php b/geonames/lang/fr/strings.php index 6428cb38..10d6631e 100644 --- a/geonames/lang/fr/strings.php +++ b/geonames/lang/fr/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Réglages Geonames sauvés."; $a->strings["Geonames Settings"] = "Réglages Geonames"; -$a->strings["Enable Geonames Plugin"] = "Activer Geonames"; +$a->strings["Enable Geonames Addon"] = "Activer Geonames"; $a->strings["Submit"] = "Envoyer"; diff --git a/geonames/lang/is/strings.php b/geonames/lang/is/strings.php index ac64f2ba..436d3116 100644 --- a/geonames/lang/is/strings.php +++ b/geonames/lang/is/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = ""; $a->strings["Geonames Settings"] = ""; -$a->strings["Enable Geonames Plugin"] = ""; +$a->strings["Enable Geonames Addon"] = ""; $a->strings["Submit"] = "Senda inn"; diff --git a/geonames/lang/it/messages.po b/geonames/lang/it/messages.po index 8164d7a2..f186dd42 100644 --- a/geonames/lang/it/messages.po +++ b/geonames/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:12+0000\n" +"PO-Revision-Date: 2018-03-19 13:22+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -28,8 +28,8 @@ msgid "Geonames Settings" msgstr "Impostazioni Geonames" #: geonames.php:181 -msgid "Enable Geonames Plugin" -msgstr "Abilita plugin Geonames" +msgid "Enable Geonames Addon" +msgstr "Abilita componente aggiuntivo Geonames" #: geonames.php:187 msgid "Submit" diff --git a/geonames/lang/it/strings.php b/geonames/lang/it/strings.php index 8ecc98c2..33148f6b 100644 --- a/geonames/lang/it/strings.php +++ b/geonames/lang/it/strings.php @@ -7,5 +7,5 @@ function string_plural_select_it($n){ ; $a->strings["Geonames settings updated."] = "Impostazioni di Geonames aggiornate."; $a->strings["Geonames Settings"] = "Impostazioni Geonames"; -$a->strings["Enable Geonames Plugin"] = "Abilita plugin Geonames"; +$a->strings["Enable Geonames Addon"] = "Abilita componente aggiuntivo Geonames"; $a->strings["Submit"] = "Invia"; diff --git a/geonames/lang/nb-no/strings.php b/geonames/lang/nb-no/strings.php index b3fea872..4a7b5f09 100644 --- a/geonames/lang/nb-no/strings.php +++ b/geonames/lang/nb-no/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = ""; $a->strings["Geonames Settings"] = ""; -$a->strings["Enable Geonames Plugin"] = ""; +$a->strings["Enable Geonames Addon"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/geonames/lang/pl/strings.php b/geonames/lang/pl/strings.php index ff15d74f..08a3633c 100644 --- a/geonames/lang/pl/strings.php +++ b/geonames/lang/pl/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = ""; $a->strings["Geonames Settings"] = "ustawienia Geonames"; -$a->strings["Enable Geonames Plugin"] = ""; +$a->strings["Enable Geonames Addon"] = ""; $a->strings["Submit"] = "Potwierdź"; diff --git a/geonames/lang/pt-br/strings.php b/geonames/lang/pt-br/strings.php index c0cf0b53..d302d1fe 100644 --- a/geonames/lang/pt-br/strings.php +++ b/geonames/lang/pt-br/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Configurações Geonames atualizadas."; $a->strings["Geonames Settings"] = "Configurações Geonames"; -$a->strings["Enable Geonames Plugin"] = "Plugin Geonames Habilitado"; +$a->strings["Enable Geonames Addon"] = "Addon Geonames Habilitado"; $a->strings["Submit"] = "Enviar"; diff --git a/geonames/lang/ro/messages.po b/geonames/lang/ro/messages.po index 673f4fdf..973c9446 100644 --- a/geonames/lang/ro/messages.po +++ b/geonames/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "Geonames Settings" msgstr "Configurări Geonume" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "Permite Modul Geonume" #: geonames.php:187 diff --git a/geonames/lang/ro/strings.php b/geonames/lang/ro/strings.php index 6b25f12f..b6258552 100644 --- a/geonames/lang/ro/strings.php +++ b/geonames/lang/ro/strings.php @@ -7,5 +7,5 @@ function string_plural_select_ro($n){ ; $a->strings["Geonames settings updated."] = "Configurări Geonume actualizate."; $a->strings["Geonames Settings"] = "Configurări Geonume"; -$a->strings["Enable Geonames Plugin"] = "Permite Modul Geonume"; +$a->strings["Enable Geonames Addon"] = "Permite Modul Geonume"; $a->strings["Submit"] = "Trimite"; diff --git a/geonames/lang/ru/messages.po b/geonames/lang/ru/messages.po index d8deda8c..a639310b 100644 --- a/geonames/lang/ru/messages.po +++ b/geonames/lang/ru/messages.po @@ -28,7 +28,7 @@ msgid "Geonames Settings" msgstr "Настройки Geonames" #: geonames.php:181 -msgid "Enable Geonames Plugin" +msgid "Enable Geonames Addon" msgstr "Включить плагин Geonames" #: geonames.php:187 diff --git a/geonames/lang/ru/strings.php b/geonames/lang/ru/strings.php index 2af0233c..658dd72a 100644 --- a/geonames/lang/ru/strings.php +++ b/geonames/lang/ru/strings.php @@ -7,5 +7,5 @@ function string_plural_select_ru($n){ ; $a->strings["Geonames settings updated."] = "Настройки Geonames обновлены."; $a->strings["Geonames Settings"] = "Настройки Geonames"; -$a->strings["Enable Geonames Plugin"] = "Включить плагин Geonames"; +$a->strings["Enable Geonames Addon"] = "Включить плагин Geonames"; $a->strings["Submit"] = "Добавить"; diff --git a/geonames/lang/zh-cn/strings.php b/geonames/lang/zh-cn/strings.php index 2f72f8c0..89e3fd94 100644 --- a/geonames/lang/zh-cn/strings.php +++ b/geonames/lang/zh-cn/strings.php @@ -2,5 +2,5 @@ $a->strings["Geonames settings updated."] = "Geonames设置更新了。"; $a->strings["Geonames Settings"] = "Geonames设置"; -$a->strings["Enable Geonames Plugin"] = "使Geonames插件能用"; +$a->strings["Enable Geonames Addon"] = "使Geonames插件能用"; $a->strings["Submit"] = "提交"; diff --git a/gnot/gnot.php b/gnot/gnot.php index fcdc7319..87d28063 100644 --- a/gnot/gnot.php +++ b/gnot/gnot.php @@ -7,13 +7,15 @@ * * */ - +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function gnot_install() { - register_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); - register_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); - register_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); + Addon::registerHook('addon_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + Addon::registerHook('addon_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + Addon::registerHook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); logger("installed gnot"); } @@ -21,9 +23,9 @@ function gnot_install() { function gnot_uninstall() { - unregister_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); - unregister_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); - unregister_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); + Addon::unregisterHook('addon_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + Addon::unregisterHook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); logger("removed gnot"); @@ -44,14 +46,14 @@ function gnot_settings_post($a,$post) { if(! local_user() || (! x($_POST,'gnot-submit'))) return; - set_pconfig(local_user(),'gnot','enable',intval($_POST['gnot'])); - info( t('Gnot settings updated.') . EOL); + PConfig::set(local_user(),'gnot','enable',intval($_POST['gnot'])); + info(L10n::t('Gnot settings updated.') . EOL); } /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -76,16 +78,16 @@ function gnot_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= '
'; - $s .= '

' . t('Gnot Settings') . '

'; + $s .= '

' . L10n::t('Gnot Settings') . '

'; $s .= '
'; - $s .= '
' . t("Allows threading of email comment notifications on Gmail and anonymising the subject line.") . '
'; - $s .= ''; + $s .= '
' . L10n::t("Allows threading of email comment notifications on Gmail and anonymising the subject line.") . '
'; + $s .= ''; $s .= ''; $s .= '
'; /* provide a submit button */ - $s .= '
'; + $s .= '
'; } @@ -94,6 +96,5 @@ function gnot_enotify_mail(&$a,&$b) { if((! $b['uid']) || (! intval(get_pconfig($b['uid'], 'gnot','enable')))) return; if($b['type'] == NOTIFY_COMMENT) - $b['subject'] = sprintf( t('[Friendica:Notify] Comment to conversation #%d'), $b['parent']); + $b['subject'] = L10n::t('[Friendica:Notify] Comment to conversation #%d', $b['parent']); } - diff --git a/gnot/lang/C/messages.po b/gnot/lang/C/messages.po index 86f2268c..230d2364 100644 --- a/gnot/lang/C/messages.po +++ b/gnot/lang/C/messages.po @@ -32,7 +32,7 @@ msgid "" msgstr "" #: gnot.php:82 -msgid "Enable this plugin/addon?" +msgid "Enable this addon?" msgstr "" #: gnot.php:88 diff --git a/gnot/lang/ca/strings.php b/gnot/lang/ca/strings.php index 809a152d..e65ec936 100644 --- a/gnot/lang/ca/strings.php +++ b/gnot/lang/ca/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Configuració de Gnot actualitzada"; $a->strings["Gnot Settings"] = "Configuració de Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permet crear fils de les notificacions de comentaris de correu electrònic a Gmail i anonimat de la línia d'assumpte."; -$a->strings["Enable this plugin/addon?"] = "Activar aquest plugin/aplicació?"; +$a->strings["Enable this addon?"] = "Activar aquest addon/aplicació?"; $a->strings["Submit"] = "Enviar"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica: Notifica] Conversació comentada #%d"; diff --git a/gnot/lang/cs/messages.po b/gnot/lang/cs/messages.po index 3db9fa47..1f9f4244 100644 --- a/gnot/lang/cs/messages.po +++ b/gnot/lang/cs/messages.po @@ -34,8 +34,8 @@ msgid "" msgstr "Umožnit řetězení emailových komentářových notifikací na Gmailu a anonymizací řádky předmětu." #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "Povolit tento plugin/rozšíření?" +msgid "Enable this addon?" +msgstr "Povolit tento addon/rozšíření?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/cs/strings.php b/gnot/lang/cs/strings.php index 596817d1..90648e5e 100644 --- a/gnot/lang/cs/strings.php +++ b/gnot/lang/cs/strings.php @@ -8,6 +8,6 @@ function string_plural_select_cs($n){ $a->strings["Gnot settings updated."] = "Nastavení Gnot aktualizováno."; $a->strings["Gnot Settings"] = "Nastavení Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Umožnit řetězení emailových komentářových notifikací na Gmailu a anonymizací řádky předmětu."; -$a->strings["Enable this plugin/addon?"] = "Povolit tento plugin/rozšíření?"; +$a->strings["Enable this addon?"] = "Povolit tento addon/rozšíření?"; $a->strings["Submit"] = "Odeslat"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Upozornění] Komentář ke konverzaci #%d"; diff --git a/gnot/lang/de/messages.po b/gnot/lang/de/messages.po index 3a72154d..747f1853 100644 --- a/gnot/lang/de/messages.po +++ b/gnot/lang/de/messages.po @@ -35,8 +35,8 @@ msgid "" msgstr "Erlaubt das Veröffentlichen von E-Mail Kommentar Benachrichtigungen bei Gmail mit anonymisiertem Betreff" #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "Dieses Plugin/Addon aktivieren?" +msgid "Enable this addon?" +msgstr "Dieses Addon aktivieren?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/de/strings.php b/gnot/lang/de/strings.php index 03832f71..b798a21b 100644 --- a/gnot/lang/de/strings.php +++ b/gnot/lang/de/strings.php @@ -8,6 +8,6 @@ function string_plural_select_de($n){ $a->strings["Gnot settings updated."] = "Gnot Einstellungen aktualisiert."; $a->strings["Gnot Settings"] = "Gnot Einstellungen"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Erlaubt das Veröffentlichen von E-Mail Kommentar Benachrichtigungen bei Gmail mit anonymisiertem Betreff"; -$a->strings["Enable this plugin/addon?"] = "Dieses Plugin/Addon aktivieren?"; +$a->strings["Enable this addon?"] = "Dieses Addon aktivieren?"; $a->strings["Submit"] = "Senden"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica-Benachrichtigung] Kommentar zum Beitrag #%d"; diff --git a/gnot/lang/eo/strings.php b/gnot/lang/eo/strings.php index 89379e9a..cfd3c53c 100644 --- a/gnot/lang/eo/strings.php +++ b/gnot/lang/eo/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Ĝisdatigis Gnot agordojn."; $a->strings["Gnot Settings"] = "Agordoj por Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permesas la ĉenadon de retpoŝtaj atentigoj pri komentoj ĉe Gmail kan anonimigado de la temlinio."; -$a->strings["Enable this plugin/addon?"] = "Ŝalti tiun kromprogramon?"; +$a->strings["Enable this addon?"] = "Ŝalti tiun kromprogramon?"; $a->strings["Submit"] = "Sendi"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Atentigo] Komento pri konversacio #%d"; diff --git a/gnot/lang/es/messages.po b/gnot/lang/es/messages.po index b96abe64..6e4b8569 100644 --- a/gnot/lang/es/messages.po +++ b/gnot/lang/es/messages.po @@ -34,8 +34,8 @@ msgid "" msgstr "Permite limpiar las notificaciones de comentario de email en Gmail y anonimizar la línea del tema." #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "¿Habilitar este plugin/addon?" +msgid "Enable this addon?" +msgstr "¿Habilitar este addon?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/es/strings.php b/gnot/lang/es/strings.php index 1f114cdb..2f9e7a8d 100644 --- a/gnot/lang/es/strings.php +++ b/gnot/lang/es/strings.php @@ -8,6 +8,6 @@ function string_plural_select_es($n){ $a->strings["Gnot settings updated."] = "Ajustes de Gnot actualizados."; $a->strings["Gnot Settings"] = "Ajustes de Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permite limpiar las notificaciones de comentario de email en Gmail y anonimizar la línea del tema."; -$a->strings["Enable this plugin/addon?"] = "¿Habilitar este plugin/addon?"; +$a->strings["Enable this addon?"] = "¿Habilitar este addon?"; $a->strings["Submit"] = "Enviar"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify] Comentar en conversación #%d"; diff --git a/gnot/lang/fr/strings.php b/gnot/lang/fr/strings.php index 7018f6c3..32caf46b 100644 --- a/gnot/lang/fr/strings.php +++ b/gnot/lang/fr/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Réglages Gnot sauvés."; $a->strings["Gnot Settings"] = "Réglages Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Autorise l'arborescence des notifications de commentaires sur GMail, et rend la ligne 'Sujet' anonyme."; -$a->strings["Enable this plugin/addon?"] = "Activer cette extension?"; +$a->strings["Enable this addon?"] = "Activer cette extension?"; $a->strings["Submit"] = "Envoyer"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notification] Commentaire sur la conversation #%d"; diff --git a/gnot/lang/is/strings.php b/gnot/lang/is/strings.php index c75a1c42..ae183568 100644 --- a/gnot/lang/is/strings.php +++ b/gnot/lang/is/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = ""; $a->strings["Gnot Settings"] = ""; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = ""; -$a->strings["Enable this plugin/addon?"] = ""; +$a->strings["Enable this addon?"] = ""; $a->strings["Submit"] = "Senda inn"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = ""; diff --git a/gnot/lang/it/messages.po b/gnot/lang/it/messages.po index 45649f78..4c200ede 100644 --- a/gnot/lang/it/messages.po +++ b/gnot/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:12+0000\n" +"PO-Revision-Date: 2018-03-19 13:22+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -34,8 +34,8 @@ msgid "" msgstr "Permetti di raggruppare le notifiche dei commenti in thread su Gmail e anonimizza l'oggetto" #: gnot.php:82 -msgid "Enable this plugin/addon?" -msgstr "Abilita questo plugin?" +msgid "Enable this addon?" +msgstr "Abilita questo componente aggiuntivo?" #: gnot.php:88 msgid "Submit" diff --git a/gnot/lang/it/strings.php b/gnot/lang/it/strings.php index 0c8ef482..c38bac29 100644 --- a/gnot/lang/it/strings.php +++ b/gnot/lang/it/strings.php @@ -8,6 +8,6 @@ function string_plural_select_it($n){ $a->strings["Gnot settings updated."] = "Impostazioni di \"Gnot\" aggiornate."; $a->strings["Gnot Settings"] = "Impostazioni Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permetti di raggruppare le notifiche dei commenti in thread su Gmail e anonimizza l'oggetto"; -$a->strings["Enable this plugin/addon?"] = "Abilita questo plugin?"; +$a->strings["Enable this addon?"] = "Abilita questo componente aggiuntivo?"; $a->strings["Submit"] = "Invia"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notifica] Commento alla conversazione n° %d"; diff --git a/gnot/lang/nb-no/strings.php b/gnot/lang/nb-no/strings.php index d53d8296..4d260d6b 100644 --- a/gnot/lang/nb-no/strings.php +++ b/gnot/lang/nb-no/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = ""; $a->strings["Gnot Settings"] = ""; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = ""; -$a->strings["Enable this plugin/addon?"] = ""; +$a->strings["Enable this addon?"] = ""; $a->strings["Submit"] = "Lagre"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = ""; diff --git a/gnot/lang/pl/strings.php b/gnot/lang/pl/strings.php index 64d9ef8b..fb58666e 100644 --- a/gnot/lang/pl/strings.php +++ b/gnot/lang/pl/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = ""; $a->strings["Gnot Settings"] = ""; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = ""; -$a->strings["Enable this plugin/addon?"] = "Umożliwić tego plugina/wtyczkę?"; +$a->strings["Enable this addon?"] = "Umożliwić tego addona/wtyczkę?"; $a->strings["Submit"] = "Potwierdź"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = ""; diff --git a/gnot/lang/pt-br/strings.php b/gnot/lang/pt-br/strings.php index 5a079154..92c97c4b 100644 --- a/gnot/lang/pt-br/strings.php +++ b/gnot/lang/pt-br/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "As configurações do Gnot foram atualizadas."; $a->strings["Gnot Settings"] = "Configurações do Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permite o encadeamento das notificações por e-mail de comentário no GMail, tornando a a linha de assunto anônima."; -$a->strings["Enable this plugin/addon?"] = "Habilitar este plugin/complemento?"; +$a->strings["Enable this addon?"] = "Habilitar este addon/complemento?"; $a->strings["Submit"] = "Enviar"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify] Comentário na conversa #%d"; diff --git a/gnot/lang/ro/messages.po b/gnot/lang/ro/messages.po index 807f2977..34de34f8 100644 --- a/gnot/lang/ro/messages.po +++ b/gnot/lang/ro/messages.po @@ -34,7 +34,7 @@ msgid "" msgstr "Permite înlănțuirea notificărilor prin email a comentariilor, în Gmail și anonimizarea subiectului." #: gnot.php:82 -msgid "Enable this plugin/addon?" +msgid "Enable this addon?" msgstr "Activați acest modul/supliment?" #: gnot.php:88 diff --git a/gnot/lang/ro/strings.php b/gnot/lang/ro/strings.php index 764be84e..a3641f4e 100644 --- a/gnot/lang/ro/strings.php +++ b/gnot/lang/ro/strings.php @@ -8,6 +8,6 @@ function string_plural_select_ro($n){ $a->strings["Gnot settings updated."] = "Configurările Gnot au fost actualizate."; $a->strings["Gnot Settings"] = "Configurări Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Permite înlănțuirea notificărilor prin email a comentariilor, în Gmail și anonimizarea subiectului."; -$a->strings["Enable this plugin/addon?"] = "Activați acest modul/supliment?"; +$a->strings["Enable this addon?"] = "Activați acest modul/supliment?"; $a->strings["Submit"] = "Trimite"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notificare] Comentariu la conversația # %d"; diff --git a/gnot/lang/ru/messages.po b/gnot/lang/ru/messages.po index ff2dc460..9e63af41 100644 --- a/gnot/lang/ru/messages.po +++ b/gnot/lang/ru/messages.po @@ -34,7 +34,7 @@ msgid "" msgstr "Разрешить нитевание уведомлений о комментариях на Gmail и анонимизировать поле \"Тема\"." #: gnot.php:82 -msgid "Enable this plugin/addon?" +msgid "Enable this addon?" msgstr "Включить этот плагин/аддон?" #: gnot.php:88 diff --git a/gnot/lang/ru/strings.php b/gnot/lang/ru/strings.php index 45510f70..53d6583b 100644 --- a/gnot/lang/ru/strings.php +++ b/gnot/lang/ru/strings.php @@ -8,6 +8,6 @@ function string_plural_select_ru($n){ $a->strings["Gnot settings updated."] = "Настройки Gnot обновлены."; $a->strings["Gnot Settings"] = "Настройки Gnot"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "Разрешить нитевание уведомлений о комментариях на Gmail и анонимизировать поле \"Тема\"."; -$a->strings["Enable this plugin/addon?"] = "Включить этот плагин/аддон?"; +$a->strings["Enable this addon?"] = "Включить этот плагин/аддон?"; $a->strings["Submit"] = "Добавить"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify] Комментарий в теме #%d"; diff --git a/gnot/lang/zh-cn/strings.php b/gnot/lang/zh-cn/strings.php index ddb0d85d..3f7ba8f9 100644 --- a/gnot/lang/zh-cn/strings.php +++ b/gnot/lang/zh-cn/strings.php @@ -3,6 +3,6 @@ $a->strings["Gnot settings updated."] = "Gnot设置更新了。"; $a->strings["Gnot Settings"] = "Gnot设置"; $a->strings["Allows threading of email comment notifications on Gmail and anonymising the subject line."] = "允许邮件评论通知在Gmail和匿名话题行。"; -$a->strings["Enable this plugin/addon?"] = "使这个插件/加件可用?"; +$a->strings["Enable this addon?"] = "使这个插件/加件可用?"; $a->strings["Submit"] = "提交"; $a->strings["[Friendica:Notify] Comment to conversation #%d"] = "[Friendica:Notify]评论在交流#%d"; diff --git a/googlemaps/googlemaps.php b/googlemaps/googlemaps.php index 0b031f4d..1a2a974f 100644 --- a/googlemaps/googlemaps.php +++ b/googlemaps/googlemaps.php @@ -6,18 +6,19 @@ * Author: Michael Vogel * */ +use Friendica\Core\Addon; +use Friendica\Core\Cache; -require_once('include/cache.php'); - - -function googlemaps_install() { - register_hook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); +function googlemaps_install() +{ + Addon::registerHook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); logger("installed googlemaps"); } -function googlemaps_uninstall() { - unregister_hook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); +function googlemaps_uninstall() +{ + Addon::unregisterHook('render_location', 'addon/googlemaps/googlemaps.php', 'googlemaps_location'); logger("removed googlemaps"); } diff --git a/gravatar/README.md b/gravatar/README.md index ff209b0e..0145570b 100644 --- a/gravatar/README.md +++ b/gravatar/README.md @@ -1,4 +1,4 @@ -# Gravatar Plugin +# Gravatar Addon by [Klaus Weidenbach](http://friendica.dszdw.net/profile/klaus) This addon allows you to look up an avatar image for new users and contacts at [Gravatar](http://www.gravatar.com). This will be used if there have not been found any other avatar images yet for example through OpenID. diff --git a/gravatar/gravatar.php b/gravatar/gravatar.php index eb38db78..88db743b 100644 --- a/gravatar/gravatar.php +++ b/gravatar/gravatar.php @@ -1,25 +1,28 @@ */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; /** - * Installs the plugin hook + * Installs the addon hook */ function gravatar_install() { - register_hook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); + Addon::registerHook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); logger("registered gravatar in avatar_lookup hook"); } /** - * Removes the plugin hook + * Removes the addon hook */ function gravatar_uninstall() { - unregister_hook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); + Addon::unregisterHook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); logger("unregistered gravatar in avatar_lookup hook"); } @@ -54,7 +57,7 @@ function gravatar_lookup($a, &$b) { /** * Display admin settings for this addon */ -function gravatar_plugin_admin (&$a, &$o) { +function gravatar_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/gravatar/" ); $default_avatar = get_config('gravatar', 'default_img'); @@ -67,14 +70,14 @@ function gravatar_plugin_admin (&$a, &$o) { $rating = 'g'; // suitable for display on all websites with any audience type // Available options for the select boxes - $default_avatars = array( - 'mm' => t('generic profile image'), - 'identicon' => t('random geometric pattern'), - 'monsterid' => t('monster face'), - 'wavatar' => t('computer generated face'), - 'retro' => t('retro arcade style face'), - ); - $ratings = array( + $default_avatars = [ + 'mm' => L10n::t('generic profile image'), + 'identicon' => L10n::t('random geometric pattern'), + 'monsterid' => L10n::t('monster face'), + 'wavatar' => L10n::t('computer generated face'), + 'retro' => L10n::t('retro arcade style face'), + ]; + $ratings = [ 'g' => 'g', 'pg' => 'pg', 'r' => 'r', @@ -86,28 +89,27 @@ function gravatar_plugin_admin (&$a, &$o) { dbesc('libravatar') ); if (count($r)) { - $o = '
' .t('Information') .'

' .t('Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.') .'



'; + $o = '
' .L10n::t('Information') .'

' .L10n::t('Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.
The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.') .'



'; } // output Gravatar settings $o .= ''; - $o .= replace_macros( $t, array( - '$submit' => t('Save Settings'), - '$default_avatar' => array('avatar', t('Default avatar image'), $default_avatar, t('Select default avatar image if none was found at Gravatar. See README'), $default_avatars), - '$rating' => array('rating', t('Rating of images'), $rating, t('Select the appropriate avatar rating for your site. See README'), $ratings), - )); + $o .= replace_macros( $t, [ + '$submit' => L10n::t('Save Settings'), + '$default_avatar' => ['avatar', L10n::t('Default avatar image'), $default_avatar, L10n::t('Select default avatar image if none was found at Gravatar. See README'), $default_avatars], + '$rating' => ['rating', L10n::t('Rating of images'), $rating, L10n::t('Select the appropriate avatar rating for your site. See README'), $ratings], + ]); } /** * Save admin settings */ -function gravatar_plugin_admin_post (&$a) { +function gravatar_addon_admin_post (&$a) { check_form_security_token('gravatarsave'); $default_avatar = ((x($_POST, 'avatar')) ? notags(trim($_POST['avatar'])) : 'identicon'); $rating = ((x($_POST, 'rating')) ? notags(trim($_POST['rating'])) : 'g'); - set_config('gravatar', 'default_img', $default_avatar); - set_config('gravatar', 'rating', $rating); - info( t('Gravatar settings updated.') .EOL); + Config::set('gravatar', 'default_img', $default_avatar); + Config::set('gravatar', 'rating', $rating); + info(L10n::t('Gravatar settings updated.') .EOL); } -?> diff --git a/gravatar/lang/it/messages.po b/gravatar/lang/it/messages.po index 589b0e4a..d1a867a6 100644 --- a/gravatar/lang/it/messages.po +++ b/gravatar/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:12+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/group_text/group_text.php b/group_text/group_text.php index 29b0675f..d07d8aa5 100644 --- a/group_text/group_text.php +++ b/group_text/group_text.php @@ -4,15 +4,15 @@ * Description: Disable images in group edit menu * Version: 1.0 * Author: Thomas Willingham - * - * */ - +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function group_text_install() { - register_hook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); - register_hook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); + Addon::registerHook('addon_settings', 'addon/group_text/group_text.php', 'group_text_settings'); + Addon::registerHook('addon_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); logger("installed group_text"); } @@ -20,8 +20,8 @@ function group_text_install() { function group_text_uninstall() { - unregister_hook('plugin_settings', 'addon/group_text/group_text.php', 'group_text_settings'); - unregister_hook('plugin_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/group_text/group_text.php', 'group_text_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/group_text/group_text.php', 'group_text_settings_post'); logger("removed group_text"); @@ -43,13 +43,13 @@ function group_text_settings_post($a,$post) { return; set_pconfig(local_user(),'system','groupedit_image_limit',intval($_POST['group_text'])); - info( t('Group Text settings updated.') . EOL); + info(L10n::t('Group Text settings updated.') . EOL); } /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -73,14 +73,14 @@ function group_text_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= '
'; - $s .= '

' . t('Group Text') . '

'; + $s .= '

' . L10n::t('Group Text') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; /* provide a submit button */ - $s .= '
'; + $s .= '
'; } diff --git a/group_text/lang/it/messages.po b/group_text/lang/it/messages.po index 9f42598f..90871559 100644 --- a/group_text/lang/it/messages.po +++ b/group_text/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:12+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/ifttt/ifttt.php b/ifttt/ifttt.php index e5428e82..70aff1bf 100644 --- a/ifttt/ifttt.php +++ b/ifttt/ifttt.php @@ -5,18 +5,26 @@ * Version: 0.1 * Author: Michael Vogel */ +require_once 'mod/item.php'; +require_once 'include/items.php'; +require_once 'include/text.php'; -require_once("mod/item.php"); -require_once("include/items.php"); +use Friendica\App; +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Database\DBM; -function ifttt_install() { - register_hook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); - register_hook('connector_settings_post','addon/ifttt/ifttt.php', 'ifttt_settings_post'); +function ifttt_install() +{ + Addon::registerHook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); + Addon::registerHook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); } -function ifttt_uninstall() { - unregister_hook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); - unregister_hook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); +function ifttt_uninstall() +{ + Addon::unregisterHook('connector_settings', 'addon/ifttt/ifttt.php', 'ifttt_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/ifttt/ifttt.php', 'ifttt_settings_post'); } function ifttt_module() { @@ -38,37 +46,36 @@ function ifttt_settings(&$a,&$s) { } $s .= ''; - $s .= '

'. t('IFTTT Mirror').'

'; - $s .= '
'; - $s .= ''; } function ifttt_settings_post(&$a,&$b) { diff --git a/ijpost/ijpost.php b/ijpost/ijpost.php index 3e57610a..091edec3 100644 --- a/ijpost/ijpost.php +++ b/ijpost/ijpost.php @@ -1,5 +1,4 @@ */ +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; + function ijpost_install() { - register_hook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); - register_hook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); - register_hook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); - register_hook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); - register_hook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); + Addon::registerHook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); + Addon::registerHook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); + Addon::registerHook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); + Addon::registerHook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); + Addon::registerHook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); } function ijpost_uninstall() { - unregister_hook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); - unregister_hook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); - unregister_hook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); - unregister_hook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); - unregister_hook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); + Addon::unregisterHook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send'); + Addon::unregisterHook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post'); } @@ -36,7 +42,7 @@ function ijpost_jot_nets(&$a,&$b) { $ij_defpost = get_pconfig(local_user(),'ijpost','post_by_default'); $selected = ((intval($ij_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to Insanejournal') . '
'; + . L10n::t('Post to Insanejournal') . ''; } } @@ -66,36 +72,36 @@ function ijpost_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

'. t("InsaneJournal Export").'

'; + $s .= '

'. L10n::t("InsaneJournal Export").'

'; $s .= '
'; $s .= ''; + $s .= '
'; } @@ -172,16 +178,12 @@ function ijpost_send(&$a,&$b) { $ij_blog = 'http://www.insanejournal.com/interface/xmlrpc'; if($ij_username && $ij_password && $ij_blog) { - - require_once('include/bbcode.php'); - require_once('include/datetime.php'); - $title = $b['title']; - $post = bbcode($b['body']); + $post = BBCode::convert($b['body']); $post = xmlify($post); $tags = ijpost_get_tags($b['tag']); - $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s'); + $date = DateTimeFormat::convert($b['created'], $tz); $year = intval(substr($date,0,4)); $mon = intval(substr($date,5,2)); $day = intval(substr($date,8,2)); @@ -217,8 +219,9 @@ EOT; logger('ijpost: data: ' . $xml, LOGGER_DATA); - if($ij_blog !== 'test') - $x = post_url($ij_blog,$xml,array("Content-Type: text/xml")); + if($ij_blog !== 'test') { + $x = Network::post($ij_blog, $xml, ["Content-Type: text/xml"]); + } logger('posted to insanejournal: ' . ($x) ? $x : '', LOGGER_DEBUG); } diff --git a/ijpost/lang/C/messages.po b/ijpost/lang/C/messages.po index 4f62c23a..33e9c31a 100644 --- a/ijpost/lang/C/messages.po +++ b/ijpost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "InsaneJournal Post Settings" msgstr "" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" +msgid "Enable InsaneJournal Post Addon" msgstr "" #: ijpost.php:77 diff --git a/ijpost/lang/ca/strings.php b/ijpost/lang/ca/strings.php index b5382615..a1f796d6 100644 --- a/ijpost/lang/ca/strings.php +++ b/ijpost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Enviament a Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Ajustos d'Enviament a Insanejournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Habilita el Plugin d'Enviaments a Insanejournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Habilita el Addon d'Enviaments a Insanejournal"; $a->strings["InsaneJournal username"] = "Nom d'usuari de Insanejournal"; $a->strings["InsaneJournal password"] = "Contrasenya de Insanejournal"; $a->strings["Post to InsaneJournal by default"] = "Enviar per defecte a Insanejournal"; diff --git a/ijpost/lang/cs/messages.po b/ijpost/lang/cs/messages.po index 491112fb..dd273de4 100644 --- a/ijpost/lang/cs/messages.po +++ b/ijpost/lang/cs/messages.po @@ -28,8 +28,8 @@ msgid "InsaneJournal Post Settings" msgstr "Nastavení příspěvků pro InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "Povolit Insanejournal plugin" +msgid "Enable InsaneJournal Post Addon" +msgstr "Povolit Insanejournal addon" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/cs/strings.php b/ijpost/lang/cs/strings.php index 157e6a8e..4f4fec36 100644 --- a/ijpost/lang/cs/strings.php +++ b/ijpost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to Insanejournal"] = "Odeslat na Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Nastavení příspěvků pro InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Povolit Insanejournal plugin"; +$a->strings["Enable InsaneJournal Post Addon"] = "Povolit Insanejournal addon"; $a->strings["InsaneJournal username"] = "Insanejournal uživatelské jméno"; $a->strings["InsaneJournal password"] = "Insanejournal heslo"; $a->strings["Post to InsaneJournal by default"] = "Defaultně zasílat příspěvky na InsaneJournal"; diff --git a/ijpost/lang/de/messages.po b/ijpost/lang/de/messages.po index 6d3897eb..35101521 100644 --- a/ijpost/lang/de/messages.po +++ b/ijpost/lang/de/messages.po @@ -29,8 +29,8 @@ msgid "InsaneJournal Post Settings" msgstr "InsaneJournal Beitrags-Einstellungen" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "InsaneJournal Plugin aktivieren" +msgid "Enable InsaneJournal Post Addon" +msgstr "InsaneJournal Addon aktivieren" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/de/strings.php b/ijpost/lang/de/strings.php index e256daec..3b8dbb6d 100644 --- a/ijpost/lang/de/strings.php +++ b/ijpost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to Insanejournal"] = "Auf InsaneJournal posten."; $a->strings["InsaneJournal Post Settings"] = "InsaneJournal Beitrags-Einstellungen"; -$a->strings["Enable InsaneJournal Post Plugin"] = "InsaneJournal Plugin aktivieren"; +$a->strings["Enable InsaneJournal Post Addon"] = "InsaneJournal Addon aktivieren"; $a->strings["InsaneJournal username"] = "InsaneJournal Benutzername"; $a->strings["InsaneJournal password"] = "InsaneJournal Passwort"; $a->strings["Post to InsaneJournal by default"] = "Standardmäßig auf InsaneJournal posten."; diff --git a/ijpost/lang/eo/strings.php b/ijpost/lang/eo/strings.php index 11698887..bab5fc08 100644 --- a/ijpost/lang/eo/strings.php +++ b/ijpost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Afiŝi al Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Agordoj pri Insaenejournal Afiŝoj"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Ŝalti la InsaneJournal afiŝo kromprogramon."; +$a->strings["Enable InsaneJournal Post Addon"] = "Ŝalti la InsaneJournal afiŝo kromprogramon."; $a->strings["InsaneJournal username"] = "Salutnomo ĉe InsaneJournal"; $a->strings["InsaneJournal password"] = "Pasvorto ĉe InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Defaŭlte afiŝi ĉe InsaneJournal"; diff --git a/ijpost/lang/es/messages.po b/ijpost/lang/es/messages.po index c4d5c06b..7aa4e1a8 100644 --- a/ijpost/lang/es/messages.po +++ b/ijpost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "InsaneJournal Post Settings" msgstr "Ajustes de Entrada de InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "Habilitar el Plugin de Entrada InsaneJournal" +msgid "Enable InsaneJournal Post Addon" +msgstr "Habilitar el Addon de Entrada InsaneJournal" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/es/strings.php b/ijpost/lang/es/strings.php index db51f372..76c9e5f9 100644 --- a/ijpost/lang/es/strings.php +++ b/ijpost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to Insanejournal"] = "Publicar en Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Ajustes de Entrada de InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Habilitar el Plugin de Entrada InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Habilitar el Addon de Entrada InsaneJournal"; $a->strings["InsaneJournal username"] = "Nombre de usuario InsaneJournal"; $a->strings["InsaneJournal password"] = "Contraseña de InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Publicar en InsaneJournal por defecto"; diff --git a/ijpost/lang/fr/strings.php b/ijpost/lang/fr/strings.php index 7db58ccf..398e3c62 100644 --- a/ijpost/lang/fr/strings.php +++ b/ijpost/lang/fr/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Publier vers InsaneJournal"; $a->strings["InsaneJournal Post Settings"] = "Réglages InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Activer le connecteur InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Activer le connecteur InsaneJournal"; $a->strings["InsaneJournal username"] = "Utilisateur InsaneJournal"; $a->strings["InsaneJournal password"] = "Mot de passe InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Publier sur InsaneJournal par défaut"; diff --git a/ijpost/lang/is/strings.php b/ijpost/lang/is/strings.php index b79f347e..3dffb320 100644 --- a/ijpost/lang/is/strings.php +++ b/ijpost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = ""; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = ""; +$a->strings["Enable InsaneJournal Post Addon"] = ""; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/it/messages.po b/ijpost/lang/it/messages.po index aba06846..a98a2be3 100644 --- a/ijpost/lang/it/messages.po +++ b/ijpost/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:15+0000\n" +"PO-Revision-Date: 2018-03-19 13:22+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -28,8 +28,8 @@ msgid "InsaneJournal Post Settings" msgstr "Impostazioni post InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" -msgstr "Abilita il plugin di invio a InsaneJournal" +msgid "Enable InsaneJournal Post Addon" +msgstr "Abilita il componente aggiuntivo di invio a InsaneJournal" #: ijpost.php:77 msgid "InsaneJournal username" diff --git a/ijpost/lang/it/strings.php b/ijpost/lang/it/strings.php index 73e8bed4..d8bd49e9 100644 --- a/ijpost/lang/it/strings.php +++ b/ijpost/lang/it/strings.php @@ -7,7 +7,7 @@ function string_plural_select_it($n){ ; $a->strings["Post to Insanejournal"] = "Invia a InsaneJournal"; $a->strings["InsaneJournal Post Settings"] = "Impostazioni post InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Abilita il plugin di invio a InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Abilita il componente aggiuntivo di invio a InsaneJournal"; $a->strings["InsaneJournal username"] = "Nome utente InsaneJournal"; $a->strings["InsaneJournal password"] = "Password InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Invia sempre a InsaneJournal"; diff --git a/ijpost/lang/nb-no/strings.php b/ijpost/lang/nb-no/strings.php index 2eaa62e3..4b616bcd 100644 --- a/ijpost/lang/nb-no/strings.php +++ b/ijpost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = ""; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = ""; +$a->strings["Enable InsaneJournal Post Addon"] = ""; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/pl/strings.php b/ijpost/lang/pl/strings.php index 5b6ec674..e3f18059 100644 --- a/ijpost/lang/pl/strings.php +++ b/ijpost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "Opublikuj na Insanejournal"; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = ""; +$a->strings["Enable InsaneJournal Post Addon"] = ""; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/pt-br/messages.po b/ijpost/lang/pt-br/messages.po index 40f4f6df..b3f799bd 100644 --- a/ijpost/lang/pt-br/messages.po +++ b/ijpost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "InsaneJournal Post Settings" msgstr "Configurações de publicação no InsaneJournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" +msgid "Enable InsaneJournal Post Addon" msgstr "Habilitar plug-in para publicar no InsaneJournal" #: ijpost.php:77 diff --git a/ijpost/lang/pt-br/strings.php b/ijpost/lang/pt-br/strings.php index b48f4dec..fbc1f284 100644 --- a/ijpost/lang/pt-br/strings.php +++ b/ijpost/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to Insanejournal"] = "Publicar no Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Configurações de publicação no InsaneJournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Habilitar plug-in para publicar no InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Habilitar plug-in para publicar no InsaneJournal"; $a->strings["InsaneJournal username"] = "Nome de usuário no InsaneJournal"; $a->strings["InsaneJournal password"] = "Senha do InsaneJournal"; $a->strings["Post to InsaneJournal by default"] = "Publicar no InsaneJournal por padrão"; diff --git a/ijpost/lang/ro/messages.po b/ijpost/lang/ro/messages.po index 5743743a..c37bed7e 100644 --- a/ijpost/lang/ro/messages.po +++ b/ijpost/lang/ro/messages.po @@ -28,7 +28,7 @@ msgid "InsaneJournal Post Settings" msgstr "Configurări Postări Insaneournal" #: ijpost.php:72 -msgid "Enable InsaneJournal Post Plugin" +msgid "Enable InsaneJournal Post Addon" msgstr "Activare Modul Postare InsaneJournal" #: ijpost.php:77 diff --git a/ijpost/lang/ro/strings.php b/ijpost/lang/ro/strings.php index a4233460..35d64ea6 100644 --- a/ijpost/lang/ro/strings.php +++ b/ijpost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to Insanejournal"] = "Postare pe Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Configurări Postări Insaneournal"; -$a->strings["Enable InsaneJournal Post Plugin"] = "Activare Modul Postare InsaneJournal"; +$a->strings["Enable InsaneJournal Post Addon"] = "Activare Modul Postare InsaneJournal"; $a->strings["InsaneJournal username"] = "Utilizator InsaneJournal "; $a->strings["InsaneJournal password"] = "Parolă InsaneJournal "; $a->strings["Post to InsaneJournal by default"] = "Postați implicit pe InsaneJournal "; diff --git a/ijpost/lang/ru/strings.php b/ijpost/lang/ru/strings.php index 0109f8a6..dc869896 100644 --- a/ijpost/lang/ru/strings.php +++ b/ijpost/lang/ru/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = ""; $a->strings["InsaneJournal Post Settings"] = ""; -$a->strings["Enable InsaneJournal Post Plugin"] = "Включить InsaneJournal плагин сообщений"; +$a->strings["Enable InsaneJournal Post Addon"] = "Включить InsaneJournal плагин сообщений"; $a->strings["InsaneJournal username"] = ""; $a->strings["InsaneJournal password"] = ""; $a->strings["Post to InsaneJournal by default"] = ""; diff --git a/ijpost/lang/zh-cn/strings.php b/ijpost/lang/zh-cn/strings.php index f2a04712..273451d7 100644 --- a/ijpost/lang/zh-cn/strings.php +++ b/ijpost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Insanejournal"] = "转播到Insanejournal"; $a->strings["InsaneJournal Post Settings"] = "Insanejournal转播设置"; -$a->strings["Enable InsaneJournal Post Plugin"] = "使InsaneJournal转播插件可用"; +$a->strings["Enable InsaneJournal Post Addon"] = "使InsaneJournal转播插件可用"; $a->strings["InsaneJournal username"] = "InsaneJournal用户名"; $a->strings["InsaneJournal password"] = "InsaneJournal密码"; $a->strings["Post to InsaneJournal by default"] = "默认地转播到InsaneJournal"; diff --git a/impressum/README.md b/impressum/README.md index cf420ba1..963a085e 100644 --- a/impressum/README.md +++ b/impressum/README.md @@ -1,4 +1,4 @@ -Impressum Plugin for Friendica +Impressum Addon for Friendica ============================== * Author: Tobias Diekershoff @@ -7,7 +7,7 @@ Impressum Plugin for Friendica About ----- -This plugin adds an Impressum (contact) block to the /friendica page with +This addon adds an Impressum (contact) block to the /friendica page with informations about the page operator/owner and how to contact you in case of any questions. @@ -16,7 +16,7 @@ normal friendica postings.. Configuration ------------- -Simply fill in the fields in the impressium settings page in the plugins +Simply fill in the fields in the impressium settings page in the addons area of your admin panel. For email adresses the "@" symbol will be obfuscated in the source of the page to make in harder for harvesting tools. diff --git a/impressum/impressum.php b/impressum/impressum.php index 235c4147..e64e1cd2 100644 --- a/impressum/impressum.php +++ b/impressum/impressum.php @@ -1,25 +1,29 @@ * License: 3-clause BSD license */ -require_once('include/bbcode.php'); -require_once('mod/proxy.php'); +require_once 'mod/proxy.php'; + +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; function impressum_install() { - register_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); - register_hook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); - logger("installed impressum plugin"); + Addon::registerHook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); + Addon::registerHook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); + logger("installed impressum Addon"); } function impressum_uninstall() { - unregister_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); - unregister_hook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); - logger("uninstalled impressum plugin"); + Addon::unregisterHook('about_hook', 'addon/impressum/impressum.php', 'impressum_show'); + Addon::unregisterHook('page_end', 'addon/impressum/impressum.php', 'impressum_footer'); + logger("uninstalled impressum Addon"); } function impressum_module() { @@ -35,7 +39,7 @@ function obfuscate_email ($s) { return $s; } function impressum_footer($a, &$b) { - $text = proxy_parse_html(bbcode(get_config('impressum','footer_text'), true)); + $text = proxy_parse_html(BBCode::convert(Config::get('impressum','footer_text'))); if (! $text == '') { $a->page['htmlhead'] .= ''; $b .= '
'; @@ -43,12 +47,12 @@ function impressum_footer($a, &$b) { } } function impressum_show($a,&$b) { - $b .= '

'.t('Impressum').'

'; - $owner = get_config('impressum', 'owner'); - $owner_profile = get_config('impressum','ownerprofile'); - $postal = proxy_parse_html(bbcode(get_config('impressum', 'postal'), true)); - $notes = proxy_parse_html(bbcode(get_config('impressum', 'notes'), true)); - $email = obfuscate_email( get_config('impressum','email') ); + $b .= '

'.L10n::t('Impressum').'

'; + $owner = Config::get('impressum', 'owner'); + $owner_profile = Config::get('impressum','ownerprofile'); + $postal = proxy_parse_html(BBCode::convert(Config::get('impressum', 'postal'))); + $notes = proxy_parse_html(BBCode::convert(Config::get('impressum', 'notes'))); + $email = obfuscate_email( Config::get('impressum','email') ); if (strlen($owner)) { if (strlen($owner_profile)) { $tmp = ''.$owner.''; @@ -56,45 +60,45 @@ function impressum_show($a,&$b) { $tmp = $owner; } if (strlen($email)) { - $b .= '

'.t('Site Owner').': '. $tmp .'
'.t('Email Address').': '.$email.'

'; + $b .= '

'.L10n::t('Site Owner').': '. $tmp .'
'.L10n::t('Email Address').': '.$email.'

'; } else { - $b .= '

'.t('Site Owner').': '. $tmp .'

'; + $b .= '

'.L10n::t('Site Owner').': '. $tmp .'

'; } if (strlen($postal)) { - $b .= '

'.t('Postal Address').'
'. $postal .'

'; + $b .= '

'.L10n::t('Postal Address').'
'. $postal .'

'; } if (strlen($notes)) { $b .= '

'.$notes.'

'; } } else { - $b .= '

'.t('The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon.').'

'; + $b .= '

'.L10n::t('The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon.').'

'; } } -function impressum_plugin_admin_post (&$a) { +function impressum_addon_admin_post (&$a) { $owner = ((x($_POST, 'owner')) ? notags(trim($_POST['owner'])) : ''); $ownerprofile = ((x($_POST, 'ownerprofile')) ? notags(trim($_POST['ownerprofile'])) : ''); $postal = ((x($_POST, 'postal')) ? (trim($_POST['postal'])) : ''); $notes = ((x($_POST, 'notes')) ? (trim($_POST['notes'])) : ''); $email = ((x($_POST, 'email')) ? notags(trim($_POST['email'])) : ''); $footer_text = ((x($_POST, 'footer_text')) ? (trim($_POST['footer_text'])) : ''); - set_config('impressum','owner',strip_tags($owner)); - set_config('impressum','ownerprofile',strip_tags($ownerprofile)); - set_config('impressum','postal',strip_tags($postal)); - set_config('impressum','email',strip_tags($email)); - set_config('impressum','notes',strip_tags($notes)); - set_config('impressum','footer_text',strip_tags($footer_text)); - info( t('Settings updated.'). EOL ); + Config::set('impressum','owner',strip_tags($owner)); + Config::set('impressum','ownerprofile',strip_tags($ownerprofile)); + Config::set('impressum','postal',strip_tags($postal)); + Config::set('impressum','email',strip_tags($email)); + Config::set('impressum','notes',strip_tags($notes)); + Config::set('impressum','footer_text',strip_tags($footer_text)); + info(L10n::t('Settings updated.'). EOL ); } -function impressum_plugin_admin (&$a, &$o) { +function impressum_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/impressum/" ); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - '$owner' => array('owner', t('Site Owner'), get_config('impressum','owner'), t('The page operators name.')), - '$ownerprofile' => array('ownerprofile', t('Site Owners Profile'), get_config('impressum','ownerprofile'), t('Profile address of the operator.')), - '$postal' => array('postal', t('Postal Address'), get_config('impressum','postal'), t('How to contact the operator via snail mail. You can use BBCode here.')), - '$notes' => array('notes', t('Notes'), get_config('impressum','notes'), t('Additional notes that are displayed beneath the contact information. You can use BBCode here.')), - '$email' => array('email', t('Email Address'), get_config('impressum','email'), t('How to contact the operator via email. (will be displayed obfuscated)')), - '$footer_text' => array('footer_text', t('Footer note'), get_config('impressum','footer_text'), t('Text for the footer. You can use BBCode here.')), - )); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$owner' => ['owner', L10n::t('Site Owner'), Config::get('impressum','owner'), L10n::t('The page operators name.')], + '$ownerprofile' => ['ownerprofile', L10n::t('Site Owners Profile'), Config::get('impressum','ownerprofile'), L10n::t('Profile address of the operator.')], + '$postal' => ['postal', L10n::t('Postal Address'), Config::get('impressum','postal'), L10n::t('How to contact the operator via snail mail. You can use BBCode here.')], + '$notes' => ['notes', L10n::t('Notes'), Config::get('impressum','notes'), L10n::t('Additional notes that are displayed beneath the contact information. You can use BBCode here.')], + '$email' => ['email', L10n::t('Email Address'), Config::get('impressum','email'), L10n::t('How to contact the operator via email. (will be displayed obfuscated)')], + '$footer_text' => ['footer_text', L10n::t('Footer note'), Config::get('impressum','footer_text'), L10n::t('Text for the footer. You can use BBCode here.')], + ]); } diff --git a/impressum/lang/de/messages.po b/impressum/lang/de/messages.po index 1a73058a..11d4a512 100644 --- a/impressum/lang/de/messages.po +++ b/impressum/lang/de/messages.po @@ -41,7 +41,7 @@ msgid "" "The impressum addon needs to be configured!
Please add at least the " "owner variable to your config file. For other variables please " "refer to the README file of the addon." -msgstr "Das Impressums-Plugin muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert." +msgstr "Das Impressums-Addon muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert." #: impressum.php:78 msgid "Settings updated." diff --git a/impressum/lang/de/strings.php b/impressum/lang/de/strings.php index 66acf097..0cf1a4ae 100644 --- a/impressum/lang/de/strings.php +++ b/impressum/lang/de/strings.php @@ -9,7 +9,7 @@ $a->strings["Impressum"] = "Impressum"; $a->strings["Site Owner"] = "Betreiber der Seite"; $a->strings["Email Address"] = "Email Adresse"; $a->strings["Postal Address"] = "Postalische Anschrift"; -$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums-Plugin muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert."; +$a->strings["The impressum addon needs to be configured!
Please add at least the owner variable to your config file. For other variables please refer to the README file of the addon."] = "Das Impressums-Addon muss noch konfiguriert werden.
Bitte gebe mindestens den Betreiber in der Konfiguration an. Alle weiteren Parameter werden in der README-Datei des Addons erläutert."; $a->strings["Settings updated."] = "Einstellungen aktualisiert."; $a->strings["Submit"] = "Senden"; $a->strings["The page operators name."] = "Name des Server-Administrators"; diff --git a/impressum/lang/it/messages.po b/impressum/lang/it/messages.po index ae430ef4..60f25ac5 100644 --- a/impressum/lang/it/messages.po +++ b/impressum/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:15+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php b/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php index 5e46b3b7..e92d3440 100644 --- a/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php +++ b/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php @@ -5,45 +5,47 @@ * Version: 1.0 * Author: Thomas Willingham */ +use Friendica\Core\Addon; +use Friendica\Core\L10n; -function infiniteimprobabilitydrive_install() { -register_hook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); +function infiniteimprobabilitydrive_install() +{ + Addon::registerHook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); } -function infiniteimprobabilitydrive_uninstall() { -unregister_hook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); - +function infiniteimprobabilitydrive_uninstall() +{ + Addon::unregisterHook('app_menu', 'addon/infiniteimprobabilitydrive/infiniteimprobabilitydrive.php', 'infiniteimprobabilitydrive_app_menu'); } -function infiniteimprobabilitydrive_app_menu($a,&$b) { -$b['app_menu'][] = ''; +function infiniteimprobabilitydrive_app_menu($a, &$b) +{ + $b['app_menu'][] = ''; } -function infiniteimprobabilitydrive_module() { -return; +function infiniteimprobabilitydrive_module() +{ + return; } -function infiniteimprobabilitydrive_content(&$a) { -$baseurl = $a->get_baseurl() . '/addon/infiniteimprobabilitydrive'; -$o = ''; +function infiniteimprobabilitydrive_content(&$a) +{ + $baseurl = $a->get_baseurl() . '/addon/infiniteimprobabilitydrive'; + $o = ''; -$a->page['htmlhead'] .= ''; + $a->page['htmlhead'] .= ''; -$baseurl = $a->get_baseurl(); + $baseurl = $a->get_baseurl(); - - $o .= <<< EOT + $o .= <<< EOT

Try another destination with the Infinite Improbability Drive
' . (($b['location']) ? escape_tags($b['location']) : t('View Larger')) . ''; + $cardlink .= '#map=' . $zoom . '/' . $lat . '/' . $lon . '">' . ($b['location'] ? escape_tags($b['location']) : L10n::t('View Larger')) . ''; + if (empty($b['mode'])) { + $b['html'] = '' . + '
' . $cardlink . ''; + } else { + $b['html'] .= '
' . $cardlink; + } logger('generate_map: ' . $b['html'], LOGGER_DATA); - } -function openstreetmap_plugin_admin(&$a, &$o) { +function openstreetmap_addon_admin(&$a, &$o) +{ $t = get_markup_template("admin.tpl", "addon/openstreetmap/"); - $tmsserver = get_config('openstreetmap', 'tmsserver'); - if(! $tmsserver) - $tmsserver = 'http://www.openstreetmap.org'; - $nomserver = get_config('openstreetmap', 'nomserver'); - if(! $nomserver) - $nomserver = 'http://nominatim.openstreetmap.org/search.php'; - $zoom = get_config('openstreetmap', 'zoom'); - if(! $zoom) - $zoom = 16; - $marker = get_config('openstreetmap', 'marker'); - if(! $marker) - $marker = 0; + $tmsserver = Config::get('openstreetmap', 'tmsserver', OSM_TMS); + $nomserver = Config::get('openstreetmap', 'nomserver', OSM_NOM); + $zoom = Config::get('openstreetmap', 'zoom', OSM_ZOOM); + $marker = Config::get('openstreetmap', 'marker', OSM_MARKER); - $o = replace_macros($t, array( - '$submit' => t('Submit'), - '$tmsserver' => array('tmsserver', t('Tile Server URL'), $tmsserver, t('A list of public tile servers')), - '$nomserver' => array('nomserver', t('Nominatim (reverse geocoding) Server URL'), $nomserver, t('A list of Nominatim servers')), - '$zoom' => array('zoom', t('Default zoom'), $zoom, t('The default zoom level. (1:world, 18:highest, also depends on tile server)')), - '$marker' => array('marker', t('Include marker on map'), $marker, t('Include a marker on the map.')), - )); + // This is needed since we stored an empty string in the config in previous versions + if (empty($nomserver)) { + $nomserver = OSM_NOM; + } + + $o = replace_macros($t, [ + '$submit' => L10n::t('Submit'), + '$tmsserver' => ['tmsserver', L10n::t('Tile Server URL'), $tmsserver, L10n::t('A list of public tile servers')], + '$nomserver' => ['nomserver', L10n::t('Nominatim (reverse geocoding) Server URL'), $nomserver, L10n::t('A list of Nominatim servers')], + '$zoom' => ['zoom', L10n::t('Default zoom'), $zoom, L10n::t('The default zoom level. (1:world, 18:highest, also depends on tile server)')], + '$marker' => ['marker', L10n::t('Include marker on map'), $marker, L10n::t('Include a marker on the map.')], + ]); } -function openstreetmap_plugin_admin_post(&$a) { - $urltms = ((x($_POST, 'tmsserver')) ? notags(trim($_POST['tmsserver'])) : ''); - $urlnom = ((x($_POST, 'nomserver')) ? notags(trim($_POST['nomserver'])) : ''); - $zoom = ((x($_POST, 'zoom')) ? intval(trim($_POST['zoom'])) : '16'); - $marker = ((x($_POST, 'marker')) ? intval(trim($_POST['marker'])) : '0'); - set_config('openstreetmap', 'tmsserver', $urltms); - set_config('openstreetmap', 'nomserver', $urlnom); - set_config('openstreetmap', 'zoom', $zoom); - set_config('openstreetmap', 'marker', $marker); - info( t('Settings updated.') . EOL); + +function openstreetmap_addon_admin_post(&$a) +{ + $urltms = defaults($_POST, 'tmsserver', OSM_TMS); + $urlnom = defaults($_POST, 'nomserver', OSM_NOM); + $zoom = defaults($_POST, 'zoom', OSM_ZOOM); + $marker = defaults($_POST, 'marker', OSM_MARKER); + + Config::set('openstreetmap', 'tmsserver', $urltms); + Config::set('openstreetmap', 'nomserver', $urlnom); + Config::set('openstreetmap', 'zoom', $zoom); + Config::set('openstreetmap', 'marker', $marker); + + info(L10n::t('Settings updated.') . EOL); } diff --git a/openstreetmap/templates/admin.tpl b/openstreetmap/templates/admin.tpl index 4fd64376..69ff2476 100644 --- a/openstreetmap/templates/admin.tpl +++ b/openstreetmap/templates/admin.tpl @@ -1,5 +1,5 @@ {{include file="field_input.tpl" field=$tmsserver}} - +{{include file="field_input.tpl" field=$nomserver}} {{include file="field_input.tpl" field=$zoom}} {{include file="field_checkbox.tpl" field=$marker}}

diff --git a/pageheader/README b/pageheader/README index d3fbf9ea..c5d0fa3d 100644 --- a/pageheader/README +++ b/pageheader/README @@ -2,7 +2,7 @@ Page Header For server admins only. Displays a text message for system announcements' -The message is entered in the admin account at settings, Plugin settings. +The message is entered in the admin account at settings, Addon settings. If you want to use HTML in the pageheader, create a file called pageheader.html in the document root of your friendica instance and add the html there. \ No newline at end of file diff --git a/pageheader/lang/C/messages.po b/pageheader/lang/C/messages.po index e0fdbb35..f8958d2f 100644 --- a/pageheader/lang/C/messages.po +++ b/pageheader/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2018-03-11 18:52+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,14 +17,24 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: pageheader.php:50 +#: pageheader.php:53 msgid "\"pageheader\" Settings" msgstr "" -#: pageheader.php:55 -msgid "Submit" +#: pageheader.php:54 +msgid "Message" msgstr "" -#: pageheader.php:68 +#: pageheader.php:54 +msgid "" +"Message to display on every page on this server (or put a pageheader.html " +"file in your docroot)" +msgstr "" + +#: pageheader.php:55 +msgid "Save Settings" +msgstr "" + +#: pageheader.php:69 msgid "pageheader Settings saved." msgstr "" diff --git a/pageheader/lang/de/messages.po b/pageheader/lang/de/messages.po index 947296d7..c8848b72 100644 --- a/pageheader/lang/de/messages.po +++ b/pageheader/lang/de/messages.po @@ -4,30 +4,41 @@ # # # Translators: -# Abrax , 2014 -# bavatar , 2014 +# Andreas H., 2014 +# Tobias Diekershoff , 2014 +# Tobias Diekershoff , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-10-15 12:32+0000\n" -"Last-Translator: Abrax \n" -"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" +"POT-Creation-Date: 2018-03-11 18:52+0100\n" +"PO-Revision-Date: 2018-03-16 07:42+0000\n" +"Last-Translator: Tobias Diekershoff \n" +"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: pageheader.php:50 +#: pageheader.php:53 msgid "\"pageheader\" Settings" msgstr "\"pageheader\"-Einstellungen" -#: pageheader.php:55 -msgid "Submit" -msgstr "Senden" +#: pageheader.php:54 +msgid "Message" +msgstr "Mitteilung" -#: pageheader.php:68 +#: pageheader.php:54 +msgid "" +"Message to display on every page on this server (or put a pageheader.html " +"file in your docroot)" +msgstr "Die Mitteilung, die auf jeder Seite dieses Knotens angezeigt werden soll (alternativ kann die Datei pageheader.html im Stammverzeichnis der Friendica Installation angelegt werden)." + +#: pageheader.php:55 +msgid "Save Settings" +msgstr "Einstellungen speichern" + +#: pageheader.php:69 msgid "pageheader Settings saved." msgstr "pageheader-Einstellungen gespeichert." diff --git a/pageheader/lang/de/strings.php b/pageheader/lang/de/strings.php index 45f16940..c0bfeee4 100644 --- a/pageheader/lang/de/strings.php +++ b/pageheader/lang/de/strings.php @@ -6,5 +6,7 @@ function string_plural_select_de($n){ }} ; $a->strings["\"pageheader\" Settings"] = "\"pageheader\"-Einstellungen"; -$a->strings["Submit"] = "Senden"; +$a->strings["Message"] = "Mitteilung"; +$a->strings["Message to display on every page on this server (or put a pageheader.html file in your docroot)"] = "Die Mitteilung, die auf jeder Seite dieses Knotens angezeigt werden soll (alternativ kann die Datei pageheader.html im Stammverzeichnis der Friendica Installation angelegt werden)."; +$a->strings["Save Settings"] = "Einstellungen speichern"; $a->strings["pageheader Settings saved."] = "pageheader-Einstellungen gespeichert."; diff --git a/pageheader/lang/it/messages.po b/pageheader/lang/it/messages.po index 186cd470..f3ac805c 100644 --- a/pageheader/lang/it/messages.po +++ b/pageheader/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:21+0000\n" +"POT-Creation-Date: 2018-03-11 18:52+0100\n" +"PO-Revision-Date: 2018-03-19 13:19+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -19,14 +19,24 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: pageheader.php:50 +#: pageheader.php:53 msgid "\"pageheader\" Settings" msgstr "Impostazioni \"Intestazione pagina\"" -#: pageheader.php:55 -msgid "Submit" -msgstr "Invia" +#: pageheader.php:54 +msgid "Message" +msgstr "Messaggio" -#: pageheader.php:68 +#: pageheader.php:54 +msgid "" +"Message to display on every page on this server (or put a pageheader.html " +"file in your docroot)" +msgstr "Il messaggio da mostrare su ogni pagina di questo server (puoi anche aggiungere un file pageheader.html nella root)" + +#: pageheader.php:55 +msgid "Save Settings" +msgstr "Salva Impostazioni" + +#: pageheader.php:69 msgid "pageheader Settings saved." msgstr "Impostazioni \"Intestazione pagina\" salvate." diff --git a/pageheader/lang/it/strings.php b/pageheader/lang/it/strings.php index 8cfd175e..e81ef80d 100644 --- a/pageheader/lang/it/strings.php +++ b/pageheader/lang/it/strings.php @@ -6,5 +6,7 @@ function string_plural_select_it($n){ }} ; $a->strings["\"pageheader\" Settings"] = "Impostazioni \"Intestazione pagina\""; -$a->strings["Submit"] = "Invia"; +$a->strings["Message"] = "Messaggio"; +$a->strings["Message to display on every page on this server (or put a pageheader.html file in your docroot)"] = "Il messaggio da mostrare su ogni pagina di questo server (puoi anche aggiungere un file pageheader.html nella root)"; +$a->strings["Save Settings"] = "Salva Impostazioni"; $a->strings["pageheader Settings saved."] = "Impostazioni \"Intestazione pagina\" salvate."; diff --git a/pageheader/pageheader.php b/pageheader/pageheader.php index 173fc707..6a99d64c 100644 --- a/pageheader/pageheader.php +++ b/pageheader/pageheader.php @@ -1,6 +1,4 @@ * */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; function pageheader_install() { - register_hook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); - register_hook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); - register_hook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); + Addon::registerHook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); + Addon::registerHook('addon_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); } function pageheader_uninstall() { - unregister_hook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); - unregister_hook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); + Addon::unregisterHook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); + Addon::unregisterHook('addon_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post'); // hook moved, uninstall the old one if still there. - unregister_hook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); + Addon::unregisterHook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch'); } @@ -47,14 +48,12 @@ function pageheader_addon_settings(&$a,&$s) { if(! $words) $words = ''; - $s .= '
'; - $s .= '

' . t('"pageheader" Settings') . '

'; - $s .= '
'; - - $s .= '
'; + $t = get_markup_template("settings.tpl", "addon/pageheader/"); + $s .= replace_macros($t, [ + '$title' => L10n::t('"pageheader" Settings'), + '$phwords' => ['pageheader-words', L10n::t('Message'), $words, L10n::t('Message to display on every page on this server (or put a pageheader.html file in your docroot)')], + '$submit' => L10n::t('Save Settings') + ]); return; @@ -66,8 +65,8 @@ function pageheader_addon_settings_post(&$a,&$b) { return; if($_POST['pageheader-submit']) { - set_config('pageheader','text',trim(strip_tags($_POST['pageheader-words']))); - info( t('pageheader Settings saved.') . EOL); + Config::set('pageheader','text',trim(strip_tags($_POST['pageheader-words']))); + info(L10n::t('pageheader Settings saved.') . EOL); } } diff --git a/pageheader/templates/settings.tpl b/pageheader/templates/settings.tpl new file mode 100644 index 00000000..db1a4093 --- /dev/null +++ b/pageheader/templates/settings.tpl @@ -0,0 +1,14 @@ + +

{{$title}}

+
+ +
diff --git a/piwik/README.md b/piwik/README.md index 0ac2ff72..37ece2f0 100644 --- a/piwik/README.md +++ b/piwik/README.md @@ -1,4 +1,4 @@ -Piwik Plugin +Piwik Addon ============ by Tobias Diekershoff and Klaus Weidenbach @@ -9,7 +9,7 @@ tool Piwik into the Friendica pages. Requirements ------------ -To use this plugin you need a [piwik](http://piwik.org/) installation. +To use this addon you need a [piwik](http://piwik.org/) installation. Where to find ------------- diff --git a/piwik/lang/it/messages.po b/piwik/lang/it/messages.po index 45e776ab..13e324f7 100644 --- a/piwik/lang/it/messages.po +++ b/piwik/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-26 12:49+0200\n" -"PO-Revision-Date: 2015-08-31 10:22+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/piwik/lang/zh-cn/messages.po b/piwik/lang/zh-cn/messages.po new file mode 100644 index 00000000..6db5342a --- /dev/null +++ b/piwik/lang/zh-cn/messages.po @@ -0,0 +1,64 @@ +# ADDON piwik +# Copyright (C) +# This file is distributed under the same license as the Friendica piwik addon package. +# +# +# Translators: +# 朱陈锬 , 2018 +msgid "" +msgstr "" +"Project-Id-Version: friendica\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2015-07-26 12:49+0200\n" +"PO-Revision-Date: 2018-03-01 09:57+0000\n" +"Last-Translator: 朱陈锬 \n" +"Language-Team: Chinese (China) (http://www.transifex.com/Friendica/friendica/language/zh_CN/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: zh_CN\n" +"Plural-Forms: nplurals=1; plural=0;\n" + +#: piwik.php:79 +msgid "" +"This website is tracked using the Piwik " +"analytics tool." +msgstr "此网站用 Piwik 追踪分析工具。" + +#: piwik.php:82 +#, php-format +msgid "" +"If you do not want that your visits are logged in this way you can set a cookie to prevent Piwik from tracking further visits of " +"the site (opt-out)." +msgstr "" + +#: piwik.php:89 +msgid "Save Settings" +msgstr "保存设置" + +#: piwik.php:90 +msgid "Piwik Base URL" +msgstr "" + +#: piwik.php:90 +msgid "" +"Absolute path to your Piwik installation. (without protocol (http/s), with " +"trailing slash)" +msgstr "" + +#: piwik.php:91 +msgid "Site ID" +msgstr "" + +#: piwik.php:92 +msgid "Show opt-out cookie link?" +msgstr "" + +#: piwik.php:93 +msgid "Asynchronous tracking" +msgstr "异步追踪" + +#: piwik.php:105 +msgid "Settings updated." +msgstr "设置已更新。" diff --git a/piwik/lang/zh-cn/strings.php b/piwik/lang/zh-cn/strings.php index 21ce8b6f..ad99b364 100644 --- a/piwik/lang/zh-cn/strings.php +++ b/piwik/lang/zh-cn/strings.php @@ -1,11 +1,16 @@ -strings["This website is tracked using the Piwik analytics tool."] = "这个网站用Piwik分析工具追踪 。"; -$a->strings["If you do not want that your visits are logged this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out)."] = "如果您不想您访问这样记录您可以用一个cookie防Piwik追踪未来的访问(选择性退出)。"; -$a->strings["Submit"] = "提交"; -$a->strings["Piwik Base URL"] = "Piwik基础URL"; -$a->strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = "绝对道路到Piwik安装。(没有协议(http/s)跟斜线后缀)"; -$a->strings["Site ID"] = "网站ID"; -$a->strings["Show opt-out cookie link?"] = " 显示选择性退出cookie按钮?"; -$a->strings["Asynchronous tracking"] = "异步追踪"; -$a->strings["Settings updated."] = "设置跟新了"; +strings["This website is tracked using the Piwik analytics tool."] = "此网站用 Piwik 追踪分析工具。"; +$a->strings["If you do not want that your visits are logged in this way you can set a cookie to prevent Piwik from tracking further visits of the site (opt-out)."] = ""; +$a->strings["Save Settings"] = "保存设置"; +$a->strings["Piwik Base URL"] = ""; +$a->strings["Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)"] = ""; +$a->strings["Site ID"] = ""; +$a->strings["Show opt-out cookie link?"] = ""; +$a->strings["Asynchronous tracking"] = "异步追踪"; +$a->strings["Settings updated."] = "设置已更新。"; diff --git a/piwik/piwik.php b/piwik/piwik.php index 279c82e2..213125d2 100644 --- a/piwik/piwik.php +++ b/piwik/piwik.php @@ -1,13 +1,13 @@ * Author: Klaus Weidenbach */ -/* Piwik Analytics Plugin for Friendica +/* Piwik Analytics Addon for Friendica * * Author: Tobias Diekershoff * tobias.diekershoff@gmx.net @@ -29,23 +29,26 @@ * about http/https but beware to put the trailing / at the end of your * setting. */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; function piwik_install() { - register_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); + Addon::registerHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); - logger("installed piwik plugin"); + logger("installed piwik addon"); } function piwik_uninstall() { - unregister_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); + Addon::unregisterHook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics'); - logger("uninstalled piwik plugin"); + logger("uninstalled piwik addon"); } function piwik_analytics($a,&$b) { /* - * styling of every HTML block added by this plugin is done in the + * styling of every HTML block added by this addon is done in the * associated CSS file. We just have to tell Friendica to get it * into the page header. */ @@ -76,31 +79,31 @@ function piwik_analytics($a,&$b) { */ if ($optout) { $b .= ""; } } -function piwik_plugin_admin (&$a, &$o) { +function piwik_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/piwik/" ); - $o = replace_macros( $t, array( - '$submit' => t('Save Settings'), - '$piwikbaseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')), - '$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''), - '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''), - '$async' => array('async', t('Asynchronous tracking'), get_config('piwik','async' ), ''), - )); + $o = replace_macros( $t, [ + '$submit' => L10n::t('Save Settings'), + '$piwikbaseurl' => ['baseurl', L10n::t('Piwik Base URL'), Config::get('piwik','baseurl' ), L10n::t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')], + '$siteid' => ['siteid', L10n::t('Site ID'), Config::get('piwik','siteid' ), ''], + '$optout' => ['optout', L10n::t('Show opt-out cookie link?'), Config::get('piwik','optout' ), ''], + '$async' => ['async', L10n::t('Asynchronous tracking'), Config::get('piwik','async' ), ''], + ]); } -function piwik_plugin_admin_post (&$a) { +function piwik_addon_admin_post (&$a) { $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : ''); $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : ''); $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : ''); $async = ((x($_POST, 'async')) ? trim($_POST['async']) : ''); - set_config('piwik', 'baseurl', $url); - set_config('piwik', 'siteid', $id); - set_config('piwik', 'optout', $optout); - set_config('piwik', 'async', $async); - info( t('Settings updated.'). EOL); + Config::set('piwik', 'baseurl', $url); + Config::set('piwik', 'siteid', $id); + Config::set('piwik', 'optout', $optout); + Config::set('piwik', 'async', $async); + info(L10n::t('Settings updated.'). EOL); } diff --git a/planets/lang/C/messages.po b/planets/lang/C/messages.po index 843752a1..f0773cc2 100644 --- a/planets/lang/C/messages.po +++ b/planets/lang/C/messages.po @@ -22,7 +22,7 @@ msgid "Planets Settings" msgstr "" #: planets.php:152 -msgid "Enable Planets Plugin" +msgid "Enable Planets Addon" msgstr "" #: planets.php:158 diff --git a/planets/lang/ca/strings.php b/planets/lang/ca/strings.php index 79fdd6be..625dcab9 100644 --- a/planets/lang/ca/strings.php +++ b/planets/lang/ca/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Ajustos de Planet"; -$a->strings["Enable Planets Plugin"] = "Activa Plugin de Planet"; +$a->strings["Enable Planets Addon"] = "Activa Addon de Planet"; $a->strings["Submit"] = "Enviar"; diff --git a/planets/lang/cs/messages.po b/planets/lang/cs/messages.po index c47ff06c..ac2b9c74 100644 --- a/planets/lang/cs/messages.po +++ b/planets/lang/cs/messages.po @@ -24,8 +24,8 @@ msgid "Planets Settings" msgstr "Planets Nastavení" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Povolit Planets plugin" +msgid "Enable Planets Addon" +msgstr "Povolit Planets addon" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/cs/strings.php b/planets/lang/cs/strings.php index 268f3192..c4c0524d 100644 --- a/planets/lang/cs/strings.php +++ b/planets/lang/cs/strings.php @@ -6,5 +6,5 @@ function string_plural_select_cs($n){ }} ; $a->strings["Planets Settings"] = "Planets Nastavení"; -$a->strings["Enable Planets Plugin"] = "Povolit Planets plugin"; +$a->strings["Enable Planets Addon"] = "Povolit Planets addon"; $a->strings["Submit"] = "Odeslat"; diff --git a/planets/lang/de/messages.po b/planets/lang/de/messages.po index 42788d56..89f4d07a 100644 --- a/planets/lang/de/messages.po +++ b/planets/lang/de/messages.po @@ -25,8 +25,8 @@ msgid "Planets Settings" msgstr "Planeten Einstellungen" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Planeten-Plugin aktivieren" +msgid "Enable Planets Addon" +msgstr "Planeten-Addon aktivieren" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/de/strings.php b/planets/lang/de/strings.php index ab513fac..653d025b 100644 --- a/planets/lang/de/strings.php +++ b/planets/lang/de/strings.php @@ -6,5 +6,5 @@ function string_plural_select_de($n){ }} ; $a->strings["Planets Settings"] = "Planeten Einstellungen"; -$a->strings["Enable Planets Plugin"] = "Planeten-Plugin aktivieren"; +$a->strings["Enable Planets Addon"] = "Planeten-Addon aktivieren"; $a->strings["Submit"] = "Senden"; diff --git a/planets/lang/eo/strings.php b/planets/lang/eo/strings.php index 2f9ff97c..c6b6d413 100644 --- a/planets/lang/eo/strings.php +++ b/planets/lang/eo/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Agordo pri Planets"; -$a->strings["Enable Planets Plugin"] = "Ŝalti la Planets kromprogamon"; +$a->strings["Enable Planets Addon"] = "Ŝalti la Planets kromprogamon"; $a->strings["Submit"] = "Sendi"; diff --git a/planets/lang/es/messages.po b/planets/lang/es/messages.po index 294da082..b1e33659 100644 --- a/planets/lang/es/messages.po +++ b/planets/lang/es/messages.po @@ -24,8 +24,8 @@ msgid "Planets Settings" msgstr "Ajustes de Planets" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Habilite el plugin Planets" +msgid "Enable Planets Addon" +msgstr "Habilite eladdonPlanets" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/es/strings.php b/planets/lang/es/strings.php index 8c7ef65d..2fd5ed90 100644 --- a/planets/lang/es/strings.php +++ b/planets/lang/es/strings.php @@ -6,5 +6,5 @@ function string_plural_select_es($n){ }} ; $a->strings["Planets Settings"] = "Ajustes de Planets"; -$a->strings["Enable Planets Plugin"] = "Habilite el plugin Planets"; +$a->strings["Enable Planets Addon"] = "Habilite el addon Planets"; $a->strings["Submit"] = "Enviar"; diff --git a/planets/lang/fr/strings.php b/planets/lang/fr/strings.php index 505d24c3..b4524f10 100644 --- a/planets/lang/fr/strings.php +++ b/planets/lang/fr/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Réglages des Planets"; -$a->strings["Enable Planets Plugin"] = "Activer Planets"; +$a->strings["Enable Planets Addon"] = "Activer Planets"; $a->strings["Submit"] = "Envoyer"; diff --git a/planets/lang/is/strings.php b/planets/lang/is/strings.php index d59b838f..82f8b728 100644 --- a/planets/lang/is/strings.php +++ b/planets/lang/is/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Senda inn"; diff --git a/planets/lang/it/messages.po b/planets/lang/it/messages.po index 4cb0b694..2cf9592c 100644 --- a/planets/lang/it/messages.po +++ b/planets/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:22+0000\n" +"PO-Revision-Date: 2018-03-19 13:25+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -24,8 +24,8 @@ msgid "Planets Settings" msgstr "Impostazioni \"Pianeti\"" #: planets.php:152 -msgid "Enable Planets Plugin" -msgstr "Abilita il plugin \"Pianeti\"" +msgid "Enable Planets Addon" +msgstr "Abilita il componente aggiuntivo Pianeti" #: planets.php:158 msgid "Submit" diff --git a/planets/lang/it/strings.php b/planets/lang/it/strings.php index 1cfa66e6..1b5aaa91 100644 --- a/planets/lang/it/strings.php +++ b/planets/lang/it/strings.php @@ -6,5 +6,5 @@ function string_plural_select_it($n){ }} ; $a->strings["Planets Settings"] = "Impostazioni \"Pianeti\""; -$a->strings["Enable Planets Plugin"] = "Abilita il plugin \"Pianeti\""; +$a->strings["Enable Planets Addon"] = "Abilita il componente aggiuntivo Pianeti"; $a->strings["Submit"] = "Invia"; diff --git a/planets/lang/nb-no/strings.php b/planets/lang/nb-no/strings.php index 628eb2ae..7d8fbe48 100644 --- a/planets/lang/nb-no/strings.php +++ b/planets/lang/nb-no/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/planets/lang/pl/strings.php b/planets/lang/pl/strings.php index 97120046..0e05c0a4 100644 --- a/planets/lang/pl/strings.php +++ b/planets/lang/pl/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Potwierdź"; diff --git a/planets/lang/pt-br/strings.php b/planets/lang/pt-br/strings.php index 5cb179c5..6f3b8f10 100644 --- a/planets/lang/pt-br/strings.php +++ b/planets/lang/pt-br/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "Configuração dos planetas"; -$a->strings["Enable Planets Plugin"] = "Habilita configuração dos planetas"; +$a->strings["Enable Planets Addon"] = "Habilita configuração dos planetas"; $a->strings["Submit"] = "Enviar"; diff --git a/planets/lang/ro/messages.po b/planets/lang/ro/messages.po index 67932a8b..b94394ae 100644 --- a/planets/lang/ro/messages.po +++ b/planets/lang/ro/messages.po @@ -24,7 +24,7 @@ msgid "Planets Settings" msgstr "Configurări Planets" #: planets.php:152 -msgid "Enable Planets Plugin" +msgid "Enable Planets Addon" msgstr "Activare Modul Planets" #: planets.php:158 diff --git a/planets/lang/ro/strings.php b/planets/lang/ro/strings.php index 93736aad..19a2e3de 100644 --- a/planets/lang/ro/strings.php +++ b/planets/lang/ro/strings.php @@ -6,5 +6,5 @@ function string_plural_select_ro($n){ }} ; $a->strings["Planets Settings"] = "Configurări Planets"; -$a->strings["Enable Planets Plugin"] = "Activare Modul Planets"; +$a->strings["Enable Planets Addon"] = "Activare Modul Planets"; $a->strings["Submit"] = "Trimite"; diff --git a/planets/lang/ru/strings.php b/planets/lang/ru/strings.php index 1902b826..b84e2bbc 100644 --- a/planets/lang/ru/strings.php +++ b/planets/lang/ru/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = ""; -$a->strings["Enable Planets Plugin"] = ""; +$a->strings["Enable Planets Addon"] = ""; $a->strings["Submit"] = "Подтвердить"; diff --git a/planets/lang/zh-cn/strings.php b/planets/lang/zh-cn/strings.php index ac066c77..68de35c6 100644 --- a/planets/lang/zh-cn/strings.php +++ b/planets/lang/zh-cn/strings.php @@ -1,5 +1,5 @@ strings["Planets Settings"] = "行星设置"; -$a->strings["Enable Planets Plugin"] = "使行星插件可用"; +$a->strings["Enable Planets Addon"] = "使行星插件可用"; $a->strings["Submit"] = "提交"; diff --git a/planets/planets.php b/planets/planets.php index d40e6c61..067db51d 100644 --- a/planets/planets.php +++ b/planets/planets.php @@ -1,34 +1,36 @@ * Author: Tony Baldwin */ - +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function planets_install() { /** - * - * Our demo plugin will attach in three places. + * + * Our demo addon will attach in three places. * The first is just prior to storing a local post. * */ - register_hook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); + Addon::registerHook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - register_hook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); - register_hook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + Addon::registerHook('addon_settings', 'addon/planets/planets.php', 'planets_settings'); + Addon::registerHook('addon_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); logger("installed planets"); } @@ -44,9 +46,9 @@ function planets_uninstall() { * */ - unregister_hook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); - unregister_hook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); - unregister_hook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + Addon::unregisterHook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); + Addon::unregisterHook('addon_settings', 'addon/planets/planets.php', 'planets_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); logger("removed planets"); @@ -61,7 +63,7 @@ function planets_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -122,7 +124,7 @@ function planets_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -147,22 +149,22 @@ function planets_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

' . t('Planets') . '

'; + $s .= '

' . L10n::t('Planets') . '

'; $s .= '
'; $s .= ''; + $s .= '
'; } diff --git a/pledgie/pledgie.php b/pledgie/pledgie.php index fdc727b1..1df9c859 100644 --- a/pledgie/pledgie.php +++ b/pledgie/pledgie.php @@ -5,19 +5,22 @@ * Version: 1.1 * Author: tony baldwin * Hauke Altmann - * + * */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; function pledgie_install() { - register_hook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); - register_hook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); - register_hook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); + Addon::registerHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); + Addon::registerHook('addon_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); } function pledgie_uninstall() { - unregister_hook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); - unregister_hook('plugin_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); + Addon::unregisterHook('page_end', 'addon/pledgie/pledgie.php', 'pledgie_active'); + Addon::unregisterHook('addon_settings', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/pledgie/pledgie.php', 'pledgie_addon_settings_post'); } function pledgie_addon_settings(&$a,&$s) { @@ -39,18 +42,18 @@ function pledgie_addon_settings(&$a,&$s) { $describe = ''; $s .= '
'; - $s .= '

' . t('"pledgie" Settings') . '

'; + $s .= '

' . L10n::t('"pledgie" Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; - $s .= '
'; + $s .= '
'; return; } @@ -61,9 +64,9 @@ function pledgie_addon_settings_post(&$a,&$b) { return; if($_POST['pledgie-submit']) { - set_config('pledgie-describe','text',trim(strip_tags($_POST['pledgie-describe']))); - set_config('pledgie-campaign','text',trim(strip_tags($_POST['pledgie-campaign']))); - info( t('pledgie Settings saved.') . EOL); + Config::set('pledgie-describe','text',trim(strip_tags($_POST['pledgie-describe']))); + Config::set('pledgie-campaign','text',trim(strip_tags($_POST['pledgie-campaign']))); + info(L10n::t('pledgie Settings saved.') . EOL); } } diff --git a/public_server/README.md b/public_server/README.md index d323ff0f..b1fb49df 100644 --- a/public_server/README.md +++ b/public_server/README.md @@ -2,10 +2,10 @@ Public Server ============= -Public Server is a Friendica plugin which implements automatic account & post expiration so that a site may be used as a public +Public Server is a Friendica addon which implements automatic account & post expiration so that a site may be used as a public test bed with reduced data retention. -This is a modified version of the testdrive plugin, DO NOT ACTIVATE AT THE SAME TIME AS THE TESTDRIVE PLUGIN. +This is a modified version of the testdrive addon, DO NOT ACTIVATE AT THE SAME TIME AS THE TESTDRIVE ADDON. //When an account is created on the site, it is given a hard expiration date of $a->config['public_server']['expiredays'] = 30; @@ -19,7 +19,7 @@ This is a modified version of the testdrive plugin, DO NOT ACTIVATE AT THE SAME $a->config['public_server']['flagposts'] = 90; $a->config['public_server']['flagpostsexpire'] = 146; -Set these in your .htconfig.php file. By default nothing is defined in case the plugin is activated accidentally. +Set these in your .htconfig.php file. By default nothing is defined in case the addon is activated accidentally. They can be ommitted or set to 0 to disable each option. The default values are those used by friendica.eu, change these as desired. diff --git a/public_server/lang/it/messages.po b/public_server/lang/it/messages.po index 079d46bf..d4288edb 100644 --- a/public_server/lang/it/messages.po +++ b/public_server/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-10-15 09:02+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/public_server/public_server.php b/public_server/public_server.php index 7d8b8136..f6eb03e6 100644 --- a/public_server/public_server.php +++ b/public_server/public_server.php @@ -1,176 +1,169 @@ */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Database\DBM; +use Friendica\Util\DateTimeFormat; - - -function public_server_install() { - - register_hook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); - register_hook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); - register_hook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); - register_hook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); +function public_server_install() +{ + Addon::registerHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); + Addon::registerHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); + Addon::registerHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); + Addon::registerHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } - -function public_server_uninstall() { - - unregister_hook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); - unregister_hook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); - unregister_hook('enotify','addon/public_server/public_server.php', 'public_server_enotify'); - unregister_hook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); +function public_server_uninstall() +{ + Addon::unregisterHook('register_account', 'addon/public_server/public_server.php', 'public_server_register_account'); + Addon::unregisterHook('cron', 'addon/public_server/public_server.php', 'public_server_cron'); + Addon::unregisterHook('enotify', 'addon/public_server/public_server.php', 'public_server_enotify'); + Addon::unregisterHook('logged_in', 'addon/public_server/public_server.php', 'public_server_login'); } -function public_server_register_account($a,$b) { - +function public_server_register_account($a, $b) +{ $uid = $b; - $days = get_config('public_server','expiredays'); - $days_posts = get_config('public_server','expireposts'); - if(! $days) + $days = Config::get('public_server', 'expiredays'); + $days_posts = Config::get('public_server', 'expireposts'); + if (!$days) { return; + } - $r = q("UPDATE user set account_expires_on = '%s', expire = %d where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), - intval($days_posts), - intval($uid) - ); + $fields = ['account_expires_on' => DateTimeFormat::utc('now +' . $days . ' days'), 'expire' => $days_posts]; + dba::update('user', $fields, ['uid' => $uid]); +} -}; - - -function public_server_cron($a,$b) { +function public_server_cron($a, $b) +{ logger("public_server: cron start"); require_once('include/enotify.php'); - $r = q("select * from user where account_expires_on < UTC_TIMESTAMP() + INTERVAL 5 DAY and account_expires_on > '0000-00-00 00:00:00' and - expire_notification_sent = '0000-00-00 00:00:00' "); + $r = q("SELECT * FROM `user` WHERE `account_expires_on` < UTC_TIMESTAMP() + INTERVAL 5 DAY AND + `account_expires_on` > '%s' AND + `expire_notification_sent` <= '%s'", + dbesc(NULL_DATE), dbesc(NULL_DATE)); - if(count($r)) { - foreach($r as $rr) { - notification(array( + if (DBM::is_result($r)) { + foreach ($r as $rr) { + notification([ 'uid' => $rr['uid'], 'type' => NOTIFY_SYSTEM, 'system_type' => 'public_server_expire', 'language' => $rr['language'], 'to_name' => $rr['username'], 'to_email' => $rr['email'], - 'source_name' => t('Administrator'), + 'source_name' => L10n::t('Administrator'), 'source_link' => $a->get_baseurl(), 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', )); - q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(datetime_convert()), - intval($rr['uid']) - ); + $fields = ['expire_notification_sent' => DateTimeFormat::utcNow()]; + dba::update('user', $fields, ['uid' => $rr['uid']]); } } - $r = q("select * from user where account_expired = 1 and account_expires_on < UTC_TIMESTAMP() - INTERVAL 5 DAY and account_expires_on > '0000-00-00 00:00:00'"); - if(count($r)) { - require_once('include/Contact.php'); - foreach($r as $rr) - user_remove($rr['uid']); - + $nologin = Config::get('public_server', 'nologin', false); + if ($nologin) { + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND `login_date` <= '%s' AND `register_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s'", + dbesc(NULL_DATE), intval($nologin), dbesc(NULL_DATE)); + if (DBM::is_result($r)) { + foreach ($r as $rr) { + $fields = ['account_expires_on' => DateTimeFormat::utc('now +6 days')]; + dba::update('user', $fields, ['uid' => $rr['uid']]); + } + } } - $nologin = get_config('public_server','nologin'); - if($nologin) { - $r = q("select uid from user where account_expired = 0 and login_date = '0000-00-00 00:00:00' and register_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00'",intval($nologin)); - if(count($r)) { - foreach($r as $rr) - q("update user set account_expires_on = '%s' where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . '6 days')), - intval($rr['uid']) - ); + + $flagusers = Config::get('public_server', 'flagusers', false); + if ($flagusers) { + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND `login_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s' AND `page-flags` = 0", + intval($flagusers), dbesc(NULL_DATE)); + if (DBM::is_result($r)) { + foreach ($r as $rr) { + $fields = ['account_expires_on' => DateTimeFormat::utc('now +6 days')]; + dba::update('user', $fields, ['uid' => $rr['uid']]); + } } - } + } - - $flagusers = get_config('public_server','flagusers'); - if($flagusers) { - $r = q("select uid from user where account_expired = 0 and login_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00' and `page-flags` = 0",intval($flagusers)); - if(count($r)) { - foreach($r as $rr) - q("update user set account_expires_on = '%s' where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . '6 days')), - intval($rr['uid']) - ); - } - } - - $flagposts = get_config('public_server','flagposts'); - $flagpostsexpire = get_config('public_server','flagpostsexpire'); + $flagposts = Config::get('public_server', 'flagposts'); + $flagpostsexpire = Config::get('public_server', 'flagpostsexpire'); if ($flagposts && $flagpostsexpire) { - $r = q("select uid from user where account_expired = 0 and login_date < UTC_TIMESTAMP() - INTERVAL %d DAY and account_expires_on = '0000-00-00 00:00:00' and expire = 0 and `page-flags` = 0",intval($flagposts)); - if(count($r)) { - foreach($r as $rr) - q("update user set expire = %d where uid = %d", - intval($flagpostsexpire), - intval($rr['uid']) - ); + $r = q("SELECT `uid` FROM `user` WHERE NOT `account_expired` AND `login_date` < UTC_TIMESTAMP() - INTERVAL %d DAY AND `account_expires_on` <= '%s' and `expire` = 0 AND `page-flags` = 0", + intval($flagposts), dbesc(NULL_DATE)); + if (DBM::is_result($r)) { + foreach ($r as $rr) { + dba::update('user', ['expire' => $flagpostsexpire], ['uid' => $rr['uid']]); + } } - } + } logger("public_server: cron end"); - } -function public_server_enotify(&$a, &$b) { - if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM +function public_server_enotify(&$a, &$b) +{ + if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'public_server_expire') { - $b['itemlink'] = $a->get_baseurl(); - $b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), get_config('system','sitename')); - $b['subject'] = t('Your Friendica account is about to expire.'); - $b['body'] = sprintf( t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days"), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); - } + $b['itemlink'] = $a->get_baseurl(); + $b['epreamble'] = $b['preamble'] = L10n::t('Your account on %s will expire in a few days.', Config::get('system', 'sitename')); + $b['subject'] = L10n::t('Your Friendica account is about to expire.'); + $b['body'] = L10n::t("Hi %1\$s,\n\nYour account on %2\$s will expire in less than five days. You may keep your account by logging in at least once every 30 days", $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); + } } -function public_server_login($a,$b) { - $days = get_config('public_server','expiredays'); - if(! $days) +function public_server_login($a, $b) +{ + $days = Config::get('public_server', 'expiredays'); + if (!$days) { return; - $r = q("UPDATE user set account_expires_on = '%s' where uid = %d and account_expires_on > '0000-00-00 00:00:00'", - dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), - local_user() - ); + } + + $fields = ['account_expires_on' => DateTimeFormat::utc('now +' . $days . ' days')]; + $condition = ["`uid` = ? AND `account_expires_on` > ?", local_user(), NULL_DATE]; + dba::update('user', $fields, $condition); } -function public_server_plugin_admin_post ( &$a ) { - check_form_security_token_redirectOnErr('/admin/plugins/publicserver', 'publicserver'); - $expiredays = (( x($_POST, 'expiredays') ) ? notags(trim($_POST['expiredays'] )) : ''); - $expireposts = (( x($_POST, 'expireposts') ) ? notags(trim($_POST['expireposts'] )) : ''); - $nologin = (( x($_POST, 'nologin') ) ? notags(trim($_POST['nologin'] )) : ''); - $flagusers = (( x($_POST, 'flagusers') ) ? notags(trim($_POST['flagusers'] )) : ''); - $flagposts = (( x($_POST, 'flagposts') ) ? notags(trim($_POST['flagposts'] )) : ''); - $flagpostsexpire = (( x($_POST, 'flagpostsexpire') ) ? notags(trim($_POST['flagpostsexpire'] )) : ''); - set_config( 'public_server','expiredays',$expiredays ); - set_config( 'public_server','expireposts',$expireposts ); - set_config( 'public_server','nologin',$nologin ); - set_config( 'public_server','flagusers',$flagusers); - set_config( 'public_server','flagposts',$flagposts ); - set_config( 'public_server','flagpostsexpire',$flagpostsexpire ); - info( t('Settings saved').EOL ); -} -function public_server_plugin_admin ( &$a, &$o) { - $token = get_form_security_token("publicserver"); - $t = get_markup_template( "admin.tpl", "addon/public_server"); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - '$form_security_token' => $token, - '$infotext' => t('Set any of these options to 0 to deactivate it.'), - '$expiredays' => Array( "expiredays","Expire Days", intval(get_config('public_server', 'expiredays')), "When an account is created on the site, it is given a hard "), - '$expireposts' => Array( "expireposts", "Expire Posts", intval(get_config('public_server','expireposts')), "Set the default days for posts to expire here"), - '$nologin' => Array( "nologin", "No Login", intval(get_config('public_server','nologin')), "Remove users who have never logged in after nologin days "), - '$flagusers' => Array( "flagusers", "Flag users", intval(get_config('public_server','flagusers')), "Remove users who last logged in over flagusers days ago"), - '$flagposts' => Array( "flagposts", "Flag posts", intval(get_config('public_server','flagposts')), "For users who last logged in over flagposts days ago set post expiry days to flagpostsexpire "), - '$flagpostsexpire' => Array( "flagpostsexpire", "Flag posts expire", intval(get_config('public_server','flagpostsexpire'))), - )); +function public_server_addon_admin_post(&$a) +{ + check_form_security_token_redirectOnErr('/admin/addons/publicserver', 'publicserver'); + $expiredays = (x($_POST, 'expiredays') ? notags(trim($_POST['expiredays'])) : ''); + $expireposts = (x($_POST, 'expireposts') ? notags(trim($_POST['expireposts'])) : ''); + $nologin = (x($_POST, 'nologin') ? notags(trim($_POST['nologin'])) : ''); + $flagusers = (x($_POST, 'flagusers') ? notags(trim($_POST['flagusers'])) : ''); + $flagposts = (x($_POST, 'flagposts') ? notags(trim($_POST['flagposts'])) : ''); + $flagpostsexpire = (x($_POST, 'flagpostsexpire') ? notags(trim($_POST['flagpostsexpire'])) : ''); + Config::set('public_server', 'expiredays', $expiredays); + Config::set('public_server', 'expireposts', $expireposts); + Config::set('public_server', 'nologin', $nologin); + Config::set('public_server', 'flagusers', $flagusers); + Config::set('public_server', 'flagposts', $flagposts); + Config::set('public_server', 'flagpostsexpire', $flagpostsexpire); + info(L10n::t('Settings saved').EOL); } +function public_server_addon_admin(&$a, &$o) +{ + $token = get_form_security_token("publicserver"); + $t = get_markup_template("admin.tpl", "addon/public_server"); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$form_security_token' => $token, + '$infotext' => L10n::t('Set any of these options to 0 to deactivate it.'), + '$expiredays' => ["expiredays","Expire Days", intval(Config::get('public_server', 'expiredays')), "When an account is created on the site, it is given a hard "], + '$expireposts' => ["expireposts", "Expire Posts", intval(Config::get('public_server', 'expireposts')), "Set the default days for posts to expire here"], + '$nologin' => ["nologin", "No Login", intval(Config::get('public_server', 'nologin')), "Remove users who have never logged in after nologin days "], + '$flagusers' => ["flagusers", "Flag users", intval(Config::get('public_server', 'flagusers')), "Remove users who last logged in over flagusers days ago"], + '$flagposts' => ["flagposts", "Flag posts", intval(Config::get('public_server', 'flagposts')), "For users who last logged in over flagposts days ago set post expiry days to flagpostsexpire "], + '$flagpostsexpire' => ["flagpostsexpire", "Flag posts expire", intval(Config::get('public_server', 'flagpostsexpire'))], + ]); +} diff --git a/pumpio/lang/C/messages.po b/pumpio/lang/C/messages.po index 84ce856f..a35f0410 100644 --- a/pumpio/lang/C/messages.po +++ b/pumpio/lang/C/messages.po @@ -59,7 +59,7 @@ msgid "Import the remote timeline" msgstr "" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "" #: pumpio.php:260 diff --git a/pumpio/lang/cs/messages.po b/pumpio/lang/cs/messages.po index 157699e3..f5f9f35c 100644 --- a/pumpio/lang/cs/messages.po +++ b/pumpio/lang/cs/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importovat vzdálenou časovou osu" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Aktivovat pump.io Post Plugin" +msgid "Enable pump.io Post Addon" +msgstr "Aktivovat pump.io Post Addon" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/cs/strings.php b/pumpio/lang/cs/strings.php index 6af0c813..e5bc749d 100644 --- a/pumpio/lang/cs/strings.php +++ b/pumpio/lang/cs/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "uživatelské jméno $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "jméno serveru pump.io (bez \"http://\" nebo \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Přihlásit ke spojení na pump.io"; $a->strings["Import the remote timeline"] = "Importovat vzdálenou časovou osu"; -$a->strings["Enable pump.io Post Plugin"] = "Aktivovat pump.io Post Plugin"; +$a->strings["Enable pump.io Post Addon"] = "Aktivovat pump.io Post Addon"; $a->strings["Post to pump.io by default"] = "Defaultní umístění na pump.oi "; $a->strings["Should posts be public?"] = "Mají být příspěvky veřejné?"; $a->strings["Mirror all public posts"] = "Zrcadlit všechny veřejné příspěvky"; diff --git a/pumpio/lang/de/messages.po b/pumpio/lang/de/messages.po index 4a85f793..acfb87fa 100644 --- a/pumpio/lang/de/messages.po +++ b/pumpio/lang/de/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importiere die entfernte Zeitleiste" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Pump.io-Post-Plugin aktivieren" +msgid "Enable pump.io Post Addon" +msgstr "Pump.io-Post-Addon aktivieren" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/de/strings.php b/pumpio/lang/de/strings.php index 91c1735c..4f2c8c88 100644 --- a/pumpio/lang/de/strings.php +++ b/pumpio/lang/de/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = " Pump.io Nutzername $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = " Pump.io Servername (ohne \"http://\" oder \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Authentifiziere deine Pump.io Verbindung"; $a->strings["Import the remote timeline"] = "Importiere die entfernte Zeitleiste"; -$a->strings["Enable pump.io Post Plugin"] = "Pump.io-Post-Plugin aktivieren"; +$a->strings["Enable pump.io Post Addon"] = "Pump.io-Post-Addon aktivieren"; $a->strings["Post to pump.io by default"] = "Standardmäßig bei Pump.io veröffentlichen"; $a->strings["Should posts be public?"] = "Sollen Nachrichten öffentlich sein ?"; $a->strings["Mirror all public posts"] = "Spiegle alle öffentlichen Nachrichten"; diff --git a/pumpio/lang/es/messages.po b/pumpio/lang/es/messages.po index dd381626..86981996 100644 --- a/pumpio/lang/es/messages.po +++ b/pumpio/lang/es/messages.po @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importar la línea de tiempo remota" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Habilitar Plugin de publicación de Pump.io" +msgid "Enable pump.io Post Addon" +msgstr "Habilitar Addon de publicación de Pump.io" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/es/strings.php b/pumpio/lang/es/strings.php index 8f0a8bfb..df9630b2 100644 --- a/pumpio/lang/es/strings.php +++ b/pumpio/lang/es/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Nombre de usuario de $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "Nombre de servidor de Pump.io (sin \"http://\" o \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Autenticar su conexión de Pump.io"; $a->strings["Import the remote timeline"] = "Importar la línea de tiempo remota"; -$a->strings["Enable pump.io Post Plugin"] = "Habilitar Plugin de publicación de Pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Habilitar Addon de publicación de Pump.io"; $a->strings["Post to pump.io by default"] = "Publicar en Pump.io por defecto"; $a->strings["Should posts be public?"] = "¿Deberían de ser públicas las entradas?"; $a->strings["Mirror all public posts"] = "Reflejar todas las entradas públicas"; diff --git a/pumpio/lang/fr/messages.po b/pumpio/lang/fr/messages.po index 9258d619..28c5891f 100644 --- a/pumpio/lang/fr/messages.po +++ b/pumpio/lang/fr/messages.po @@ -62,7 +62,7 @@ msgid "Import the remote timeline" msgstr "Importer la timeline distante" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "" #: pumpio.php:260 diff --git a/pumpio/lang/fr/strings.php b/pumpio/lang/fr/strings.php index 3f933173..3e69c272 100644 --- a/pumpio/lang/fr/strings.php +++ b/pumpio/lang/fr/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Nom d'utilisateur pu $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = ""; $a->strings["Authenticate your pump.io connection"] = ""; $a->strings["Import the remote timeline"] = "Importer la timeline distante"; -$a->strings["Enable pump.io Post Plugin"] = ""; +$a->strings["Enable pump.io Post Addon"] = ""; $a->strings["Post to pump.io by default"] = "Publier sur pump.io par défaut"; $a->strings["Should posts be public?"] = "Les messages devraient être publiques ?"; $a->strings["Mirror all public posts"] = ""; diff --git a/pumpio/lang/it/messages.po b/pumpio/lang/it/messages.po index 3529a080..2ab7e050 100644 --- a/pumpio/lang/it/messages.po +++ b/pumpio/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014 +# fabrixxm , 2014,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2015-11-01 11:05+0000\n" +"PO-Revision-Date: 2018-03-19 13:25+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -61,8 +61,8 @@ msgid "Import the remote timeline" msgstr "Importa la timeline remota" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" -msgstr "Abilita il plugin di invio ad pump.io" +msgid "Enable pump.io Post Addon" +msgstr "Abilita il componente aggiuntivo di invio ad pump.io" #: pumpio.php:260 msgid "Post to pump.io by default" diff --git a/pumpio/lang/it/strings.php b/pumpio/lang/it/strings.php index 3a26670a..86b7ed29 100644 --- a/pumpio/lang/it/strings.php +++ b/pumpio/lang/it/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "nome utente pump.io $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "nome del server pump.io (senza \"http://\" o \"https://\")"; $a->strings["Authenticate your pump.io connection"] = "Autentica la tua connessione pump.io"; $a->strings["Import the remote timeline"] = "Importa la timeline remota"; -$a->strings["Enable pump.io Post Plugin"] = "Abilita il plugin di invio ad pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Abilita il componente aggiuntivo di invio ad pump.io"; $a->strings["Post to pump.io by default"] = "Invia sempre a pump.io"; $a->strings["Should posts be public?"] = "I messaggi devono essere pubblici?"; $a->strings["Mirror all public posts"] = "Clona tutti i messaggi pubblici"; diff --git a/pumpio/lang/pt-br/messages.po b/pumpio/lang/pt-br/messages.po index 8f02e040..bceaa2fe 100644 --- a/pumpio/lang/pt-br/messages.po +++ b/pumpio/lang/pt-br/messages.po @@ -61,7 +61,7 @@ msgid "Import the remote timeline" msgstr "Importar a linha do tempo remota" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "Habilitar plug-in para publicar no Pump.io" #: pumpio.php:260 diff --git a/pumpio/lang/pt-br/strings.php b/pumpio/lang/pt-br/strings.php index 56890a66..e93516b4 100644 --- a/pumpio/lang/pt-br/strings.php +++ b/pumpio/lang/pt-br/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Nome de usuário no $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = ""; $a->strings["Authenticate your pump.io connection"] = ""; $a->strings["Import the remote timeline"] = "Importar a linha do tempo remota"; -$a->strings["Enable pump.io Post Plugin"] = "Habilitar plug-in para publicar no Pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Habilitar plug-in para publicar no Pump.io"; $a->strings["Post to pump.io by default"] = "Publicar no Pump.io por padrão"; $a->strings["Should posts be public?"] = ""; $a->strings["Mirror all public posts"] = ""; diff --git a/pumpio/lang/ro/messages.po b/pumpio/lang/ro/messages.po index ae3f945b..7ac8ef7f 100644 --- a/pumpio/lang/ro/messages.po +++ b/pumpio/lang/ro/messages.po @@ -60,7 +60,7 @@ msgid "Import the remote timeline" msgstr "Importare cronologie la distanță" #: pumpio.php:255 -msgid "Enable pump.io Post Plugin" +msgid "Enable pump.io Post Addon" msgstr "Activare Modul Postare pump.io" #: pumpio.php:260 diff --git a/pumpio/lang/ro/strings.php b/pumpio/lang/ro/strings.php index bd8bf5f1..b0ee9a25 100644 --- a/pumpio/lang/ro/strings.php +++ b/pumpio/lang/ro/strings.php @@ -15,7 +15,7 @@ $a->strings["pump.io username (without the servername)"] = "Utilizator pump.io ( $a->strings["pump.io servername (without \"http://\" or \"https://\" )"] = "Nume server pump.io (fără \"http://\" ori \"https://\" )"; $a->strings["Authenticate your pump.io connection"] = "Autentificați-vă conectarea la pump.io"; $a->strings["Import the remote timeline"] = "Importare cronologie la distanță"; -$a->strings["Enable pump.io Post Plugin"] = "Activare Modul Postare pump.io"; +$a->strings["Enable pump.io Post Addon"] = "Activare Modul Postare pump.io"; $a->strings["Post to pump.io by default"] = "Postați implicit pe pump.io"; $a->strings["Should posts be public?"] = "Postările ar trebui sa fie publice?"; $a->strings["Mirror all public posts"] = "Reproducere pentru toate postările publice"; diff --git a/pumpio/pumpio.php b/pumpio/pumpio.php index f70801a8..05ab4626 100644 --- a/pumpio/pumpio.php +++ b/pumpio/pumpio.php @@ -5,35 +5,49 @@ * Version: 0.2 * Author: Michael Vogel */ -require('addon/pumpio/oauth/http.php'); -require('addon/pumpio/oauth/oauth_client.php'); -require_once('include/enotify.php'); -require_once('include/socgraph.php'); -require_once("include/Photo.php"); -require_once("mod/share.php"); + +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Core\Worker; +use Friendica\Model\Contact; +use Friendica\Model\GContact; +use Friendica\Model\Group; +use Friendica\Model\Item; +use Friendica\Model\Queue; +use Friendica\Model\User; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; + +require 'addon/pumpio/oauth/http.php'; +require 'addon/pumpio/oauth/oauth_client.php'; +require_once 'include/enotify.php'; +require_once "mod/share.php"; define('PUMPIO_DEFAULT_POLL_INTERVAL', 5); // given in minutes function pumpio_install() { - register_hook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); - register_hook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); - register_hook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); - register_hook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); - 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'); + Addon::registerHook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); + Addon::registerHook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); + Addon::registerHook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); + Addon::registerHook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); + Addon::registerHook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); + Addon::registerHook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); + Addon::registerHook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); + Addon::registerHook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); } function pumpio_uninstall() { - unregister_hook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); - unregister_hook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); - unregister_hook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); - unregister_hook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); - 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'); + Addon::unregisterHook('post_local', 'addon/pumpio/pumpio.php', 'pumpio_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/pumpio/pumpio.php', 'pumpio_send'); + Addon::unregisterHook('jot_networks', 'addon/pumpio/pumpio.php', 'pumpio_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/pumpio/pumpio.php', 'pumpio_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/pumpio/pumpio.php', 'pumpio_settings_post'); + Addon::unregisterHook('cron', 'addon/pumpio/pumpio.php', 'pumpio_cron'); + Addon::unregisterHook('queue_predeliver', 'addon/pumpio/pumpio.php', 'pumpio_queue_hook'); + Addon::unregisterHook('check_item_notification','addon/pumpio/pumpio.php', 'pumpio_check_item_notification'); } function pumpio_module() {} @@ -41,7 +55,7 @@ function pumpio_module() {} function pumpio_content(&$a) { if(! local_user()) { - notice( t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.') . EOL); return ''; } @@ -137,7 +151,7 @@ function pumpio_connect(&$a) { if (($consumer_key == "") || ($consumer_secret == "")) { logger("pumpio_connect: ".sprintf("Unable to register the client at the pump.io server '%s'.", $hostname)); - $o .= sprintf(t("Unable to register the client at the pump.io server '%s'."), $hostname); + $o .= L10n::t("Unable to register the client at the pump.io server '%s'.", $hostname); return($o); } @@ -147,7 +161,7 @@ function pumpio_connect(&$a) { // Let's begin. First we need a Request Token. The request token is required to send the user // to pumpio's login page. - // Create a new instance of the TumblrOAuth library. For this step, all we need to give the library is our + // Create a new instance of the oauth_client_class library. For this step, all we need to give the library is our // Consumer Key and Consumer Secret $client = new oauth_client_class; $client->debug = 1; @@ -177,8 +191,8 @@ function pumpio_connect(&$a) { if($success) { logger("pumpio_connect: authenticated"); - $o .= t("You are now authenticated to pumpio."); - $o .= '
'.t("return to the connector page").''; + $o .= L10n::t("You are now authenticated to pumpio."); + $o .= '
'.L10n::t("return to the connector page").''; } else { logger("pumpio_connect: could not connect"); $o = 'Could not connect to pumpio. Refresh the page or try again later.'; @@ -196,7 +210,7 @@ function pumpio_jot_nets(&$a,&$b) { $pumpio_defpost = get_pconfig(local_user(),'pumpio','post_by_default'); $selected = ((intval($pumpio_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to pumpio') . '
'; + . L10n::t('Post to pumpio') . ''; } } @@ -234,20 +248,20 @@ function pumpio_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

'. t('Pump.io Import/Export/Mirror').'

'; + $s .= '

'. L10n::t('Pump.io Import/Export/Mirror').'

'; $s .= '
'; $s .= ''; } @@ -449,12 +463,9 @@ function pumpio_send(&$a,&$b) { $public = get_pconfig($b['uid'], "pumpio", "public"); if($oauth_token && $oauth_token_secret) { - - require_once('include/bbcode.php'); - $title = trim($b['title']); - $content = bbcode($b['body'], false, false, 4); + $content = BBCode::convert($b['body'], false, 4); $params = array(); @@ -522,10 +533,7 @@ function pumpio_send(&$a,&$b) { logger('pumpio_send '.$username.': success '.$post_id); if($post_id && $iscomment) { logger('pumpio_send '.$username.': Update extid '.$post_id." for post id ".$b['id']); - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d", - dbesc($post_id), - intval($b['id']) - ); + Item::update(['extid' => $post_id], ['id' => $b['id']]); } } else { logger('pumpio_send '.$username.': '.$url.' general error: ' . print_r($user,true)); @@ -534,12 +542,11 @@ function pumpio_send(&$a,&$b) { if (count($r)) $a->contact = $r[0]["id"]; - $s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $params)); - require_once('include/queue_fn.php'); - add_to_queue($a->contact,NETWORK_PUMPIO,$s); - notice(t('Pump.io post failed. Queued for retry.').EOL); - } + $s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $params]); + Queue::add($a->contact, NETWORK_PUMPIO, $s); + notice(L10n::t('Pump.io post failed. Queued for retry.').EOL); + } } } @@ -611,10 +618,10 @@ function pumpio_action(&$a, $uid, $uri, $action, $content = "") { if (count($r)) $a->contact = $r[0]["id"]; - $s = serialize(array('url' => $url, 'item' => $orig_post["id"], 'post' => $params)); - require_once('include/queue_fn.php'); - add_to_queue($a->contact,NETWORK_PUMPIO,$s); - notice(t('Pump.io like failed. Queued for retry.').EOL); + $s = serialize(['url' => $url, 'item' => $orig_post["id"], 'post' => $params]); + + Queue::add($a->contact, NETWORK_PUMPIO, $s); + notice(L10n::t('Pump.io like failed. Queued for retry.').EOL); } } @@ -652,7 +659,7 @@ function pumpio_sync(&$a) { if ($abandon_days < 1) $abandon_days = 0; - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'pumpio' AND `k` = 'import' AND `v` = '1' ORDER BY RAND() "); if(count($r)) { @@ -704,7 +711,7 @@ function pumpio_fetchtimeline(&$a, $uid) { // get the application name for the pump.io app // 1st try personal config, then system config and fallback to the // hostname of the node if neither one is set. - $application_name = get_pconfig( $uid, 'pumpio', 'application_name'); + $application_name = PConfig::get($uid, 'pumpio', 'application_name'); if ($application_name == "") $application_name = get_config('pumpio', 'application_name'); if ($application_name == "") @@ -851,13 +858,7 @@ function pumpio_dounlike(&$a, $uid, $self, $post, $own_id) { $contactid = $orig_post['contact-id']; } - $r = q("UPDATE `item` SET `deleted` = 1, `unseen` = 1, `changed` = '%s' WHERE `verb` = '%s' AND `uid` = %d AND `contact-id` = %d AND `thr-parent` = '%s'", - dbesc(datetime_convert()), - dbesc(ACTIVITY_LIKE), - intval($uid), - intval($contactid), - dbesc($orig_post['uri']) - ); + Item::delete(['verb' => ACTIVITY_LIKE, 'uid' => $uid, 'contact-id' => $contactid, 'thr-parent' => $orig_post['uri']]); if(count($r)) logger("pumpio_dounlike: unliked existing like. User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']); @@ -948,16 +949,16 @@ function pumpio_dolike(&$a, $uid, $self, $post, $own_id, $threadcompletion = tru $author = '[url=' . $likedata['author-link'] . ']' . $likedata['author-name'] . '[/url]'; $objauthor = '[url=' . $orig_post['author-link'] . ']' . $orig_post['author-name'] . '[/url]'; - $post_type = t('status'); + $post_type = L10n::t('status'); $plink = '[url=' . $orig_post['plink'] . ']' . $post_type . '[/url]'; $likedata['object-type'] = ACTIVITY_OBJ_NOTE; - $likedata['body'] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); + $likedata['body'] = L10n::t('%1$s likes %2$s\'s %3$s', $author, $objauthor, $plink); $likedata['object'] = '' . ACTIVITY_OBJ_NOTE . '1' . '' . $orig_post['uri'] . '' . xmlify('') . '' . $orig_post['title'] . '' . $orig_post['body'] . ''; - $ret = item_store($likedata); + $ret = Item::insert($likedata); logger("pumpio_dolike: ".$ret." User ".$own_id." ".$uid." Contact: ".$contactid." Url ".$orig_post['uri']); } @@ -983,7 +984,7 @@ function pumpio_get_contact($uid, $contact, $no_insert = false) { `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->url), dbesc(normalise_link($contact->url)), dbesc(str_replace("acct:", "", $contact->id)), @@ -1049,7 +1050,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) { ); if (count($r)) - return drop_item($r[0]["id"], $false); + return Item::deleteById($r[0]["id"]); $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", dbesc($post->object->id), @@ -1057,7 +1058,7 @@ function pumpio_dodelete(&$a, $uid, $self, $post, $own_id) { ); if (count($r)) - return drop_item($r[0]["id"], $false); + return Item::deleteById($r[0]["id"]); } function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcompletion = true) { @@ -1200,11 +1201,11 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if ($post->object->displayName != "") $postarray['title'] = $post->object->displayName; - $postarray['created'] = datetime_convert('UTC','UTC',$post->published); + $postarray['created'] = DateTimeFormat::utc($post->published); if (isset($post->updated)) - $postarray['edited'] = datetime_convert('UTC','UTC',$post->updated); + $postarray['edited'] = DateTimeFormat::utc($post->updated); elseif (isset($post->received)) - $postarray['edited'] = datetime_convert('UTC','UTC',$post->received); + $postarray['edited'] = DateTimeFormat::utc($post->received); else $postarray['edited'] = $postarray['created']; @@ -1219,7 +1220,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = share_header($share_author, $post->object->author->url, $post->object->author->image->url, "", - datetime_convert('UTC','UTC',$post->object->created), + DateTimeFormat::utc($post->object->created), $post->links->self->href). $postarray['body']."[/share]"; @@ -1227,7 +1228,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet $postarray['body'] = "[share author='".$share_author. "' profile='".$post->object->author->url. "' avatar='".$post->object->author->image->url. - "' posted='".datetime_convert('UTC','UTC',$post->object->created). + "' posted='".DateTimeFormat::convert($post->object->created, 'UTC', 'UTC', ). "' link='".$post->links->self->href."']".$postarray['body']."[/share]"; */ } else { @@ -1241,17 +1242,13 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet if (trim($postarray['body']) == "") return false; - $top_item = item_store($postarray); + $top_item = Item::insert($postarray); $postarray["id"] = $top_item; if (($top_item == 0) && ($post->verb == "update")) { - $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s' , `changed` = '%s' WHERE `uri` = '%s' AND `uid` = %d", - dbesc($postarray["title"]), - dbesc($postarray["body"]), - dbesc($postarray["edited"]), - dbesc($postarray["uri"]), - intval($uid) - ); + $fields = ['title' => $postarray["title"], 'body' => $postarray["body"], 'changed' => $postarray["edited"]]; + $condition = ['uri' => $postarray["uri"], 'uid' => $uid]; + Item::update($fields, $condition); } if ($post->object->objectType == "comment") { @@ -1297,7 +1294,7 @@ function pumpio_dopost(&$a, $client, $uid, $self, $post, $own_id, $threadcomplet 'to_email' => $user[0]['email'], 'uid' => $user[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($top_item)), + 'link' => $a->get_baseurl().'/display/'.urlencode(Item::getGuidById($top_item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1426,8 +1423,6 @@ function pumpio_queue_hook(&$a,&$b) { if(! count($qi)) return; - require_once('include/queue_fn.php'); - foreach($qi as $x) { if($x['network'] !== NETWORK_PUMPIO) continue; @@ -1482,12 +1477,9 @@ function pumpio_queue_hook(&$a,&$b) { logger('pumpio_queue: send '.$username.': success '.$post_id); if($post_id && $iscomment) { logger('pumpio_send '.$username.': Update extid '.$post_id." for post id ".$z['item']); - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d", - dbesc($post_id), - intval($z['item']) - ); + Item::update(['extid' => $post_id], ['id' => $z['item']]); } - remove_queue_item($x['id']); + Queue::removeItem($x['id']); } else logger('pumpio_queue: send '.$username.': '.$url.' general error: ' . print_r($user,true)); } else @@ -1495,7 +1487,7 @@ function pumpio_queue_hook(&$a,&$b) { if (!$success) { logger('pumpio_queue: delayed'); - update_queue_time($x['id']); + Queue::updateTime($x['id']); } } } @@ -1693,7 +1685,7 @@ function pumpio_fetchallcomments(&$a, $uid, $id) { function pumpio_reachable($url) { - $data = z_fetch_url($url, false, $redirects, array('timeout'=>10)); + $data = Network::curl($url, false, $redirects, ['timeout'=>10]); return(intval($data['return_code']) != 0); } diff --git a/qcomment/lang/it/messages.po b/qcomment/lang/it/messages.po index decfe2af..5772fcd2 100644 --- a/qcomment/lang/it/messages.po +++ b/qcomment/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:22+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 2c98cba7..deb6a02f 100644 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -1,64 +1,58 @@ - * + * * Provides a set of text "snippets" which can be inserted into a comment window by clicking on them. - * First enable the addon in the system admin panel. - * Then each person can tailor their choice of words in Settings->Plugin Settings in the Qcomment + * First enable the addon in the system admin panel. + * Then each person can tailor their choice of words in Settings->Addon Settings in the Qcomment * pane. Initially no qcomments are provided, but on viewing the settings page, a default set of - * of words is suggested. These can be accepted (click Submit) or edited first. Each text line represents - * a different qcomment. + * of words is suggested. These can be accepted (click Submit) or edited first. Each text line represents + * a different qcomment. * Many themes will hide the qcomments above or immediately adjacent to the comment input box until * you wish to use them. On some themes they may be visible. - * Wave the mouse around near the comment input box and the qcomments will show up. Click on any of + * Wave the mouse around near the comment input box and the qcomments will show up. Click on any of * them to open the comment window fully and insert the qcomment. Then "Submit" will submit it. * */ +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function qcomment_install() { - register_hook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); - register_hook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); + Addon::registerHook('addon_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } - function qcomment_uninstall() { - unregister_hook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post'); } - - - - -function qcomment_addon_settings(&$a,&$s) { - - if(! local_user()) +function qcomment_addon_settings(&$a, &$s) +{ + if (! local_user()) { return; /* Add our stylesheet to the page so we can make our settings look nice */ $a->page['htmlhead'] .= '' . "\r\n"; - $words = get_pconfig(local_user(),'qcomment','words'); - if($words === false) - $words = t(':-)') . "\n" . t(':-(') . "\n" . t('lol'); + $words = PConfig::get(local_user(), 'qcomment', 'words', L10n::t(':-)') . "\n" . L10n::t(':-(') . "\n" . L10n::t('lol')); - $s .= '
'; - $s .= '

' . t('Quick Comment Settings') . '

'; - $s .= '
'; - $s .= '
' . t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '
'; - $s .= ''; - $s .= ''; - $s .= '
'; + $s .= '
'; + $s .= '

' . L10n::t('Quick Comment Settings') . '

'; + $s .= '
'; + $s .= '
' . L10n::t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '
'; + $s .= ''; + $s .= ''; + $s .= '
'; - $s .= '
'; + $s .= '
'; $s .= '
'; return; @@ -71,8 +65,7 @@ function qcomment_addon_settings_post(&$a,&$b) { return; if($_POST['qcomment-submit']) { - set_pconfig(local_user(),'qcomment','words',xmlify($_POST['qcomment-words'])); - info( t('Quick Comment settings saved.') . EOL); + PConfig::set(local_user(),'qcomment','words',xmlify($_POST['qcomment-words'])); + info(L10n::t('Quick Comment settings saved.') . EOL); } } - diff --git a/randplace/lang/C/messages.po b/randplace/lang/C/messages.po index 3494eafd..3d2ed587 100644 --- a/randplace/lang/C/messages.po +++ b/randplace/lang/C/messages.po @@ -22,7 +22,7 @@ msgid "Randplace Settings" msgstr "" #: randplace.php:171 -msgid "Enable Randplace Plugin" +msgid "Enable Randplace Addon" msgstr "" #: randplace.php:177 diff --git a/randplace/lang/ca/strings.php b/randplace/lang/ca/strings.php index 4e2fe763..120fab8c 100644 --- a/randplace/lang/ca/strings.php +++ b/randplace/lang/ca/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Configuració de Randplace"; -$a->strings["Enable Randplace Plugin"] = "Habilitar el Plugin de Randplace"; +$a->strings["Enable Randplace Addon"] = "Habilitar el Addon de Randplace"; $a->strings["Submit"] = "Enviar"; diff --git a/randplace/lang/cs/messages.po b/randplace/lang/cs/messages.po index 6cc09f7d..09032861 100644 --- a/randplace/lang/cs/messages.po +++ b/randplace/lang/cs/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Randplace Nastavení" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Povolit Randplace Plugin" +msgid "Enable Randplace Addon" +msgstr "Povolit Randplace Addon" #: randplace.php:177 msgid "Save Settings" diff --git a/randplace/lang/cs/strings.php b/randplace/lang/cs/strings.php index dae496fc..a5a72e9e 100644 --- a/randplace/lang/cs/strings.php +++ b/randplace/lang/cs/strings.php @@ -6,5 +6,5 @@ function string_plural_select_cs($n){ }} ; $a->strings["Randplace Settings"] = "Randplace Nastavení"; -$a->strings["Enable Randplace Plugin"] = "Povolit Randplace Plugin"; +$a->strings["Enable Randplace Addon"] = "Povolit Randplace Addon"; $a->strings["Save Settings"] = "Uložit Nastavení"; diff --git a/randplace/lang/de/messages.po b/randplace/lang/de/messages.po index 8735e20d..c575242f 100644 --- a/randplace/lang/de/messages.po +++ b/randplace/lang/de/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Randplace-Einstellungen" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Randplace-Plugin aktivieren" +msgid "Enable Randplace Addon" +msgstr "Randplace-Addon aktivieren" #: randplace.php:177 msgid "Save Settings" diff --git a/randplace/lang/de/strings.php b/randplace/lang/de/strings.php index 29bec858..5a5b69f3 100644 --- a/randplace/lang/de/strings.php +++ b/randplace/lang/de/strings.php @@ -6,5 +6,5 @@ function string_plural_select_de($n){ }} ; $a->strings["Randplace Settings"] = "Randplace-Einstellungen"; -$a->strings["Enable Randplace Plugin"] = "Randplace-Plugin aktivieren"; +$a->strings["Enable Randplace Addon"] = "Randplace-Addon aktivieren"; $a->strings["Save Settings"] = "Einstellungen speichern"; diff --git a/randplace/lang/eo/strings.php b/randplace/lang/eo/strings.php index 45502093..38e6ebfa 100644 --- a/randplace/lang/eo/strings.php +++ b/randplace/lang/eo/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Randplace agordoj."; -$a->strings["Enable Randplace Plugin"] = "Aktivigi la Randplace kromprogramon."; +$a->strings["Enable Randplace Addon"] = "Aktivigi la Randplace kromprogramon."; $a->strings["Submit"] = "Sendi"; diff --git a/randplace/lang/es/messages.po b/randplace/lang/es/messages.po index 0b63aa17..7f0a1047 100644 --- a/randplace/lang/es/messages.po +++ b/randplace/lang/es/messages.po @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Ajustes de Randplace" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Habilitar el Plugin de Randplace" +msgid "Enable Randplace Addon" +msgstr "Habilitar el Addon de Randplace" #: randplace.php:177 msgid "Submit" diff --git a/randplace/lang/es/strings.php b/randplace/lang/es/strings.php index 716845ac..b196c6b8 100644 --- a/randplace/lang/es/strings.php +++ b/randplace/lang/es/strings.php @@ -6,5 +6,5 @@ function string_plural_select_es($n){ }} ; $a->strings["Randplace Settings"] = "Ajustes de Randplace"; -$a->strings["Enable Randplace Plugin"] = "Habilitar el Plugin de Randplace"; +$a->strings["Enable Randplace Addon"] = "Habilitar el Addon de Randplace"; $a->strings["Submit"] = "Enviar"; diff --git a/randplace/lang/fr/strings.php b/randplace/lang/fr/strings.php index f85b1cba..f9d354b4 100644 --- a/randplace/lang/fr/strings.php +++ b/randplace/lang/fr/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Réglages de Randplace"; -$a->strings["Enable Randplace Plugin"] = "Activer l'extension Randplace"; +$a->strings["Enable Randplace Addon"] = "Activer l'extension Randplace"; $a->strings["Submit"] = "Envoyer"; diff --git a/randplace/lang/is/strings.php b/randplace/lang/is/strings.php index 924285d4..85e49238 100644 --- a/randplace/lang/is/strings.php +++ b/randplace/lang/is/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Stilla Randplace"; -$a->strings["Enable Randplace Plugin"] = "Kveikja á Randplace einingu"; +$a->strings["Enable Randplace Addon"] = "Kveikja á Randplace einingu"; $a->strings["Submit"] = "Senda inn"; diff --git a/randplace/lang/it/messages.po b/randplace/lang/it/messages.po index d2fa8903..30ee2653 100644 --- a/randplace/lang/it/messages.po +++ b/randplace/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:22+0000\n" +"PO-Revision-Date: 2018-03-19 13:25+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -24,8 +24,8 @@ msgid "Randplace Settings" msgstr "Impostazioni \"Posizione casuale\"" #: randplace.php:171 -msgid "Enable Randplace Plugin" -msgstr "Abilita il plugin \"Posizione casuale\"" +msgid "Enable Randplace Addon" +msgstr "Abilita il componente aggiuntivo Posizione Casuale" #: randplace.php:177 msgid "Submit" diff --git a/randplace/lang/it/strings.php b/randplace/lang/it/strings.php index 08e17fa7..1a26d777 100644 --- a/randplace/lang/it/strings.php +++ b/randplace/lang/it/strings.php @@ -6,5 +6,5 @@ function string_plural_select_it($n){ }} ; $a->strings["Randplace Settings"] = "Impostazioni \"Posizione casuale\""; -$a->strings["Enable Randplace Plugin"] = "Abilita il plugin \"Posizione casuale\""; +$a->strings["Enable Randplace Addon"] = "Abilita il componente aggiuntivo Posizione Casuale"; $a->strings["Submit"] = "Invia"; diff --git a/randplace/lang/nb-no/strings.php b/randplace/lang/nb-no/strings.php index 16518f39..0675219c 100644 --- a/randplace/lang/nb-no/strings.php +++ b/randplace/lang/nb-no/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Tilfeldig plassering"; -$a->strings["Enable Randplace Plugin"] = "Aktiver Tilfeldig plassering-tillegget"; +$a->strings["Enable Randplace Addon"] = "Aktiver Tilfeldig plassering-tillegget"; $a->strings["Submit"] = "Lagre"; diff --git a/randplace/lang/pl/strings.php b/randplace/lang/pl/strings.php index 3f1b2f9f..4166face 100644 --- a/randplace/lang/pl/strings.php +++ b/randplace/lang/pl/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Ustawienia Randplace"; -$a->strings["Enable Randplace Plugin"] = "Włącz Randplace Plugin"; +$a->strings["Enable Randplace Addon"] = "Włącz Randplace Addon"; $a->strings["Submit"] = "Potwierdź"; diff --git a/randplace/lang/pt-br/strings.php b/randplace/lang/pt-br/strings.php index 1f010b42..b41c865d 100644 --- a/randplace/lang/pt-br/strings.php +++ b/randplace/lang/pt-br/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Configurações do Randplace"; -$a->strings["Enable Randplace Plugin"] = "Habilitar o plugin Randplace"; +$a->strings["Enable Randplace Addon"] = "Habilitar o addon Randplace"; $a->strings["Submit"] = "Enviar"; diff --git a/randplace/lang/ro/messages.po b/randplace/lang/ro/messages.po index 1138665f..f900373f 100644 --- a/randplace/lang/ro/messages.po +++ b/randplace/lang/ro/messages.po @@ -23,7 +23,7 @@ msgid "Randplace Settings" msgstr "Configurări Randplace" #: randplace.php:171 -msgid "Enable Randplace Plugin" +msgid "Enable Randplace Addon" msgstr "Activare Modul Randplace" #: randplace.php:177 diff --git a/randplace/lang/ro/strings.php b/randplace/lang/ro/strings.php index 9ef0274f..81607079 100644 --- a/randplace/lang/ro/strings.php +++ b/randplace/lang/ro/strings.php @@ -6,5 +6,5 @@ function string_plural_select_ro($n){ }} ; $a->strings["Randplace Settings"] = "Configurări Randplace"; -$a->strings["Enable Randplace Plugin"] = "Activare Modul Randplace"; +$a->strings["Enable Randplace Addon"] = "Activare Modul Randplace"; $a->strings["Save Settings"] = "Salvare Configurări"; diff --git a/randplace/lang/ru/strings.php b/randplace/lang/ru/strings.php index 482c4ed0..46733dc6 100644 --- a/randplace/lang/ru/strings.php +++ b/randplace/lang/ru/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Настройки Случайного места"; -$a->strings["Enable Randplace Plugin"] = "Включить Randplace плагин"; +$a->strings["Enable Randplace Addon"] = "Включить Randplace плагин"; $a->strings["Submit"] = "Подтвердить"; diff --git a/randplace/lang/sv/strings.php b/randplace/lang/sv/strings.php index eec3a7bd..c47a51ca 100644 --- a/randplace/lang/sv/strings.php +++ b/randplace/lang/sv/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "Randplace Settings"; -$a->strings["Enable Randplace Plugin"] = "Enable Randplace Plugin"; +$a->strings["Enable Randplace Addon"] = "Enable Randplace Addon"; $a->strings["Submit"] = "Spara"; diff --git a/randplace/lang/zh-cn/strings.php b/randplace/lang/zh-cn/strings.php index 5b96f086..2b9b82e3 100644 --- a/randplace/lang/zh-cn/strings.php +++ b/randplace/lang/zh-cn/strings.php @@ -1,5 +1,5 @@ strings["Randplace Settings"] = "随意下设置"; -$a->strings["Enable Randplace Plugin"] = "使随意下插件能用"; +$a->strings["Enable Randplace Addon"] = "使随意下插件能用"; $a->strings["Submit"] = "提交"; diff --git a/randplace/randplace.php b/randplace/randplace.php index 27589b1c..ca4d3d79 100644 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -1,7 +1,7 @@ * @@ -11,36 +11,38 @@ * Addons are registered with the system through the admin * panel. * - * When registration is detected, the system calls the plugin + * When registration is detected, the system calls the addon * name_install() function, located in 'addon/name/name.php', * where 'name' is the name of the addon. * If the addon is removed from the configuration list, the * system will call the name_uninstall() function. * */ - +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function randplace_install() { /** - * - * Our demo plugin will attach in three places. + * + * Our demo addon will attach in three places. * The first is just prior to storing a local post. * */ - register_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); + Addon::registerHook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); /** * - * Then we'll attach into the plugin settings page, and also the + * Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update * user preferences. * */ - register_hook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); - register_hook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + Addon::registerHook('addon_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + Addon::registerHook('addon_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); logger("installed randplace"); } @@ -56,9 +58,9 @@ function randplace_uninstall() { * */ - unregister_hook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); - unregister_hook('plugin_settings', 'addon/randplace/randplace.php', 'randplace_settings'); - unregister_hook('plugin_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); + Addon::unregisterHook('post_local', 'addon/randplace/randplace.php', 'randplace_post_hook'); + Addon::unregisterHook('addon_settings', 'addon/randplace/randplace.php', 'randplace_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/randplace/randplace.php', 'randplace_settings_post'); logger("removed randplace"); @@ -73,7 +75,7 @@ function randplace_post_hook($a, &$item) { * An item was posted on the local system. * We are going to look for specific items: * - A status post by a profile owner - * - The profile owner must have allowed our plugin + * - The profile owner must have allowed our addon * */ @@ -141,7 +143,7 @@ function randplace_settings_post($a,$post) { /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -166,14 +168,14 @@ function randplace_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= '
'; - $s .= '

' . t('Randplace Settings') . '

'; + $s .= '

' . L10n::t('Randplace Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; /* provide a submit button */ - $s .= '
'; + $s .= '
'; } diff --git a/remote_permissions/README.md b/remote_permissions/README.md index b9e38582..33e106ce 100644 --- a/remote_permissions/README.md +++ b/remote_permissions/README.md @@ -1,8 +1,8 @@ -The Remote Permissions plugin enables recipients of private posts to see who else has received the post. This can be beneficial on community servers where people may want to modify the way they speak depending on who can see their comments to the post. +The Remote Permissions addon enables recipients of private posts to see who else has received the post. This can be beneficial on community servers where people may want to modify the way they speak depending on who can see their comments to the post. -Note that since Friendica is federated, the local hub may have posts that originated elsewhere. In that case, the plugin has no way of knowing all the recipients of the post, and it must settle for finding out who else can see it on the local hub. +Note that since Friendica is federated, the local hub may have posts that originated elsewhere. In that case, the addon has no way of knowing all the recipients of the post, and it must settle for finding out who else can see it on the local hub. -The hub admin can specify one of two behaviors for this plugin: +The hub admin can specify one of two behaviors for this addon: * **Global:** every private post on the local hub will show all recipients (or at least the ones it can discover) of the post to any other users on the local hub * **Individual:** only private posts from those users on the local hub who "opt-in" will show the post recipients. None of the private posts that originated elsewhere will show even partial lists of post recipients diff --git a/remote_permissions/lang/it/messages.po b/remote_permissions/lang/it/messages.po index 3cf40067..141059e6 100644 --- a/remote_permissions/lang/it/messages.po +++ b/remote_permissions/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:23+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/remote_permissions/remote_permissions.php b/remote_permissions/remote_permissions.php index 5cba005a..b1651517 100644 --- a/remote_permissions/remote_permissions.php +++ b/remote_permissions/remote_permissions.php @@ -6,18 +6,21 @@ * Author: Zach * */ - +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function remote_permissions_install() { - register_hook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); - register_hook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); - register_hook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); + Addon::registerHook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); + Addon::registerHook('addon_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); + Addon::registerHook('addon_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); } function remote_permissions_uninstall() { - unregister_hook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); - unregister_hook('plugin_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); - unregister_hook('plugin_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); + Addon::unregisterHook('lockview_content', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_content'); + Addon::unregisterHook('addon_settings', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/remote_permissions/remote_permissions.php', 'remote_permissions_settings_post'); } function remote_permissions_settings(&$a,&$o) { @@ -41,12 +44,12 @@ function remote_permissions_settings(&$a,&$o) { // $t = file_get_contents("addon/remote_permissions/settings.tpl" ); $t = get_markup_template("settings.tpl", "addon/remote_permissions/" ); - $o .= replace_macros($t, array( - '$remote_perms_title' => t('Remote Permissions Settings'), - '$remote_perms_label' => t('Allow recipients of your private posts to see the other recipients of the posts'), + $o .= replace_macros($t, [ + '$remote_perms_title' => L10n::t('Remote Permissions Settings'), + '$remote_perms_label' => L10n::t('Allow recipients of your private posts to see the other recipients of the posts'), '$checked' => (($remote_perms == 1) ? 'checked="checked"' : ''), - '$submit' => t('Save Settings') - )); + '$submit' => L10n::t('Save Settings') + ]); } @@ -54,8 +57,8 @@ function remote_permissions_settings_post($a,$post) { if(! local_user() || (! x($_POST,'remote-perms-submit'))) return; - set_pconfig(local_user(),'remote_perms','show',intval($_POST['remote-perms'])); - info( t('Remote Permissions settings updated.') . EOL); + PConfig::set(local_user(),'remote_perms','show',intval($_POST['remote-perms'])); + info(L10n::t('Remote Permissions settings updated.') . EOL); } function remote_permissions_content($a, $item_copy) { @@ -121,9 +124,9 @@ function remote_permissions_content($a, $item_copy) { $deny_users = expand_acl($item['deny_cid']); $deny_groups = expand_acl($item['deny_gid']); - $o = t('Visible to:') . '
'; - $allow = array(); - $deny = array(); + $o = L10n::t('Visible to:') . '
'; + $allow = []; + $deny = []; if(count($allowed_groups)) { $r = q("SELECT DISTINCT `contact-id` FROM group_member WHERE gid IN ( %s )", @@ -175,7 +178,7 @@ function remote_permissions_content($a, $item_copy) { if(! $r) return; - $o = t('Visible to') . ' (' . t('may only be a partial list') . '):
'; + $o = L10n::t('Visible to') . ' (' . L10n::t('may only be a partial list') . '):
'; foreach($r as $rr) $allow_names[] = $rr['username']; @@ -190,18 +193,17 @@ function remote_permissions_content($a, $item_copy) { return; } -function remote_permissions_plugin_admin(&$a, &$o){ +function remote_permissions_addon_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/remote_permissions/" ); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - '$global' => array('remotepermschoice', t('Global'), 1, t('The posts of every user on this server show the post recipients'), get_config('remote_perms', 'global') == 1), - '$individual' => array('remotepermschoice', t('Individual'), 2, t('Each user chooses whether his/her posts show the post recipients'), get_config('remote_perms', 'global') == 0) - )); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + '$global' => ['remotepermschoice', L10n::t('Global'), 1, L10n::t('The posts of every user on this server show the post recipients'), Config::get('remote_perms', 'global') == 1], + '$individual' => ['remotepermschoice', L10n::t('Individual'), 2, L10n::t('Each user chooses whether his/her posts show the post recipients'), Config::get('remote_perms', 'global') == 0] + ]); } -function remote_permissions_plugin_admin_post(&$a){ +function remote_permissions_addon_admin_post(&$a){ $choice = ((x($_POST,'remotepermschoice')) ? notags(trim($_POST['remotepermschoice'])) : ''); - set_config('remote_perms','global',($choice == 1 ? 1 : 0)); - info( t('Settings updated.'). EOL ); + Config::set('remote_perms','global',($choice == 1 ? 1 : 0)); + info(L10n::t('Settings updated.'). EOL); } - diff --git a/rendertime/lang/it/messages.po b/rendertime/lang/it/messages.po index 6c5c5dce..c16855c3 100644 --- a/rendertime/lang/it/messages.po +++ b/rendertime/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-09-10 14:32+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/rendertime/rendertime.php b/rendertime/rendertime.php index 034fdec7..a638865a 100644 --- a/rendertime/rendertime.php +++ b/rendertime/rendertime.php @@ -1,6 +1,4 @@ * */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; function rendertime_install() { - register_hook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); + Addon::registerHook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); } function rendertime_uninstall() { - unregister_hook('init_1', 'addon/rendertime/rendertime.php', 'rendertime_init_1'); - unregister_hook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); + Addon::unregisterHook('init_1', 'addon/rendertime/rendertime.php', 'rendertime_init_1'); + Addon::unregisterHook('page_end', 'addon/rendertime/rendertime.php', 'rendertime_page_end'); } function rendertime_init_1(&$a) { @@ -30,20 +31,20 @@ function rendertime_page_end(&$a, &$o) { $ignored = in_array($a->module, $ignored_modules); if (is_site_admin() && ($_GET["mode"] != "minimal") && !$a->is_mobile && !$a->is_tablet && !$ignored) { - $o = $o.'
'.sprintf(t("Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s"), - round($a->performance["database"] - $a->performance["database_write"], 3), - round($a->performance["database_write"], 3), - round($a->performance["network"], 2), - round($a->performance["rendering"], 2), - round($a->performance["parser"], 2), - round($a->performance["file"], 2), - round($duration - $a->performance["database"] - - $a->performance["network"] - $a->performance["rendering"] - - $a->performance["parser"] - $a->performance["file"], 2), - round($duration, 2) - //round($a->performance["markstart"], 3) - //round($a->performance["plugin"], 3) - )."
"; + $o = $o.'
'. L10n::t("Database: %s/%s, Network: %s, Rendering: %s, Session: %s, I/O: %s, Other: %s, Total: %s", + round($a->performance["database"] - $a->performance["database_write"], 3), + round($a->performance["database_write"], 3), + round($a->performance["network"], 2), + round($a->performance["rendering"], 2), + round($a->performance["parser"], 2), + round($a->performance["file"], 2), + round($duration - $a->performance["database"] + - $a->performance["network"] - $a->performance["rendering"] + - $a->performance["parser"] - $a->performance["file"], 2), + round($duration, 2) + //round($a->performance["markstart"], 3) + //round($a->performance["plugin"], 3) + )."
"; if (get_config("rendertime", "callstack")) { $o .= "
";
diff --git a/securemail/lang/de/messages.po b/securemail/lang/de/messages.po
new file mode 100644
index 00000000..7d06d3d8
--- /dev/null
+++ b/securemail/lang/de/messages.po
@@ -0,0 +1,55 @@
+# ADDON securemail
+# Copyright (C)
+# This file is distributed under the same license as the Friendica securemail addon package.
+# 
+# 
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-04-11 21:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Richard Zsemberi , 2018\n"
+"Language-Team: German (https://www.transifex.com/Friendica/teams/12172/de/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: de\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: securemail.php:53
+msgid "\"Secure Mail\" Settings"
+msgstr "\"Secure Mail\" Einstellungen"
+
+#: securemail.php:54
+msgid "Save Settings"
+msgstr "Einstellungen speichern"
+
+#: securemail.php:55 securemail.php:76
+msgid "Save and send test"
+msgstr "Abspeichern und Test Senden"
+
+#: securemail.php:56
+msgid "Enable Secure Mail"
+msgstr "Secure Mail aktivieren"
+
+#: securemail.php:57
+msgid "Public key"
+msgstr "Öffentlicher Schlüssel"
+
+#: securemail.php:57
+msgid "Your public PGP key, ascii armored format"
+msgstr "Dein öffentlicher PGP Schlüssel, im Ascii-Format"
+
+#: securemail.php:74
+msgid "Secure Mail Settings saved."
+msgstr "Secure Mail Einstellungen gespeichert."
+
+#: securemail.php:111
+msgid "Test email sent"
+msgstr "Test-Email gesendet"
+
+#: securemail.php:113
+msgid "There was an error sending the test email"
+msgstr "Es gab ein Fehler beim Senden der Test-Email"
diff --git a/securemail/lang/de/strings.php b/securemail/lang/de/strings.php
new file mode 100644
index 00000000..65767eff
--- /dev/null
+++ b/securemail/lang/de/strings.php
@@ -0,0 +1,16 @@
+strings["\"Secure Mail\" Settings"] = "\"Secure Mail\" Einstellungen";
+$a->strings["Save Settings"] = "Einstellungen speichern";
+$a->strings["Save and send test"] = "Abspeichern und Test Senden";
+$a->strings["Enable Secure Mail"] = "Secure Mail aktivieren";
+$a->strings["Public key"] = "Öffentlicher Schlüssel";
+$a->strings["Your public PGP key, ascii armored format"] = "Dein öffentlicher PGP Schlüssel, im Ascii-Format";
+$a->strings["Secure Mail Settings saved."] = "Secure Mail Einstellungen gespeichert.";
+$a->strings["Test email sent"] = "Test-Email gesendet";
+$a->strings["There was an error sending the test email"] = "Es gab ein Fehler beim Senden der Test-Email";
diff --git a/securemail/lang/it/messages.po b/securemail/lang/it/messages.po
new file mode 100644
index 00000000..208bbc92
--- /dev/null
+++ b/securemail/lang/it/messages.po
@@ -0,0 +1,55 @@
+# ADDON securemail
+# Copyright (C)
+# This file is distributed under the same license as the Friendica securemail addon package.
+# 
+# 
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2017-04-11 21:14+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: fabrixxm , 2018\n"
+"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: it\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: securemail.php:53
+msgid "\"Secure Mail\" Settings"
+msgstr "Impostazioni Secure Mail"
+
+#: securemail.php:54
+msgid "Save Settings"
+msgstr "Salva Impostazioni"
+
+#: securemail.php:55 securemail.php:76
+msgid "Save and send test"
+msgstr "Salva e invia mail di prova"
+
+#: securemail.php:56
+msgid "Enable Secure Mail"
+msgstr "Abilita Secure Mail"
+
+#: securemail.php:57
+msgid "Public key"
+msgstr "Chiave pubblica"
+
+#: securemail.php:57
+msgid "Your public PGP key, ascii armored format"
+msgstr "La tua chiave pubblica PGP, in formato ascii armored"
+
+#: securemail.php:74
+msgid "Secure Mail Settings saved."
+msgstr "Impostazioni Secure Mail salvate."
+
+#: securemail.php:111
+msgid "Test email sent"
+msgstr "Email di prova invata"
+
+#: securemail.php:113
+msgid "There was an error sending the test email"
+msgstr "Si è verificato un errore durante l'invio dell'email di prova"
diff --git a/securemail/lang/it/strings.php b/securemail/lang/it/strings.php
new file mode 100644
index 00000000..2435bfba
--- /dev/null
+++ b/securemail/lang/it/strings.php
@@ -0,0 +1,16 @@
+strings["\"Secure Mail\" Settings"] = "Impostazioni Secure Mail";
+$a->strings["Save Settings"] = "Salva Impostazioni";
+$a->strings["Save and send test"] = "Salva e invia mail di prova";
+$a->strings["Enable Secure Mail"] = "Abilita Secure Mail";
+$a->strings["Public key"] = "Chiave pubblica";
+$a->strings["Your public PGP key, ascii armored format"] = "La tua chiave pubblica PGP, in formato ascii armored";
+$a->strings["Secure Mail Settings saved."] = "Impostazioni Secure Mail salvate.";
+$a->strings["Test email sent"] = "Email di prova invata";
+$a->strings["There was an error sending the test email"] = "Si è verificato un errore durante l'invio dell'email di prova";
diff --git a/securemail/securemail.php b/securemail/securemail.php
index b20eab9c..21ed2833 100644
--- a/securemail/securemail.php
+++ b/securemail/securemail.php
@@ -7,8 +7,10 @@
  */
 
 use Friendica\App;
-
-require_once 'include/Emailer.php';
+use Friendica\Core\Addon;
+use Friendica\Core\L10n;
+use Friendica\Core\PConfig;
+use Friendica\Util\Emailer;
 
 /* because the fraking openpgp-php is in composer, require libs in composer
  * and then don't use autoloader to load classes... */
@@ -23,19 +25,19 @@ require_once 'openpgp_crypt_symmetric.php';
 
 
 function securemail_install() {
-    register_hook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings');
-    register_hook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post');
+    Addon::registerHook('addon_settings', 'addon/securemail/securemail.php', 'securemail_settings');
+    Addon::registerHook('addon_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post');
 
-    register_hook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare');
+    Addon::registerHook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare');
 
     logger('installed securemail');
 }
 
 function securemail_uninstall() {
-    unregister_hook('plugin_settings', 'addon/securemail/securemail.php', 'securemail_settings');
-    unregister_hook('plugin_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post');
+    Addon::unregisterHook('addon_settings', 'addon/securemail/securemail.php', 'securemail_settings');
+    Addon::unregisterHook('addon_settings_post', 'addon/securemail/securemail.php', 'securemail_settings_post');
 
-    unregister_hook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare');
+    Addon::unregisterHook('emailer_send_prepare', 'addon/securemail/securemail.php', 'securemail_emailer_send_prepare');
 
     logger('removed securemail');
 }
@@ -43,7 +45,7 @@ function securemail_uninstall() {
 /**
  * @brief Build user settings form
  *
- * @link https://github.com/friendica/friendica/blob/develop/doc/Plugins.md#plugin_settings 'plugin_settings' hook
+ * @link https://github.com/friendica/friendica/blob/develop/doc/Addons.md#addon_settings 'addon_settings' hook
  *
  * @param App $a App instance
  * @param string $s output html
@@ -60,19 +62,19 @@ function securemail_settings(App &$a, &$s){
 
     $t = get_markup_template('admin.tpl', 'addon/securemail/');
 
-    $s .= replace_macros($t, array(
-        '$title' => t('"Secure Mail" Settings'),
-        '$submit' => t('Save Settings'),
-        '$test' => t('Save and send test'), //NOTE: update also in 'post'
-        '$enable' => array('securemail-enable', t('Enable Secure Mail'), $enable, ''),
-        '$publickey' => array('securemail-pkey', t('Public key'), $publickey, t('Your public PGP key, ascii armored format'), 'rows="10"')
-    ));
+    $s .= replace_macros($t, [
+        '$title' => L10n::t('"Secure Mail" Settings'),
+        '$submit' => L10n::t('Save Settings'),
+        '$test' => L10n::t('Save and send test'), //NOTE: update also in 'post'
+        '$enable' => ['securemail-enable', L10n::t('Enable Secure Mail'), $enable, ''],
+        '$publickey' => ['securemail-pkey', L10n::t('Public key'), $publickey, L10n::t('Your public PGP key, ascii armored format'), 'rows="10"']
+    ]);
 }
 
 /**
  * @brief Handle data from user settings form
  *
- * @link https://github.com/friendica/friendica/blob/develop/doc/Plugins.md#plugin_settings_post 'plugin_settings_post' hook
+ * @link https://github.com/friendica/friendica/blob/develop/doc/Addons.md#addon_settings_post 'addon_settings_post' hook
  *
  * @param App $a App instance
  * @param array $b hook data
@@ -88,10 +90,10 @@ function securemail_settings_post(App &$a, array &$b){
     if ($_POST['securemail-submit']) {
         set_pconfig(local_user(), 'securemail', 'pkey', trim($_POST['securemail-pkey']));
         $enable = ((x($_POST, 'securemail-enable')) ? 1 : 0);
-        set_pconfig(local_user(), 'securemail', 'enable', $enable);
-        info(t('Secure Mail Settings saved.') . EOL);
+        PConfig::set(local_user(), 'securemail', 'enable', $enable);
+        info(L10n::t('Secure Mail Settings saved.') . EOL);
 
-        if ($_POST['securemail-submit'] == t('Save and send test')) {
+        if ($_POST['securemail-submit'] == L10n::t('Save and send test')) {
             $sitename = $a->config['sitename'];
 
             $hostname = $a->get_hostname();
@@ -126,9 +128,9 @@ function securemail_settings_post(App &$a, array &$b){
             set_pconfig(local_user(), 'securemail', 'enable', $enable);
 
             if ($res) {
-                info(t('Test email sent') . EOL);
+                info(L10n::t('Test email sent') . EOL);
             } else {
-                notice(t('There was an error sending the test email') . EOL);
+                notice(L10n::t('There was an error sending the test email') . EOL);
             }
         }
     }
@@ -137,7 +139,7 @@ function securemail_settings_post(App &$a, array &$b){
 /**
  * @brief Encrypt notification emails text
  *
- * @link https://github.com/friendica/friendica/blob/develop/doc/Plugins.md#emailer_send_prepare 'emailer_send_prepare' hook
+ * @link https://github.com/friendica/friendica/blob/develop/doc/Addons.md#emailer_send_prepare 'emailer_send_prepare' hook
  *
  * @param App $a App instance
  * @param array $b hook data
diff --git a/showmore/lang/it/messages.po b/showmore/lang/it/messages.po
index 5d15f7bf..1a565540 100644
--- a/showmore/lang/it/messages.po
+++ b/showmore/lang/it/messages.po
@@ -10,7 +10,7 @@ msgstr ""
 "Project-Id-Version: friendica\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2013-02-27 05:01-0500\n"
-"PO-Revision-Date: 2015-08-31 10:23+0000\n"
+"PO-Revision-Date: 2017-09-20 06:08+0000\n"
 "Last-Translator: fabrixxm \n"
 "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n"
 "MIME-Version: 1.0\n"
diff --git a/showmore/showmore.php b/showmore/showmore.php
index a9d8334f..d3753e6f 100644
--- a/showmore/showmore.php
+++ b/showmore/showmore.php
@@ -7,17 +7,20 @@
  *         based upon NSFW from Mike Macgirvin 
  *
  */
+use Friendica\Core\Addon;
+use Friendica\Core\L10n;
+use Friendica\Core\PConfig;
 
 function showmore_install() {
-	register_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body');
-	register_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings');
-	register_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post');
+	Addon::registerHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body');
+	Addon::registerHook('addon_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings');
+	Addon::registerHook('addon_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post');
 }
 
 function showmore_uninstall() {
-	unregister_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body');
-	unregister_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings');
-	unregister_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post');
+	Addon::unregisterHook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body');
+	Addon::unregisterHook('addon_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings');
+	Addon::unregisterHook('addon_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post');
 }
 
 function showmore_addon_settings(&$a,&$s) {
@@ -35,24 +38,24 @@ function showmore_addon_settings(&$a,&$s) {
 		$chars = '1100';
 
 	$s .= '';
-	$s .= '

' . t('"Show more" Settings').'

'; + $s .= '

' . L10n::t('"Show more" Settings').'

'; $s .= '
'; $s .= ''; return; @@ -67,8 +70,8 @@ function showmore_addon_settings_post(&$a,&$b) { set_pconfig(local_user(),'showmore','chars',trim($_POST['showmore-chars'])); $enable = ((x($_POST,'showmore-enable')) ? intval($_POST['showmore-enable']) : 0); $disable = 1-$enable; - set_pconfig(local_user(),'showmore','disable', $disable); - info( t('Show More Settings saved.') . EOL); + PConfig::set(local_user(),'showmore','disable', $disable); + info(L10n::t('Show More Settings saved.') . EOL); } } @@ -122,7 +125,7 @@ function showmore_prepare_body(&$a,&$b) { if($found) { $rnd = random_string(8); $b['html'] = ''.$shortened." ". - ''.sprintf(t('show more')).''. + ''.L10n::t('show more').''. ''; } } diff --git a/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php b/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php index fb4bce13..47566380 100644 --- a/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php +++ b/smiley_pack/lang/smiley_pack_es/smiley_pack_es.php @@ -6,17 +6,14 @@ * Author: Thomas Willingham (based on Mike Macgirvin's Adult Smile template) * All smileys from sites offering them as Public Domain */ - -/** - -*/ +use Friendica\Core\Addon; function smiley_pack_es_install() { - register_hook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies_es'); + Addon::registerHook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies_es'); } function smiley_pack_es_uninstall() { - unregister_hook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies'); + Addon::unregisterHook('smilie', 'addon/smiley_pack_es/smiley_pack_es.php', 'smiley_pack_smilies'); } diff --git a/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php b/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php index 3ae70879..282c0dde 100644 --- a/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php +++ b/smiley_pack/lang/smiley_pack_fr/smiley_pack_fr.php @@ -8,13 +8,14 @@ * * */ +use Friendica\Core\Addon; function smiley_pack_fr_install() { - register_hook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); + Addon::registerHook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); } function smiley_pack_fr_uninstall() { - unregister_hook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); + Addon::unregisterHook('smilie', 'addon/smiley_pack_fr/smiley_pack_fr.php', 'smiley_pack_fr_smilies'); } diff --git a/smiley_pack/smiley_pack.php b/smiley_pack/smiley_pack.php index 4d49b7c0..ea3490eb 100644 --- a/smiley_pack/smiley_pack.php +++ b/smiley_pack/smiley_pack.php @@ -7,16 +7,14 @@ * All smileys from sites offering them as Public Domain */ -/** - -*/ +use Friendica\Core\Addon; function smiley_pack_install() { - register_hook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); + Addon::registerHook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); } function smiley_pack_uninstall() { - unregister_hook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); + Addon::unregisterHook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies'); } diff --git a/smileybutton/lang/it/messages.po b/smileybutton/lang/it/messages.po index e3bbf4fe..1a1f20de 100644 --- a/smileybutton/lang/it/messages.po +++ b/smileybutton/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-09-10 14:33+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/smileybutton/smileybutton.php b/smileybutton/smileybutton.php index d8c15330..7c5e84f9 100644 --- a/smileybutton/smileybutton.php +++ b/smileybutton/smileybutton.php @@ -5,19 +5,19 @@ * Version: 0.2 * Author: Johannes Schwab */ - +use Friendica\Core\Addon; function smileybutton_install() { - //Register hooks - register_hook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); - + //Register hooks + Addon::registerHook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); + logger("installed smileybutton"); } function smileybutton_uninstall() { //Delet registered hooks - unregister_hook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); + Addon::unregisterHook('jot_tool', 'addon/smileybutton/smileybutton.php', 'show_button'); logger("removed smileybutton"); } @@ -95,8 +95,8 @@ function show_button($a, &$b) { ); // Call hooks to get aditional smileies from other addons - $params = array('texts' => $texts, 'icons' => $icons, 'string' => ""); //changed - call_hooks('smilie', $params); + $params = ['texts' => $texts, 'icons' => $icons, 'string' => ""]; //changed + Addon::callHooks('smilie', $params); //Generate html for smiley list $s = "\n\t"; diff --git a/smilies_adult/smilies_adult.php b/smilies_adult/smilies_adult.php index 82b30a98..bb673f23 100644 --- a/smilies_adult/smilies_adult.php +++ b/smilies_adult/smilies_adult.php @@ -8,13 +8,14 @@ * This is a template for how to extend the "smily" code. * */ +use Friendica\Core\Addon; function smilies_adult_install() { - register_hook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); + Addon::registerHook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); } function smilies_adult_uninstall() { - unregister_hook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); + Addon::unregisterHook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies'); } diff --git a/sniper/sniper.php b/sniper/sniper.php index 59812cba..ffebedb3 100644 --- a/sniper/sniper.php +++ b/sniper/sniper.php @@ -1,7 +1,7 @@ */ - +use Friendica\Core\Addon; function sniper_install() { - register_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); + Addon::registerHook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); } function sniper_uninstall() { - unregister_hook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); + Addon::unregisterHook('app_menu', 'addon/sniper/sniper.php', 'sniper_app_menu'); } diff --git a/startpage/lang/it/messages.po b/startpage/lang/it/messages.po index 4aafd114..3d572900 100644 --- a/startpage/lang/it/messages.po +++ b/startpage/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:27+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/startpage/startpage.php b/startpage/startpage.php index e0d822ac..a70e6573 100644 --- a/startpage/startpage.php +++ b/startpage/startpage.php @@ -6,19 +6,21 @@ * Author: Mike Macgirvin * */ - +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function startpage_install() { - register_hook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); - register_hook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); - register_hook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); + Addon::registerHook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); + Addon::registerHook('addon_settings', 'addon/startpage/startpage.php', 'startpage_settings'); + Addon::registerHook('addon_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } function startpage_uninstall() { - unregister_hook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); - unregister_hook('plugin_settings', 'addon/startpage/startpage.php', 'startpage_settings'); - unregister_hook('plugin_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); + Addon::unregisterHook('home_init', 'addon/startpage/startpage.php', 'startpage_home_init'); + Addon::unregisterHook('addon_settings', 'addon/startpage/startpage.php', 'startpage_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/startpage/startpage.php', 'startpage_settings_post'); } @@ -53,16 +55,12 @@ function startpage_settings_post($a,$post) { set_pconfig(local_user(),'startpage','startpage',strip_tags(trim($_POST['startpage']))); } - /** * - * Called from the Plugin Setting form. + * Called from the Addon Setting form. * Add our own settings info to the page. * */ - - - function startpage_settings(&$a,&$s) { if(! local_user()) @@ -80,20 +78,20 @@ function startpage_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

' . t('Startpage') . '

'; + $s .= '

' . L10n::t('Startpage') . '

'; $s .= '
'; $s .= ''; + $s .= '
'; } diff --git a/statusnet/README.md b/statusnet/README.md index 5042e413..0f246750 100644 --- a/statusnet/README.md +++ b/statusnet/README.md @@ -12,7 +12,7 @@ Requirements Due to the distributed nature of the GNU Social network, each user who wishes to forward public messages to a GNU Social account has to get the OAuth credentials for themselves, which makes this addon a little bit more user unfriendly than -the Twitter Plugin is. Nothing too geeky though! +the Twitter Addon is. Nothing too geeky though! The inclusion of a shorturl for the original posting in cases when the message was longer than the maximal allowed notice length requires it, that you have @@ -57,9 +57,9 @@ During the registration of the OAuth client remember the following: After the required credentials for the application are stored in the configuration you have to actually connect your friendica account with GNU Social. To do so follow the Sign in with GNU Social button, allow the access -and copy the security code into the plugin configuration. Friendica will then +and copy the security code into the addon configuration. Friendica will then try to acquire the final OAuth credentials from the API, if successful the -plugin settings will allow you to select to post your public messages to your +addon settings will allow you to select to post your public messages to your GNU Social account. License diff --git a/statusnet/lang/it/messages.po b/statusnet/lang/it/messages.po index c8c8cdc3..c2c3404f 100644 --- a/statusnet/lang/it/messages.po +++ b/statusnet/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-07-27 07:21+0200\n" -"PO-Revision-Date: 2015-08-31 10:27+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/statusnet/codebird.php b/statusnet/library/codebirdsn.php similarity index 100% rename from statusnet/codebird.php rename to statusnet/library/codebirdsn.php diff --git a/statusnet/library/statusnetoauth.php b/statusnet/library/statusnetoauth.php new file mode 100644 index 00000000..27d91638 --- /dev/null +++ b/statusnet/library/statusnetoauth.php @@ -0,0 +1,104 @@ +get($this->host . 'statusnet/config.json'); + return $config->site->textlimit; + } + + function accessTokenURL() + { + return $this->host . 'oauth/access_token'; + } + + function authenticateURL() + { + return $this->host . 'oauth/authenticate'; + } + + function authorizeURL() + { + return $this->host . 'oauth/authorize'; + } + + function requestTokenURL() + { + return $this->host . 'oauth/request_token'; + } + + function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) + { + parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); + $this->host = $apipath; + } + + /** + * Make an HTTP request + * + * Copied here from the TwitterOAuth library and complemented by applying the proxy settings of Friendica + * + * @param string $method + * @param string $host + * @param string $path + * @param array $parameters + * + * @return array|object API results + */ + function http($url, $method, $postfields = NULL) + { + $this->http_info = []; + $ci = curl_init(); + /* Curl settings */ + $prx = Config::get('system', 'proxy'); + if (strlen($prx)) { + curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1); + curl_setopt($ci, CURLOPT_PROXY, $prx); + $prxusr = Config::get('system', 'proxyuser'); + if (strlen($prxusr)) { + curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr); + } + } + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, ['Expect:']); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, [$this, 'getHeader']); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close($ci); + return $response; + } +} diff --git a/statusnet/library/twitteroauth.php b/statusnet/library/twitteroauth.php new file mode 100644 index 00000000..bf56fc01 --- /dev/null +++ b/statusnet/library/twitteroauth.php @@ -0,0 +1,277 @@ +http_status; + } + + function lastAPICall() + { + return $this->last_api_call; + } + + /** + * construct TwitterOAuth object + */ + function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) + { + $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); + if (!empty($oauth_token) && !empty($oauth_token_secret)) { + $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); + } else { + $this->token = NULL; + } + } + + /** + * Get a request_token from Twitter + * + * @returns a key/value array containing oauth_token and oauth_token_secret + */ + function getRequestToken($oauth_callback = NULL) + { + $parameters = array(); + if (!empty($oauth_callback)) { + $parameters['oauth_callback'] = $oauth_callback; + } + $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * Get the authorize URL + * + * @returns a string + */ + function getAuthorizeURL($token, $sign_in_with_twitter = TRUE) + { + if (is_array($token)) { + $token = $token['oauth_token']; + } + if (empty($sign_in_with_twitter)) { + return $this->authorizeURL() . "?oauth_token={$token}"; + } else { + return $this->authenticateURL() . "?oauth_token={$token}"; + } + } + + /** + * Exchange request token and secret for an access token and + * secret, to sign API calls. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham") + */ + function getAccessToken($oauth_verifier = FALSE) + { + $parameters = array(); + if (!empty($oauth_verifier)) { + $parameters['oauth_verifier'] = $oauth_verifier; + } + $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * One time exchange of username and password for access token and secret. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham", + * "x_auth_expires" => "0") + */ + function getXAuthToken($username, $password) + { + $parameters = array(); + $parameters['x_auth_username'] = $username; + $parameters['x_auth_password'] = $password; + $parameters['x_auth_mode'] = 'client_auth'; + $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * GET wrapper for oAuthRequest. + */ + function get($url, $parameters = array()) + { + $response = $this->oAuthRequest($url, 'GET', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * POST wrapper for oAuthRequest. + */ + function post($url, $parameters = array()) + { + $response = $this->oAuthRequest($url, 'POST', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * DELETE wrapper for oAuthReqeust. + */ + function delete($url, $parameters = array()) + { + $response = $this->oAuthRequest($url, 'DELETE', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * Format and sign an OAuth / API request + */ + function oAuthRequest($url, $method, $parameters) + { + if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { + $url = "{$this->host}{$url}.{$this->format}"; + } + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': + return $this->http($request->to_url(), 'GET'); + case 'UPLOAD': + return $this->http($request->get_normalized_http_url(), 'POST', $request->to_postdata(true)); + default: + return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); + } + } + + /** + * Make an HTTP request + * + * @return API results + */ + function http($url, $method, $postfields = NULL) + { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close($ci); + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) + { + $i = strpos($header, ':'); + if (!empty($i)) { + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + return strlen($header); + } +} diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index a004a624..16f68a8a 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -32,115 +32,57 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ - - -/*** - * We have to alter the TwitterOAuth class a little bit to work with any GNU Social - * installation abroad. Basically it's only make the API path variable and be happy. - * - * Thank you guys for the Twitter compatible API! - */ - define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes -require_once('library/twitteroauth.php'); -require_once('include/enotify.php'); -require_once("include/socgraph.php"); +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'statusnetoauth.php'; +require_once 'include/enotify.php'; -class StatusNetOAuth extends TwitterOAuth { - function get_maxlength() { - $config = $this->get($this->host . 'statusnet/config.json'); - return $config->site->textlimit; - } - function accessTokenURL() { return $this->host.'oauth/access_token'; } - function authenticateURL() { return $this->host.'oauth/authenticate'; } - function authorizeURL() { return $this->host.'oauth/authorize'; } - function requestTokenURL() { return $this->host.'oauth/request_token'; } - function __construct($apipath, $consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { - parent::__construct($consumer_key, $consumer_secret, $oauth_token, $oauth_token_secret); - $this->host = $apipath; - } - /** - * Make an HTTP request - * - * @return API results - * - * Copied here from the twitteroauth library and complemented by applying the proxy settings of friendica - */ - function http($url, $method, $postfields = NULL) { - $this->http_info = array(); - $ci = curl_init(); - /* Curl settings */ - $prx = get_config('system','proxy'); - if(strlen($prx)) { - curl_setopt($ci, CURLOPT_HTTPPROXYTUNNEL, 1); - curl_setopt($ci, CURLOPT_PROXY, $prx); - $prxusr = get_config('system','proxyuser'); - if(strlen($prxusr)) - curl_setopt($ci, CURLOPT_PROXYUSERPWD, $prxusr); - } - curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); - curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); - curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); - curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); - curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); - curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); - curl_setopt($ci, CURLOPT_HEADER, FALSE); - - switch ($method) { - case 'POST': - curl_setopt($ci, CURLOPT_POST, TRUE); - if (!empty($postfields)) { - curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); - } - break; - case 'DELETE': - curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); - if (!empty($postfields)) { - $url = "{$url}?{$postfields}"; - } - } - - curl_setopt($ci, CURLOPT_URL, $url); - $response = curl_exec($ci); - $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); - $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); - $this->url = $url; - curl_close ($ci); - return $response; - } -} +use Codebird\Codebird; +use CodebirdSN\CodebirdSN; +use Friendica\App; +use Friendica\Content\OEmbed; +use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Plaintext; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Model\GContact; +use Friendica\Model\Group; +use Friendica\Model\Item; +use Friendica\Model\Photo; +use Friendica\Model\User; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; function statusnet_install() { // we need some hooks, for the configuration and for sending tweets - register_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - register_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - register_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); - register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); - register_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); - register_hook('check_item_notification','addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); + Addon::registerHook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::registerHook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + Addon::registerHook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + Addon::registerHook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); + Addon::registerHook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); + Addon::registerHook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); + Addon::registerHook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); + Addon::registerHook('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); logger("installed GNU Social"); } - -function statusnet_uninstall() { - unregister_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - unregister_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - unregister_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); - unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); - unregister_hook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); - unregister_hook('check_item_notification','addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); +function statusnet_uninstall() +{ + Addon::unregisterHook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + Addon::unregisterHook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + Addon::unregisterHook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); + Addon::unregisterHook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); + Addon::unregisterHook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); + Addon::unregisterHook('prepare_body', 'addon/statusnet/statusnet.php', 'statusnet_prepare_body'); + Addon::unregisterHook('check_item_notification', 'addon/statusnet/statusnet.php', 'statusnet_check_item_notification'); // old setting - remove only - unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - unregister_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - unregister_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - + Addon::unregisterHook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + Addon::unregisterHook('addon_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); } function statusnet_check_item_notification($a, &$notification_data) { @@ -156,7 +98,7 @@ function statusnet_jot_nets(&$a,&$b) { $statusnet_defpost = get_pconfig(local_user(),'statusnet','post_by_default'); $selected = ((intval($statusnet_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to GNU Social') . '
'; + . L10n::t('Post to GNU Social') . ''; } } @@ -184,24 +126,53 @@ function statusnet_settings_post ($a,$post) { del_pconfig(local_user(), 'statusnet', 'create_user'); del_pconfig(local_user(), 'statusnet', 'own_id'); } else { - if (isset($_POST['statusnet-preconf-apiurl'])) { - /*** - * If the user used one of the preconfigured GNU Social server credentials - * use them. All the data are available in the global config. - * Check the API Url never the less and blame the admin if it's not working ^^ - */ - $globalsn = get_config('statusnet', 'sites'); - foreach ( $globalsn as $asn) { - if ($asn['apiurl'] == $_POST['statusnet-preconf-apiurl'] ) { - $apibase = $asn['apiurl']; - $c = fetch_url( $apibase . 'statusnet/version.xml' ); + if (isset($_POST['statusnet-preconf-apiurl'])) { + /* * * + * If the user used one of the preconfigured GNU Social server credentials + * use them. All the data are available in the global config. + * Check the API Url never the less and blame the admin if it's not working ^^ + */ + $globalsn = Config::get('statusnet', 'sites'); + foreach ($globalsn as $asn) { + if ($asn['apiurl'] == $_POST['statusnet-preconf-apiurl']) { + $apibase = $asn['apiurl']; + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); + if (strlen($c) > 0) { + PConfig::set(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey']); + PConfig::set(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret']); + PConfig::set(local_user(), 'statusnet', 'baseapi', $asn['apiurl']); + //PConfig::set(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); + } else { + notice(L10n::t('Please contact your site administrator.
The provided API URL is not valid.') . EOL . $asn['apiurl'] . EOL); + } + } + } + goaway('settings/connectors'); + } else { + if (isset($_POST['statusnet-consumersecret'])) { + // check if we can reach the API of the GNU Social server + // we'll check the API Version for that, if we don't get one we'll try to fix the path but will + // resign quickly after this one try to fix the path ;-) + $apibase = $_POST['statusnet-baseapi']; + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); if (strlen($c) > 0) { set_pconfig(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey'] ); set_pconfig(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret'] ); set_pconfig(local_user(), 'statusnet', 'baseapi', $asn['apiurl'] ); //set_pconfig(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { - notice( t('Please contact your site administrator.
The provided API URL is not valid.').EOL.$asn['apiurl'].EOL ); + // the API path is not correct, maybe missing trailing / ? + $apibase = $apibase . '/'; + $c = Network::fetchUrl($apibase . 'statusnet/version.xml'); + if (strlen($c) > 0) { + // ok the API path is now correct, let's save the settings + PConfig::set(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); + PConfig::set(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); + PConfig::set(local_user(), 'statusnet', 'baseapi', $apibase); + } else { + // still not the correct API base, let's do noting + notice(L10n::t('We could not contact the GNU Social API with the Path you entered.') . EOL); + } } } } @@ -229,8 +200,37 @@ function statusnet_settings_post ($a,$post) { set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); set_pconfig(local_user(), 'statusnet', 'baseapi', $apibase ); } else { - // still not the correct API base, let's do noting - notice( t('We could not contact the GNU Social API with the Path you entered.').EOL ); + if (isset($_POST['statusnet-pin'])) { + // if the user supplied us with a PIN from GNU Social, let the magic of OAuth happen + $api = PConfig::get(local_user(), 'statusnet', 'baseapi'); + $ckey = PConfig::get(local_user(), 'statusnet', 'consumerkey'); + $csecret = PConfig::get(local_user(), 'statusnet', 'consumersecret'); + // the token and secret for which the PIN was generated were hidden in the settings + // form as token and token2, we need a new connection to GNU Social using these token + // and secret to request a Access Token with the PIN + $connection = new StatusNetOAuth($api, $ckey, $csecret, $_POST['statusnet-token'], $_POST['statusnet-token2']); + $token = $connection->getAccessToken($_POST['statusnet-pin']); + // ok, now that we have the Access Token, save them in the user config + PConfig::set(local_user(), 'statusnet', 'oauthtoken', $token['oauth_token']); + PConfig::set(local_user(), 'statusnet', 'oauthsecret', $token['oauth_token_secret']); + PConfig::set(local_user(), 'statusnet', 'post', 1); + PConfig::set(local_user(), 'statusnet', 'post_taglinks', 1); + // reload the Addon Settings page, if we don't do it see Bug #42 + goaway('settings/connectors'); + } else { + // if no PIN is supplied in the POST variables, the user has changed the setting + // to post a dent for every new __public__ posting to the wall + PConfig::set(local_user(), 'statusnet', 'post', intval($_POST['statusnet-enable'])); + PConfig::set(local_user(), 'statusnet', 'post_by_default', intval($_POST['statusnet-default'])); + PConfig::set(local_user(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror'])); + PConfig::set(local_user(), 'statusnet', 'import', intval($_POST['statusnet-import'])); + PConfig::set(local_user(), 'statusnet', 'create_user', intval($_POST['statusnet-create_user'])); + + if (!intval($_POST['statusnet-mirror'])) + PConfig::delete(local_user(), 'statusnet', 'lastid'); + + info(L10n::t('GNU Social settings updated.') . EOL); + } } } goaway($a->get_baseurl().'/settings/connectors'); @@ -299,11 +299,11 @@ function statusnet_settings(&$a,&$s) { $css = (($enabled) ? '' : '-disabled'); $s .= ''; - $s .= '

'. t('GNU Social Import/Export/Mirror').'

'; + $s .= '

' . L10n::t('GNU Social Import/Export/Mirror') . '

'; $s .= '
'; $s .= '
'; @@ -578,50 +578,42 @@ function statusnet_post_hook(&$a,&$b) { if (statusnet_is_retweet($a, $b['uid'], $b['body'])) return; - require_once('include/bbcode.php'); - $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret); + $dent = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); $max_char = $dent->get_maxlength(); // max. length for a dent set_pconfig($b['uid'], 'statusnet', 'max_char', $max_char); $tempfile = ""; - require_once("include/plaintext.php"); - require_once("include/network.php"); - $msgarr = plaintext($a, $b, $max_char, true, 7); + $msgarr = BBCode::toPlaintext($b, $max_char, true, 7); $msg = $msgarr["text"]; if (($msg == "") && isset($msgarr["title"])) - $msg = shortenmsg($msgarr["title"], $max_char - 50); + $msg = Plaintext::shorten($msgarr["title"], $max_char - 50); $image = ""; if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) { - if ((strlen($msgarr["url"]) > 20) && - ((strlen($msg." \n".$msgarr["url"]) > $max_char))) - $msg .= " \n".short_link($msgarr["url"]); - else - $msg .= " \n".$msgarr["url"]; - } elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) + $msg .= " \n" . $msgarr["url"]; + } elseif (isset($msgarr["image"]) && ($msgarr["type"] != "video")) { $image = $msgarr["image"]; if ($image != "") { - $img_str = fetch_url($image); + $img_str = Network::fetchUrl($image); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); $postdata = array("status" => $msg, "media[]" => $tempfile); } else $postdata = array("status"=>$msg); - // and now dent it :-) - if(strlen($msg)) { - + // and now send it :-) + if (strlen($msg)) { if ($iscomment) { $postdata["in_reply_to_status_id"] = substr($orig_post["uri"], $hostlength); logger('statusnet_post send reply '.print_r($postdata, true), LOGGER_DEBUG); } // New code that is able to post pictures - require_once("addon/statusnet/codebird.php"); + require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php'; $cb = \CodebirdSN\CodebirdSN::getInstance(); $cb->setAPIEndpoint($api); $cb->setConsumerKey($ckey, $csecret); @@ -637,12 +629,8 @@ function statusnet_post_hook(&$a,&$b) { if ($result->error) { logger('Send to GNU Social failed: "'.$result->error.'"'); } elseif ($iscomment) { - logger('statusnet_post: Update extid '.$result->id." for post id ".$b['id']); - q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d", - dbesc($hostname."::".$result->id), - dbesc($result->text), - intval($b['id']) - ); + logger('statusnet_post: Update extid ' . $result->id . " for post id " . $b['id']); + Item::update(['extid' => $hostname . "::" . $result->id, 'body' => $result->text], ['id' => $b['id']]); } } if ($tempfile != "") @@ -650,7 +638,9 @@ function statusnet_post_hook(&$a,&$b) { } } -function statusnet_plugin_admin_post(&$a){ +function statusnet_addon_admin_post(App $a) +{ + $sites = []; $sites = array(); @@ -682,17 +672,17 @@ function statusnet_plugin_admin_post(&$a){ } -function statusnet_plugin_admin(&$a, &$o){ - - $sites = get_config('statusnet','sites'); - $sitesform=array(); - if (is_array($sites)){ - foreach($sites as $id=>$s){ - $sitesform[] = Array( - 'sitename' => Array("sitename[$id]", "Site name", $s['sitename'], ""), - 'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], t("Base API Path \x28remember the trailing /\x29") ), - 'secret' => Array("secret[$id]", "Secret", $s['consumersecret'], ""), - 'key' => Array("key[$id]", "Key", $s['consumerkey'], ""), +function statusnet_addon_admin(App $a, &$o) +{ + $sites = Config::get('statusnet', 'sites'); + $sitesform = []; + if (is_array($sites)) { + foreach ($sites as $id => $s) { + $sitesform[] = [ + 'sitename' => ["sitename[$id]", "Site name", $s['sitename'], ""], + 'apiurl' => ["apiurl[$id]", "Api url", $s['apiurl'], L10n::t("Base API Path \x28remember the trailing /\x29")], + 'secret' => ["secret[$id]", "Secret", $s['consumersecret'], ""], + 'key' => ["key[$id]", "Key", $s['consumerkey'], ""], //'applicationname' => Array("applicationname[$id]", "Application name", $s['applicationname'], ""), 'delete' => Array("delete[$id]", "Delete", False , "Check to delete this preset"), ); @@ -700,17 +690,17 @@ function statusnet_plugin_admin(&$a, &$o){ } /* empty form to add new site */ $id++; - $sitesform[] = Array( - 'sitename' => Array("sitename[$id]", t("Site name"), "", ""), - 'apiurl' => Array("apiurl[$id]", "Api url", "", t("Base API Path \x28remember the trailing /\x29") ), - 'secret' => Array("secret[$id]", t("Consumer Secret"), "", ""), - 'key' => Array("key[$id]", t("Consumer Key"), "", ""), - //'applicationname' => Array("applicationname[$id]", t("Application name"), "", ""), - ); + $sitesform[] = [ + 'sitename' => ["sitename[$id]", L10n::t("Site name"), "", ""], + 'apiurl' => ["apiurl[$id]", "Api url", "", L10n::t("Base API Path \x28remember the trailing /\x29")], + 'secret' => ["secret[$id]", L10n::t("Consumer Secret"), "", ""], + 'key' => ["key[$id]", L10n::t("Consumer Key"), "", ""], + //'applicationname' => Array("applicationname[$id]", L10n::t("Application name"), "", ""), + ]; - $t = get_markup_template( "admin.tpl", "addon/statusnet/" ); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), + $t = get_markup_template("admin.tpl", "addon/statusnet/"); + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), '$sites' => $sitesform, )); } @@ -724,9 +714,8 @@ function statusnet_prepare_body(&$a,&$b) { if (intval($max_char) == 0) $max_char = 140; - require_once("include/plaintext.php"); - $item = $b["item"]; - $item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"]; + $item = $b["item"]; + $item["plink"] = $a->get_baseurl() . "/display/" . $a->user["nickname"] . "/" . $item["parent"]; $r = q("SELECT `item`.`author-link`, `item`.`uri`, `contact`.`nick` AS contact_nick FROM `item` INNER JOIN `contact` ON `contact`.`id` = `item`.`contact-id` @@ -748,6 +737,8 @@ function statusnet_prepare_body(&$a,&$b) { $item["body"] = $nickname." ".$item["body"]; } + $msgarr = BBCode::toPlaintext($item, $max_char, true, 7); + $msg = $msgarr["text"]; $msgarr = plaintext($a, $item, $max_char, true, 7); $msg = $msgarr["text"]; @@ -790,7 +781,7 @@ function statusnet_cron($a,$b) { if ($abandon_days < 1) $abandon_days = 0; - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'statusnet' AND `k` = 'import' AND `v` ORDER BY RAND()"); if(count($r)) { @@ -950,7 +941,7 @@ function statusnet_fetch_contact($uid, $contact, $create_user) { `location`, `about`, `writable`, `blocked`, `readonly`, `pending` ) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0 ) ", intval($uid), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -999,14 +990,13 @@ function statusnet_fetch_contact($uid, $contact, $create_user) { dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), intval($contact_id) ); } else { // update profile photos once every two weeks as we have no notification of when they change. - - //$update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -2 days')) ? true : false); - $update_photo = ($r[0]['avatar-date'] < datetime_convert('','','now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < DateTimeFormat::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < DateTimeFormat::utc('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion @@ -1035,9 +1025,9 @@ function statusnet_fetch_contact($uid, $contact, $create_user) { dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc($contact->statusnet_profile_url), dbesc(normalise_link($contact->statusnet_profile_url)), dbesc(statusnet_address($contact)), @@ -1060,9 +1050,9 @@ function statusnet_fetchuser($a, $uid, $screen_name = "", $user_id = "") { $otoken = get_pconfig($uid, 'statusnet', 'oauthtoken'); $osecret = get_pconfig($uid, 'statusnet', 'oauthsecret'); - require_once("addon/statusnet/codebird.php"); + require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'codebirdsn.php'; - $cb = \Codebird\Codebird::getInstance(); + $cb = \CodebirdSN\CodebirdSN::getInstance(); $cb->setConsumerKey($ckey, $csecret); $cb->setToken($otoken, $osecret); @@ -1215,8 +1205,8 @@ function statusnet_createpost($a, $uid, $post, $self, $create_user, $only_existi $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = datetime_convert('UTC','UTC',$content->created_at); - $postarray['edited'] = datetime_convert('UTC','UTC',$content->created_at); + $postarray['created'] = DateTimeFormat::utc($content->created_at); + $postarray['edited'] = DateTimeFormat::utc($content->created_at); if (is_string($content->place->name)) $postarray["location"] = $content->place->name; @@ -1295,14 +1285,14 @@ function statusnet_checknotification($a, $uid, $own_url, $top_item, $postarray) 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'], + '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(Item::getGuidById($top_item)), + 'source_name' => $postarray['author-name'], + 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], 'verb' => ACTIVITY_POST, 'otype' => 'item', @@ -1330,8 +1320,7 @@ function statusnet_fetchhometimeline($a, $uid, $mode = 1) { logger("statusnet_fetchhometimeline: Fetching for user ".$uid, LOGGER_DEBUG); - require_once('library/twitteroauth.php'); - require_once('include/items.php'); + require_once 'include/items.php'; $connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret); @@ -1418,7 +1407,7 @@ function statusnet_fetchhometimeline($a, $uid, $mode = 1) { if (trim($postarray['body']) == "") continue; - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_fetchhometimeline: User '.$self["nick"].' posted home timeline item '.$item); @@ -1469,8 +1458,8 @@ function statusnet_fetchhometimeline($a, $uid, $mode = 1) { if (trim($postarray['body']) != "") { continue; - $item = item_store($postarray); - $postarray["id"] = $item; + $item = Item::insert($postarray); + $postarray["id"] = $item; logger('statusnet_fetchhometimeline: User '.$self["nick"].' posted mention timeline item '.$item); @@ -1498,7 +1487,7 @@ function statusnet_fetchhometimeline($a, $uid, $mode = 1) { 'to_email' => $u[0]['email'], 'uid' => $u[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1521,9 +1510,7 @@ function statusnet_complete_conversation($a, $uid, $self, $create_user, $nick, $ $osecret = get_pconfig($uid, 'statusnet', 'oauthsecret'); $own_url = get_pconfig($uid, 'statusnet', 'own_url'); - require_once('library/twitteroauth.php'); - - $connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret); + $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); $parameters["count"] = 200; @@ -1531,14 +1518,13 @@ function statusnet_complete_conversation($a, $uid, $self, $create_user, $nick, $ if (is_array($items)) { $posts = array_reverse($items); - foreach($posts AS $post) { + foreach ($posts as $post) { $postarray = statusnet_createpost($a, $uid, $post, $self, false, false); if (trim($postarray['body']) == "") continue; - //print_r($postarray); - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('statusnet_complete_conversation: User '.$self["nick"].' posted home timeline item '.$item); @@ -1549,11 +1535,9 @@ function statusnet_complete_conversation($a, $uid, $self, $create_user, $nick, $ } } -function statusnet_convertmsg($a, $body, $no_tags = false) { - - require_once("include/oembed.php"); - require_once("include/items.php"); - require_once("include/network.php"); +function statusnet_convertmsg(App $a, $body, $no_tags = false) +{ + require_once "include/items.php"; $body = preg_replace("=\[url\=https?://([0-9]*).([0-9]*).([0-9]*).([0-9]*)/([0-9]*)\](.*?)\[\/url\]=ism","$1.$2.$3.$4/$5",$body); @@ -1571,7 +1555,7 @@ function statusnet_convertmsg($a, $body, $no_tags = false) { logger("statusnet_convertmsg: expanding url ".$match[1], LOGGER_DEBUG); - $expanded_url = original_url($match[1]); + $expanded_url = Network::finalUrl($match[1]); logger("statusnet_convertmsg: fetching data for ".$expanded_url, LOGGER_DEBUG); @@ -1588,12 +1572,12 @@ function statusnet_convertmsg($a, $body, $no_tags = false) { $footerlink = "[url=".$expanded_url."]".$expanded_url."[/url]"; $body = str_replace($search, $footerlink, $body); - } elseif (($oembed_data->type == "photo") && isset($oembed_data->url) && !$dontincludemedia) - $body = str_replace($search, "[url=".$expanded_url."][img]".$oembed_data->url."[/img][/url]", $body); - elseif ($oembed_data->type != "link") - $body = str_replace($search, "[url=".$expanded_url."]".$expanded_url."[/url]", $body); - else { - $img_str = fetch_url($expanded_url, true, $redirects, 4); + } elseif (($oembed_data->type == "photo") && isset($oembed_data->url) && !$dontincludemedia) { + $body = str_replace($search, "[url=" . $expanded_url . "][img]" . $oembed_data->url . "[/img][/url]", $body); + } elseif ($oembed_data->type != "link") { + $body = str_replace($search, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); + } else { + $img_str = Network::fetchUrl($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); @@ -1667,9 +1651,7 @@ function statusnet_fetch_own_contact($a, $uid) { $contact_id = 0; if ($own_url == "") { - require_once('library/twitteroauth.php'); - - $connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret); + $connection = new StatusNetOAuth($api, $ckey, $csecret, $otoken, $osecret); // Fetching user data $user = $connection->get('account/verify_credentials'); diff --git a/superblock/lang/it/messages.po b/superblock/lang/it/messages.po index 19d2c53b..698500cb 100644 --- a/superblock/lang/it/messages.po +++ b/superblock/lang/it/messages.po @@ -1,16 +1,16 @@ -# ADDON blockem +# ADDON superblock # Copyright (C) -# This file is distributed under the same license as the Friendica blockem addon package. +# This file is distributed under the same license as the Friendica superblock addon package. # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2017 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:28+0000\n" +"POT-Creation-Date: 2017-04-21 08:45+0200\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -19,35 +19,26 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: blockem.php:51 -msgid "\"Blockem\" Settings" -msgstr "Impostazioni \"Blockem\"" +#: superblock.php:53 superblock.php:57 +msgid "\"Superblock\"" +msgstr "\"Superblocco\"" -#: blockem.php:53 +#: superblock.php:60 msgid "Comma separated profile URLS to block" msgstr "Lista, separata da virgola, di indirizzi di profili da bloccare" -#: blockem.php:57 -msgid "Submit" -msgstr "Invia" +#: superblock.php:64 +msgid "Save Settings" +msgstr "Salva Impostazioni" -#: blockem.php:70 -msgid "BLOCKEM Settings saved." -msgstr "Impostazioni \"Blockem\" salvate." +#: superblock.php:76 +msgid "SUPERBLOCK Settings saved." +msgstr "Impostazioni \"Superblocco\" salvate." -#: blockem.php:105 -#, php-format -msgid "Blocked %s - Click to open/close" -msgstr "%s bloccato - Clicca per aprire/chiudere" +#: superblock.php:148 +msgid "Block Completely" +msgstr "Blocca Completamente" -#: blockem.php:160 -msgid "Unblock Author" -msgstr "Sblocca autore" - -#: blockem.php:162 -msgid "Block Author" -msgstr "Blocca autore" - -#: blockem.php:194 -msgid "blockem settings updated" -msgstr "Impostazioni 'blockem' aggiornate." +#: superblock.php:168 +msgid "superblock settings updated" +msgstr "impostazioni \"superblocco\" aggiornate." diff --git a/superblock/lang/it/strings.php b/superblock/lang/it/strings.php index 74d55e16..968de3cc 100644 --- a/superblock/lang/it/strings.php +++ b/superblock/lang/it/strings.php @@ -5,11 +5,9 @@ function string_plural_select_it($n){ return ($n != 1);; }} ; -$a->strings["\"Blockem\" Settings"] = "Impostazioni \"Blockem\""; +$a->strings["\"Superblock\""] = "\"Superblocco\""; $a->strings["Comma separated profile URLS to block"] = "Lista, separata da virgola, di indirizzi di profili da bloccare"; -$a->strings["Submit"] = "Invia"; -$a->strings["BLOCKEM Settings saved."] = "Impostazioni \"Blockem\" salvate."; -$a->strings["Blocked %s - Click to open/close"] = "%s bloccato - Clicca per aprire/chiudere"; -$a->strings["Unblock Author"] = "Sblocca autore"; -$a->strings["Block Author"] = "Blocca autore"; -$a->strings["blockem settings updated"] = "Impostazioni 'blockem' aggiornate."; +$a->strings["Save Settings"] = "Salva Impostazioni"; +$a->strings["SUPERBLOCK Settings saved."] = "Impostazioni \"Superblocco\" salvate."; +$a->strings["Block Completely"] = "Blocca Completamente"; +$a->strings["superblock settings updated"] = "impostazioni \"superblocco\" aggiornate."; diff --git a/superblock/superblock.php b/superblock/superblock.php index c86c6aad..1c9dab7c 100644 --- a/superblock/superblock.php +++ b/superblock/superblock.php @@ -8,25 +8,28 @@ * Author: Mike Macgirvin * */ +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function superblock_install() { - register_hook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); - register_hook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); - register_hook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); - register_hook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); - register_hook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); + Addon::registerHook('addon_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); + Addon::registerHook('addon_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); + Addon::registerHook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); + Addon::registerHook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); + Addon::registerHook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); } function superblock_uninstall() { - unregister_hook('plugin_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); - unregister_hook('plugin_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); - unregister_hook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); - unregister_hook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); - unregister_hook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); + Addon::unregisterHook('addon_settings', 'addon/superblock/superblock.php', 'superblock_addon_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/superblock/superblock.php', 'superblock_addon_settings_post'); + Addon::unregisterHook('conversation_start', 'addon/superblock/superblock.php', 'superblock_conversation_start'); + Addon::unregisterHook('item_photo_menu', 'addon/superblock/superblock.php', 'superblock_item_photo_menu'); + Addon::unregisterHook('enotify_store', 'addon/superblock/superblock.php', 'superblock_enotify_store'); } @@ -50,18 +53,18 @@ function superblock_addon_settings(&$a,&$s) { } $s .= ''; - $s .= '

' . t('"Superblock"') . '

'; + $s .= '

' . L10n::t('"Superblock"') . '

'; $s .= '
'; $s .= ''; + $s .= '
'; return; } @@ -72,8 +75,8 @@ function superblock_addon_settings_post(&$a,&$b) { return; if($_POST['superblock-submit']) { - set_pconfig(local_user(),'system','blocked',trim($_POST['superblock-words'])); - info( t('SUPERBLOCK Settings saved.') . EOL); + PConfig::set(local_user(),'system','blocked',trim($_POST['superblock-words'])); + info(L10n::t('SUPERBLOCK Settings saved.') . EOL); } } @@ -145,7 +148,7 @@ function superblock_item_photo_menu(&$a,&$b) { } } - $b['menu'][ t('Block Completely')] = 'javascript:superblockBlock(\'' . $author . '\'); return false;'; + $b['menu'][L10n::t('Block Completely')] = 'javascript:superblockBlock(\'' . $author . '\'); return false;'; } function superblock_module() {} @@ -164,7 +167,7 @@ function superblock_init(&$a) { $words .= trim($_GET['block']); } - set_pconfig(local_user(),'system','blocked',$words); - info( t('superblock settings updated') . EOL ); + PConfig::set(local_user(),'system','blocked',$words); + info(L10n::t('superblock settings updated') . EOL ); killme(); } diff --git a/testdrive/README.md b/testdrive/README.md index 3d735dea..edc63ed5 100644 --- a/testdrive/README.md +++ b/testdrive/README.md @@ -2,7 +2,7 @@ TestDrive ========= -Testdrive is a Friendica plugin which implements automatic account expiration so that a site may be used as a public +Testdrive is a Friendica addon which implements automatic account expiration so that a site may be used as a public test bed. When an account is created on the site, it is given a hard expiration date of @@ -11,11 +11,11 @@ When an account is created on the site, it is given a hard expiration date of $a->config['testdrive']['expiredays'] = 30; Set this in your .htconfig.php file to allow a 30 day test drive period. By default no expiration period is defined -in case the plugin is activated accidentally. +in case the addon is activated accidentally. -There is no opportunity to extend an expired account using this plugin. Expiration is final. Other plugins may be created -which charge for service and extend the expiration as long as a balance is maintained. This plugin is purely for creating +There is no opportunity to extend an expired account using this addon. Expiration is final. Other addons may be created +which charge for service and extend the expiration as long as a balance is maintained. This addon is purely for creating a limited use test site. An email warning will be sent out approximately five days before the expiration occurs. Once it occurs logins and many diff --git a/testdrive/lang/it/messages.po b/testdrive/lang/it/messages.po index d929c4fd..49e3d95b 100644 --- a/testdrive/lang/it/messages.po +++ b/testdrive/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-08-23 17:30+0200\n" -"PO-Revision-Date: 2015-08-31 10:28+0000\n" +"PO-Revision-Date: 2017-09-20 06:08+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php index 9bbeb1d8..4398ffbf 100644 --- a/testdrive/testdrive.php +++ b/testdrive/testdrive.php @@ -1,31 +1,33 @@ */ - - +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Model\User; +use Friendica\Util\DateTimeFormat; function testdrive_install() { - register_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); - register_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); - register_hook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); - register_hook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); + Addon::registerHook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); + Addon::registerHook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); + Addon::registerHook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); + Addon::registerHook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); } function testdrive_uninstall() { - unregister_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); - unregister_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); - unregister_hook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); - unregister_hook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); + Addon::unregisterHook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); + Addon::unregisterHook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); + Addon::unregisterHook('enotify','addon/testdrive/testdrive.php', 'testdrive_enotify'); + Addon::unregisterHook('globaldir_update','addon/testdrive/testdrive.php', 'testdrive_globaldir_update'); } @@ -42,7 +44,7 @@ function testdrive_register_account($a,$b) { return; $r = q("UPDATE user set account_expires_on = '%s' where uid = %d", - dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + dbesc(DateTimeFormat::convert('now +' . $days . ' days')), intval($uid) ); @@ -64,13 +66,13 @@ function testdrive_cron($a,$b) { 'language' => $rr['language'], 'to_name' => $rr['username'], 'to_email' => $rr['email'], - 'source_name' => t('Administrator'), + 'source_name' => L10n::t('Administrator'), 'source_link' => $a->get_baseurl(), 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', )); q("update user set expire_notification_sent = '%s' where uid = %d", - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), intval($rr['uid']) ); @@ -91,8 +93,8 @@ function testdrive_enotify(&$a, &$b) { if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM && x($b['params'], 'system_type') && $b['params']['system_type'] === 'testdrive_expire') { $b['itemlink'] = $a->get_baseurl(); - $b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), get_config('system','sitename')); - $b['subject'] = t('Your Friendica test account is about to expire.'); - $b['body'] = sprintf( t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."), $b['params']['to_name'], "[url=".$app->config["system"]["url"]."]".$app->config["sitename"]."[/url]", get_server()); + $b['epreamble'] = $b['preamble'] = L10n::t('Your account on %s will expire in a few days.', Config::get('system', 'sitename')); + $b['subject'] = L10n::t('Your Friendica test account is about to expire.'); + $b['body'] = L10n::t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at %s/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com.", $b['params']['to_name'], "[url=".$app->config["system"]["url"]."]".$app->config["sitename"]."[/url]", get_server()); } } diff --git a/tictac/lang/it/messages.po b/tictac/lang/it/messages.po index 4e365574..fc0458f1 100644 --- a/tictac/lang/it/messages.po +++ b/tictac/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2014-09-10 14:43+0000\n" +"PO-Revision-Date: 2017-09-20 06:09+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/tictac/tictac.php b/tictac/tictac.php index 1dd1ccb0..ffea3c26 100644 --- a/tictac/tictac.php +++ b/tictac/tictac.php @@ -5,19 +5,20 @@ * Version: 1.0 * Author: Mike Macgirvin */ - +use Friendica\Core\Addon; +use Friendica\Core\L10n; function tictac_install() { - register_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); + Addon::registerHook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); } function tictac_uninstall() { - unregister_hook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); + Addon::unregisterHook('app_menu', 'addon/tictac/tictac.php', 'tictac_app_menu'); } function tictac_app_menu($a,&$b) { - $b['app_menu'][] = ''; + $b['app_menu'][] = ''; } @@ -50,17 +51,17 @@ function tictac_content(&$a) { $dimen = 3; } - $o .= '

' . t('3D Tic-Tac-Toe') . '


'; + $o .= '

' . L10n::t('3D Tic-Tac-Toe') . '


'; $t = new tictac($dimen,$handicap,$mefirst,$yours,$mine); $o .= $t->play(); - $o .= '' . t('New game') . '
'; - $o .= '' . t('New game with handicap') . '
'; - $o .= '

' . t('Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '); - $o .= t('In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'); - $o .= '

'; - $o .= t('The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'); + $o .= '' . L10n::t('New game') . '
'; + $o .= '' . L10n::t('New game with handicap') . '
'; + $o .= '

' . L10n::t('Three dimensional tic-tac-toe is just like the traditional game except that it is played on multiple levels simultaneously. '); + $o .= L10n::t('In this case there are three levels. You win by getting three in a row on any level, as well as up, down, and diagonally across the different levels.'); + $o .= '

'; + $o .= L10n::t('The handicap game disables the center position on the middle level because the player claiming this square often has an unfair advantage.'); $o .= '

'; return $o; @@ -179,24 +180,24 @@ class tictac { if($this->first_move) { if(rand(0,1) == 1) { - $o .= '
' . t('You go first...') . '

'; + $o .= '
' . L10n::t('You go first...') . '

'; $this->mefirst = 0; $o .= $this->draw_board(); return $o; } - $o .= '
' . t('I\'m going first this time...') . '

'; + $o .= '
' . L10n::t('I\'m going first this time...') . '

'; $this->mefirst = 1; } if($this->check_youwin()) { - $o .= '
' . t('You won!') . '

'; + $o .= '
' . L10n::t('You won!') . '

'; $o .= $this->draw_board(); return $o; } if($this->fullboard()) - $o .= '
' . t('"Cat" game!') . '

'; + $o .= '
' . L10n::t('"Cat" game!') . '

'; $move = $this->winning_move(); if(strlen($move)) { @@ -219,9 +220,9 @@ class tictac { } if($this->check_iwon()) - $o .= '
' . t('I won!') . '

'; + $o .= '
' . L10n::t('I won!') . '

'; if($this->fullboard()) - $o .= '
' . t('"Cat" game!') . '

'; + $o .= '
' . L10n::t('"Cat" game!') . '

'; $o .= $this->draw_board(); return $o; } diff --git a/tumblr/README.md b/tumblr/README.md index fb20dac2..57ca145a 100644 --- a/tumblr/README.md +++ b/tumblr/README.md @@ -4,7 +4,7 @@ Installation [Register](http://www.tumblr.com/oauth/apps) an application and use (your server name)/addon/tumblr/callback.php as callback URL -After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/plugins/tumblr). +After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/tumblr). Notice ------ diff --git a/tumblr/lang/C/messages.po b/tumblr/lang/C/messages.po index b826c030..d2e4a909 100644 --- a/tumblr/lang/C/messages.po +++ b/tumblr/lang/C/messages.po @@ -42,7 +42,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "" #: tumblr.php:197 diff --git a/tumblr/lang/ca/strings.php b/tumblr/lang/ca/strings.php index b1766618..9ded80d2 100644 --- a/tumblr/lang/ca/strings.php +++ b/tumblr/lang/ca/strings.php @@ -6,7 +6,7 @@ $a->strings["return to the connector page"] = ""; $a->strings["Post to Tumblr"] = "Publica-ho al Tumblr"; $a->strings["Tumblr Post Settings"] = "Configuració d'Enviaments de Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = ""; -$a->strings["Enable Tumblr Post Plugin"] = "Habilita el plugin de enviaments de Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Habilita el addon de enviaments de Tumblr"; $a->strings["Post to Tumblr by default"] = "Enviar a Tumblr per defecte"; $a->strings["Post to page:"] = ""; $a->strings["You are not authenticated to tumblr"] = ""; diff --git a/tumblr/lang/cs/messages.po b/tumblr/lang/cs/messages.po index 83d24f70..a084ca65 100644 --- a/tumblr/lang/cs/messages.po +++ b/tumblr/lang/cs/messages.po @@ -44,7 +44,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Znovu) přihlásit k Vaší tumblr stránce" #: tumblr.php:198 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "Povolit rozšíření Tumbir" #: tumblr.php:203 diff --git a/tumblr/lang/cs/strings.php b/tumblr/lang/cs/strings.php index 43673188..8a8741d2 100644 --- a/tumblr/lang/cs/strings.php +++ b/tumblr/lang/cs/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "návrat ke stránce konektor"; $a->strings["Post to Tumblr"] = "Příspěvek na Tumbir"; $a->strings["Tumblr Export"] = "Tumbir export"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Znovu) přihlásit k Vaší tumblr stránce"; -$a->strings["Enable Tumblr Post Plugin"] = "Povolit rozšíření Tumbir"; +$a->strings["Enable Tumblr Post Addon"] = "Povolit rozšíření Tumbir"; $a->strings["Post to Tumblr by default"] = "Standardně posílat příspěvky na Tumbir"; $a->strings["Post to page:"] = "Příspěvek ke stránce:"; $a->strings["You are not authenticated to tumblr"] = "Nyní nejste přihlášen k tumblr."; diff --git a/tumblr/lang/de/messages.po b/tumblr/lang/de/messages.po index d4040002..aa3c16cf 100644 --- a/tumblr/lang/de/messages.po +++ b/tumblr/lang/de/messages.po @@ -44,8 +44,8 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re-)Authentifizierung deiner tumblr Seite" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" -msgstr "Tumblr-Post-Plugin aktivieren" +msgid "Enable Tumblr Post Addon" +msgstr "Tumblr-Post-Addon aktivieren" #: tumblr.php:197 msgid "Post to Tumblr by default" diff --git a/tumblr/lang/de/strings.php b/tumblr/lang/de/strings.php index 9ba39987..87fd5c50 100644 --- a/tumblr/lang/de/strings.php +++ b/tumblr/lang/de/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "zurück zur Connector Seite"; $a->strings["Post to Tumblr"] = "Auf Tumblr veröffentlichen"; $a->strings["Tumblr Post Settings"] = "Tumblr-Beitragseinstellungen"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re-)Authentifizierung deiner tumblr Seite"; -$a->strings["Enable Tumblr Post Plugin"] = "Tumblr-Post-Plugin aktivieren"; +$a->strings["Enable Tumblr Post Addon"] = "Tumblr-Post-Addon aktivieren"; $a->strings["Post to Tumblr by default"] = "Standardmäßig bei Tumblr veröffentlichen"; $a->strings["Post to page:"] = "Auf tumblr veröffentlichen"; $a->strings["You are not authenticated to tumblr"] = "Du bist gegenüber tumblr nicht authentifiziert"; diff --git a/tumblr/lang/eo/strings.php b/tumblr/lang/eo/strings.php index 375ea292..12caadbf 100644 --- a/tumblr/lang/eo/strings.php +++ b/tumblr/lang/eo/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Malpermesita."; $a->strings["Post to Tumblr"] = "Afiŝi al Tumblr"; $a->strings["Tumblr Post Settings"] = "Agordoj pri afiŝoj ĉe Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Ŝalti la kromprogramon por Tumblr afiŝoj"; +$a->strings["Enable Tumblr Post Addon"] = "Ŝalti la kromprogramon por Tumblr afiŝoj"; $a->strings["Post to Tumblr by default"] = "Defaŭlte afiŝi ĉe Tumblr"; $a->strings["Submit"] = "Sendi"; diff --git a/tumblr/lang/es/messages.po b/tumblr/lang/es/messages.po index 2f2eb431..5993bd53 100644 --- a/tumblr/lang/es/messages.po +++ b/tumblr/lang/es/messages.po @@ -44,8 +44,8 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re-)autenticar su página de tumblr" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" -msgstr "Habilite el plugin Tumblr Post" +msgid "Enable Tumblr Post Addon" +msgstr "Habilite el addon Tumblr Post" #: tumblr.php:197 msgid "Post to Tumblr by default" diff --git a/tumblr/lang/es/strings.php b/tumblr/lang/es/strings.php index 3a6e5ce9..12d3d2d2 100644 --- a/tumblr/lang/es/strings.php +++ b/tumblr/lang/es/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "Vuelva a la página del conector" $a->strings["Post to Tumblr"] = "Publicar en Tumblr"; $a->strings["Tumblr Post Settings"] = "Ajustes de publicación de Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re-)autenticar su página de tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Habilite el plugin Tumblr Post"; +$a->strings["Enable Tumblr Post Addon"] = "Habilite el addon Tumblr Post"; $a->strings["Post to Tumblr by default"] = "Publique en Tumblr por defecto"; $a->strings["Post to page:"] = "Publicar en página:"; $a->strings["You are not authenticated to tumblr"] = "No está autenticado en tumblr"; diff --git a/tumblr/lang/fr/strings.php b/tumblr/lang/fr/strings.php index e23f85f7..c4d50431 100644 --- a/tumblr/lang/fr/strings.php +++ b/tumblr/lang/fr/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Permission refusée."; $a->strings["Post to Tumblr"] = "Publier sur Tumblr"; $a->strings["Tumblr Post Settings"] = "Réglages de Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Activer l'extension Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Activer l'extension Tumblr"; $a->strings["Post to Tumblr by default"] = "Publier sur Tumblr par défaut"; $a->strings["Submit"] = "Envoyer"; diff --git a/tumblr/lang/is/strings.php b/tumblr/lang/is/strings.php index cdd3d836..a477e8a6 100644 --- a/tumblr/lang/is/strings.php +++ b/tumblr/lang/is/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Heimild ekki veitt."; $a->strings["Post to Tumblr"] = "Senda fæslu til Tumblr"; $a->strings["Tumblr Post Settings"] = "Tumblr færslu stillingar"; -$a->strings["Enable Tumblr Post Plugin"] = "Leyfa Tumblr færslu viðbót"; +$a->strings["Enable Tumblr Post Addon"] = "Leyfa Tumblr færslu viðbót"; $a->strings["Post to Tumblr by default"] = "Senda færslu á Tumblr sjálfvirkt"; $a->strings["Submit"] = "Senda inn"; diff --git a/tumblr/lang/it/messages.po b/tumblr/lang/it/messages.po index 11d5752a..fbd17655 100644 --- a/tumblr/lang/it/messages.po +++ b/tumblr/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:28+0000\n" +"PO-Revision-Date: 2018-03-19 13:25+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -44,8 +44,8 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Ri)Autenticati con la tua pagina Tumblr" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" -msgstr "Abilita Plugin Tumblr" +msgid "Enable Tumblr Post Addon" +msgstr "Abilita componente aggiuntivo di invio a Tumblr" #: tumblr.php:197 msgid "Post to Tumblr by default" diff --git a/tumblr/lang/it/strings.php b/tumblr/lang/it/strings.php index 2c49b0f1..3cf0c951 100644 --- a/tumblr/lang/it/strings.php +++ b/tumblr/lang/it/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "ritorna alla pagina del connettor $a->strings["Post to Tumblr"] = "Invia a Tumblr"; $a->strings["Tumblr Post Settings"] = "Impostazioni di invio a Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Ri)Autenticati con la tua pagina Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Abilita Plugin Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Abilita componente aggiuntivo di invio a Tumblr"; $a->strings["Post to Tumblr by default"] = "Invia sempre a Tumblr"; $a->strings["Post to page:"] = "Invia alla pagina:"; $a->strings["You are not authenticated to tumblr"] = "Non sei autenticato su Tumblr"; diff --git a/tumblr/lang/nb-no/strings.php b/tumblr/lang/nb-no/strings.php index 73312854..024c5517 100644 --- a/tumblr/lang/nb-no/strings.php +++ b/tumblr/lang/nb-no/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Ingen tilgang."; $a->strings["Post to Tumblr"] = ""; $a->strings["Tumblr Post Settings"] = ""; -$a->strings["Enable Tumblr Post Plugin"] = ""; +$a->strings["Enable Tumblr Post Addon"] = ""; $a->strings["Post to Tumblr by default"] = ""; $a->strings["Submit"] = "Lagre"; diff --git a/tumblr/lang/pl/strings.php b/tumblr/lang/pl/strings.php index 819c7c20..b01dddb6 100644 --- a/tumblr/lang/pl/strings.php +++ b/tumblr/lang/pl/strings.php @@ -6,7 +6,7 @@ $a->strings["return to the connector page"] = ""; $a->strings["Post to Tumblr"] = "Opublikuj na Tumblrze"; $a->strings["Tumblr Post Settings"] = "Ustawienia postu Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = ""; -$a->strings["Enable Tumblr Post Plugin"] = "Zezwól na wtyczkę postu Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Zezwól na wtyczkę postu Tumblr"; $a->strings["Post to Tumblr by default"] = "Post do Tumblr przez standard"; $a->strings["Post to page:"] = "Napisz na stronę:"; $a->strings["You are not authenticated to tumblr"] = ""; diff --git a/tumblr/lang/pt-br/messages.po b/tumblr/lang/pt-br/messages.po index 6c80433e..a0de33ad 100644 --- a/tumblr/lang/pt-br/messages.po +++ b/tumblr/lang/pt-br/messages.po @@ -44,7 +44,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re)autenticar sua página no Tumblr" #: tumblr.php:192 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "Habilitar plug-in para publicar no Tumblr" #: tumblr.php:197 diff --git a/tumblr/lang/pt-br/strings.php b/tumblr/lang/pt-br/strings.php index e800cd71..f77c85f2 100644 --- a/tumblr/lang/pt-br/strings.php +++ b/tumblr/lang/pt-br/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "voltar à página de conectores"; $a->strings["Post to Tumblr"] = "Publicar no Tumblr"; $a->strings["Tumblr Post Settings"] = "Configurações de publicação no Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re)autenticar sua página no Tumblr"; -$a->strings["Enable Tumblr Post Plugin"] = "Habilitar plug-in para publicar no Tumblr"; +$a->strings["Enable Tumblr Post Addon"] = "Habilitar plug-in para publicar no Tumblr"; $a->strings["Post to Tumblr by default"] = "Publicar no Tumblr por padrão"; $a->strings["Post to page:"] = "Publicar na página:"; $a->strings["You are not authenticated to tumblr"] = "Você não se autenticou no Tumblr"; diff --git a/tumblr/lang/ro/messages.po b/tumblr/lang/ro/messages.po index 46748edd..4f3fba64 100644 --- a/tumblr/lang/ro/messages.po +++ b/tumblr/lang/ro/messages.po @@ -43,7 +43,7 @@ msgid "(Re-)Authenticate your tumblr page" msgstr "(Re- )Autentificare pagină tumblr " #: tumblr.php:198 -msgid "Enable Tumblr Post Plugin" +msgid "Enable Tumblr Post Addon" msgstr "Activare Modul Postare pe Tumblr " #: tumblr.php:203 diff --git a/tumblr/lang/ro/strings.php b/tumblr/lang/ro/strings.php index 7262ca4c..60f96432 100644 --- a/tumblr/lang/ro/strings.php +++ b/tumblr/lang/ro/strings.php @@ -11,7 +11,7 @@ $a->strings["return to the connector page"] = "revenire la pagina de conectare"; $a->strings["Post to Tumblr"] = "Postați pe Tumblr"; $a->strings["Tumblr Export"] = "Export Tumblr"; $a->strings["(Re-)Authenticate your tumblr page"] = "(Re- )Autentificare pagină tumblr "; -$a->strings["Enable Tumblr Post Plugin"] = "Activare Modul Postare pe Tumblr "; +$a->strings["Enable Tumblr Post Addon"] = "Activare Modul Postare pe Tumblr "; $a->strings["Post to Tumblr by default"] = "Postați implicit pe Tumblr"; $a->strings["Post to page:"] = "Postare pe pagina:"; $a->strings["You are not authenticated to tumblr"] = "Nu sunteți autentificat pe tumblr."; diff --git a/tumblr/lang/ru/strings.php b/tumblr/lang/ru/strings.php index 21d77245..cccb32c3 100644 --- a/tumblr/lang/ru/strings.php +++ b/tumblr/lang/ru/strings.php @@ -3,6 +3,6 @@ $a->strings["Permission denied."] = "Нет разрешения."; $a->strings["Post to Tumblr"] = "Написать в Tumblr"; $a->strings["Tumblr Post Settings"] = "Tumblr Настройки сообщения"; -$a->strings["Enable Tumblr Post Plugin"] = "Включить Tumblr плагин сообщений"; +$a->strings["Enable Tumblr Post Addon"] = "Включить Tumblr плагин сообщений"; $a->strings["Post to Tumblr by default"] = "Сообщение Tumblr по умолчанию"; $a->strings["Submit"] = "Подтвердить"; diff --git a/tumblr/lang/zh-cn/strings.php b/tumblr/lang/zh-cn/strings.php index 0956e13e..da62cdba 100644 --- a/tumblr/lang/zh-cn/strings.php +++ b/tumblr/lang/zh-cn/strings.php @@ -6,7 +6,7 @@ $a->strings["return to the connector page"] = "会连接器页"; $a->strings["Post to Tumblr"] = "发送到Tumblr"; $a->strings["Tumblr Post Settings"] = "Tumblr发送设置"; $a->strings["(Re-)Authenticate your tumblr page"] = "再认证您的tumblr页"; -$a->strings["Enable Tumblr Post Plugin"] = "使Tumblr发送插件能够"; +$a->strings["Enable Tumblr Post Addon"] = "使Tumblr发送插件能够"; $a->strings["Post to Tumblr by default"] = "默认地给Tumblr发送"; $a->strings["Post to page:"] = "放在页:"; $a->strings["You are not authenticated to tumblr"] = "tumblr没证明您是真的"; diff --git a/tumblr/tumblroauth/tumblroauth.php b/tumblr/library/tumblroauth.php similarity index 95% rename from tumblr/tumblroauth/tumblroauth.php rename to tumblr/library/tumblroauth.php index 3c6f13c1..914e6afa 100644 --- a/tumblr/tumblroauth/tumblroauth.php +++ b/tumblr/library/tumblroauth.php @@ -1,245 +1,242 @@ -http_status; } - function lastAPICall() { return $this->last_api_call; } - - /** - * construct TumblrOAuth object - */ - function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { - $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); - $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); - if (!empty($oauth_token) && !empty($oauth_token_secret)) { - $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); - } else { - $this->token = NULL; - } - } - - - /** - * Get a request_token from Tumblr - * - * @returns a key/value array containing oauth_token and oauth_token_secret - */ - function getRequestToken($oauth_callback = NULL) { - $parameters = array(); - if (!empty($oauth_callback)) { - $parameters['oauth_callback'] = $oauth_callback; - } - $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * Get the authorize URL - * - * @returns a string - */ - function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) { - if (is_array($token)) { - $token = $token['oauth_token']; - } - if (empty($sign_in_with_tumblr)) { - return $this->authorizeURL() . "?oauth_token={$token}"; - } else { - return $this->authenticateURL() . "?oauth_token={$token}"; - } - } - - /** - * Exchange request token and secret for an access token and - * secret, to sign API calls. - * - * @returns array("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham") - */ - function getAccessToken($oauth_verifier = FALSE) { - $parameters = array(); - if (!empty($oauth_verifier)) { - $parameters['oauth_verifier'] = $oauth_verifier; - } - $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * One time exchange of username and password for access token and secret. - * - * @returns array("oauth_token" => "the-access-token", - * "oauth_token_secret" => "the-access-secret", - * "user_id" => "9436992", - * "screen_name" => "abraham", - * "x_auth_expires" => "0") - */ - function getXAuthToken($username, $password) { - $parameters = array(); - $parameters['x_auth_username'] = $username; - $parameters['x_auth_password'] = $password; - $parameters['x_auth_mode'] = 'client_auth'; - $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); - $token = OAuthUtil::parse_parameters($request); - $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); - return $token; - } - - /** - * GET wrapper for oAuthRequest. - */ - function get($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'GET', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * POST wrapper for oAuthRequest. - */ - function post($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'POST', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * DELETE wrapper for oAuthReqeust. - */ - function delete($url, $parameters = array()) { - $response = $this->oAuthRequest($url, 'DELETE', $parameters); - if ($this->format === 'json' && $this->decode_json) { - return json_decode($response); - } - return $response; - } - - /** - * Format and sign an OAuth / API request - */ - function oAuthRequest($url, $method, $parameters) { - if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { - $url = "{$this->host}{$url}"; - } - $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); - $request->sign_request($this->sha1_method, $this->consumer, $this->token); - switch ($method) { - case 'GET': - return $this->http($request->to_url(), 'GET'); - default: - return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); - } - } - - /** - * Make an HTTP request - * - * @return API results - */ - function http($url, $method, $postfields = NULL) { - $this->http_info = array(); - $ci = curl_init(); - /* Curl settings */ - curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); - curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); - curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); - curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); - curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); - curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); - curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); - curl_setopt($ci, CURLOPT_HEADER, FALSE); - - switch ($method) { - case 'POST': - curl_setopt($ci, CURLOPT_POST, TRUE); - if (!empty($postfields)) { - curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); - } - break; - case 'DELETE': - curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); - if (!empty($postfields)) { - $url = "{$url}?{$postfields}"; - } - } - - curl_setopt($ci, CURLOPT_URL, $url); - $response = curl_exec($ci); - $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); - $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); - $this->url = $url; - curl_close ($ci); - return $response; - } - - /** - * Get the header info to store. - */ - function getHeader($ch, $header) { - $i = strpos($header, ':'); - if (!empty($i)) { - $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); - $value = trim(substr($header, $i + 2)); - $this->http_header[$key] = $value; - } - return strlen($header); - } -} +http_status; } + function lastAPICall() { return $this->last_api_call; } + + /** + * construct TumblrOAuth object + */ + function __construct($consumer_key, $consumer_secret, $oauth_token = NULL, $oauth_token_secret = NULL) { + $this->sha1_method = new OAuthSignatureMethod_HMAC_SHA1(); + $this->consumer = new OAuthConsumer($consumer_key, $consumer_secret); + if (!empty($oauth_token) && !empty($oauth_token_secret)) { + $this->token = new OAuthConsumer($oauth_token, $oauth_token_secret); + } else { + $this->token = NULL; + } + } + + + /** + * Get a request_token from Tumblr + * + * @returns a key/value array containing oauth_token and oauth_token_secret + */ + function getRequestToken($oauth_callback = NULL) { + $parameters = array(); + if (!empty($oauth_callback)) { + $parameters['oauth_callback'] = $oauth_callback; + } + $request = $this->oAuthRequest($this->requestTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * Get the authorize URL + * + * @returns a string + */ + function getAuthorizeURL($token, $sign_in_with_tumblr = TRUE) { + if (is_array($token)) { + $token = $token['oauth_token']; + } + if (empty($sign_in_with_tumblr)) { + return $this->authorizeURL() . "?oauth_token={$token}"; + } else { + return $this->authenticateURL() . "?oauth_token={$token}"; + } + } + + /** + * Exchange request token and secret for an access token and + * secret, to sign API calls. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham") + */ + function getAccessToken($oauth_verifier = FALSE) { + $parameters = array(); + if (!empty($oauth_verifier)) { + $parameters['oauth_verifier'] = $oauth_verifier; + } + $request = $this->oAuthRequest($this->accessTokenURL(), 'GET', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * One time exchange of username and password for access token and secret. + * + * @returns array("oauth_token" => "the-access-token", + * "oauth_token_secret" => "the-access-secret", + * "user_id" => "9436992", + * "screen_name" => "abraham", + * "x_auth_expires" => "0") + */ + function getXAuthToken($username, $password) { + $parameters = array(); + $parameters['x_auth_username'] = $username; + $parameters['x_auth_password'] = $password; + $parameters['x_auth_mode'] = 'client_auth'; + $request = $this->oAuthRequest($this->accessTokenURL(), 'POST', $parameters); + $token = OAuthUtil::parse_parameters($request); + $this->token = new OAuthConsumer($token['oauth_token'], $token['oauth_token_secret']); + return $token; + } + + /** + * GET wrapper for oAuthRequest. + */ + function get($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'GET', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * POST wrapper for oAuthRequest. + */ + function post($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'POST', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * DELETE wrapper for oAuthReqeust. + */ + function delete($url, $parameters = array()) { + $response = $this->oAuthRequest($url, 'DELETE', $parameters); + if ($this->format === 'json' && $this->decode_json) { + return json_decode($response); + } + return $response; + } + + /** + * Format and sign an OAuth / API request + */ + function oAuthRequest($url, $method, $parameters) { + if (strrpos($url, 'https://') !== 0 && strrpos($url, 'http://') !== 0) { + $url = "{$this->host}{$url}"; + } + $request = OAuthRequest::from_consumer_and_token($this->consumer, $this->token, $method, $url, $parameters); + $request->sign_request($this->sha1_method, $this->consumer, $this->token); + switch ($method) { + case 'GET': + return $this->http($request->to_url(), 'GET'); + default: + return $this->http($request->get_normalized_http_url(), $method, $request->to_postdata()); + } + } + + /** + * Make an HTTP request + * + * @return API results + */ + function http($url, $method, $postfields = NULL) { + $this->http_info = array(); + $ci = curl_init(); + /* Curl settings */ + curl_setopt($ci, CURLOPT_USERAGENT, $this->useragent); + curl_setopt($ci, CURLOPT_CONNECTTIMEOUT, $this->connecttimeout); + curl_setopt($ci, CURLOPT_TIMEOUT, $this->timeout); + curl_setopt($ci, CURLOPT_RETURNTRANSFER, TRUE); + curl_setopt($ci, CURLOPT_HTTPHEADER, array('Expect:')); + curl_setopt($ci, CURLOPT_SSL_VERIFYPEER, $this->ssl_verifypeer); + curl_setopt($ci, CURLOPT_HEADERFUNCTION, array($this, 'getHeader')); + curl_setopt($ci, CURLOPT_HEADER, FALSE); + + switch ($method) { + case 'POST': + curl_setopt($ci, CURLOPT_POST, TRUE); + if (!empty($postfields)) { + curl_setopt($ci, CURLOPT_POSTFIELDS, $postfields); + } + break; + case 'DELETE': + curl_setopt($ci, CURLOPT_CUSTOMREQUEST, 'DELETE'); + if (!empty($postfields)) { + $url = "{$url}?{$postfields}"; + } + } + + curl_setopt($ci, CURLOPT_URL, $url); + $response = curl_exec($ci); + $this->http_code = curl_getinfo($ci, CURLINFO_HTTP_CODE); + $this->http_info = array_merge($this->http_info, curl_getinfo($ci)); + $this->url = $url; + curl_close ($ci); + return $response; + } + + /** + * Get the header info to store. + */ + function getHeader($ch, $header) { + $i = strpos($header, ':'); + if (!empty($i)) { + $key = str_replace('-', '_', strtolower(substr($header, 0, $i))); + $value = trim(substr($header, $i + 2)); + $this->http_header[$key] = $value; + } + return strlen($header); + } +} diff --git a/tumblr/tumblr.php b/tumblr/tumblr.php index 50530401..e038b843 100644 --- a/tumblr/tumblr.php +++ b/tumblr/tumblr.php @@ -1,5 +1,4 @@ */ -require_once('library/OAuth1.php'); -require_once('addon/tumblr/tumblroauth/tumblroauth.php'); +require_once __DIR__ . DIRECTORY_SEPARATOR . 'library' . DIRECTORY_SEPARATOR . 'tumblroauth.php'; + +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; function tumblr_install() { - register_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); - register_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); - register_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); - register_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); - register_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); + Addon::registerHook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); + Addon::registerHook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); + Addon::registerHook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); + Addon::registerHook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); + Addon::registerHook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); } function tumblr_uninstall() { - unregister_hook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); - unregister_hook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); - unregister_hook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); - unregister_hook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); - unregister_hook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); + Addon::unregisterHook('post_local', 'addon/tumblr/tumblr.php', 'tumblr_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/tumblr/tumblr.php', 'tumblr_send'); + Addon::unregisterHook('jot_networks', 'addon/tumblr/tumblr.php', 'tumblr_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/tumblr/tumblr.php', 'tumblr_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/tumblr/tumblr.php', 'tumblr_settings_post'); } function tumblr_module() {} @@ -32,7 +36,7 @@ function tumblr_module() {} function tumblr_content(&$a) { if(! local_user()) { - notice( t('Permission denied.') . EOL); + notice(L10n::t('Permission denied.') . EOL); return ''; } @@ -54,23 +58,23 @@ function tumblr_content(&$a) { return $o; } -function tumblr_plugin_admin(&$a, &$o){ +function tumblr_addon_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/tumblr/" ); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), // name, label, value, help, [extra values] - '$consumer_key' => array('consumer_key', t('Consumer Key'), get_config('tumblr', 'consumer_key' ), ''), - '$consumer_secret' => array('consumer_secret', t('Consumer Secret'), get_config('tumblr', 'consumer_secret' ), ''), - )); + '$consumer_key' => ['consumer_key', L10n::t('Consumer Key'), Config::get('tumblr', 'consumer_key' ), ''], + '$consumer_secret' => ['consumer_secret', L10n::t('Consumer Secret'), Config::get('tumblr', 'consumer_secret' ), ''], + ]); } -function tumblr_plugin_admin_post(&$a){ +function tumblr_addon_admin_post(&$a){ $consumer_key = ((x($_POST,'consumer_key')) ? notags(trim($_POST['consumer_key'])) : ''); $consumer_secret = ((x($_POST,'consumer_secret')) ? notags(trim($_POST['consumer_secret'])): ''); - set_config('tumblr','consumer_key',$consumer_key); - set_config('tumblr','consumer_secret',$consumer_secret); - info( t('Settings updated.'). EOL ); + Config::set('tumblr','consumer_key',$consumer_key); + Config::set('tumblr','consumer_secret',$consumer_secret); + info(L10n::t('Settings updated.'). EOL); } function tumblr_connect($a) { @@ -161,8 +165,8 @@ function tumblr_callback($a) { set_pconfig(local_user(), "tumblr", "oauth_token", $access_token['oauth_token']); set_pconfig(local_user(), "tumblr", "oauth_token_secret", $access_token['oauth_token_secret']); - $o = t("You are now authenticated to tumblr."); - $o .= '
'.t("return to the connector page").''; + $o = L10n::t("You are now authenticated to tumblr."); + $o .= '
'.L10n::t("return to the connector page").''; return($o); } @@ -175,7 +179,7 @@ function tumblr_jot_nets(&$a,&$b) { $tmbl_defpost = get_pconfig(local_user(),'tumblr','post_by_default'); $selected = ((intval($tmbl_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to Tumblr') . '
'; + . L10n::t('Post to Tumblr') . ''; } } @@ -202,24 +206,24 @@ function tumblr_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

'. t('Tumblr Export').'

'; + $s .= '

'. L10n::t('Tumblr Export').'

'; $s .= '
'; $s .= '
'; /* provide a submit button */ - $s .= '
'; + $s .= '
'; } @@ -328,10 +332,7 @@ function tumblr_send(&$a,&$b) { $tmbl_blog = 'blog/'.$page.'/post'; if($oauth_token && $oauth_token_secret && $tmbl_blog) { - - require_once('include/bbcode.php'); - - $tag_arr = array(); + $tag_arr = []; $tags = ''; $x = preg_match_all('/\#\[(.*?)\](.*?)\[/',$b['tag'],$matches,PREG_SET_ORDER); @@ -344,9 +345,8 @@ function tumblr_send(&$a,&$b) { $tags = implode(',',$tag_arr); $title = trim($b['title']); - require_once('include/plaintext.php'); - $siteinfo = get_attached_data($b["body"]); + $siteinfo = BBCode::getAttachedData($b["body"]); $params = array( 'state' => 'published', @@ -363,12 +363,12 @@ function tumblr_send(&$a,&$b) { if (isset($siteinfo["text"])) $body = $siteinfo["text"]; else - $body = bb_remove_share_information($b["body"]); + $body = BBCode::removeShareInformation($b["body"]); switch ($siteinfo["type"]) { case "photo": $params['type'] = "photo"; - $params['caption'] = bbcode($body, false, false, 4); + $params['caption'] = BBCode::convert($body, false, 4); if (isset($siteinfo["url"])) $params['link'] = $siteinfo["url"]; @@ -379,22 +379,22 @@ function tumblr_send(&$a,&$b) { $params['type'] = "link"; $params['title'] = $title; $params['url'] = $siteinfo["url"]; - $params['description'] = bbcode($body, false, false, 4); + $params['description'] = BBCode::convert($body, false, 4); break; case "audio": $params['type'] = "audio"; $params['external_url'] = $siteinfo["url"]; - $params['caption'] = bbcode($body, false, false, 4); + $params['caption'] = BBCode::convert($body, false, 4); break; case "video": $params['type'] = "video"; $params['embed'] = $siteinfo["url"]; - $params['caption'] = bbcode($body, false, false, 4); + $params['caption'] = BBCode::convert($body, false, 4); break; default: $params['type'] = "text"; $params['title'] = $title; - $params['body'] = bbcode($b['body'], false, false, 4); + $params['body'] = BBCode::convert($b['body'], false, 4); break; } @@ -403,7 +403,7 @@ function tumblr_send(&$a,&$b) { "

".$params['caption']."

"; if (trim($params['caption']) == "") - $params['caption'] = bbcode("[quote]".$siteinfo["description"]."[/quote]", false, false, 4); + $params['caption'] = BBCode::convert("[quote]" . $siteinfo["description"] . "[/quote]", false, 4); $consumer_key = get_config('tumblr','consumer_key'); $consumer_secret = get_config('tumblr','consumer_secret'); diff --git a/tumblr/tumblroauth/OAuth.php b/tumblr/tumblroauth/OAuth.php deleted file mode 100644 index 982aaa5d..00000000 --- a/tumblr/tumblroauth/OAuth.php +++ /dev/null @@ -1,874 +0,0 @@ -key = $key; - $this->secret = $secret; - $this->callback_url = $callback_url; - } - - function __toString() { - return "OAuthConsumer[key=$this->key,secret=$this->secret]"; - } -} - -class OAuthToken { - // access tokens and request tokens - public $key; - public $secret; - - /** - * key = the token - * secret = the token secret - */ - function __construct($key, $secret) { - $this->key = $key; - $this->secret = $secret; - } - - /** - * generates the basic string serialization of a token that a server - * would respond to request_token and access_token calls with - */ - function to_string() { - return "oauth_token=" . - OAuthUtil::urlencode_rfc3986($this->key) . - "&oauth_token_secret=" . - OAuthUtil::urlencode_rfc3986($this->secret); - } - - function __toString() { - return $this->to_string(); - } -} - -/** - * A class for implementing a Signature Method - * See section 9 ("Signing Requests") in the spec - */ -abstract class OAuthSignatureMethod { - /** - * Needs to return the name of the Signature Method (ie HMAC-SHA1) - * @return string - */ - abstract public function get_name(); - - /** - * Build up the signature - * NOTE: The output of this function MUST NOT be urlencoded. - * the encoding is handled in OAuthRequest when the final - * request is serialized - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @return string - */ - abstract public function build_signature($request, $consumer, $token); - - /** - * Verifies that a given signature is correct - * @param OAuthRequest $request - * @param OAuthConsumer $consumer - * @param OAuthToken $token - * @param string $signature - * @return bool - */ - public function check_signature($request, $consumer, $token, $signature) { - $built = $this->build_signature($request, $consumer, $token); - return $built == $signature; - } -} - -/** - * The HMAC-SHA1 signature method uses the HMAC-SHA1 signature algorithm as defined in [RFC2104] - * where the Signature Base String is the text and the key is the concatenated values (each first - * encoded per Parameter Encoding) of the Consumer Secret and Token Secret, separated by an '&' - * character (ASCII code 38) even if empty. - * - Chapter 9.2 ("HMAC-SHA1") - */ -class OAuthSignatureMethod_HMAC_SHA1 extends OAuthSignatureMethod { - function get_name() { - return "HMAC-SHA1"; - } - - public function build_signature($request, $consumer, $token) { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - $key_parts = array( - $consumer->secret, - ($token) ? $token->secret : "" - ); - - $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - - return base64_encode(hash_hmac('sha1', $base_string, $key, true)); - } -} - -/** - * The PLAINTEXT method does not provide any security protection and SHOULD only be used - * over a secure channel such as HTTPS. It does not use the Signature Base String. - * - Chapter 9.4 ("PLAINTEXT") - */ -class OAuthSignatureMethod_PLAINTEXT extends OAuthSignatureMethod { - public function get_name() { - return "PLAINTEXT"; - } - - /** - * oauth_signature is set to the concatenated encoded values of the Consumer Secret and - * Token Secret, separated by a '&' character (ASCII code 38), even if either secret is - * empty. The result MUST be encoded again. - * - Chapter 9.4.1 ("Generating Signatures") - * - * Please note that the second encoding MUST NOT happen in the SignatureMethod, as - * OAuthRequest handles this! - */ - public function build_signature($request, $consumer, $token) { - $key_parts = array( - $consumer->secret, - ($token) ? $token->secret : "" - ); - - $key_parts = OAuthUtil::urlencode_rfc3986($key_parts); - $key = implode('&', $key_parts); - $request->base_string = $key; - - return $key; - } -} - -/** - * The RSA-SHA1 signature method uses the RSASSA-PKCS1-v1_5 signature algorithm as defined in - * [RFC3447] section 8.2 (more simply known as PKCS#1), using SHA-1 as the hash function for - * EMSA-PKCS1-v1_5. It is assumed that the Consumer has provided its RSA public key in a - * verified way to the Service Provider, in a manner which is beyond the scope of this - * specification. - * - Chapter 9.3 ("RSA-SHA1") - */ -abstract class OAuthSignatureMethod_RSA_SHA1 extends OAuthSignatureMethod { - public function get_name() { - return "RSA-SHA1"; - } - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // (2) fetch via http using a url provided by the requester - // (3) some sort of specific discovery code based on request - // - // Either way should return a string representation of the certificate - protected abstract function fetch_public_cert(&$request); - - // Up to the SP to implement this lookup of keys. Possible ideas are: - // (1) do a lookup in a table of trusted certs keyed off of consumer - // - // Either way should return a string representation of the certificate - protected abstract function fetch_private_cert(&$request); - - public function build_signature($request, $consumer, $token) { - $base_string = $request->get_signature_base_string(); - $request->base_string = $base_string; - - // Fetch the private key cert based on the request - $cert = $this->fetch_private_cert($request); - - // Pull the private key ID from the certificate - $privatekeyid = openssl_get_privatekey($cert); - - // Sign using the key - $ok = openssl_sign($base_string, $signature, $privatekeyid); - - // Release the key resource - openssl_free_key($privatekeyid); - - return base64_encode($signature); - } - - public function check_signature($request, $consumer, $token, $signature) { - $decoded_sig = base64_decode($signature); - - $base_string = $request->get_signature_base_string(); - - // Fetch the public key cert based on the request - $cert = $this->fetch_public_cert($request); - - // Pull the public key ID from the certificate - $publickeyid = openssl_get_publickey($cert); - - // Check the computed signature against the one passed in the query - $ok = openssl_verify($base_string, $decoded_sig, $publickeyid); - - // Release the key resource - openssl_free_key($publickeyid); - - return $ok == 1; - } -} - -class OAuthRequest { - private $parameters; - private $http_method; - private $http_url; - // for debug purposes - public $base_string; - public static $version = '1.0'; - public static $POST_INPUT = 'php://input'; - - function __construct($http_method, $http_url, $parameters=NULL) { - @$parameters or $parameters = array(); - $parameters = array_merge( OAuthUtil::parse_parameters(parse_url($http_url, PHP_URL_QUERY)), $parameters); - $this->parameters = $parameters; - $this->http_method = $http_method; - $this->http_url = $http_url; - } - - - /** - * attempt to build up a request from what was passed to the server - */ - public static function from_request($http_method=NULL, $http_url=NULL, $parameters=NULL) { - $scheme = (!isset($_SERVER['HTTPS']) || $_SERVER['HTTPS'] != "on") - ? 'http' - : 'https'; - @$http_url or $http_url = $scheme . - '://' . $_SERVER['HTTP_HOST'] . - ':' . - $_SERVER['SERVER_PORT'] . - $_SERVER['REQUEST_URI']; - @$http_method or $http_method = $_SERVER['REQUEST_METHOD']; - - // We weren't handed any parameters, so let's find the ones relevant to - // this request. - // If you run XML-RPC or similar you should use this to provide your own - // parsed parameter-list - if (!$parameters) { - // Find request headers - $request_headers = OAuthUtil::get_headers(); - - // Parse the query-string to find GET parameters - $parameters = OAuthUtil::parse_parameters($_SERVER['QUERY_STRING']); - - // It's a POST request of the proper content-type, so parse POST - // parameters and add those overriding any duplicates from GET - if ($http_method == "POST" - && @strstr($request_headers["Content-Type"], - "application/x-www-form-urlencoded") - ) { - $post_data = OAuthUtil::parse_parameters( - file_get_contents(self::$POST_INPUT) - ); - $parameters = array_merge($parameters, $post_data); - } - - // We have a Authorization-header with OAuth data. Parse the header - // and add those overriding any duplicates from GET or POST - if (@substr($request_headers['Authorization'], 0, 6) == "OAuth ") { - $header_parameters = OAuthUtil::split_header( - $request_headers['Authorization'] - ); - $parameters = array_merge($parameters, $header_parameters); - } - - } - - return new OAuthRequest($http_method, $http_url, $parameters); - } - - /** - * pretty much a helper function to set up the request - */ - public static function from_consumer_and_token($consumer, $token, $http_method, $http_url, $parameters=NULL) { - @$parameters or $parameters = array(); - $defaults = array("oauth_version" => OAuthRequest::$version, - "oauth_nonce" => OAuthRequest::generate_nonce(), - "oauth_timestamp" => OAuthRequest::generate_timestamp(), - "oauth_consumer_key" => $consumer->key); - if ($token) - $defaults['oauth_token'] = $token->key; - - $parameters = array_merge($defaults, $parameters); - - return new OAuthRequest($http_method, $http_url, $parameters); - } - - public function set_parameter($name, $value, $allow_duplicates = true) { - if ($allow_duplicates && isset($this->parameters[$name])) { - // We have already added parameter(s) with this name, so add to the list - if (is_scalar($this->parameters[$name])) { - // This is the first duplicate, so transform scalar (string) - // into an array so we can add the duplicates - $this->parameters[$name] = array($this->parameters[$name]); - } - - $this->parameters[$name][] = $value; - } else { - $this->parameters[$name] = $value; - } - } - - public function get_parameter($name) { - return isset($this->parameters[$name]) ? $this->parameters[$name] : null; - } - - public function get_parameters() { - return $this->parameters; - } - - public function unset_parameter($name) { - unset($this->parameters[$name]); - } - - /** - * The request parameters, sorted and concatenated into a normalized string. - * @return string - */ - public function get_signable_parameters() { - // Grab all parameters - $params = $this->parameters; - - // Remove oauth_signature if present - // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") - if (isset($params['oauth_signature'])) { - unset($params['oauth_signature']); - } - - return OAuthUtil::build_http_query($params); - } - - /** - * Returns the base string of this request - * - * The base string defined as the method, the url - * and the parameters (normalized), each urlencoded - * and the concated with &. - */ - public function get_signature_base_string() { - $parts = array( - $this->get_normalized_http_method(), - $this->get_normalized_http_url(), - $this->get_signable_parameters() - ); - - $parts = OAuthUtil::urlencode_rfc3986($parts); - - return implode('&', $parts); - } - - /** - * just uppercases the http method - */ - public function get_normalized_http_method() { - return strtoupper($this->http_method); - } - - /** - * parses the url and rebuilds it to be - * scheme://host/path - */ - public function get_normalized_http_url() { - $parts = parse_url($this->http_url); - - $port = @$parts['port']; - $scheme = $parts['scheme']; - $host = $parts['host']; - $path = @$parts['path']; - - $port or $port = ($scheme == 'https') ? '443' : '80'; - - if (($scheme == 'https' && $port != '443') - || ($scheme == 'http' && $port != '80')) { - $host = "$host:$port"; - } - return "$scheme://$host$path"; - } - - /** - * builds a url usable for a GET request - */ - public function to_url() { - $post_data = $this->to_postdata(); - $out = $this->get_normalized_http_url(); - if ($post_data) { - $out .= '?'.$post_data; - } - return $out; - } - - /** - * builds the data one would send in a POST request - */ - public function to_postdata() { - return OAuthUtil::build_http_query($this->parameters); - } - - /** - * builds the Authorization: header - */ - public function to_header($realm=null) { - $first = true; - if($realm) { - $out = 'Authorization: OAuth realm="' . OAuthUtil::urlencode_rfc3986($realm) . '"'; - $first = false; - } else - $out = 'Authorization: OAuth'; - - $total = array(); - foreach ($this->parameters as $k => $v) { - if (substr($k, 0, 5) != "oauth") continue; - if (is_array($v)) { - throw new OAuthException('Arrays not supported in headers'); - } - $out .= ($first) ? ' ' : ','; - $out .= OAuthUtil::urlencode_rfc3986($k) . - '="' . - OAuthUtil::urlencode_rfc3986($v) . - '"'; - $first = false; - } - return $out; - } - - public function __toString() { - return $this->to_url(); - } - - - public function sign_request($signature_method, $consumer, $token) { - $this->set_parameter( - "oauth_signature_method", - $signature_method->get_name(), - false - ); - $signature = $this->build_signature($signature_method, $consumer, $token); - $this->set_parameter("oauth_signature", $signature, false); - } - - public function build_signature($signature_method, $consumer, $token) { - $signature = $signature_method->build_signature($this, $consumer, $token); - return $signature; - } - - /** - * util function: current timestamp - */ - private static function generate_timestamp() { - return time(); - } - - /** - * util function: current nonce - */ - private static function generate_nonce() { - $mt = microtime(); - $rand = mt_rand(); - - return md5($mt . $rand); // md5s look nicer than numbers - } -} - -class OAuthServer { - protected $timestamp_threshold = 300; // in seconds, five minutes - protected $version = '1.0'; // hi blaine - protected $signature_methods = array(); - - protected $data_store; - - function __construct($data_store) { - $this->data_store = $data_store; - } - - public function add_signature_method($signature_method) { - $this->signature_methods[$signature_method->get_name()] = - $signature_method; - } - - // high level functions - - /** - * process a request_token request - * returns the request token on success - */ - public function fetch_request_token(&$request) { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // no token required for the initial token request - $token = NULL; - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $callback = $request->get_parameter('oauth_callback'); - $new_token = $this->data_store->new_request_token($consumer, $callback); - - return $new_token; - } - - /** - * process an access_token request - * returns the access token on success - */ - public function fetch_access_token(&$request) { - $this->get_version($request); - - $consumer = $this->get_consumer($request); - - // requires authorized request token - $token = $this->get_token($request, $consumer, "request"); - - $this->check_signature($request, $consumer, $token); - - // Rev A change - $verifier = $request->get_parameter('oauth_verifier'); - $new_token = $this->data_store->new_access_token($token, $consumer, $verifier); - - return $new_token; - } - - /** - * verify an api call, checks all the parameters - */ - public function verify_request(&$request) { - $this->get_version($request); - $consumer = $this->get_consumer($request); - $token = $this->get_token($request, $consumer, "access"); - $this->check_signature($request, $consumer, $token); - return array($consumer, $token); - } - - // Internals from here - /** - * version 1 - */ - private function get_version(&$request) { - $version = $request->get_parameter("oauth_version"); - if (!$version) { - // Service Providers MUST assume the protocol version to be 1.0 if this parameter is not present. - // Chapter 7.0 ("Accessing Protected Ressources") - $version = '1.0'; - } - if ($version !== $this->version) { - throw new OAuthException("OAuth version '$version' not supported"); - } - return $version; - } - - /** - * figure out the signature with some defaults - */ - private function get_signature_method(&$request) { - $signature_method = - @$request->get_parameter("oauth_signature_method"); - - if (!$signature_method) { - // According to chapter 7 ("Accessing Protected Ressources") the signature-method - // parameter is required, and we can't just fallback to PLAINTEXT - throw new OAuthException('No signature method parameter. This parameter is required'); - } - - if (!in_array($signature_method, - array_keys($this->signature_methods))) { - throw new OAuthException( - "Signature method '$signature_method' not supported " . - "try one of the following: " . - implode(", ", array_keys($this->signature_methods)) - ); - } - return $this->signature_methods[$signature_method]; - } - - /** - * try to find the consumer for the provided request's consumer key - */ - private function get_consumer(&$request) { - $consumer_key = @$request->get_parameter("oauth_consumer_key"); - if (!$consumer_key) { - throw new OAuthException("Invalid consumer key"); - } - - $consumer = $this->data_store->lookup_consumer($consumer_key); - if (!$consumer) { - throw new OAuthException("Invalid consumer"); - } - - return $consumer; - } - - /** - * try to find the token for the provided request's token key - */ - private function get_token(&$request, $consumer, $token_type="access") { - $token_field = @$request->get_parameter('oauth_token'); - $token = $this->data_store->lookup_token( - $consumer, $token_type, $token_field - ); - if (!$token) { - throw new OAuthException("Invalid $token_type token: $token_field"); - } - return $token; - } - - /** - * all-in-one function to check the signature on a request - * should guess the signature method appropriately - */ - private function check_signature(&$request, $consumer, $token) { - // this should probably be in a different method - $timestamp = @$request->get_parameter('oauth_timestamp'); - $nonce = @$request->get_parameter('oauth_nonce'); - - $this->check_timestamp($timestamp); - $this->check_nonce($consumer, $token, $nonce, $timestamp); - - $signature_method = $this->get_signature_method($request); - - $signature = $request->get_parameter('oauth_signature'); - $valid_sig = $signature_method->check_signature( - $request, - $consumer, - $token, - $signature - ); - - if (!$valid_sig) { - throw new OAuthException("Invalid signature"); - } - } - - /** - * check that the timestamp is new enough - */ - private function check_timestamp($timestamp) { - if( ! $timestamp ) - throw new OAuthException( - 'Missing timestamp parameter. The parameter is required' - ); - - // verify that timestamp is recentish - $now = time(); - if (abs($now - $timestamp) > $this->timestamp_threshold) { - throw new OAuthException( - "Expired timestamp, yours $timestamp, ours $now" - ); - } - } - - /** - * check that the nonce is not repeated - */ - private function check_nonce($consumer, $token, $nonce, $timestamp) { - if( ! $nonce ) - throw new OAuthException( - 'Missing nonce parameter. The parameter is required' - ); - - // verify that the nonce is uniqueish - $found = $this->data_store->lookup_nonce( - $consumer, - $token, - $nonce, - $timestamp - ); - if ($found) { - throw new OAuthException("Nonce already used: $nonce"); - } - } - -} - -class OAuthDataStore { - function lookup_consumer($consumer_key) { - // implement me - } - - function lookup_token($consumer, $token_type, $token) { - // implement me - } - - function lookup_nonce($consumer, $token, $nonce, $timestamp) { - // implement me - } - - function new_request_token($consumer, $callback = null) { - // return a new token attached to this consumer - } - - function new_access_token($token, $consumer, $verifier = null) { - // return a new access token attached to this consumer - // for the user associated with this token if the request token - // is authorized - // should also invalidate the request token - } - -} - -class OAuthUtil { - public static function urlencode_rfc3986($input) { - if (is_array($input)) { - return array_map(array('OAuthUtil', 'urlencode_rfc3986'), $input); - } else if (is_scalar($input)) { - return str_replace( - '+', - ' ', - str_replace('%7E', '~', rawurlencode($input)) - ); - } else { - return ''; - } -} - - - // This decode function isn't taking into consideration the above - // modifications to the encoding process. However, this method doesn't - // seem to be used anywhere so leaving it as is. - public static function urldecode_rfc3986($string) { - return urldecode($string); - } - - // Utility function for turning the Authorization: header into - // parameters, has to do some unescaping - // Can filter out any non-oauth parameters if needed (default behaviour) - public static function split_header($header, $only_allow_oauth_parameters = true) { - $pattern = '/(([-_a-z]*)=("([^"]*)"|([^,]*)),?)/'; - $offset = 0; - $params = array(); - while (preg_match($pattern, $header, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { - $match = $matches[0]; - $header_name = $matches[2][0]; - $header_content = (isset($matches[5])) ? $matches[5][0] : $matches[4][0]; - if (preg_match('/^oauth_/', $header_name) || !$only_allow_oauth_parameters) { - $params[$header_name] = OAuthUtil::urldecode_rfc3986($header_content); - } - $offset = $match[1] + strlen($match[0]); - } - - if (isset($params['realm'])) { - unset($params['realm']); - } - - return $params; - } - - // helper to try to sort out headers for people who aren't running apache - public static function get_headers() { - if (function_exists('apache_request_headers')) { - // we need this to get the actual Authorization: header - // because apache tends to tell us it doesn't exist - $headers = apache_request_headers(); - - // sanitize the output of apache_request_headers because - // we always want the keys to be Cased-Like-This and arh() - // returns the headers in the same case as they are in the - // request - $out = array(); - foreach( $headers AS $key => $value ) { - $key = str_replace( - " ", - "-", - ucwords(strtolower(str_replace("-", " ", $key))) - ); - $out[$key] = $value; - } - } else { - // otherwise we don't have apache and are just going to have to hope - // that $_SERVER actually contains what we need - $out = array(); - if( isset($_SERVER['CONTENT_TYPE']) ) - $out['Content-Type'] = $_SERVER['CONTENT_TYPE']; - if( isset($_ENV['CONTENT_TYPE']) ) - $out['Content-Type'] = $_ENV['CONTENT_TYPE']; - - foreach ($_SERVER as $key => $value) { - if (substr($key, 0, 5) == "HTTP_") { - // this is chaos, basically it is just there to capitalize the first - // letter of every word that is not an initial HTTP and strip HTTP - // code from przemek - $key = str_replace( - " ", - "-", - ucwords(strtolower(str_replace("_", " ", substr($key, 5)))) - ); - $out[$key] = $value; - } - } - } - return $out; - } - - // This function takes a input like a=b&a=c&d=e and returns the parsed - // parameters like this - // array('a' => array('b','c'), 'd' => 'e') - public static function parse_parameters( $input ) { - if (!isset($input) || !$input) return array(); - - $pairs = explode('&', $input); - - $parsed_parameters = array(); - foreach ($pairs as $pair) { - $split = explode('=', $pair, 2); - $parameter = OAuthUtil::urldecode_rfc3986($split[0]); - $value = isset($split[1]) ? OAuthUtil::urldecode_rfc3986($split[1]) : ''; - - if (isset($parsed_parameters[$parameter])) { - // We have already recieved parameter(s) with this name, so add to the list - // of parameters with this name - - if (is_scalar($parsed_parameters[$parameter])) { - // This is the first duplicate, so transform scalar (string) into an array - // so we can add the duplicates - $parsed_parameters[$parameter] = array($parsed_parameters[$parameter]); - } - - $parsed_parameters[$parameter][] = $value; - } else { - $parsed_parameters[$parameter] = $value; - } - } - return $parsed_parameters; - } - - public static function build_http_query($params) { - if (!$params) return ''; - - // Urlencode both keys and values - $keys = OAuthUtil::urlencode_rfc3986(array_keys($params)); - $values = OAuthUtil::urlencode_rfc3986(array_values($params)); - $params = array_combine($keys, $values); - - // Parameters are sorted by name, using lexicographical byte value ordering. - // Ref: Spec: 9.1.1 (1) - uksort($params, 'strcmp'); - - $pairs = array(); - foreach ($params as $parameter => $value) { - if (is_array($value)) { - // If two or more parameters share the same name, they are sorted by their value - // Ref: Spec: 9.1.1 (1) - natsort($value); - foreach ($value as $duplicate_value) { - $pairs[] = $parameter . '=' . $duplicate_value; - } - } else { - $pairs[] = $parameter . '=' . $value; - } - } - // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) - // Each name-value pair is separated by an '&' character (ASCII code 38) - return implode('&', $pairs); - } -} - -?> diff --git a/twitter/LICENSE b/twitter/LICENSE index 062cc888..496cce20 100644 --- a/twitter/LICENSE +++ b/twitter/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel +Copyright (c) 2011-2018 Tobias Diekershoff, Michael Vogel, Hypolite Petovan All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/twitter/README.md b/twitter/README.md index e3f58e8d..5a488690 100644 --- a/twitter/README.md +++ b/twitter/README.md @@ -1,39 +1,23 @@ -Twitter Plugin +Twitter Addon ============== -Main authors Tobias Diekershoff and Michael Vogel. +Main authors Tobias Diekershoff, Michael Vogel and Hypolite Petovan. -With this addon to friendica you can give your users the possibility to post their *public* messages to Twitter and -to import their timeline. The messages will be strapped their rich context and shortened to 140 characters length if -necessary. +This bi-directional connector addon allows each user to crosspost their Friendica public posts to Twitter, import their +Twitter timeline, interact with tweets from Friendica, and crosspost to Friendica their public tweets. -The addon can also mirror a users Tweets into the ~friendica wall. +## Installation -Installation ------------- +To use this addon you have to register an [application](https://apps.twitter.com/) for your Friendica instance on Twitter. +Please leave the field "Callback URL" empty. -To use this plugin you have to register an [application](https://apps.twitter.com/) for your friendica instance on Twitter. Please leave the field "Callback URL" empty. +After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/addons/twitter). -After the registration please enter the values for "Consumer Key" and "Consumer Secret" in the [administration](admin/plugins/twitter). +## License -Where to find -------------- - -In the friendica addon git repository /twitter/, this directory contains -all required PHP files (including the [Twitter OAuth library][1] by Abraham -Williams, MIT licensed and the [Slinky library][2] by Beau Lebens, BSD license), -a CSS file for styling of the user configuration and an image to _Sign in with -Twitter_. - -[1]: https://github.com/abraham/twitteroauth -[2]: http://dentedreality.com.au/projects/slinky/ - -License -======= - -The _StatusNet Connector_ is licensed under the [3-clause BSD license][3] see the -LICENSE file in the addons directory. - -[3]: http://opensource.org/licenses/BSD-3-Clause +The _Twitter Connector_ is licensed under the [3-clause BSD license][2] see the LICENSE file in the addons directory. +The _Twitter Connector_ uses the [Twitter OAuth library][2] by Abraham Williams, MIT licensed +[1]: http://opensource.org/licenses/BSD-3-Clause +[2]: https://github.com/abraham/twitteroauth diff --git a/twitter/codebird.php b/twitter/codebird.php deleted file mode 100644 index 898dc710..00000000 --- a/twitter/codebird.php +++ /dev/null @@ -1,1026 +0,0 @@ - - * @copyright 2010-2013 J.M. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -/** - * Define constants - */ -$constants = explode(' ', 'OBJECT ARRAY JSON'); -foreach ($constants as $i => $id) { - $id = 'CODEBIRD_RETURNFORMAT_' . $id; - defined($id) or define($id, $i); -} -$constants = array( - 'CURLE_SSL_CERTPROBLEM' => 58, - 'CURLE_SSL_CACERT' => 60, - 'CURLE_SSL_CACERT_BADFILE' => 77, - 'CURLE_SSL_CRL_BADFILE' => 82, - 'CURLE_SSL_ISSUER_ERROR' => 83 -); -foreach ($constants as $id => $i) { - defined($id) or define($id, $i); -} -unset($constants); -unset($i); -unset($id); - -/** - * A Twitter library in PHP. - * - * @package codebird - * @subpackage codebird-php - */ -class Codebird -{ - /** - * The current singleton instance - */ - private static $_instance = null; - - /** - * The OAuth consumer key of your registered app - */ - protected static $_oauth_consumer_key = null; - - /** - * The corresponding consumer secret - */ - protected static $_oauth_consumer_secret = null; - - /** - * The app-only bearer token. Used to authorize app-only requests - */ - protected static $_oauth_bearer_token = null; - - /** - * The API endpoint to use - */ - protected static $_endpoint = 'https://api.twitter.com/1.1/'; - - /** - * The API endpoint to use for OAuth requests - */ - protected static $_endpoint_oauth = 'https://api.twitter.com/'; - - /** - * The Request or access token. Used to sign requests - */ - protected $_oauth_token = null; - - /** - * The corresponding request or access token secret - */ - protected $_oauth_token_secret = null; - - /** - * The format of data to return from API calls - */ - protected $_return_format = CODEBIRD_RETURNFORMAT_OBJECT; - - /** - * The file formats that Twitter accepts as image uploads - */ - protected $_supported_media_files = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG); - - /** - * The current Codebird version - */ - protected $_version = '2.4.1'; - - /** - * Returns singleton class instance - * Always use this method unless you're working with multiple authenticated users at once - * - * @return Codebird The instance - */ - public static function getInstance() - { - if (self::$_instance == null) { - self::$_instance = new self; - } - return self::$_instance; - } - - /** - * Sets the OAuth consumer key and secret (App key) - * - * @param string $key OAuth consumer key - * @param string $secret OAuth consumer secret - * - * @return void - */ - public static function setConsumerKey($key, $secret) - { - self::$_oauth_consumer_key = $key; - self::$_oauth_consumer_secret = $secret; - } - - /** - * Sets the OAuth2 app-only auth bearer token - * - * @param string $token OAuth2 bearer token - * - * @return void - */ - public static function setBearerToken($token) - { - self::$_oauth_bearer_token = $token; - } - - /** - * Gets the current Codebird version - * - * @return string The version number - */ - public function getVersion() - { - return $this->_version; - } - - /** - * Sets the OAuth request or access token and secret (User key) - * - * @param string $token OAuth request or access token - * @param string $secret OAuth request or access token secret - * - * @return void - */ - public function setToken($token, $secret) - { - $this->_oauth_token = $token; - $this->_oauth_token_secret = $secret; - } - - /** - * Sets the format for API replies - * - * @param int $return_format One of these: - * CODEBIRD_RETURNFORMAT_OBJECT (default) - * CODEBIRD_RETURNFORMAT_ARRAY - * - * @return void - */ - public function setReturnFormat($return_format) - { - $this->_return_format = $return_format; - } - - /** - * Main API handler working on any requests you issue - * - * @param string $fn The member function you called - * @param array $params The parameters you sent along - * - * @return mixed The API reply encoded in the set return_format - */ - - public function __call($fn, $params) - { - // parse parameters - $apiparams = array(); - if (count($params) > 0) { - if (is_array($params[0])) { - $apiparams = $params[0]; - } else { - parse_str($params[0], $apiparams); - // remove auto-added slashes if on magic quotes steroids - if (get_magic_quotes_gpc()) { - foreach($apiparams as $key => $value) { - if (is_array($value)) { - $apiparams[$key] = array_map('stripslashes', $value); - } else { - $apiparams[$key] = stripslashes($value); - } - } - } - } - } - - // stringify null and boolean parameters - foreach ($apiparams as $key => $value) { - if (! is_scalar($value)) { - continue; - } - if (is_null($value)) { - $apiparams[$key] = 'null'; - } elseif (is_bool($value)) { - $apiparams[$key] = $value ? 'true' : 'false'; - } - } - - $app_only_auth = false; - if (count($params) > 1) { - $app_only_auth = !! $params[1]; - } - - // map function name to API method - $method = ''; - - // replace _ by / - $path = explode('_', $fn); - for ($i = 0; $i < count($path); $i++) { - if ($i > 0) { - $method .= '/'; - } - $method .= $path[$i]; - } - // undo replacement for URL parameters - $url_parameters_with_underscore = array('screen_name'); - foreach ($url_parameters_with_underscore as $param) { - $param = strtoupper($param); - $replacement_was = str_replace('_', '/', $param); - $method = str_replace($replacement_was, $param, $method); - } - - // replace AA by URL parameters - $method_template = $method; - $match = array(); - if (preg_match('/[A-Z_]{2,}/', $method, $match)) { - foreach ($match as $param) { - $param_l = strtolower($param); - $method_template = str_replace($param, ':' . $param_l, $method_template); - if (!isset($apiparams[$param_l])) { - for ($i = 0; $i < 26; $i++) { - $method_template = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method_template); - } - throw new \Exception( - 'To call the templated method "' . $method_template - . '", specify the parameter value for "' . $param_l . '".' - ); - } - $method = str_replace($param, $apiparams[$param_l], $method); - unset($apiparams[$param_l]); - } - } - - // replace A-Z by _a-z - for ($i = 0; $i < 26; $i++) { - $method = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method); - $method_template = str_replace(chr(65 + $i), '_' . chr(97 + $i), $method_template); - } - - $httpmethod = $this->_detectMethod($method_template, $apiparams); - $multipart = $this->_detectMultipart($method_template); - - return $this->_callApi( - $httpmethod, - $method, - $method_template, - $apiparams, - $multipart, - $app_only_auth - ); - } - - /** - * Uncommon API methods - */ - - /** - * Gets the OAuth authenticate URL for the current request token - * - * @return string The OAuth authenticate URL - */ - public function oauth_authenticate($force_login = NULL, $screen_name = NULL) - { - if ($this->_oauth_token == null) { - throw new \Exception('To get the authenticate URL, the OAuth token must be set.'); - } - $url = self::$_endpoint_oauth . 'oauth/authenticate?oauth_token=' . $this->_url($this->_oauth_token); - if ($force_login) { - $url .= "&force_login=1"; - } - if ($screen_name) { - $url .= "&screen_name=" . $screen_name; - } - return $url; - } - - /** - * Gets the OAuth authorize URL for the current request token - * - * @return string The OAuth authorize URL - */ - public function oauth_authorize($force_login = NULL, $screen_name = NULL) - { - if ($this->_oauth_token == null) { - throw new \Exception('To get the authorize URL, the OAuth token must be set.'); - } - $url = self::$_endpoint_oauth . 'oauth/authorize?oauth_token=' . $this->_url($this->_oauth_token); - if ($force_login) { - $url .= "&force_login=1"; - } - if ($screen_name) { - $url .= "&screen_name=" . $screen_name; - } - return $url; - } - - /** - * Gets the OAuth bearer token - * - * @return string The OAuth bearer token - */ - - public function oauth2_token() - { - if (! function_exists('curl_init')) { - throw new \Exception('To make API requests, the PHP curl extension must be available.'); - } - if (self::$_oauth_consumer_key == null) { - throw new \Exception('To obtain a bearer token, the consumer key must be set.'); - } - $ch = false; - $post_fields = array( - 'grant_type' => 'client_credentials' - ); - $url = self::$_endpoint_oauth . 'oauth2/token'; - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); - curl_setopt($ch, CURLOPT_HEADER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); - curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem'); - - curl_setopt($ch, CURLOPT_USERPWD, self::$_oauth_consumer_key . ':' . self::$_oauth_consumer_secret); - curl_setopt($ch, CURLOPT_HTTPHEADER, array( - 'Expect:' - )); - $reply = curl_exec($ch); - - // certificate validation results - $validation_result = curl_errno($ch); - if (in_array( - $validation_result, - array( - CURLE_SSL_CERTPROBLEM, - CURLE_SSL_CACERT, - CURLE_SSL_CACERT_BADFILE, - CURLE_SSL_CRL_BADFILE, - CURLE_SSL_ISSUER_ERROR - ) - ) - ) { - throw new \Exception('Error ' . $validation_result . ' while validating the Twitter API certificate.'); - } - - $httpstatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $reply = $this->_parseApiReply('oauth2/token', $reply); - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - $reply['httpstatus'] = $httpstatus; - if ($httpstatus == 200) { - self::setBearerToken($reply['access_token']); - } - break; - case CODEBIRD_RETURNFORMAT_JSON: - if ($httpstatus == 200) { - $parsed = json_decode($reply); - self::setBearerToken($parsed->access_token); - } - break; - case CODEBIRD_RETURNFORMAT_OBJECT: - $reply->httpstatus = $httpstatus; - if ($httpstatus == 200) { - self::setBearerToken($reply->access_token); - } - break; - } - return $reply; - } - - /** - * Signing helpers - */ - - /** - * URL-encodes the given data - * - * @param mixed $data - * - * @return mixed The encoded data - */ - private function _url($data) - { - if (is_array($data)) { - return array_map(array( - $this, - '_url' - ), $data); - } elseif (is_scalar($data)) { - return str_replace(array( - '+', - '!', - '*', - "'", - '(', - ')' - ), array( - ' ', - '%21', - '%2A', - '%27', - '%28', - '%29' - ), rawurlencode($data)); - } else { - return ''; - } - } - - /** - * Gets the base64-encoded SHA1 hash for the given data - * - * @param string $data The data to calculate the hash from - * - * @return string The hash - */ - private function _sha1($data) - { - if (self::$_oauth_consumer_secret == null) { - throw new \Exception('To generate a hash, the consumer secret must be set.'); - } - if (!function_exists('hash_hmac')) { - throw new \Exception('To generate a hash, the PHP hash extension must be available.'); - } - return base64_encode(hash_hmac('sha1', $data, self::$_oauth_consumer_secret . '&' - . ($this->_oauth_token_secret != null ? $this->_oauth_token_secret : ''), true)); - } - - /** - * Generates a (hopefully) unique random string - * - * @param int optional $length The length of the string to generate - * - * @return string The random string - */ - protected function _nonce($length = 8) - { - if ($length < 1) { - throw new \Exception('Invalid nonce length.'); - } - return substr(md5(microtime(true)), 0, $length); - } - - /** - * Generates an OAuth signature - * - * @param string $httpmethod Usually either 'GET' or 'POST' or 'DELETE' - * @param string $method The API method to call - * @param array optional $params The API call parameters, associative - * - * @return string Authorization HTTP header - */ - protected function _sign($httpmethod, $method, $params = array()) - { - if (self::$_oauth_consumer_key == null) { - throw new \Exception('To generate a signature, the consumer key must be set.'); - } - $sign_params = array( - 'consumer_key' => self::$_oauth_consumer_key, - 'version' => '1.0', - 'timestamp' => time(), - 'nonce' => $this->_nonce(), - 'signature_method' => 'HMAC-SHA1' - ); - $sign_base_params = array(); - foreach ($sign_params as $key => $value) { - $sign_base_params['oauth_' . $key] = $this->_url($value); - } - if ($this->_oauth_token != null) { - $sign_base_params['oauth_token'] = $this->_url($this->_oauth_token); - } - $oauth_params = $sign_base_params; - foreach ($params as $key => $value) { - $sign_base_params[$key] = $this->_url($value); - } - ksort($sign_base_params); - $sign_base_string = ''; - foreach ($sign_base_params as $key => $value) { - $sign_base_string .= $key . '=' . $value . '&'; - } - $sign_base_string = substr($sign_base_string, 0, -1); - $signature = $this->_sha1($httpmethod . '&' . $this->_url($method) . '&' . $this->_url($sign_base_string)); - - $params = array_merge($oauth_params, array( - 'oauth_signature' => $signature - )); - ksort($params); - $authorization = 'Authorization: OAuth '; - foreach ($params as $key => $value) { - $authorization .= $key . '="' . $this->_url($value) . '", '; - } - return substr($authorization, 0, -2); - } - - /** - * Detects HTTP method to use for API call - * - * @param string $method The API method to call - * @param array $params The parameters to send along - * - * @return string The HTTP method that should be used - */ - protected function _detectMethod($method, $params) - { - // multi-HTTP method endpoints - switch($method) { - case 'account/settings': - $method = count($params) > 0 ? $method . '__post' : $method; - break; - } - - $httpmethods = array(); - $httpmethods['GET'] = array( - // Timelines - 'statuses/mentions_timeline', - 'statuses/user_timeline', - 'statuses/home_timeline', - 'statuses/retweets_of_me', - - // Tweets - 'statuses/retweets/:id', - 'statuses/show/:id', - 'statuses/oembed', - - // Search - 'search/tweets', - - // Direct Messages - 'direct_messages', - 'direct_messages/sent', - 'direct_messages/show', - - // Friends & Followers - 'friendships/no_retweets/ids', - 'friends/ids', - 'followers/ids', - 'friendships/lookup', - 'friendships/incoming', - 'friendships/outgoing', - 'friendships/show', - 'friends/list', - 'followers/list', - - // Users - 'account/settings', - 'account/verify_credentials', - 'blocks/list', - 'blocks/ids', - 'users/lookup', - 'users/show', - 'users/search', - 'users/contributees', - 'users/contributors', - 'users/profile_banner', - - // Suggested Users - 'users/suggestions/:slug', - 'users/suggestions', - 'users/suggestions/:slug/members', - - // Favorites - 'favorites/list', - - // Lists - 'lists/list', - 'lists/statuses', - 'lists/memberships', - 'lists/subscribers', - 'lists/subscribers/show', - 'lists/members/show', - 'lists/members', - 'lists/show', - 'lists/subscriptions', - - // Saved searches - 'saved_searches/list', - 'saved_searches/show/:id', - - // Places & Geo - 'geo/id/:place_id', - 'geo/reverse_geocode', - 'geo/search', - 'geo/similar_places', - - // Trends - 'trends/place', - 'trends/available', - 'trends/closest', - - // OAuth - 'oauth/authenticate', - 'oauth/authorize', - - // Help - 'help/configuration', - 'help/languages', - 'help/privacy', - 'help/tos', - 'application/rate_limit_status' - ); - $httpmethods['POST'] = array( - // Tweets - 'statuses/destroy/:id', - 'statuses/update', - 'statuses/retweet/:id', - 'statuses/update_with_media', - - // Direct Messages - 'direct_messages/destroy', - 'direct_messages/new', - - // Friends & Followers - 'friendships/create', - 'friendships/destroy', - 'friendships/update', - - // Users - 'account/settings__post', - 'account/update_delivery_device', - 'account/update_profile', - 'account/update_profile_background_image', - 'account/update_profile_colors', - 'account/update_profile_image', - 'blocks/create', - 'blocks/destroy', - 'account/update_profile_banner', - 'account/remove_profile_banner', - - // Favorites - 'favorites/destroy', - 'favorites/create', - - // Lists - 'lists/members/destroy', - 'lists/subscribers/create', - 'lists/subscribers/destroy', - 'lists/members/create_all', - 'lists/members/create', - 'lists/destroy', - 'lists/update', - 'lists/create', - 'lists/members/destroy_all', - - // Saved Searches - 'saved_searches/create', - 'saved_searches/destroy/:id', - - // Places & Geo - 'geo/place', - - // Spam Reporting - 'users/report_spam', - - // OAuth - 'oauth/access_token', - 'oauth/request_token', - 'oauth2/token', - 'oauth2/invalidate_token' - ); - foreach ($httpmethods as $httpmethod => $methods) { - if (in_array($method, $methods)) { - return $httpmethod; - } - } - throw new \Exception('Can\'t find HTTP method to use for "' . $method . '".'); - } - - /** - * Detects if API call should use multipart/form-data - * - * @param string $method The API method to call - * - * @return bool Whether the method should be sent as multipart - */ - protected function _detectMultipart($method) - { - $multiparts = array( - // Tweets - 'statuses/update_with_media', - - // Users - 'account/update_profile_background_image', - 'account/update_profile_image', - 'account/update_profile_banner' - ); - return in_array($method, $multiparts); - } - - /** - * Detect filenames in upload parameters, - * build multipart request from upload params - * - * @param string $method The API method to call - * @param array $params The parameters to send along - * - * @return void - */ - protected function _buildMultipart($method, $params) - { - // well, files will only work in multipart methods - if (! $this->_detectMultipart($method)) { - return; - } - - // only check specific parameters - $possible_files = array( - // Tweets - 'statuses/update_with_media' => 'media[]', - // Accounts - 'account/update_profile_background_image' => 'image', - 'account/update_profile_image' => 'image', - 'account/update_profile_banner' => 'banner' - ); - // method might have files? - if (! in_array($method, array_keys($possible_files))) { - return; - } - - $possible_files = explode(' ', $possible_files[$method]); - - $multipart_border = '--------------------' . $this->_nonce(); - $multipart_request = ''; - - foreach ($params as $key => $value) { - // is it an array? - if (is_array($value)) { - throw new \Exception('Using URL-encoded parameters is not supported for uploading media.'); - continue; - } - $multipart_request .= - '--' . $multipart_border . "\r\n" - . 'Content-Disposition: form-data; name="' . $key . '"'; - - // check for filenames - if (in_array($key, $possible_files)) { - if (// is it a file, a readable one? - @file_exists($value) - && @is_readable($value) - - // is it a valid image? - && $data = @getimagesize($value) - ) { - if (// is it a supported image format? - in_array($data[2], $this->_supported_media_files) - ) { - // try to read the file - ob_start(); - readfile($value); - $data = ob_get_contents(); - ob_end_clean(); - if (strlen($data) == 0) { - continue; - } - $value = $data; - } - } - - /* - $multipart_request .= - "\r\nContent-Transfer-Encoding: base64"; - $value = base64_encode($value); - */ - } - - $multipart_request .= - "\r\n\r\n" . $value . "\r\n"; - } - $multipart_request .= '--' . $multipart_border . '--'; - - return $multipart_request; - } - - - /** - * Builds the complete API endpoint url - * - * @param string $method The API method to call - * @param string $method_template The API method template to call - * - * @return string The URL to send the request to - */ - protected function _getEndpoint($method, $method_template) - { - if (substr($method, 0, 5) == 'oauth') { - $url = self::$_endpoint_oauth . $method; - } else { - $url = self::$_endpoint . $method . '.json'; - } - return $url; - } - - /** - * Calls the API using cURL - * - * @param string $httpmethod The HTTP method to use for making the request - * @param string $method The API method to call - * @param string $method_template The templated API method to call - * @param array optional $params The parameters to send along - * @param bool optional $multipart Whether to use multipart/form-data - * @param bool optional $app_only_auth Whether to use app-only bearer authentication - * - * @return mixed The API reply, encoded in the set return_format - */ - - protected function _callApi($httpmethod, $method, $method_template, $params = array(), $multipart = false, $app_only_auth = false) - { - if (! function_exists('curl_init')) { - throw new \Exception('To make API requests, the PHP curl extension must be available.'); - } - $url = $this->_getEndpoint($method, $method_template); - $ch = false; - if ($httpmethod == 'GET') { - $url_with_params = $url; - if (count($params) > 0) { - $url_with_params .= '?' . http_build_query($params); - } - $authorization = $this->_sign($httpmethod, $url, $params); - $ch = curl_init($url_with_params); - } else { - if ($multipart) { - $authorization = $this->_sign($httpmethod, $url, array()); - $params = $this->_buildMultipart($method_template, $params); - } else { - $authorization = $this->_sign($httpmethod, $url, $params); - $params = http_build_query($params); - } - $ch = curl_init($url); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, $params); - } - if ($app_only_auth) { - if (self::$_oauth_consumer_key == null) { - throw new \Exception('To make an app-only auth API request, the consumer key must be set.'); - } - // automatically fetch bearer token, if necessary - if (self::$_oauth_bearer_token == null) { - $this->oauth2_token(); - } - $authorization = 'Authorization: Bearer ' . self::$_oauth_bearer_token; - } - $request_headers = array(); - if (isset($authorization)) { - $request_headers[] = $authorization; - $request_headers[] = 'Expect:'; - } - if ($multipart) { - $first_newline = strpos($params, "\r\n"); - $multipart_boundary = substr($params, 2, $first_newline - 2); - $request_headers[] = 'Content-Length: ' . strlen($params); - $request_headers[] = 'Content-Type: multipart/form-data; boundary=' - . $multipart_boundary; - } - - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0); - curl_setopt($ch, CURLOPT_HEADER, 1); - curl_setopt($ch, CURLOPT_HTTPHEADER, $request_headers); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); - curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); - curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cacert.pem'); - - $reply = curl_exec($ch); - - // certificate validation results - $validation_result = curl_errno($ch); - if (in_array( - $validation_result, - array( - CURLE_SSL_CERTPROBLEM, - CURLE_SSL_CACERT, - CURLE_SSL_CACERT_BADFILE, - CURLE_SSL_CRL_BADFILE, - CURLE_SSL_ISSUER_ERROR - ) - ) - ) { - throw new \Exception('Error ' . $validation_result . ' while validating the Twitter API certificate.'); - } - - $httpstatus = curl_getinfo($ch, CURLINFO_HTTP_CODE); - $reply = $this->_parseApiReply($method_template, $reply); - if ($this->_return_format == CODEBIRD_RETURNFORMAT_OBJECT) { - $reply->httpstatus = $httpstatus; - } elseif ($this->_return_format == CODEBIRD_RETURNFORMAT_ARRAY) { - $reply['httpstatus'] = $httpstatus; - } - return $reply; - } - - /** - * Parses the API reply to encode it in the set return_format - * - * @param string $method The method that has been called - * @param string $reply The actual reply, JSON-encoded or URL-encoded - * - * @return array|object The parsed reply - */ - protected function _parseApiReply($method, $reply) - { - // split headers and body - $headers = array(); - $reply = explode("\r\n\r\n", $reply, 4); - - // check if using proxy - if (substr($reply[0], 0, 35) === 'HTTP/1.1 200 Connection Established') { - array_shift($reply); - } elseif (count($reply) > 2) { - $headers = array_shift($reply); - $reply = array( - $headers, - implode("\r\n", $reply) - ); - } - - $headers_array = explode("\r\n", $reply[0]); - foreach ($headers_array as $header) { - $header_array = explode(': ', $header, 2); - $key = $header_array[0]; - $value = ''; - if (count($header_array) > 1) { - $value = $header_array[1]; - } - $headers[$key] = $value; - } - if (count($reply) > 1) { - $reply = $reply[1]; - } else { - $reply = ''; - } - - $need_array = $this->_return_format == CODEBIRD_RETURNFORMAT_ARRAY; - if ($reply == '[]') { - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return array(); - case CODEBIRD_RETURNFORMAT_JSON: - return '{}'; - case CODEBIRD_RETURNFORMAT_OBJECT: - return new \stdClass; - } - } - $parsed = array(); - if (! $parsed = json_decode($reply, $need_array)) { - if ($reply) { - if (stripos($reply, '<' . '?xml version="1.0" encoding="UTF-8"?' . '>') === 0) { - // we received XML... - // since this only happens for errors, - // don't perform a full decoding - preg_match('/(.*)<\/request>/', $reply, $request); - preg_match('/(.*)<\/error>/', $reply, $error); - $parsed['request'] = htmlspecialchars_decode($request[1]); - $parsed['error'] = htmlspecialchars_decode($error[1]); - } else { - // assume query format - $reply = explode('&', $reply); - foreach ($reply as $element) { - if (stristr($element, '=')) { - list($key, $value) = explode('=', $element); - $parsed[$key] = $value; - } else { - $parsed['message'] = $element; - } - } - } - } - $reply = json_encode($parsed); - } - switch ($this->_return_format) { - case CODEBIRD_RETURNFORMAT_ARRAY: - return $parsed; - case CODEBIRD_RETURNFORMAT_JSON: - return $reply; - case CODEBIRD_RETURNFORMAT_OBJECT: - return (object) $parsed; - } - return $parsed; - } -} - -?> diff --git a/twitter/composer.json b/twitter/composer.json new file mode 100644 index 00000000..efe4ffa6 --- /dev/null +++ b/twitter/composer.json @@ -0,0 +1,28 @@ +{ + "name": "friendica-addons/twitter", + "description": "Twitter Connector addon for Friendica", + "type": "friendica-addon", + "authors": [ + { + "name": "Tobias Diekershoff", + "homepage": "https://f.diekershoff.de/profile/tobias", + "role": "Developer" + }, + { + "name": "Michael Vogel", + "homepage": "https://pirati.ca/profile/heluecht", + "role": "Developer" + }, + { + "name": "Hypolite Petovan", + "email": "mrpetovan@gmail.com", + "homepage": "https://friendica.mrpetovan.com/profile/hypolite", + "role": "Developer" + } + ], + "require": { + "abraham/twitteroauth": "^0.7.4" + }, + "license": "3-clause BSD license", + "minimum-stability": "stable" +} diff --git a/twitter/composer.lock b/twitter/composer.lock new file mode 100644 index 00000000..419ff4cc --- /dev/null +++ b/twitter/composer.lock @@ -0,0 +1,72 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "content-hash": "341c2ca2f25177375c65577f7e5d7369", + "packages": [ + { + "name": "abraham/twitteroauth", + "version": "0.7.4", + "source": { + "type": "git", + "url": "https://github.com/abraham/twitteroauth.git", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpmd/phpmd": "~2.6", + "phpunit/phpunit": "~5.7", + "squizlabs/php_codesniffer": "~3.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Abraham\\TwitterOAuth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Abraham Williams", + "email": "abraham@abrah.am", + "homepage": "https://abrah.am", + "role": "Developer" + } + ], + "description": "The most popular PHP library for use with the Twitter OAuth REST API.", + "homepage": "https://twitteroauth.com", + "keywords": [ + "Twitter API", + "Twitter oAuth", + "api", + "oauth", + "rest", + "social", + "twitter" + ], + "time": "2017-06-30T22:02:01+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": [], + "platform-dev": [] +} diff --git a/twitter/lang/C/messages.po b/twitter/lang/C/messages.po index fa058ba4..f6d08a44 100644 --- a/twitter/lang/C/messages.po +++ b/twitter/lang/C/messages.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"POT-Creation-Date: 2018-02-08 07:07+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -17,104 +17,106 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: twitter.php:77 +#: twitter.php:193 msgid "Post to Twitter" msgstr "" -#: twitter.php:129 +#: twitter.php:234 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "" + +#: twitter.php:261 msgid "Twitter settings updated." msgstr "" -#: twitter.php:157 -msgid "Twitter Posting Settings" +#: twitter.php:291 twitter.php:295 +msgid "Twitter Import/Export/Mirror" msgstr "" -#: twitter.php:164 +#: twitter.php:302 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "" -#: twitter.php:183 +#: twitter.php:314 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input " "box below and submit the form. Only your public posts will " "be posted to Twitter." msgstr "" -#: twitter.php:184 +#: twitter.php:315 msgid "Log in with Twitter" msgstr "" -#: twitter.php:186 +#: twitter.php:317 msgid "Copy the PIN from Twitter here" msgstr "" -#: twitter.php:191 twitter.php:229 twitter.php:556 -msgid "Submit" +#: twitter.php:322 twitter.php:364 twitter.php:642 +msgid "Save Settings" msgstr "" -#: twitter.php:200 +#: twitter.php:334 msgid "Currently connected to: " msgstr "" -#: twitter.php:201 +#: twitter.php:335 +msgid "Disconnect" +msgstr "" + +#: twitter.php:345 +msgid "Allow posting to Twitter" +msgstr "" + +#: twitter.php:345 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for " "every posting separately in the posting options when writing the entry." msgstr "" -#: twitter.php:203 +#: twitter.php:348 msgid "" -"Note: Due your privacy settings (Hide your profile " +"Note: Due to your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " "postings relayed to Twitter will lead the visitor to a blank page informing " "the visitor that the access to your profile has been restricted." msgstr "" -#: twitter.php:206 -msgid "Allow posting to Twitter" -msgstr "" - -#: twitter.php:209 +#: twitter.php:351 msgid "Send public postings to Twitter by default" msgstr "" -#: twitter.php:213 -msgid "Mirror all posts from twitter that are no replies or retweets" +#: twitter.php:354 +msgid "Mirror all posts from twitter that are no replies" msgstr "" -#: twitter.php:217 -msgid "Shortening method that optimizes the tweet" +#: twitter.php:357 +msgid "Import the remote timeline" msgstr "" -#: twitter.php:221 -msgid "Send linked #-tags and @-names to Twitter" +#: twitter.php:360 +msgid "Automatically create contacts" msgstr "" -#: twitter.php:226 -msgid "Clear OAuth configuration" +#: twitter.php:619 +msgid "Twitter post failed. Queued for retry." msgstr "" -#: twitter.php:550 +#: twitter.php:634 msgid "Settings updated." msgstr "" -#: twitter.php:558 +#: twitter.php:644 msgid "Consumer key" msgstr "" -#: twitter.php:559 +#: twitter.php:645 msgid "Consumer secret" msgstr "" - -#: twitter.php:560 -msgid "Name of the Twitter Application" -msgstr "" - -#: twitter.php:560 -msgid "set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "" diff --git a/twitter/lang/ca/strings.php b/twitter/lang/ca/strings.php index 203c9a1f..bc53d4c8 100644 --- a/twitter/lang/ca/strings.php +++ b/twitter/lang/ca/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Publica-ho al Twitter"; $a->strings["Twitter settings updated."] = "La configuració de Twitter actualitzada."; $a->strings["Twitter Posting Settings"] = "Configuració d'Enviaments per a Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No s'ha pogut emparellar cap clau \"consumer key\" per a Twitter. Si us plau, poseu-vos en contacte amb l'administrador del lloc."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En aquesta instància Friendica el plugin Twitter va ser habilitat, però encara no ha connectat el compte al seu compte de Twitter. Per a això feu clic al botó de sota per obtenir un PIN de Twitter que ha de copiar a la casella de sota i enviar el formulari. Només els missatges públics es publicaran a Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En aquesta instància Friendica el addon Twitter va ser habilitat, però encara no ha connectat el compte al seu compte de Twitter. Per a això feu clic al botó de sota per obtenir un PIN de Twitter que ha de copiar a la casella de sota i enviar el formulari. Només els missatges públics es publicaran a Twitter."; $a->strings["Log in with Twitter"] = "Accedeixi com en Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copieu el codi PIN de Twitter aquí"; $a->strings["Submit"] = "Enviar"; diff --git a/twitter/lang/cs/messages.po b/twitter/lang/cs/messages.po index f893d731..5e35bae6 100644 --- a/twitter/lang/cs/messages.po +++ b/twitter/lang/cs/messages.po @@ -39,12 +39,12 @@ msgstr "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte #: twitter.php:264 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "Na této Friendica instanci je sice povolen Twitter plugin, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter." +msgstr "Na této Friendica instanci je sice povolen Twitter addon, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter." #: twitter.php:265 msgid "Log in with Twitter" diff --git a/twitter/lang/cs/strings.php b/twitter/lang/cs/strings.php index 8de4b130..6561b6b8 100644 --- a/twitter/lang/cs/strings.php +++ b/twitter/lang/cs/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Poslat příspěvek na Twitter"; $a->strings["Twitter settings updated."] = "Nastavení Twitteru aktualizováno."; $a->strings["Twitter Import/Export/Mirror"] = "Twitter Import/Export/Zrcadlení"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nenalezen žádný spotřebitelský páru klíčů pro Twitter. Obraťte se na administrátora webu."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Na této Friendica instanci je sice povolen Twitter plugin, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Na této Friendica instanci je sice povolen Twitter addon, ale vy jste si ještě nenastavili svůj Twitter účet. Svůj účet si můžete nastavit kliknutím na tlačítko níže k získání PINu z Vašeho Twitteru, který si zkopírujte do níže uvedeného vstupního pole a odešlete formulář. Pouze vaše veřejné příspěvky budou zaslány na Twitter."; $a->strings["Log in with Twitter"] = "Přihlásit se s Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Zkopírujte sem PIN z Twitteru"; $a->strings["Save Settings"] = "Uložit Nastavení"; diff --git a/twitter/lang/de/messages.po b/twitter/lang/de/messages.po index 5ec80d64..cb26733b 100644 --- a/twitter/lang/de/messages.po +++ b/twitter/lang/de/messages.po @@ -4,124 +4,122 @@ # # # Translators: -# bavatar , 2014 +# Tobias Diekershoff , 2014-2015 +# Tobias Diekershoff , 2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-09-06 11:55+0000\n" -"Last-Translator: bavatar \n" -"Language-Team: German (http://www.transifex.com/projects/p/friendica/language/de/)\n" +"POT-Creation-Date: 2018-02-08 07:07+0100\n" +"PO-Revision-Date: 2018-02-10 17:41+0000\n" +"Last-Translator: Tobias Diekershoff \n" +"Language-Team: German (http://www.transifex.com/Friendica/friendica/language/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Language: de\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:146 +#: twitter.php:193 msgid "Post to Twitter" -msgstr "An Twitter senden" +msgstr "Auf Twitter veröffentlichen" -#: twitter.php:203 +#: twitter.php:234 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "Du hast keine PIN übertragen. Bitte melde dich erneut bei Twitter and um eine neue PIN zu erhalten." + +#: twitter.php:261 msgid "Twitter settings updated." msgstr "Twitter Einstellungen aktualisiert." -#: twitter.php:233 twitter.php:237 +#: twitter.php:291 twitter.php:295 msgid "Twitter Import/Export/Mirror" msgstr "Twitter Import/Export/Spiegeln" -#: twitter.php:245 +#: twitter.php:302 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite." -#: twitter.php:264 +#: twitter.php:314 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "Auf diesem Friendica-Server wurde das Twitter-Plugin aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht." +msgstr "Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht." -#: twitter.php:265 +#: twitter.php:315 msgid "Log in with Twitter" msgstr "bei Twitter anmelden" -#: twitter.php:267 +#: twitter.php:317 msgid "Copy the PIN from Twitter here" msgstr "Kopiere die Twitter-PIN hier her" -#: twitter.php:272 twitter.php:311 twitter.php:569 +#: twitter.php:322 twitter.php:364 twitter.php:642 msgid "Save Settings" msgstr "Einstellungen speichern" -#: twitter.php:281 +#: twitter.php:334 msgid "Currently connected to: " msgstr "Momentan verbunden mit: " -#: twitter.php:282 +#: twitter.php:335 +msgid "Disconnect" +msgstr "Trennen" + +#: twitter.php:345 +msgid "Allow posting to Twitter" +msgstr "Veröffentlichung bei Twitter erlauben" + +#: twitter.php:345 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen." -#: twitter.php:284 +#: twitter.php:348 msgid "" -"Note: Due your privacy settings (Hide your profile " +"Note: Due to your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " "postings relayed to Twitter will lead the visitor to a blank page informing " "the visitor that the access to your profile has been restricted." msgstr "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde." -#: twitter.php:287 -msgid "Allow posting to Twitter" -msgstr "Veröffentlichung bei Twitter erlauben" - -#: twitter.php:290 +#: twitter.php:351 msgid "Send public postings to Twitter by default" msgstr "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter" -#: twitter.php:294 +#: twitter.php:354 msgid "Mirror all posts from twitter that are no replies" msgstr "Spiegle alle Beiträge von Twitter die keine Antworten oder wiederholten Nachrichten sind" -#: twitter.php:299 +#: twitter.php:357 msgid "Import the remote timeline" msgstr "Importiere die entfernte Zeitleiste" -#: twitter.php:303 +#: twitter.php:360 msgid "Automatically create contacts" msgstr "Automatisch Kontakte anlegen" -#: twitter.php:308 -msgid "Clear OAuth configuration" -msgstr "OAuth Konfiguration löschen" - -#: twitter.php:539 +#: twitter.php:619 msgid "Twitter post failed. Queued for retry." msgstr "Twitter post failed. Queued for retry." -#: twitter.php:563 +#: twitter.php:634 msgid "Settings updated." msgstr "Einstellungen aktualisiert." -#: twitter.php:571 +#: twitter.php:644 msgid "Consumer key" msgstr "Consumer Key" -#: twitter.php:572 +#: twitter.php:645 msgid "Consumer secret" msgstr "Consumer Secret" - -#: twitter.php:573 -msgid "Name of the Twitter Application" -msgstr "Name der Twitter Anwendung" - -#: twitter.php:573 -msgid "" -"set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "Setze dies um eine Spiegelung von ~friendica zu ~friendica zu vermeiden" diff --git a/twitter/lang/de/strings.php b/twitter/lang/de/strings.php index 997bf55f..e6adf09c 100644 --- a/twitter/lang/de/strings.php +++ b/twitter/lang/de/strings.php @@ -5,26 +5,25 @@ function string_plural_select_de($n){ return ($n != 1);; }} ; -$a->strings["Post to Twitter"] = "An Twitter senden"; +$a->strings["Post to Twitter"] = "Auf Twitter veröffentlichen"; +$a->strings["You submitted an empty PIN, please Sign In with Twitter again to get a new one."] = "Du hast keine PIN übertragen. Bitte melde dich erneut bei Twitter and um eine neue PIN zu erhalten."; $a->strings["Twitter settings updated."] = "Twitter Einstellungen aktualisiert."; $a->strings["Twitter Import/Export/Mirror"] = "Twitter Import/Export/Spiegeln"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Kein Consumer Schlüsselpaar für Twitter gefunden. Bitte wende dich an den Administrator der Seite."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Auf diesem Friendica-Server wurde das Twitter-Plugin aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Auf diesem Friendica-Server wurde das Twitter-Addon aktiviert, aber du hast deinen Account noch nicht mit deinem Twitter-Account verbunden. Klicke dazu auf die Schaltfläche unten. Du erhältst dann eine PIN von Twitter, die du dann in das Eingabefeld unten einfügst. Denk daran, den Senden-Knopf zu drücken! Nur öffentliche Beiträge werden bei Twitter veröffentlicht."; $a->strings["Log in with Twitter"] = "bei Twitter anmelden"; $a->strings["Copy the PIN from Twitter here"] = "Kopiere die Twitter-PIN hier her"; $a->strings["Save Settings"] = "Einstellungen speichern"; $a->strings["Currently connected to: "] = "Momentan verbunden mit: "; -$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen."; -$a->strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde."; +$a->strings["Disconnect"] = "Trennen"; $a->strings["Allow posting to Twitter"] = "Veröffentlichung bei Twitter erlauben"; +$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Wenn aktiviert können all deine öffentlichen Einträge auf dem verbundenen Twitter Konto veröffentlicht werden. Du kannst dies (hier) als Standardverhalten einstellen oder beim Schreiben eines Beitrags in den Beitragsoptionen festlegen."; +$a->strings["Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Hinweis: Aufgrund deiner Privatsphären-Einstellungen (Profil-Details vor unbekannten Betrachtern verbergen?) wird der Link, der eventuell an an deinen Twitter Account angehängt wird, um auf den original Artikel zu verweisen, den Betrachter auf eine leere Seite führen, die ihn darüber informiert, dass der Zugriff eingeschränkt wurde."; $a->strings["Send public postings to Twitter by default"] = "Veröffentliche öffentliche Beiträge standardmäßig bei Twitter"; $a->strings["Mirror all posts from twitter that are no replies"] = "Spiegle alle Beiträge von Twitter die keine Antworten oder wiederholten Nachrichten sind"; $a->strings["Import the remote timeline"] = "Importiere die entfernte Zeitleiste"; $a->strings["Automatically create contacts"] = "Automatisch Kontakte anlegen"; -$a->strings["Clear OAuth configuration"] = "OAuth Konfiguration löschen"; $a->strings["Twitter post failed. Queued for retry."] = "Twitter post failed. Queued for retry."; $a->strings["Settings updated."] = "Einstellungen aktualisiert."; $a->strings["Consumer key"] = "Consumer Key"; $a->strings["Consumer secret"] = "Consumer Secret"; -$a->strings["Name of the Twitter Application"] = "Name der Twitter Anwendung"; -$a->strings["set this to avoid mirroring postings from ~friendica back to ~friendica"] = "Setze dies um eine Spiegelung von ~friendica zu ~friendica zu vermeiden"; diff --git a/twitter/lang/eo/strings.php b/twitter/lang/eo/strings.php index cce714e7..0dbedd82 100644 --- a/twitter/lang/eo/strings.php +++ b/twitter/lang/eo/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Afiŝi ĉe Twitter"; $a->strings["Twitter settings updated."] = "Ĝisdatigis Twitter agordojn."; $a->strings["Twitter Posting Settings"] = "Agordoj por afiŝi ĉe Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Ne trovis klientajn ŝlosilojn por Twitter. Bonvolu kontakti vian retejan administranton."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Je ĉi tiu Friendica retejo, la Twitter kromprogramo jam estas ŝaltita, sed via konto anokoraŭ ne estas konektita kun via Twitter konto. Por fari tion, klaku la supran butonon por atingi nombrokodon de Twitter, kion vi kopiu en la supran eniga ĉelo, kaj sendu la formularon. Nur viaj publikaj afiŝoj estas plusendota al Twitter. "; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Je ĉi tiu Friendica retejo, la Twitter kromprogramo jam estas ŝaltita, sed via konto anokoraŭ ne estas konektita kun via Twitter konto. Por fari tion, klaku la supran butonon por atingi nombrokodon de Twitter, kion vi kopiu en la supran eniga ĉelo, kaj sendu la formularon. Nur viaj publikaj afiŝoj estas plusendota al Twitter. "; $a->strings["Log in with Twitter"] = "Ensaluti kun Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Alglui la PIN de Twitter ĉi tie"; $a->strings["Submit"] = "Sendi"; diff --git a/twitter/lang/es/messages.po b/twitter/lang/es/messages.po index 6cb69948..739ac523 100644 --- a/twitter/lang/es/messages.po +++ b/twitter/lang/es/messages.po @@ -39,12 +39,12 @@ msgstr "No hay par de claves para encuentro de Twitter." #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "En esta petición de Friendica el plugin de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter" +msgstr "En esta petición de Friendica el addon de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter" #: twitter.php:184 msgid "Log in with Twitter" diff --git a/twitter/lang/es/strings.php b/twitter/lang/es/strings.php index c1168e4a..812e646b 100644 --- a/twitter/lang/es/strings.php +++ b/twitter/lang/es/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Entrada para Twitter"; $a->strings["Twitter settings updated."] = "Ajustes de Twitter actualizados."; $a->strings["Twitter Posting Settings"] = "Ajustes de publicación de Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No hay par de claves para encuentro de Twitter."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En esta petición de Friendica el plugin de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter"; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "En esta petición de Friendica el addon de Twitter estaba activo pero usted no ha conectado aún su cuenta con la cuenta de Twitter. Para hacerlo click en el botón de abajo para obtener un PIN desde Twitter que tiene que copiar en la caja de texto de abajo y enviar el formulario. Sólo sus entradas públicas serán posteadas en Twitter"; $a->strings["Log in with Twitter"] = "Iniciar sesión con Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copie el PIN de Twitter aquí"; $a->strings["Submit"] = "Enviar"; diff --git a/twitter/lang/fr/messages.po b/twitter/lang/fr/messages.po index abddb85f..6b898264 100644 --- a/twitter/lang/fr/messages.po +++ b/twitter/lang/fr/messages.po @@ -40,7 +40,7 @@ msgstr "" #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/fr/strings.php b/twitter/lang/fr/strings.php index de9e80a0..d79c5cf9 100644 --- a/twitter/lang/fr/strings.php +++ b/twitter/lang/fr/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Publier sur Twitter"; $a->strings["Twitter settings updated."] = "Paramètres Twitter mis à jour."; $a->strings["Twitter Posting Settings"] = "Paramètres Twitter de publication"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = ""; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; $a->strings["Log in with Twitter"] = "Se connecter avec Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copier le PIN de Twitter ici"; $a->strings["Submit"] = "Soumettre"; diff --git a/twitter/lang/is/strings.php b/twitter/lang/is/strings.php index edd7809b..66d1836d 100644 --- a/twitter/lang/is/strings.php +++ b/twitter/lang/is/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Senda færslu á Twitter"; $a->strings["Twitter settings updated."] = "Stillingar Twitter uppfærðar."; $a->strings["Twitter Posting Settings"] = "Twitter færslu stillingar"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Ekkert notenda lykils par fyrir Twitter fundið. Hafðu samband við kerfisstjórann."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; $a->strings["Log in with Twitter"] = "Innskrá með Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Afrita PIN frá Twitter hingað"; $a->strings["Submit"] = "Senda inn"; diff --git a/twitter/lang/it/messages.po b/twitter/lang/it/messages.po index ef14b5bb..b75a8220 100644 --- a/twitter/lang/it/messages.po +++ b/twitter/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-02-27 05:01-0500\n" -"PO-Revision-Date: 2015-08-31 10:29+0000\n" +"POT-Creation-Date: 2018-02-08 07:07+0100\n" +"PO-Revision-Date: 2018-03-19 13:09+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -19,105 +19,106 @@ msgstr "" "Language: it\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: twitter.php:77 +#: twitter.php:193 msgid "Post to Twitter" msgstr "Invia a Twitter" -#: twitter.php:129 +#: twitter.php:234 +msgid "" +"You submitted an empty PIN, please Sign In with Twitter again to get a new " +"one." +msgstr "Hai inserito un PIN vuoto, autenticati con Twitter nuovamente per averne uno nuovo." + +#: twitter.php:261 msgid "Twitter settings updated." msgstr "Impostazioni di Twitter aggiornate." -#: twitter.php:157 -msgid "Twitter Posting Settings" -msgstr "Impostazioni di invio a Twitter" +#: twitter.php:291 twitter.php:295 +msgid "Twitter Import/Export/Mirror" +msgstr "Importa/Esporta/Clona Twitter" -#: twitter.php:164 +#: twitter.php:302 msgid "" "No consumer key pair for Twitter found. Please contact your site " "administrator." msgstr "Nessuna coppia di chiavi per Twitter trovata. Contatta l'amministratore del sito." -#: twitter.php:183 +#: twitter.php:314 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" " be posted to Twitter." -msgstr "Il plugin Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter." +msgstr "Il componente aggiuntivo Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter." -#: twitter.php:184 +#: twitter.php:315 msgid "Log in with Twitter" msgstr "Accedi con Twitter" -#: twitter.php:186 +#: twitter.php:317 msgid "Copy the PIN from Twitter here" msgstr "Copia il PIN da Twitter qui" -#: twitter.php:191 twitter.php:229 twitter.php:556 -msgid "Submit" -msgstr "Invia" +#: twitter.php:322 twitter.php:364 twitter.php:642 +msgid "Save Settings" +msgstr "Salva Impostazioni" -#: twitter.php:200 +#: twitter.php:334 msgid "Currently connected to: " msgstr "Al momento connesso con:" -#: twitter.php:201 +#: twitter.php:335 +msgid "Disconnect" +msgstr "Disconnetti" + +#: twitter.php:345 +msgid "Allow posting to Twitter" +msgstr "Permetti l'invio a Twitter" + +#: twitter.php:345 msgid "" "If enabled all your public postings can be posted to the " "associated Twitter account. You can choose to do so by default (here) or for" " every posting separately in the posting options when writing the entry." msgstr "Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all'account Twitter associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio." -#: twitter.php:203 +#: twitter.php:348 msgid "" -"Note: Due your privacy settings (Hide your profile " +"Note: Due to your privacy settings (Hide your profile " "details from unknown viewers?) the link potentially included in public " "postings relayed to Twitter will lead the visitor to a blank page informing " "the visitor that the access to your profile has been restricted." -msgstr "Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il link potenzialmente incluse nei messaggi pubblici inviati a Twitter porterà i visitatori a una pagina bianca con una nota che li informa che l'accesso al tuo profilo è stato limitato." +msgstr "Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il link potenzialmente incluso nei messaggi pubblici inviati a Twitter porterà i visitatori a una pagina bianca con una nota che li informa che l'accesso al tuo profilo è stato limitato." -#: twitter.php:206 -msgid "Allow posting to Twitter" -msgstr "Permetti l'invio a Twitter" - -#: twitter.php:209 +#: twitter.php:351 msgid "Send public postings to Twitter by default" msgstr "Invia sempre i messaggi pubblici a Twitter" -#: twitter.php:213 -msgid "Mirror all posts from twitter that are no replies or retweets" -msgstr "Clona tutti i messaggi da Twitter che non sono risposte or retweet" +#: twitter.php:354 +msgid "Mirror all posts from twitter that are no replies" +msgstr "Clona tutti i messaggi da Twitter che non sono risposte" -#: twitter.php:217 -msgid "Shortening method that optimizes the tweet" -msgstr "Metodo di accorciatura che ottimizza i tweet" +#: twitter.php:357 +msgid "Import the remote timeline" +msgstr "Importa la timeline remota" -#: twitter.php:221 -msgid "Send linked #-tags and @-names to Twitter" -msgstr "Invia i link dei #tag e dei @nomi a Twitter" +#: twitter.php:360 +msgid "Automatically create contacts" +msgstr "Crea automaticamente i contatti" -#: twitter.php:226 -msgid "Clear OAuth configuration" -msgstr "Rimuovi la configurazione OAuth" +#: twitter.php:619 +msgid "Twitter post failed. Queued for retry." +msgstr "Invio a Twitter fallito. In coda per riprovare." -#: twitter.php:550 +#: twitter.php:634 msgid "Settings updated." msgstr "Impostazioni aggiornate." -#: twitter.php:558 +#: twitter.php:644 msgid "Consumer key" msgstr "Consumer key" -#: twitter.php:559 +#: twitter.php:645 msgid "Consumer secret" msgstr "Consumer secret" - -#: twitter.php:560 -msgid "Name of the Twitter Application" -msgstr "Nome dell'applicazione Twitter" - -#: twitter.php:560 -msgid "" -"set this to avoid mirroring postings from ~friendica back to ~friendica" -msgstr "imposta questo per evitare di clonare i messaggi da Friendica nuovamente in Friendica" diff --git a/twitter/lang/it/strings.php b/twitter/lang/it/strings.php index 446c7de2..da75a3cb 100644 --- a/twitter/lang/it/strings.php +++ b/twitter/lang/it/strings.php @@ -6,24 +6,24 @@ function string_plural_select_it($n){ }} ; $a->strings["Post to Twitter"] = "Invia a Twitter"; +$a->strings["You submitted an empty PIN, please Sign In with Twitter again to get a new one."] = "Hai inserito un PIN vuoto, autenticati con Twitter nuovamente per averne uno nuovo."; $a->strings["Twitter settings updated."] = "Impostazioni di Twitter aggiornate."; -$a->strings["Twitter Posting Settings"] = "Impostazioni di invio a Twitter"; +$a->strings["Twitter Import/Export/Mirror"] = "Importa/Esporta/Clona Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nessuna coppia di chiavi per Twitter trovata. Contatta l'amministratore del sito."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Il plugin Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Il componente aggiuntivo Twitter è abilitato ma non hai ancora collegato i tuoi account Friendica e Twitter. Per farlo, clicca il bottone qui sotto per ricevere un PIN da Twitter che dovrai copiare nel campo qui sotto. Solo i tuoi post pubblici saranno inviati a Twitter."; $a->strings["Log in with Twitter"] = "Accedi con Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copia il PIN da Twitter qui"; -$a->strings["Submit"] = "Invia"; +$a->strings["Save Settings"] = "Salva Impostazioni"; $a->strings["Currently connected to: "] = "Al momento connesso con:"; -$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all'account Twitter associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio."; -$a->strings["Note: Due your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il link potenzialmente incluse nei messaggi pubblici inviati a Twitter porterà i visitatori a una pagina bianca con una nota che li informa che l'accesso al tuo profilo è stato limitato."; +$a->strings["Disconnect"] = "Disconnetti"; $a->strings["Allow posting to Twitter"] = "Permetti l'invio a Twitter"; +$a->strings["If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry."] = "Se abilitato tutti i tuoi messaggi pubblici possono essere inviati all'account Twitter associato. Puoi scegliere di farlo sempre (qui) o ogni volta che invii, nelle impostazioni di privacy del messaggio."; +$a->strings["Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted."] = "Nota: A causa delle tue impostazioni di privacy(Nascondi i dettagli del tuo profilo ai visitatori sconosciuti?) il link potenzialmente incluso nei messaggi pubblici inviati a Twitter porterà i visitatori a una pagina bianca con una nota che li informa che l'accesso al tuo profilo è stato limitato."; $a->strings["Send public postings to Twitter by default"] = "Invia sempre i messaggi pubblici a Twitter"; -$a->strings["Mirror all posts from twitter that are no replies or retweets"] = "Clona tutti i messaggi da Twitter che non sono risposte or retweet"; -$a->strings["Shortening method that optimizes the tweet"] = "Metodo di accorciatura che ottimizza i tweet"; -$a->strings["Send linked #-tags and @-names to Twitter"] = "Invia i link dei #tag e dei @nomi a Twitter"; -$a->strings["Clear OAuth configuration"] = "Rimuovi la configurazione OAuth"; +$a->strings["Mirror all posts from twitter that are no replies"] = "Clona tutti i messaggi da Twitter che non sono risposte"; +$a->strings["Import the remote timeline"] = "Importa la timeline remota"; +$a->strings["Automatically create contacts"] = "Crea automaticamente i contatti"; +$a->strings["Twitter post failed. Queued for retry."] = "Invio a Twitter fallito. In coda per riprovare."; $a->strings["Settings updated."] = "Impostazioni aggiornate."; $a->strings["Consumer key"] = "Consumer key"; $a->strings["Consumer secret"] = "Consumer secret"; -$a->strings["Name of the Twitter Application"] = "Nome dell'applicazione Twitter"; -$a->strings["set this to avoid mirroring postings from ~friendica back to ~friendica"] = "imposta questo per evitare di clonare i messaggi da Friendica nuovamente in Friendica"; diff --git a/twitter/lang/nb-no/strings.php b/twitter/lang/nb-no/strings.php index 00a0f111..6330249c 100644 --- a/twitter/lang/nb-no/strings.php +++ b/twitter/lang/nb-no/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Post til Twitter"; $a->strings["Twitter settings updated."] = "Twitter-innstilinger oppdatert."; $a->strings["Twitter Posting Settings"] = "Innstillinger for posting til Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Ingen \"consumer key pair\" for Twitter funnet. Vennligst kontakt stedets administrator."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Ved denne Friendica-forekomsten er Twitter-tillegget aktivert, men du har ennå ikke tilkoblet din konto til din Twitter-konto. For å gjøre det, klikk på knappen nedenfor for å få en PIN-kode fra Twitter som du må kopiere inn i feltet nedenfor og sende inn skjemaet. Bare dine offentlige innlegg vil bli lagt inn på Twitter. "; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Ved denne Friendica-forekomsten er Twitter-tillegget aktivert, men du har ennå ikke tilkoblet din konto til din Twitter-konto. For å gjøre det, klikk på knappen nedenfor for å få en PIN-kode fra Twitter som du må kopiere inn i feltet nedenfor og sende inn skjemaet. Bare dine offentlige innlegg vil bli lagt inn på Twitter. "; $a->strings["Log in with Twitter"] = "Logg inn via Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Kopier PIN-kode fra Twitter hit"; $a->strings["Submit"] = "Lagre"; diff --git a/twitter/lang/pl/strings.php b/twitter/lang/pl/strings.php index 54d3acae..3afb1506 100644 --- a/twitter/lang/pl/strings.php +++ b/twitter/lang/pl/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "Post na Twitter"; $a->strings["Twitter settings updated."] = "Zaktualizowano ustawienia Twittera."; $a->strings["Twitter Posting Settings"] = "Ustawienia wpisów z Twittera"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nie znaleziono pary dla Twittera. Proszę skontaktować się z admininstratorem strony."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = ""; $a->strings["Log in with Twitter"] = "Zaloguj się przez Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Skopiuj tutaj PIN z Twittera"; $a->strings["Submit"] = "Potwierdź"; diff --git a/twitter/lang/pt-br/messages.po b/twitter/lang/pt-br/messages.po index df121428..56630fec 100644 --- a/twitter/lang/pt-br/messages.po +++ b/twitter/lang/pt-br/messages.po @@ -39,7 +39,7 @@ msgstr "Não foi encontrado nenhum par de \"consumer keys\" para o Twitter. Por #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/pt-br/strings.php b/twitter/lang/pt-br/strings.php index edc4b916..698b761e 100644 --- a/twitter/lang/pt-br/strings.php +++ b/twitter/lang/pt-br/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Publicar no Twitter"; $a->strings["Twitter settings updated."] = "As configurações do Twitter foram atualizadas."; $a->strings["Twitter Posting Settings"] = "Configurações de publicação no Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Não foi encontrado nenhum par de \"consumer keys\" para o Twitter. Por favor, entre em contato com a administração do site."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "O plug-in do Twitter está habilitado nesta instância do Friendica, mas você ainda não conectou sua conta aqui à sua conta no Twitter. Para fazer isso, clique no botão abaixo. Você vai receber um código de verificação do Twitter. Copie-o para o campo abaixo e envie o formulário. Apenas os seus posts públicos serão publicados no Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "O plug-in do Twitter está habilitado nesta instância do Friendica, mas você ainda não conectou sua conta aqui à sua conta no Twitter. Para fazer isso, clique no botão abaixo. Você vai receber um código de verificação do Twitter. Copie-o para o campo abaixo e envie o formulário. Apenas os seus posts públicos serão publicados no Twitter."; $a->strings["Log in with Twitter"] = "Entrar com o Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Cole o código de verificação do Twitter aqui"; $a->strings["Submit"] = "Enviar"; diff --git a/twitter/lang/ro/messages.po b/twitter/lang/ro/messages.po index 27e0d553..46407c73 100644 --- a/twitter/lang/ro/messages.po +++ b/twitter/lang/ro/messages.po @@ -38,7 +38,7 @@ msgstr "Nici o pereche de chei de utilizator pentru Twitter nu a fost găsită. #: twitter.php:264 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/ro/strings.php b/twitter/lang/ro/strings.php index d941d001..36a36e8c 100644 --- a/twitter/lang/ro/strings.php +++ b/twitter/lang/ro/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Postați pe Twitter"; $a->strings["Twitter settings updated."] = "Configurările Twitter au fost actualizate."; $a->strings["Twitter Import/Export/Mirror"] = "Import/Export/Clonare Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Nici o pereche de chei de utilizator pentru Twitter nu a fost găsită. Vă rugăm să vă contactați administratorul de site."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Pe această sesiune Friendica, modulul Twitter era activat, dar încă nu v-ați conectat contul la profilul dvs. Twitter. Pentru aceasta apăsați pe butonul de mai jos pentru a obține un PIN de pe Twitter pe care va trebui să îl copiați în caseta de introducere mai jos şi trimiteți formularul. Numai postările dumneavoastră publice vor fi postate pe Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Pe această sesiune Friendica, modulul Twitter era activat, dar încă nu v-ați conectat contul la profilul dvs. Twitter. Pentru aceasta apăsați pe butonul de mai jos pentru a obține un PIN de pe Twitter pe care va trebui să îl copiați în caseta de introducere mai jos şi trimiteți formularul. Numai postările dumneavoastră publice vor fi postate pe Twitter."; $a->strings["Log in with Twitter"] = "Autentificare prin Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Copiați aici PIN-ul de la Twitter"; $a->strings["Save Settings"] = "Salvare Configurări"; diff --git a/twitter/lang/ru/messages.po b/twitter/lang/ru/messages.po index 9418282a..911b2e08 100644 --- a/twitter/lang/ru/messages.po +++ b/twitter/lang/ru/messages.po @@ -39,7 +39,7 @@ msgstr "Не найдено пары потребительских ключей #: twitter.php:183 msgid "" -"At this Friendica instance the Twitter plugin was enabled but you have not " +"At this Friendica instance the Twitter addon was enabled but you have not " "yet connected your account to your Twitter account. To do so click the " "button below to get a PIN from Twitter which you have to copy into the input" " box below and submit the form. Only your public posts will" diff --git a/twitter/lang/ru/strings.php b/twitter/lang/ru/strings.php index c2210cbb..39e61e4e 100644 --- a/twitter/lang/ru/strings.php +++ b/twitter/lang/ru/strings.php @@ -9,7 +9,7 @@ $a->strings["Post to Twitter"] = "Отправить в Twitter"; $a->strings["Twitter settings updated."] = "Настройки Twitter обновлены."; $a->strings["Twitter Posting Settings"] = "Настройка отправки сообщений в Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "Не найдено пары потребительских ключей для Twitter. Пожалуйста, обратитесь к администратору сайта."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Чтобы подключиться к Twitter аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от Twitter, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши публичные сообщения будут отправляться на Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "Чтобы подключиться к Twitter аккаунту, нажмите на кнопку ниже, чтобы получить код безопасности от Twitter, который нужно скопировать в поле ввода ниже, и отправить форму. Только ваши публичные сообщения будут отправляться на Twitter."; $a->strings["Log in with Twitter"] = "Войдите через Twitter"; $a->strings["Copy the PIN from Twitter here"] = "Скопируйте PIN с Twitter сюда"; $a->strings["Submit"] = "Подтвердить"; diff --git a/twitter/lang/sv/strings.php b/twitter/lang/sv/strings.php index 02cb3fdd..3f9d77c8 100644 --- a/twitter/lang/sv/strings.php +++ b/twitter/lang/sv/strings.php @@ -3,7 +3,7 @@ $a->strings["Post to Twitter"] = "Lägg in på Twitter"; $a->strings["Twitter Posting Settings"] = "Inställningar för inlägg på Twitter"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "No consumer key pair for Twitter found. Please contact your site administrator."; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."; $a->strings["Copy the PIN from Twitter here"] = "Ange PIN-koden från Twitter här"; $a->strings["Submit"] = "Spara"; $a->strings["Currently connected to: "] = "Ansluten till: "; diff --git a/twitter/lang/zh-cn/strings.php b/twitter/lang/zh-cn/strings.php index 9f8f7058..402534c1 100644 --- a/twitter/lang/zh-cn/strings.php +++ b/twitter/lang/zh-cn/strings.php @@ -4,7 +4,7 @@ $a->strings["Post to Twitter"] = "发送到在Twitter"; $a->strings["Twitter settings updated."] = "Twitter设置更新了。"; $a->strings["Twitter Posting Settings"] = "Twitter发送设置"; $a->strings["No consumer key pair for Twitter found. Please contact your site administrator."] = "找不到Twitter的消费钥匙双。请联系您的网页行政人员。"; -$a->strings["At this Friendica instance the Twitter plugin was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "在这个Friendica网站使Twitter插件可用的可您还没有把您的账户和您Twitter账户连通。为这做点击下边的按钮得到密码从Twitter您要粘贴在下边的输入框和提交。只您的公开文章被发送到Twitter。"; +$a->strings["At this Friendica instance the Twitter addon was enabled but you have not yet connected your account to your Twitter account. To do so click the button below to get a PIN from Twitter which you have to copy into the input box below and submit the form. Only your public posts will be posted to Twitter."] = "在这个Friendica网站使Twitter插件可用的可您还没有把您的账户和您Twitter账户连通。为这做点击下边的按钮得到密码从Twitter您要粘贴在下边的输入框和提交。只您的公开文章被发送到Twitter。"; $a->strings["Log in with Twitter"] = "用Twitter登记"; $a->strings["Copy the PIN from Twitter here"] = "复制Twitter密码这儿"; $a->strings["Submit"] = "提交"; diff --git a/twitter/twitter.php b/twitter/twitter.php index 7272957c..148a498b 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -2,11 +2,12 @@ /** * Name: Twitter Connector * Description: Bidirectional (posting, relaying and reading) connector for Twitter. - * Version: 1.0.4 + * Version: 1.1.0 * Author: Tobias Diekershoff * Author: Michael Vogel + * Maintainer: Hypolite Petovan * - * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel + * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel, Hypolite Petovan * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -32,8 +33,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ - -/* Twitter Plugin for Friendica +/* Twitter Addon for Friendica * * Author: Tobias Diekershoff * tobias.diekershoff@gmx.net @@ -41,7 +41,7 @@ * License:3-clause BSD license * * Configuration: - * To use this plugin you need a OAuth Consumer key pair (key & secret) + * To use this addon you need a OAuth Consumer key pair (key & secret) * you can get it from Twitter at https://twitter.com/apps * * Register your Friendica site as "Client" application with "Read & Write" access @@ -53,53 +53,76 @@ * $a->config['twitter']['consumerkey'] = 'your consumer_key here'; * $a->config['twitter']['consumersecret'] = 'your consumer_secret here'; * - * To activate the plugin itself add it to the $a->config['system']['addon'] + * To activate the addon itself add it to the $a->config['system']['addon'] * setting. After this, your user can configure their Twitter account settings - * from "Settings -> Plugin Settings". + * from "Settings -> Addon Settings". * - * Requirements: PHP5, curl [Slinky library] + * Requirements: PHP5, curl */ -require_once('include/enotify.php'); -require_once("include/socgraph.php"); +use Abraham\TwitterOAuth\TwitterOAuth; +use Friendica\App; +use Friendica\Content\OEmbed; +use Friendica\Content\Text\BBCode; +use Friendica\Content\Text\Plaintext; +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Core\Worker; +use Friendica\Model\GContact; +use Friendica\Model\Group; +use Friendica\Model\Item; +use Friendica\Model\Photo; +use Friendica\Model\Queue; +use Friendica\Model\User; +use Friendica\Object\Image; +use Friendica\Util\DateTimeFormat; +use Friendica\Util\Network; + +require_once 'boot.php'; +require_once 'include/dba.php'; +require_once 'include/enotify.php'; +require_once 'include/text.php'; + +require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes function twitter_install() { // we need some hooks, for the configuration and for sending tweets - register_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - register_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - register_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); - register_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); - register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); - register_hook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); - register_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); - register_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); - register_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); - register_hook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); - register_hook('check_item_notification','addon/twitter/twitter.php', 'twitter_check_item_notification'); + Addon::registerHook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::registerHook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + Addon::registerHook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); + Addon::registerHook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); + Addon::registerHook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); + Addon::registerHook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); + Addon::registerHook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); + Addon::registerHook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); + Addon::registerHook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); + Addon::registerHook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); + Addon::registerHook('check_item_notification', 'addon/twitter/twitter.php', 'twitter_check_item_notification'); logger("installed twitter"); } - -function twitter_uninstall() { - unregister_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - unregister_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - unregister_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); - unregister_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); - unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); - unregister_hook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); - unregister_hook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); - unregister_hook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); - unregister_hook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); - unregister_hook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); - unregister_hook('check_item_notification','addon/twitter/twitter.php', 'twitter_check_item_notification'); +function twitter_uninstall() +{ + Addon::unregisterHook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + Addon::unregisterHook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); + Addon::unregisterHook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); + Addon::unregisterHook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); + Addon::unregisterHook('queue_predeliver', 'addon/twitter/twitter.php', 'twitter_queue_hook'); + Addon::unregisterHook('follow', 'addon/twitter/twitter.php', 'twitter_follow'); + Addon::unregisterHook('expire', 'addon/twitter/twitter.php', 'twitter_expire'); + Addon::unregisterHook('prepare_body', 'addon/twitter/twitter.php', 'twitter_prepare_body'); + Addon::unregisterHook('check_item_notification', 'addon/twitter/twitter.php', 'twitter_check_item_notification'); // old setting - remove only - unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); - unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - + Addon::unregisterHook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); + Addon::unregisterHook('addon_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); } function twitter_check_item_notification($a, &$notification_data) { @@ -127,21 +150,19 @@ function twitter_follow($a, &$contact) { $uid = $a->user["uid"]; - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); - $otoken = get_pconfig($uid, 'twitter', 'oauthtoken'); - $osecret = get_pconfig($uid, 'twitter', 'oauthsecret'); + $ckey = Config::get('twitter', 'consumerkey'); + $csecret = Config::get('twitter', 'consumersecret'); + $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); + $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); - require_once("addon/twitter/codebird.php"); + // If the addon is not configured (general or for this user) quit here + if (empty($ckey) || empty($csecret) || empty($otoken) || empty($osecret)) { + $contact = false; + return; + } - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - - $parameters = array(); - $parameters["screen_name"] = $nickname; - - $user = $cb->friendships_create($parameters); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $connection->post('friendships/create', ['screen_name' => $nickname]); twitter_fetchuser($a, $uid, $nickname); @@ -162,7 +183,7 @@ function twitter_jot_nets(&$a,&$b) { $tw_defpost = get_pconfig(local_user(),'twitter','post_by_default'); $selected = ((intval($tw_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to Twitter') . '
'; + . L10n::t('Post to Twitter') . ''; } } @@ -170,11 +191,11 @@ function twitter_settings_post ($a,$post) { if(! local_user()) return; // don't check twitter settings if twitter submit button is not clicked - if (!x($_POST,'twitter-submit')) + if (empty($_POST['twitter-disconnect']) && empty($_POST['twitter-submit'])) { return; - if (isset($_POST['twitter-disconnect'])) { - /*** + if (!empty($_POST['twitter-disconnect'])) { + /* * * * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair * from the user configuration */ @@ -190,37 +211,46 @@ function twitter_settings_post ($a,$post) { del_pconfig(local_user(), 'twitter', 'create_user'); del_pconfig(local_user(), 'twitter', 'own_id'); } else { - if (isset($_POST['twitter-pin'])) { - // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen - logger('got a Twitter PIN'); - require_once('library/twitteroauth.php'); - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); - // the token and secret for which the PIN was generated were hidden in the settings - // form as token and token2, we need a new connection to Twitter using these token - // and secret to request a Access Token with the PIN - $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); - $token = $connection->getAccessToken( $_POST['twitter-pin'] ); - // ok, now that we have the Access Token, save them in the user config - set_pconfig(local_user(),'twitter', 'oauthtoken', $token['oauth_token']); - set_pconfig(local_user(),'twitter', 'oauthsecret', $token['oauth_token_secret']); - set_pconfig(local_user(),'twitter', 'post', 1); - // reload the Addon Settings page, if we don't do it see Bug #42 - goaway($a->get_baseurl().'/settings/connectors'); - } else { - // if no PIN is supplied in the POST variables, the user has changed the setting - // to post a tweet for every new __public__ posting to the wall - set_pconfig(local_user(),'twitter','post',intval($_POST['twitter-enable'])); - set_pconfig(local_user(),'twitter','post_by_default',intval($_POST['twitter-default'])); - set_pconfig(local_user(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); - set_pconfig(local_user(), 'twitter', 'import', intval($_POST['twitter-import'])); - set_pconfig(local_user(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); + if (isset($_POST['twitter-pin'])) { + // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen + logger('got a Twitter PIN'); + $ckey = Config::get('twitter', 'consumerkey'); + $csecret = Config::get('twitter', 'consumersecret'); + // the token and secret for which the PIN was generated were hidden in the settings + // form as token and token2, we need a new connection to Twitter using these token + // and secret to request a Access Token with the PIN + try { + if (empty($_POST['twitter-pin'])) { + throw new Exception(L10n::t('You submitted an empty PIN, please Sign In with Twitter again to get a new one.')); + } - if (!intval($_POST['twitter-mirror'])) - del_pconfig(local_user(),'twitter','lastid'); + $connection = new TwitterOAuth($ckey, $csecret, $_POST['twitter-token'], $_POST['twitter-token2']); + $token = $connection->oauth("oauth/access_token", ["oauth_verifier" => $_POST['twitter-pin']]); + // ok, now that we have the Access Token, save them in the user config + PConfig::set(local_user(), 'twitter', 'oauthtoken', $token['oauth_token']); + PConfig::set(local_user(), 'twitter', 'oauthsecret', $token['oauth_token_secret']); + PConfig::set(local_user(), 'twitter', 'post', 1); + } catch(Exception $e) { + info($e->getMessage()); + } + // reload the Addon Settings page, if we don't do it see Bug #42 + goaway('settings/connectors'); + } else { + // if no PIN is supplied in the POST variables, the user has changed the setting + // to post a tweet for every new __public__ posting to the wall + PConfig::set(local_user(), 'twitter', 'post', intval($_POST['twitter-enable'])); + PConfig::set(local_user(), 'twitter', 'post_by_default', intval($_POST['twitter-default'])); + PConfig::set(local_user(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); + PConfig::set(local_user(), 'twitter', 'import', intval($_POST['twitter-import'])); + PConfig::set(local_user(), 'twitter', 'create_user', intval($_POST['twitter-create_user'])); - info(t('Twitter settings updated.') . EOL); - }} + if (!intval($_POST['twitter-mirror'])) { + PConfig::delete(local_user(), 'twitter', 'lastid'); + } + + info(L10n::t('Twitter settings updated.') . EOL); + } + } } function twitter_settings(&$a,&$s) { if(! local_user()) @@ -231,71 +261,58 @@ function twitter_settings(&$a,&$s) { * 2) If no OAuthtoken & stuff is present, generate button to get some * 3) Checkbox for "Send public notices (140 chars only) */ - $ckey = get_config('twitter', 'consumerkey' ); - $csecret = get_config('twitter', 'consumersecret' ); - $otoken = get_pconfig(local_user(), 'twitter', 'oauthtoken' ); - $osecret = get_pconfig(local_user(), 'twitter', 'oauthsecret' ); - $enabled = get_pconfig(local_user(), 'twitter', 'post'); - $checked = (($enabled) ? ' checked="checked" ' : ''); - $defenabled = get_pconfig(local_user(),'twitter','post_by_default'); - $defchecked = (($defenabled) ? ' checked="checked" ' : ''); - $mirrorenabled = get_pconfig(local_user(),'twitter','mirror_posts'); - $mirrorchecked = (($mirrorenabled) ? ' checked="checked" ' : ''); - $importenabled = get_pconfig(local_user(),'twitter','import'); - $importchecked = (($importenabled) ? ' checked="checked" ' : ''); - $create_userenabled = get_pconfig(local_user(),'twitter','create_user'); - $create_userchecked = (($create_userenabled) ? ' checked="checked" ' : ''); + $ckey = Config::get('twitter', 'consumerkey'); + $csecret = Config::get('twitter', 'consumersecret'); + $otoken = PConfig::get(local_user(), 'twitter', 'oauthtoken'); + $osecret = PConfig::get(local_user(), 'twitter', 'oauthsecret'); + + $enabled = intval(PConfig::get(local_user(), 'twitter', 'post')); + $defenabled = intval(PConfig::get(local_user(), 'twitter', 'post_by_default')); + $mirrorenabled = intval(PConfig::get(local_user(), 'twitter', 'mirror_posts')); + $importenabled = intval(PConfig::get(local_user(), 'twitter', 'import')); + $create_userenabled = intval(PConfig::get(local_user(), 'twitter', 'create_user')); $css = (($enabled) ? '' : '-disabled'); $s .= ''; - $s .= '

'. t('Twitter Import/Export/Mirror').'

'; + $s .= '

' . L10n::t('Twitter Import/Export/Mirror') . '

'; $s .= '
'; $s .= '
'; + $s .= '
'; } else { /*** * we have an OAuth key / secret pair for the user * so let's give a chance to disable the postings to Twitter */ - require_once('library/twitteroauth.php'); - $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $details = $connection->get('account/verify_credentials'); $s .= '

'. t('Currently connected to: ') .''.$details->screen_name.'
'.$details->description.'

'; $s .= '

'. t('If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'

'; @@ -310,24 +327,43 @@ function twitter_settings(&$a,&$s) { $s .= ''; $s .= '
'; - $s .= ''; - $s .= ''; + $field_checkbox = get_markup_template('field_checkbox.tpl'); + + $s .= '
+

' . L10n::t('Currently connected to: ') . '' . $details->screen_name . ' + +

+

+ + ' . $details->description . ' +

+
'; $s .= '
'; $s .= ''; - $s .= ''; - $s .= ''; - $s .= '
'; + $s .= replace_macros($field_checkbox, [ + '$field' => ['twitter-enable', L10n::t('Allow posting to Twitter'), $enabled, L10n::t('If enabled all your public postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.')] + ]); + if ($a->user['hidewall']) { + $s .= '

' . L10n::t('Note: Due to your privacy settings (Hide your profile details from unknown viewers?) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.') . '

'; + } + $s .= replace_macros($field_checkbox, [ + '$field' => ['twitter-default', L10n::t('Send public postings to Twitter by default'), $defenabled, ''] + ]); + $s .= replace_macros($field_checkbox, [ + '$field' => ['twitter-mirror', L10n::t('Mirror all posts from twitter that are no replies'), $mirrorenabled, ''] + ]); + $s .= replace_macros($field_checkbox, [ + '$field' => ['twitter-import', L10n::t('Import the remote timeline'), $importenabled, ''] + ]); + $s .= replace_macros($field_checkbox, [ + '$field' => ['twitter-create_user', L10n::t('Automatically create contacts'), $create_userenabled, ''] + ]); $s .= ''; $s .= ''; $s .= '
'; - - $s .= '
'; - $s .= ''; - $s .= ''; - $s .= '
'; - $s .= '
'; + $s .= '
'; } } $s .= '
'; @@ -365,16 +401,7 @@ function twitter_post_local(&$a, &$b) { function twitter_action($a, $uid, $pid, $action) { - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); - $otoken = get_pconfig($uid, 'twitter', 'oauthtoken'); - $osecret = get_pconfig($uid, 'twitter', 'oauthsecret'); - - require_once("addon/twitter/codebird.php"); - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $post = array('id' => $pid); @@ -382,37 +409,35 @@ function twitter_action($a, $uid, $pid, $action) { switch ($action) { case "delete": - // To-Do: $result = $cb->statuses_destroy($post); + // To-Do: $result = $connection->post('statuses/destroy', $post); break; case "like": - $result = $cb->favorites_create($post); + $result = $connection->post('favorites/create', $post); break; case "unlike": - $result = $cb->favorites_destroy($post); + $result = $connection->post('favorites/destroy', $post); break; } logger("twitter_action '".$action."' send, result: " . print_r($result, true), LOGGER_DEBUG); } -function twitter_post_hook(&$a,&$b) { - - /** - * Post to Twitter - */ - - require_once("include/network.php"); - - if (!get_pconfig($b["uid"],'twitter','import')) { - if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) - return; +function twitter_post_hook(App $a, &$b) +{ + // Post to Twitter + if (!PConfig::get($b["uid"], 'twitter', 'import') + && ($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))) { + return; } if($b['parent'] != $b['id']) { logger("twitter_post_hook: parameter ".print_r($b, true), LOGGER_DATA); // Looking if its a reply to a twitter post - if ((substr($b["parent-uri"], 0, 9) != "twitter::") && (substr($b["extid"], 0, 9) != "twitter::") && (substr($b["thr-parent"], 0, 9) != "twitter::")) { - logger("twitter_post_hook: no twitter post ".$b["parent"]); + if ((substr($b["parent-uri"], 0, 9) != "twitter::") + && (substr($b["extid"], 0, 9) != "twitter::") + && (substr($b["thr-parent"], 0, 9) != "twitter::")) + { + logger("twitter_post_hook: no twitter post " . $b["parent"]); return; } @@ -448,12 +473,14 @@ function twitter_post_hook(&$a,&$b) { if (($b['verb'] == ACTIVITY_POST) && $b['deleted']) twitter_action($a, $b["uid"], substr($orig_post["uri"], 9), "delete"); - if($b['verb'] == ACTIVITY_LIKE) { - logger("twitter_post_hook: parameter 2 ".substr($b["thr-parent"], 9), LOGGER_DEBUG); - if ($b['deleted']) + if ($b['verb'] == ACTIVITY_LIKE) { + logger("twitter_post_hook: parameter 2 " . substr($b["thr-parent"], 9), LOGGER_DEBUG); + if ($b['deleted']) { twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "unlike"); - else + } else { twitter_action($a, $b["uid"], substr($b["thr-parent"], 9), "like"); + } + return; } @@ -484,17 +511,15 @@ function twitter_post_hook(&$a,&$b) { if (twitter_is_retweet($a, $b['uid'], $b['body'])) return; - require_once('library/twitteroauth.php'); - require_once('include/bbcode.php'); - $tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); - $max_char = 140; - require_once("include/plaintext.php"); - $msgarr = plaintext($a, $b, $max_char, true, 8); + $max_char = 280; + $msgarr = BBCode::toPlaintext($b, $max_char, true, 8); $msg = $msgarr["text"]; - if (($msg == "") && isset($msgarr["title"])) - $msg = shortenmsg($msgarr["title"], $max_char - 50); + if (($msg == "") && isset($msgarr["title"])) { + $msg = Plaintext::shorten($msgarr["title"], $max_char - 50); + } $image = ""; @@ -505,29 +530,16 @@ function twitter_post_hook(&$a,&$b) { $image = $msgarr["image"]; // and now tweet it :-) - if(strlen($msg) && ($image != "")) { - $img_str = fetch_url($image); + if (strlen($msg) && ($image != "")) { + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $media = $connection->upload('media/upload', ['media' => $image]); - $tempfile = tempnam(get_temppath(), "cache"); - file_put_contents($tempfile, $img_str); - - // Twitter had changed something so that the old library doesn't work anymore - // so we are using a new library for twitter - // To-Do: - // Switching completely to this library with all functions - require_once("addon/twitter/codebird.php"); - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - - $post = array('status' => $msg, 'media[]' => $tempfile); + $post = ['status' => $msg, 'media_ids' => $media->media_id_string]; if ($iscomment) $post["in_reply_to_status_id"] = substr($orig_post["uri"], 9); - $result = $cb->statuses_updateWithMedia($post); - unlink($tempfile); + $result = $connection->post('statuses/update', $post); logger('twitter_post_with_media send, result: ' . print_r($result, true), LOGGER_DEBUG); @@ -541,23 +553,32 @@ function twitter_post_hook(&$a,&$b) { $msg .= " ".$image; $image = ""; } elseif ($iscomment) { - logger('twitter_post: Update extid '.$result->id_str." for post id ".$b['id']); - q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d", - dbesc("twitter::".$result->id_str), - dbesc($result->text), - intval($b['id']) - ); + logger('twitter_post: Update extid ' . $result->id_str . " for post id " . $b['id']); + Item::update(['extid' => "twitter::" . $result->id_str, 'body' => $result->text], ['id' => $b['id']]); } } - if(strlen($msg) && ($image == "")) { + if (strlen($msg) && ($image == "")) { +// ----------------- + $max_char = 280; + $msgarr = BBCode::toPlaintext($b, $max_char, true, 8); + $msg = $msgarr["text"]; + + if (($msg == "") && isset($msgarr["title"])) { + $msg = Plaintext::shorten($msgarr["title"], $max_char - 50); + } + + if (isset($msgarr["url"])) { + $msg .= "\n" . $msgarr["url"]; + } +// ----------------- $url = 'statuses/update'; $post = array('status' => $msg); if ($iscomment) $post["in_reply_to_status_id"] = substr($orig_post["uri"], 9); - $result = $tweet->post($url, $post); + $result = $connection->post($url, $post); logger('twitter_post send, result: ' . print_r($result, true), LOGGER_DEBUG); if ($result->source) @@ -570,45 +591,39 @@ function twitter_post_hook(&$a,&$b) { if (count($r)) $a->contact = $r[0]["id"]; - $s = serialize(array('url' => $url, 'item' => $b['id'], 'post' => $post)); - require_once('include/queue_fn.php'); - add_to_queue($a->contact,NETWORK_TWITTER,$s); - notice(t('Twitter post failed. Queued for retry.').EOL); + $s = serialize(['url' => $url, 'item' => $b['id'], 'post' => $post]); + + Queue::add($a->contact, NETWORK_TWITTER, $s); + notice(L10n::t('Twitter post failed. Queued for retry.') . EOL); } elseif ($iscomment) { - logger('twitter_post: Update extid '.$result->id_str." for post id ".$b['id']); - q("UPDATE `item` SET `extid` = '%s' WHERE `id` = %d", - dbesc("twitter::".$result->id_str), - intval($b['id']) - ); - //q("UPDATE `item` SET `extid` = '%s', `body` = '%s' WHERE `id` = %d", - // dbesc("twitter::".$result->id_str), - // dbesc($result->text), - // intval($b['id']) - //); + logger('twitter_post: Update extid ' . $result->id_str . " for post id " . $b['id']); + Item::update(['extid' => "twitter::" . $result->id_str], ['id' => $b['id']]); } } } } -function twitter_plugin_admin_post(&$a){ - $consumerkey = ((x($_POST,'consumerkey')) ? notags(trim($_POST['consumerkey'])) : ''); - $consumersecret = ((x($_POST,'consumersecret')) ? notags(trim($_POST['consumersecret'])): ''); - $applicationname = ((x($_POST, 'applicationname')) ? notags(trim($_POST['applicationname'])):''); - set_config('twitter','consumerkey',$consumerkey); - set_config('twitter','consumersecret',$consumersecret); - //set_config('twitter','application_name',$applicationname); - info( t('Settings updated.'). EOL ); +function twitter_addon_admin_post(App $a) +{ + $consumerkey = x($_POST, 'consumerkey') ? notags(trim($_POST['consumerkey'])) : ''; + $consumersecret = x($_POST, 'consumersecret') ? notags(trim($_POST['consumersecret'])) : ''; + Config::set('twitter', 'consumerkey', $consumerkey); + Config::set('twitter', 'consumersecret', $consumersecret); + info(L10n::t('Settings updated.') . EOL); } function twitter_plugin_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/twitter/" ); - $o = replace_macros($t, array( - '$submit' => t('Save Settings'), - // name, label, value, help, [extra values] - '$consumerkey' => array('consumerkey', t('Consumer key'), get_config('twitter', 'consumerkey' ), ''), - '$consumersecret' => array('consumersecret', t('Consumer secret'), get_config('twitter', 'consumersecret' ), ''), - //'$applicationname' => array('applicationname', t('Name of the Twitter Application'), get_config('twitter','application_name'),t('Set this to the exact name you gave the app on twitter.com/apps to avoid mirroring postings from ~friendica back to ~friendica')) - )); +function twitter_addon_admin(App $a, &$o) +{ + $t = get_markup_template("admin.tpl", "addon/twitter/"); + + $o = replace_macros($t, [ + '$submit' => L10n::t('Save Settings'), + // name, label, value, help, [extra values] + '$consumerkey' => ['consumerkey', L10n::t('Consumer key'), Config::get('twitter', 'consumerkey'), ''], + '$consumersecret' => ['consumersecret', L10n::t('Consumer secret'), Config::get('twitter', 'consumersecret'), ''], + ]); } function twitter_cron($a,$b) { @@ -635,11 +650,12 @@ function twitter_cron($a,$b) { } } - $abandon_days = intval(get_config('system','account_abandon_days')); - if ($abandon_days < 1) + $abandon_days = intval(Config::get('system', 'account_abandon_days')); + if ($abandon_days < 1) { $abandon_days = 0; + } - $abandon_limit = date("Y-m-d H:i:s", time() - $abandon_days * 86400); + $abandon_limit = date(DateTimeFormat::MYSQL, time() - $abandon_days * 86400); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'twitter' AND `k` = 'import' AND `v` = '1'"); if(count($r)) { @@ -699,10 +715,10 @@ function twitter_expire($a,$b) { logger('twitter_expire: expire_start'); $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'twitter' AND `k` = 'import' AND `v` = '1' ORDER BY RAND()"); - if(count($r)) { - foreach($r as $rr) { - logger('twitter_expire: user '.$rr['uid']); - item_expire($rr['uid'], $days, NETWORK_TWITTER, true); + if (count($r)) { + foreach ($r as $rr) { + logger('twitter_expire: user ' . $rr['uid']); + Item::expire($rr['uid'], $days, NETWORK_TWITTER, true); } } @@ -714,8 +730,7 @@ function twitter_prepare_body(&$a,&$b) { return; if ($b["preview"]) { - $max_char = 140; - require_once("include/plaintext.php"); + $max_char = 280; $item = $b["item"]; $item["plink"] = $a->get_baseurl()."/display/".$a->user["nickname"]."/".$item["parent"]; @@ -734,8 +749,7 @@ function twitter_prepare_body(&$a,&$b) { $item["body"] = $nickname." ".$item["body"]; } - - $msgarr = plaintext($a, $item, $max_char, true, 8); + $msgarr = BBCode::toPlaintext($item, $max_char, true, 8); $msg = $msgarr["text"]; if (isset($msgarr["url"]) && ($msgarr["type"] != "photo")) @@ -770,8 +784,14 @@ function twitter_do_mirrorpost($a, $uid, $post) { // We don't support nested shares, so we mustn't show quotes as shares on retweets $item = twitter_createpost($a, $uid, $post->retweeted_status, array('id' => 0), false, false, true); - $datarray['body'] = "\n".share_header($item['author-name'], $item['author-link'], $item['author-avatar'], "", - $item['created'], $item['plink']); + $datarray['body'] = "\n" . share_header( + $item['author-name'], + $item['author-link'], + $item['author-avatar'], + "", + $item['created'], + $item['plink'] + ); $datarray['body'] .= $item['body'].'[/share]'; } else { @@ -812,8 +832,7 @@ function twitter_fetchtimeline($a, $uid) { require_once('include/items.php'); require_once('mod/share.php'); - require_once('library/twitteroauth.php'); - $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); $parameters = array("exclude_replies" => true, "trim_user" => false, "contributor_details" => true, "include_rts" => true, "tweet_mode" => "extended"); @@ -863,10 +882,8 @@ function twitter_queue_hook(&$a,&$b) { if(! count($qi)) return; - require_once('include/queue_fn.php'); - - foreach($qi as $x) { - if($x['network'] !== NETWORK_TWITTER) + foreach ($qi as $x) { + if ($x['network'] !== NETWORK_TWITTER) { continue; logger('twitter_queue: run'); @@ -893,14 +910,8 @@ function twitter_queue_hook(&$a,&$b) { $z = unserialize($x['content']); - require_once("addon/twitter/codebird.php"); - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); - - if ($z['url'] == "statuses/update") - $result = $cb->statuses_update($z['post']); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $result = $connection->post($z['url'], $z['post']); logger('twitter_queue: post result: ' . print_r($result, true), LOGGER_DEBUG); @@ -908,14 +919,14 @@ function twitter_queue_hook(&$a,&$b) { logger('twitter_queue: Send to Twitter failed: "' . print_r($result->errors, true) . '"'); else { $success = true; - remove_queue_item($x['id']); + Queue::removeItem($x['id']); } } else logger("twitter_queue: Error getting tokens for user ".$user['uid']); if (!$success) { logger('twitter_queue: delayed'); - update_queue_time($x['id']); + Queue::updateTime($x['id']); } } } @@ -946,7 +957,8 @@ function twitter_fetch_contact($uid, $contact, $create_user) { "addr" => $contact->screen_name."@twitter.com", "generation" => 2)); $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1", - intval($uid), dbesc("twitter::".$contact->id_str)); + intval($uid), + dbesc("twitter::" . $contact->id_str)); if(!count($r) && !$create_user) return(0); @@ -963,9 +975,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) { `location`, `about`, `writable`, `blocked`, `readonly`, `pending`) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', '%s', %d, 0, 0, 0)", intval($uid), - dbesc(datetime_convert()), - dbesc("https://twitter.com/".$contact->screen_name), - dbesc(normalise_link("https://twitter.com/".$contact->screen_name)), + dbesc(DateTimeFormat::utcNow()), + dbesc("https://twitter.com/" . $contact->screen_name), + dbesc(normalise_link("https://twitter.com/" . $contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), dbesc("twitter::".$contact->id_str), dbesc(''), @@ -1015,17 +1027,16 @@ function twitter_fetch_contact($uid, $contact, $create_user) { dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), intval($contact_id) ); } } else { // update profile photos once every two weeks as we have no notification of when they change. - - //$update_photo = (($r[0]['avatar-date'] < datetime_convert('','','now -2 days')) ? true : false); - $update_photo = ($r[0]['avatar-date'] < datetime_convert('','','now -12 hours')); + //$update_photo = (($r[0]['avatar-date'] < DateTimeFormat::convert('now -2 days', '', '', )) ? true : false); + $update_photo = ($r[0]['avatar-date'] < DateTimeFormat::utc('now -12 hours')); // check that we have all the photos, this has been known to fail on occasion @@ -1055,9 +1066,9 @@ function twitter_fetch_contact($uid, $contact, $create_user) { dbesc($photos[0]), dbesc($photos[1]), dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), + dbesc(DateTimeFormat::utcNow()), dbesc("https://twitter.com/".$contact->screen_name), dbesc(normalise_link("https://twitter.com/".$contact->screen_name)), dbesc($contact->screen_name."@twitter.com"), @@ -1074,17 +1085,12 @@ function twitter_fetch_contact($uid, $contact, $create_user) { return($r[0]["id"]); } -function twitter_fetchuser($a, $uid, $screen_name = "", $user_id = "") { - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); - $otoken = get_pconfig($uid, 'twitter', 'oauthtoken'); - $osecret = get_pconfig($uid, 'twitter', 'oauthsecret'); - - require_once("addon/twitter/codebird.php"); - - $cb = \Codebird\Codebird::getInstance(); - $cb->setConsumerKey($ckey, $csecret); - $cb->setToken($otoken, $osecret); +function twitter_fetchuser(App $a, $uid, $screen_name = "", $user_id = "") +{ + $ckey = Config::get('twitter', 'consumerkey'); + $csecret = Config::get('twitter', 'consumersecret'); + $otoken = PConfig::get($uid, 'twitter', 'oauthtoken'); + $osecret = PConfig::get($uid, 'twitter', 'oauthsecret'); $r = q("SELECT * FROM `contact` WHERE `self` = 1 AND `uid` = %d LIMIT 1", intval($uid)); @@ -1103,7 +1109,8 @@ function twitter_fetchuser($a, $uid, $screen_name = "", $user_id = "") { $parameters["user_id"] = $user_id; // Fetching user data - $user = $cb->users_show($parameters); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $user = $connection->get('users/show', $parameters); if (!is_object($user)) return; @@ -1113,27 +1120,35 @@ function twitter_fetchuser($a, $uid, $screen_name = "", $user_id = "") { return $contact_id; } -function twitter_expand_entities($a, $body, $item, $no_tags = false, $picture) { - require_once("include/oembed.php"); - require_once("include/network.php"); - - $tags = ""; - +function twitter_expand_entities(App $a, $body, $item, $picture) +{ $plain = $body; + $tags_arr = []; + + foreach ($item->entities->hashtags AS $hashtag) { + $url = "#[url=" . $a->get_baseurl() . "/search?tag=" . rawurlencode($hashtag->text) . "]" . $hashtag->text . "[/url]"; + $tags_arr["#" . $hashtag->text] = $url; + $body = str_replace("#" . $hashtag->text, $url, $body); + } + + foreach ($item->entities->user_mentions AS $mention) { + $url = "@[url=https://twitter.com/" . rawurlencode($mention->screen_name) . "]" . $mention->screen_name . "[/url]"; + $tags_arr["@" . $mention->screen_name] = $url; + $body = str_replace("@" . $mention->screen_name, $url, $body); + } + if (isset($item->entities->urls)) { $type = ""; $footerurl = ""; $footerlink = ""; $footer = ""; - foreach ($item->entities->urls AS $url) { - + foreach ($item->entities->urls as $url) { $plain = str_replace($url->url, '', $plain); if ($url->url && $url->expanded_url && $url->display_url) { - - $expanded_url = original_url($url->expanded_url); + $expanded_url = Network::finalUrl($url->expanded_url); $oembed_data = oembed_fetch_url($expanded_url); @@ -1159,12 +1174,10 @@ function twitter_expand_entities($a, $body, $item, $no_tags = false, $picture) { "[url=".$expanded_url."][img]".$oembed_data->url."[/img][/url]", $body); //$dontincludemedia = true; - } elseif ($oembed_data->type != "link") - $body = str_replace($url->url, - "[url=".$expanded_url."]".$expanded_url."[/url]", - $body); - else { - $img_str = fetch_url($expanded_url, true, $redirects, 4); + } elseif ($oembed_data->type != "link") { + $body = str_replace($url->url, "[url=" . $expanded_url . "]" . $expanded_url . "[/url]", $body); + } else { + $img_str = Network::fetchUrl($expanded_url, true, $redirects, 4); $tempfile = tempnam(get_temppath(), "cache"); file_put_contents($tempfile, $img_str); @@ -1202,65 +1215,50 @@ function twitter_expand_entities($a, $body, $item, $no_tags = false, $picture) { $body .= "\n\n[img]".$picture."[/img]\n"; elseif (($footer == "") && ($picture == "")) $body = add_page_info_to_body($body); - - if ($no_tags) - return array("body" => $body, "tags" => "", "plain" => $plain); - - $tags_arr = array(); - - foreach ($item->entities->hashtags AS $hashtag) { - $url = "#[url=".$a->get_baseurl()."/search?tag=".rawurlencode($hashtag->text)."]".$hashtag->text."[/url]"; - $tags_arr["#".$hashtag->text] = $url; - $body = str_replace("#".$hashtag->text, $url, $body); } + } - foreach ($item->entities->user_mentions AS $mention) { - $url = "@[url=https://twitter.com/".rawurlencode($mention->screen_name)."]".$mention->screen_name."[/url]"; - $tags_arr["@".$mention->screen_name] = $url; - $body = str_replace("@".$mention->screen_name, $url, $body); - } + // it seems as if the entities aren't always covering all mentions. So the rest will be checked here + $tags = get_tags($body); - // it seems as if the entities aren't always covering all mentions. So the rest will be checked here - $tags = get_tags($body); + if (count($tags)) { + foreach ($tags as $tag) { + if (strstr(trim($tag), " ")) { + continue; + } - if(count($tags)) { - foreach($tags as $tag) { - if (strstr(trim($tag), " ")) + if (strpos($tag, '#') === 0) { + if (strpos($tag, '[url=')) { continue; - if(strpos($tag,'#') === 0) { - if(strpos($tag,'[url=')) - continue; - - // don't link tags that are already embedded in links - - if(preg_match('/\[(.*?)' . preg_quote($tag,'/') . '(.*?)\]/',$body)) - continue; - if(preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag,'/') . '(.*?)\)/',$body)) - continue; - - $basetag = str_replace('_',' ',substr($tag,1)); - $url = '#[url='.$a->get_baseurl().'/search?tag='.rawurlencode($basetag).']'.$basetag.'[/url]'; - $body = str_replace($tag,$url,$body); - $tags_arr["#".$basetag] = $url; + // don't link tags that are already embedded in links + if (preg_match('/\[(.*?)' . preg_quote($tag, '/') . '(.*?)\]/', $body)) { continue; - } elseif(strpos($tag,'@') === 0) { - if(strpos($tag,'[url=')) - continue; - - $basetag = substr($tag,1); - $url = '@[url=https://twitter.com/'.rawurlencode($basetag).']'.$basetag.'[/url]'; - $body = str_replace($tag,$url,$body); - $tags_arr["@".$basetag] = $url; } + if (preg_match('/\[(.*?)\]\((.*?)' . preg_quote($tag, '/') . '(.*?)\)/', $body)) { + continue; + } + + $basetag = str_replace('_', ' ', substr($tag, 1)); + $url = '#[url=' . $a->get_baseurl() . '/search?tag=' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; + $body = str_replace($tag, $url, $body); + $tags_arr["#" . $basetag] = $url; + } elseif (strpos($tag, '@') === 0) { + if (strpos($tag, '[url=')) { + continue; + } + + $basetag = substr($tag, 1); + $url = '@[url=https://twitter.com/' . rawurlencode($basetag) . ']' . $basetag . '[/url]'; + $body = str_replace($tag, $url, $body); + $tags_arr["@" . $basetag] = $url; } } - - - $tags = implode($tags_arr, ","); - } - return array("body" => $body, "tags" => $tags, "plain" => $plain); + + $tags = implode($tags_arr, ","); + + return ["body" => $body, "tags" => $tags, "plain" => $plain]; } /** @@ -1269,7 +1267,7 @@ function twitter_expand_entities($a, $body, $item, $no_tags = false, $picture) { * @param object $post Twitter object with the post * @param array $postarray Array of the item that is about to be posted * - * @return $picture string Returns a a single picture string if it isn't a media post + * @return $picture string Image URL or empty string */ function twitter_media_entities($post, &$postarray) { @@ -1339,9 +1337,9 @@ function twitter_createpost($a, $uid, $post, $self, $create_user, $only_existing // Don't import our own comments $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", - dbesc($postarray['uri']), - intval($uid) - ); + dbesc($postarray['uri']), + intval($uid) + ); if (count($r)) { logger("Item with extid ".$postarray['uri']." found.", LOGGER_DEBUG); @@ -1355,9 +1353,9 @@ function twitter_createpost($a, $uid, $post, $self, $create_user, $only_existing $parent = "twitter::".$post->in_reply_to_status_id_str; $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc($parent), - intval($uid) - ); + dbesc($parent), + intval($uid) + ); if (count($r)) { $postarray['thr-parent'] = $r[0]["uri"]; $postarray['parent-uri'] = $r[0]["parent-uri"]; @@ -1365,9 +1363,9 @@ function twitter_createpost($a, $uid, $post, $self, $create_user, $only_existing $postarray['object-type'] = ACTIVITY_OBJ_COMMENT; } else { $r = q("SELECT * FROM `item` WHERE `extid` = '%s' AND `uid` = %d LIMIT 1", - dbesc($parent), - intval($uid) - ); + dbesc($parent), + intval($uid) + ); if (count($r)) { $postarray['thr-parent'] = $r[0]['uri']; $postarray['parent-uri'] = $r[0]['parent-uri']; @@ -1448,11 +1446,11 @@ function twitter_createpost($a, $uid, $post, $self, $create_user, $only_existing // Search for media links $picture = twitter_media_entities($post, $postarray); - $converted = twitter_expand_entities($a, $postarray['body'], $post, false, $picture); + $converted = twitter_expand_entities($a, $postarray['body'], $post, $picture); $postarray['body'] = $converted["body"]; $postarray['tag'] = $converted["tags"]; - $postarray['created'] = datetime_convert('UTC','UTC',$post->created_at); - $postarray['edited'] = datetime_convert('UTC','UTC',$post->created_at); + $postarray['created'] = DateTimeFormat::utc($post->created_at); + $postarray['edited'] = DateTimeFormat::utc($post->created_at); $statustext = $converted["plain"]; @@ -1487,8 +1485,14 @@ function twitter_createpost($a, $uid, $post, $self, $create_user, $only_existing $postarray['body'] = $statustext; - $postarray['body'] .= "\n".share_header($quoted['author-name'], $quoted['author-link'], $quoted['author-avatar'], "", - $quoted['created'], $quoted['plink']); + $postarray['body'] .= "\n" . share_header( + $quoted['author-name'], + $quoted['author-link'], + $quoted['author-avatar'], + "", + $quoted['created'], + $quoted['plink'] + ); $postarray['body'] .= $quoted['body'].'[/share]'; } @@ -1501,8 +1505,8 @@ function twitter_checknotification($a, $uid, $own_id, $top_item, $postarray) { // this whole function doesn't seem to work. Needs complete check $user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` LIMIT 1", - intval($uid) - ); + intval($uid) + ); if(!count($user)) return; @@ -1512,9 +1516,9 @@ function twitter_checknotification($a, $uid, $own_id, $top_item, $postarray) { return; $own_user = q("SELECT * FROM `contact` WHERE `uid` = %d AND `alias` = '%s' LIMIT 1", - intval($uid), - dbesc("twitter::".$own_id) - ); + intval($uid), + dbesc("twitter::".$own_id) + ); if(!count($own_user)) return; @@ -1524,11 +1528,9 @@ function twitter_checknotification($a, $uid, $own_id, $top_item, $postarray) { return; $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)) { + dbesc($postarray['parent-uri']), + intval($uid) + ); foreach($myconv as $conv) { // now if we find a match, it means we're in this conversation @@ -1543,14 +1545,14 @@ function twitter_checknotification($a, $uid, $own_id, $top_item, $postarray) { 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'], + '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(Item::getGuidById($top_item)), + 'source_name' => $postarray['author-name'], + 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], 'verb' => ACTIVITY_POST, 'otype' => 'item', @@ -1579,9 +1581,9 @@ function twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id) } $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", - dbesc("twitter::".$post->id_str), - intval($uid) - ); + dbesc("twitter::".$post->id_str), + intval($uid) + ); if (count($r)) break; @@ -1597,10 +1599,11 @@ function twitter_fetchparentposts($a, $uid, $post, $connection, $self, $own_id) foreach ($posts as $post) { $postarray = twitter_createpost($a, $uid, $post, $self, false, false, false); - if (trim($postarray['body']) == "") + if (trim($postarray['body']) == "") { continue; + } - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('twitter_fetchparentpost: User '.$self["nick"].' posted parent timeline item '.$item); @@ -1626,8 +1629,7 @@ function twitter_fetchhometimeline($a, $uid) { if ($application_name == "") $application_name = $a->get_hostname(); - require_once('library/twitteroauth.php'); - require_once('include/items.php'); + require_once 'include/items.php'; $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); @@ -1712,7 +1714,7 @@ function twitter_fetchhometimeline($a, $uid) { if (trim($postarray['body']) == "") continue; - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; logger('twitter_fetchhometimeline: User '.$self["nick"].' posted home timeline item '.$item); @@ -1759,7 +1761,7 @@ function twitter_fetchhometimeline($a, $uid) { if (trim($postarray['body']) == "") continue; - $item = item_store($postarray); + $item = Item::insert($postarray); $postarray["id"] = $item; if ($item && function_exists("check_item_notification")) @@ -1779,8 +1781,9 @@ function twitter_fetchhometimeline($a, $uid) { $item = $r[0]['id']; $parent_id = $r[0]['parent']; } - } else + } else { $parent_id = $postarray['parent']; + } if (($item != 0) && !function_exists("check_item_notification")) { require_once('include/enotify.php'); @@ -1792,7 +1795,7 @@ function twitter_fetchhometimeline($a, $uid) { 'to_email' => $u[0]['email'], 'uid' => $u[0]['uid'], 'item' => $postarray, - 'link' => $a->get_baseurl().'/display/'.urlencode(get_item_guid($item)), + 'link' => $a->get_baseurl() . '/display/' . urlencode(Item::getGuidById($item)), 'source_name' => $postarray['author-name'], 'source_link' => $postarray['author-link'], 'source_photo' => $postarray['author-avatar'], @@ -1818,9 +1821,7 @@ function twitter_fetch_own_contact($a, $uid) { $contact_id = 0; if ($own_id == "") { - require_once('library/twitteroauth.php'); - - $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); // Fetching user data $user = $connection->get('account/verify_credentials'); @@ -1879,10 +1880,8 @@ function twitter_is_retweet($a, $uid, $body) { $otoken = get_pconfig($uid, 'twitter', 'oauthtoken'); $osecret = get_pconfig($uid, 'twitter', 'oauthsecret'); - require_once('library/twitteroauth.php'); - $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); - - $result = $connection->post('statuses/retweet/'.$id); + $connection = new TwitterOAuth($ckey, $csecret, $otoken, $osecret); + $result = $connection->post('statuses/retweet/' . $id); logger('twitter_is_retweet: result '.print_r($result, true), LOGGER_DEBUG); diff --git a/twitter/twitter_sync.php b/twitter/twitter_sync.php index 5d6e8b2f..7ff3dbb3 100644 --- a/twitter/twitter_sync.php +++ b/twitter/twitter_sync.php @@ -1,10 +1,12 @@ diff --git a/twitter/vendor/abraham/twitteroauth/.gitignore b/twitter/vendor/abraham/twitteroauth/.gitignore new file mode 100644 index 00000000..8213dad6 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/.gitignore @@ -0,0 +1,4 @@ +.DS_Store +composer.lock +vendor +env diff --git a/twitter/vendor/abraham/twitteroauth/.travis.yml b/twitter/vendor/abraham/twitteroauth/.travis.yml new file mode 100644 index 00000000..f55a2b8c --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/.travis.yml @@ -0,0 +1,13 @@ +language: php +dist: trusty +php: + - '5.6' + - '7.0' + - '7.1' + - hhvm +sudo: false +before_script: + - composer self-update + - composer install --prefer-source --no-interaction +script: + - vendor/bin/phpunit diff --git a/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md b/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md new file mode 100644 index 00000000..dae99ffc --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at abraham@abrah.am. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/twitter/vendor/abraham/twitteroauth/LICENSE.md b/twitter/vendor/abraham/twitteroauth/LICENSE.md new file mode 100644 index 00000000..64e83a15 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/LICENSE.md @@ -0,0 +1,22 @@ +Copyright (c) 2009 Abraham Williams - http://abrah.am - abraham@abrah.am + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/twitter/vendor/abraham/twitteroauth/README.md b/twitter/vendor/abraham/twitteroauth/README.md new file mode 100644 index 00000000..cc403416 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/README.md @@ -0,0 +1,10 @@ +TwitterOAuth [![Build Status](https://img.shields.io/travis/abraham/twitteroauth.svg)](https://travis-ci.org/abraham/twitteroauth) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/abraham/twitteroauth/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/abraham/twitteroauth/?branch=master) [![Issues Count](https://img.shields.io/github/issues/abraham/twitteroauth.svg)](https://github.com/abraham/twitteroauth/issues) [![Latest Version](https://img.shields.io/packagist/v/abraham/twitteroauth.svg)](https://packagist.org/packages/abraham/twitteroauth) +------------ + +

The most popular PHP library for Twitter's OAuth REST API.

+ +See documentation at https://twitteroauth.com. + +PHP versions [listed](https://secure.php.net/supported-versions.php) as "active support" or "security fixes only" are supported. + +Twitter bird diff --git a/twitter/vendor/abraham/twitteroauth/autoload.php b/twitter/vendor/abraham/twitteroauth/autoload.php new file mode 100644 index 00000000..cff03e8a --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/autoload.php @@ -0,0 +1,36 @@ + + + Keep TwitterOAuth source code clean. + + + + + + + + diff --git a/twitter/vendor/abraham/twitteroauth/phpunit.xml b/twitter/vendor/abraham/twitteroauth/phpunit.xml new file mode 100644 index 00000000..71cc3e1a --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/phpunit.xml @@ -0,0 +1,11 @@ + + + + + + ./tests/ + + + diff --git a/twitter/vendor/abraham/twitteroauth/src/Config.php b/twitter/vendor/abraham/twitteroauth/src/Config.php new file mode 100644 index 00000000..122016c3 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Config.php @@ -0,0 +1,90 @@ + + */ +class Config +{ + /** @var int How long to wait for a response from the API */ + protected $timeout = 5; + /** @var int how long to wait while connecting to the API */ + protected $connectionTimeout = 5; + /** + * Decode JSON Response as associative Array + * + * @see http://php.net/manual/en/function.json-decode.php + * + * @var bool + */ + protected $decodeJsonAsArray = false; + /** @var string User-Agent header */ + protected $userAgent = 'TwitterOAuth (+https://twitteroauth.com)'; + /** @var array Store proxy connection details */ + protected $proxy = []; + + /** @var bool Whether to encode the curl requests with gzip or not */ + protected $gzipEncoding = true; + + /** @var integer Size for Chunked Uploads */ + protected $chunkSize = 250000; // 0.25 MegaByte + + /** + * Set the connection and response timeouts. + * + * @param int $connectionTimeout + * @param int $timeout + */ + public function setTimeouts($connectionTimeout, $timeout) + { + $this->connectionTimeout = (int)$connectionTimeout; + $this->timeout = (int)$timeout; + } + + /** + * @param bool $value + */ + public function setDecodeJsonAsArray($value) + { + $this->decodeJsonAsArray = (bool)$value; + } + + /** + * @param string $userAgent + */ + public function setUserAgent($userAgent) + { + $this->userAgent = (string)$userAgent; + } + + /** + * @param array $proxy + */ + public function setProxy(array $proxy) + { + $this->proxy = $proxy; + } + + /** + * Whether to encode the curl requests with gzip or not. + * + * @param boolean $gzipEncoding + */ + public function setGzipEncoding($gzipEncoding) + { + $this->gzipEncoding = (bool)$gzipEncoding; + } + + /** + * Set the size of each part of file for chunked media upload. + * + * @param int $value + */ + public function setChunkSize($value) + { + $this->chunkSize = (int)$value; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Consumer.php b/twitter/vendor/abraham/twitteroauth/src/Consumer.php new file mode 100644 index 00000000..ceaf1ef5 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Consumer.php @@ -0,0 +1,36 @@ +key = $key; + $this->secret = $secret; + $this->callbackUrl = $callbackUrl; + } + + /** + * @return string + */ + public function __toString() + { + return "Consumer[key=$this->key,secret=$this->secret]"; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php b/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php new file mode 100644 index 00000000..d8cdab8f --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/HmacSha1.php @@ -0,0 +1,39 @@ +getSignatureBaseString(); + + $parts = [$consumer->secret, null !== $token ? $token->secret : ""]; + + $parts = Util::urlencodeRfc3986($parts); + $key = implode('&', $parts); + + return base64_encode(hash_hmac('sha1', $signatureBase, $key, true)); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Request.php b/twitter/vendor/abraham/twitteroauth/src/Request.php new file mode 100644 index 00000000..a60c23db --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Request.php @@ -0,0 +1,254 @@ +parameters = $parameters; + $this->httpMethod = $httpMethod; + $this->httpUrl = $httpUrl; + } + + /** + * pretty much a helper function to set up the request + * + * @param Consumer $consumer + * @param Token $token + * @param string $httpMethod + * @param string $httpUrl + * @param array $parameters + * + * @return Request + */ + public static function fromConsumerAndToken( + Consumer $consumer, + Token $token = null, + $httpMethod, + $httpUrl, + array $parameters = [] + ) { + $defaults = [ + "oauth_version" => Request::$version, + "oauth_nonce" => Request::generateNonce(), + "oauth_timestamp" => time(), + "oauth_consumer_key" => $consumer->key + ]; + if (null !== $token) { + $defaults['oauth_token'] = $token->key; + } + + $parameters = array_merge($defaults, $parameters); + + return new Request($httpMethod, $httpUrl, $parameters); + } + + /** + * @param string $name + * @param string $value + */ + public function setParameter($name, $value) + { + $this->parameters[$name] = $value; + } + + /** + * @param $name + * + * @return string|null + */ + public function getParameter($name) + { + return isset($this->parameters[$name]) ? $this->parameters[$name] : null; + } + + /** + * @return array + */ + public function getParameters() + { + return $this->parameters; + } + + /** + * @param $name + */ + public function removeParameter($name) + { + unset($this->parameters[$name]); + } + + /** + * The request parameters, sorted and concatenated into a normalized string. + * + * @return string + */ + public function getSignableParameters() + { + // Grab all parameters + $params = $this->parameters; + + // Remove oauth_signature if present + // Ref: Spec: 9.1.1 ("The oauth_signature parameter MUST be excluded.") + if (isset($params['oauth_signature'])) { + unset($params['oauth_signature']); + } + + return Util::buildHttpQuery($params); + } + + /** + * Returns the base string of this request + * + * The base string defined as the method, the url + * and the parameters (normalized), each urlencoded + * and the concated with &. + * + * @return string + */ + public function getSignatureBaseString() + { + $parts = [ + $this->getNormalizedHttpMethod(), + $this->getNormalizedHttpUrl(), + $this->getSignableParameters() + ]; + + $parts = Util::urlencodeRfc3986($parts); + + return implode('&', $parts); + } + + /** + * Returns the HTTP Method in uppercase + * + * @return string + */ + public function getNormalizedHttpMethod() + { + return strtoupper($this->httpMethod); + } + + /** + * parses the url and rebuilds it to be + * scheme://host/path + * + * @return string + */ + public function getNormalizedHttpUrl() + { + $parts = parse_url($this->httpUrl); + + $scheme = $parts['scheme']; + $host = strtolower($parts['host']); + $path = $parts['path']; + + return "$scheme://$host$path"; + } + + /** + * Builds a url usable for a GET request + * + * @return string + */ + public function toUrl() + { + $postData = $this->toPostdata(); + $out = $this->getNormalizedHttpUrl(); + if ($postData) { + $out .= '?' . $postData; + } + return $out; + } + + /** + * Builds the data one would send in a POST request + * + * @return string + */ + public function toPostdata() + { + return Util::buildHttpQuery($this->parameters); + } + + /** + * Builds the Authorization: header + * + * @return string + * @throws TwitterOAuthException + */ + public function toHeader() + { + $first = true; + $out = 'Authorization: OAuth'; + foreach ($this->parameters as $k => $v) { + if (substr($k, 0, 5) != "oauth") { + continue; + } + if (is_array($v)) { + throw new TwitterOAuthException('Arrays not supported in headers'); + } + $out .= ($first) ? ' ' : ', '; + $out .= Util::urlencodeRfc3986($k) . '="' . Util::urlencodeRfc3986($v) . '"'; + $first = false; + } + return $out; + } + + /** + * @return string + */ + public function __toString() + { + return $this->toUrl(); + } + + /** + * @param SignatureMethod $signatureMethod + * @param Consumer $consumer + * @param Token $token + */ + public function signRequest(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null) + { + $this->setParameter("oauth_signature_method", $signatureMethod->getName()); + $signature = $this->buildSignature($signatureMethod, $consumer, $token); + $this->setParameter("oauth_signature", $signature); + } + + /** + * @param SignatureMethod $signatureMethod + * @param Consumer $consumer + * @param Token $token + * + * @return string + */ + public function buildSignature(SignatureMethod $signatureMethod, Consumer $consumer, Token $token = null) + { + return $signatureMethod->buildSignature($this, $consumer, $token); + } + + /** + * @return string + */ + public static function generateNonce() + { + return md5(microtime() . mt_rand()); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Response.php b/twitter/vendor/abraham/twitteroauth/src/Response.php new file mode 100644 index 00000000..982b6ae3 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Response.php @@ -0,0 +1,107 @@ + + */ +class Response +{ + /** @var string|null API path from the most recent request */ + private $apiPath; + /** @var int HTTP status code from the most recent request */ + private $httpCode = 0; + /** @var array HTTP headers from the most recent request */ + private $headers = []; + /** @var array|object Response body from the most recent request */ + private $body = []; + /** @var array HTTP headers from the most recent request that start with X */ + private $xHeaders = []; + + /** + * @param string $apiPath + */ + public function setApiPath($apiPath) + { + $this->apiPath = $apiPath; + } + + /** + * @return string|null + */ + public function getApiPath() + { + return $this->apiPath; + } + + /** + * @param array|object $body + */ + public function setBody($body) + { + $this->body = $body; + } + + /** + * @return array|object|string + */ + public function getBody() + { + return $this->body; + } + + /** + * @param int $httpCode + */ + public function setHttpCode($httpCode) + { + $this->httpCode = $httpCode; + } + + /** + * @return int + */ + public function getHttpCode() + { + return $this->httpCode; + } + + /** + * @param array $headers + */ + public function setHeaders(array $headers) + { + foreach ($headers as $key => $value) { + if (substr($key, 0, 1) == 'x') { + $this->xHeaders[$key] = $value; + } + } + $this->headers = $headers; + } + + /** + * @return array + */ + public function getsHeaders() + { + return $this->headers; + } + + /** + * @param array $xHeaders + */ + public function setXHeaders(array $xHeaders = []) + { + $this->xHeaders = $xHeaders; + } + + /** + * @return array + */ + public function getXHeaders() + { + return $this->xHeaders; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php b/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php new file mode 100644 index 00000000..40fd51e8 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/SignatureMethod.php @@ -0,0 +1,66 @@ +buildSignature($request, $consumer, $token); + + // Check for zero length, although unlikely here + if (strlen($built) == 0 || strlen($signature) == 0) { + return false; + } + + if (strlen($built) != strlen($signature)) { + return false; + } + + // Avoid a timing leak with a (hopefully) time insensitive compare + $result = 0; + for ($i = 0; $i < strlen($signature); $i++) { + $result |= ord($built{$i}) ^ ord($signature{$i}); + } + + return $result == 0; + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Token.php b/twitter/vendor/abraham/twitteroauth/src/Token.php new file mode 100644 index 00000000..140c1ecc --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Token.php @@ -0,0 +1,38 @@ +key = $key; + $this->secret = $secret; + } + + /** + * Generates the basic string serialization of a token that a server + * would respond to request_token and access_token calls with + * + * @return string + */ + public function __toString() + { + return sprintf("oauth_token=%s&oauth_token_secret=%s", + Util::urlencodeRfc3986($this->key), + Util::urlencodeRfc3986($this->secret) + ); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php new file mode 100644 index 00000000..fbb2e418 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuth.php @@ -0,0 +1,508 @@ + + */ +class TwitterOAuth extends Config +{ + const API_VERSION = '1.1'; + const API_HOST = 'https://api.twitter.com'; + const UPLOAD_HOST = 'https://upload.twitter.com'; + + /** @var Response details about the result of the last request */ + private $response; + /** @var string|null Application bearer token */ + private $bearer; + /** @var Consumer Twitter application details */ + private $consumer; + /** @var Token|null User access token details */ + private $token; + /** @var HmacSha1 OAuth 1 signature type used by Twitter */ + private $signatureMethod; + + /** + * Constructor + * + * @param string $consumerKey The Application Consumer Key + * @param string $consumerSecret The Application Consumer Secret + * @param string|null $oauthToken The Client Token (optional) + * @param string|null $oauthTokenSecret The Client Token Secret (optional) + */ + public function __construct($consumerKey, $consumerSecret, $oauthToken = null, $oauthTokenSecret = null) + { + $this->resetLastResponse(); + $this->signatureMethod = new HmacSha1(); + $this->consumer = new Consumer($consumerKey, $consumerSecret); + if (!empty($oauthToken) && !empty($oauthTokenSecret)) { + $this->token = new Token($oauthToken, $oauthTokenSecret); + } + if (empty($oauthToken) && !empty($oauthTokenSecret)) { + $this->bearer = $oauthTokenSecret; + } + } + + /** + * @param string $oauthToken + * @param string $oauthTokenSecret + */ + public function setOauthToken($oauthToken, $oauthTokenSecret) + { + $this->token = new Token($oauthToken, $oauthTokenSecret); + } + + /** + * @return string|null + */ + public function getLastApiPath() + { + return $this->response->getApiPath(); + } + + /** + * @return int + */ + public function getLastHttpCode() + { + return $this->response->getHttpCode(); + } + + /** + * @return array + */ + public function getLastXHeaders() + { + return $this->response->getXHeaders(); + } + + /** + * @return array|object|null + */ + public function getLastBody() + { + return $this->response->getBody(); + } + + /** + * Resets the last response cache. + */ + public function resetLastResponse() + { + $this->response = new Response(); + } + + /** + * Make URLs for user browser navigation. + * + * @param string $path + * @param array $parameters + * + * @return string + */ + public function url($path, array $parameters) + { + $this->resetLastResponse(); + $this->response->setApiPath($path); + $query = http_build_query($parameters); + return sprintf('%s/%s?%s', self::API_HOST, $path, $query); + } + + /** + * Make /oauth/* requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array + * @throws TwitterOAuthException + */ + public function oauth($path, array $parameters = []) + { + $response = []; + $this->resetLastResponse(); + $this->response->setApiPath($path); + $url = sprintf('%s/%s', self::API_HOST, $path); + $result = $this->oAuthRequest($url, 'POST', $parameters); + + if ($this->getLastHttpCode() != 200) { + throw new TwitterOAuthException($result); + } + + parse_str($result, $response); + $this->response->setBody($response); + + return $response; + } + + /** + * Make /oauth2/* requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function oauth2($path, array $parameters = []) + { + $method = 'POST'; + $this->resetLastResponse(); + $this->response->setApiPath($path); + $url = sprintf('%s/%s', self::API_HOST, $path); + $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters); + $authorization = 'Authorization: Basic ' . $this->encodeAppAuthorization($this->consumer); + $result = $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters); + $response = JsonDecoder::decode($result, $this->decodeJsonAsArray); + $this->response->setBody($response); + return $response; + } + + /** + * Make GET requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function get($path, array $parameters = []) + { + return $this->http('GET', self::API_HOST, $path, $parameters); + } + + /** + * Make POST requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function post($path, array $parameters = []) + { + return $this->http('POST', self::API_HOST, $path, $parameters); + } + + /** + * Make DELETE requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function delete($path, array $parameters = []) + { + return $this->http('DELETE', self::API_HOST, $path, $parameters); + } + + /** + * Make PUT requests to the API. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + public function put($path, array $parameters = []) + { + return $this->http('PUT', self::API_HOST, $path, $parameters); + } + + /** + * Upload media to upload.twitter.com. + * + * @param string $path + * @param array $parameters + * @param boolean $chunked + * + * @return array|object + */ + public function upload($path, array $parameters = [], $chunked = false) + { + if ($chunked) { + return $this->uploadMediaChunked($path, $parameters); + } else { + return $this->uploadMediaNotChunked($path, $parameters); + } + } + + /** + * Private method to upload media (not chunked) to upload.twitter.com. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + private function uploadMediaNotChunked($path, array $parameters) + { + $file = file_get_contents($parameters['media']); + $base = base64_encode($file); + $parameters['media'] = $base; + return $this->http('POST', self::UPLOAD_HOST, $path, $parameters); + } + + /** + * Private method to upload media (chunked) to upload.twitter.com. + * + * @param string $path + * @param array $parameters + * + * @return array|object + */ + private function uploadMediaChunked($path, array $parameters) + { + $init = $this->http('POST', self::UPLOAD_HOST, $path, $this->mediaInitParameters($parameters)); + // Append + $segmentIndex = 0; + $media = fopen($parameters['media'], 'rb'); + while (!feof($media)) + { + $this->http('POST', self::UPLOAD_HOST, 'media/upload', [ + 'command' => 'APPEND', + 'media_id' => $init->media_id_string, + 'segment_index' => $segmentIndex++, + 'media_data' => base64_encode(fread($media, $this->chunkSize)) + ]); + } + fclose($media); + // Finalize + $finalize = $this->http('POST', self::UPLOAD_HOST, 'media/upload', [ + 'command' => 'FINALIZE', + 'media_id' => $init->media_id_string + ]); + return $finalize; + } + + /** + * Private method to get params for upload media chunked init. + * Twitter docs: https://dev.twitter.com/rest/reference/post/media/upload-init.html + * + * @param array $parameters + * + * @return array + */ + private function mediaInitParameters(array $parameters) + { + $return = [ + 'command' => 'INIT', + 'media_type' => $parameters['media_type'], + 'total_bytes' => filesize($parameters['media']) + ]; + if (isset($parameters['additional_owners'])) { + $return['additional_owners'] = $parameters['additional_owners']; + } + if (isset($parameters['media_category'])) { + $return['media_category'] = $parameters['media_category']; + } + return $return; + } + + /** + * @param string $method + * @param string $host + * @param string $path + * @param array $parameters + * + * @return array|object + */ + private function http($method, $host, $path, array $parameters) + { + $this->resetLastResponse(); + $url = sprintf('%s/%s/%s.json', $host, self::API_VERSION, $path); + $this->response->setApiPath($path); + $result = $this->oAuthRequest($url, $method, $parameters); + $response = JsonDecoder::decode($result, $this->decodeJsonAsArray); + $this->response->setBody($response); + return $response; + } + + /** + * Format and sign an OAuth / API request + * + * @param string $url + * @param string $method + * @param array $parameters + * + * @return string + * @throws TwitterOAuthException + */ + private function oAuthRequest($url, $method, array $parameters) + { + $request = Request::fromConsumerAndToken($this->consumer, $this->token, $method, $url, $parameters); + if (array_key_exists('oauth_callback', $parameters)) { + // Twitter doesn't like oauth_callback as a parameter. + unset($parameters['oauth_callback']); + } + if ($this->bearer === null) { + $request->signRequest($this->signatureMethod, $this->consumer, $this->token); + $authorization = $request->toHeader(); + if (array_key_exists('oauth_verifier', $parameters)) { + // Twitter doesn't always work with oauth in the body and in the header + // and it's already included in the $authorization header + unset($parameters['oauth_verifier']); + } + } else { + $authorization = 'Authorization: Bearer ' . $this->bearer; + } + return $this->request($request->getNormalizedHttpUrl(), $method, $authorization, $parameters); + } + + /** + * Set Curl options. + * + * @return array + */ + private function curlOptions() + { + $options = [ + // CURLOPT_VERBOSE => true, + CURLOPT_CONNECTTIMEOUT => $this->connectionTimeout, + CURLOPT_HEADER => true, + CURLOPT_RETURNTRANSFER => true, + CURLOPT_SSL_VERIFYHOST => 2, + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_TIMEOUT => $this->timeout, + CURLOPT_USERAGENT => $this->userAgent, + ]; + + if ($this->useCAFile()) { + $options[CURLOPT_CAINFO] = __DIR__ . DIRECTORY_SEPARATOR . 'cacert.pem'; + } + + if($this->gzipEncoding) { + $options[CURLOPT_ENCODING] = 'gzip'; + } + + if (!empty($this->proxy)) { + $options[CURLOPT_PROXY] = $this->proxy['CURLOPT_PROXY']; + $options[CURLOPT_PROXYUSERPWD] = $this->proxy['CURLOPT_PROXYUSERPWD']; + $options[CURLOPT_PROXYPORT] = $this->proxy['CURLOPT_PROXYPORT']; + $options[CURLOPT_PROXYAUTH] = CURLAUTH_BASIC; + $options[CURLOPT_PROXYTYPE] = CURLPROXY_HTTP; + } + + return $options; + } + + /** + * Make an HTTP request + * + * @param string $url + * @param string $method + * @param string $authorization + * @param array $postfields + * + * @return string + * @throws TwitterOAuthException + */ + private function request($url, $method, $authorization, array $postfields) + { + $options = $this->curlOptions($url, $authorization); + $options[CURLOPT_URL] = $url; + $options[CURLOPT_HTTPHEADER] = ['Accept: application/json', $authorization, 'Expect:']; + + switch ($method) { + case 'GET': + break; + case 'POST': + $options[CURLOPT_POST] = true; + $options[CURLOPT_POSTFIELDS] = Util::buildHttpQuery($postfields); + break; + case 'DELETE': + $options[CURLOPT_CUSTOMREQUEST] = 'DELETE'; + break; + case 'PUT': + $options[CURLOPT_CUSTOMREQUEST] = 'PUT'; + break; + } + + if (in_array($method, ['GET', 'PUT', 'DELETE']) && !empty($postfields)) { + $options[CURLOPT_URL] .= '?' . Util::buildHttpQuery($postfields); + } + + + $curlHandle = curl_init(); + curl_setopt_array($curlHandle, $options); + $response = curl_exec($curlHandle); + + // Throw exceptions on cURL errors. + if (curl_errno($curlHandle) > 0) { + throw new TwitterOAuthException(curl_error($curlHandle), curl_errno($curlHandle)); + } + + $this->response->setHttpCode(curl_getinfo($curlHandle, CURLINFO_HTTP_CODE)); + $parts = explode("\r\n\r\n", $response); + $responseBody = array_pop($parts); + $responseHeader = array_pop($parts); + $this->response->setHeaders($this->parseHeaders($responseHeader)); + + curl_close($curlHandle); + + return $responseBody; + } + + /** + * Get the header info to store. + * + * @param string $header + * + * @return array + */ + private function parseHeaders($header) + { + $headers = []; + foreach (explode("\r\n", $header) as $line) { + if (strpos($line, ':') !== false) { + list ($key, $value) = explode(': ', $line); + $key = str_replace('-', '_', strtolower($key)); + $headers[$key] = trim($value); + } + } + return $headers; + } + + /** + * Encode application authorization header with base64. + * + * @param Consumer $consumer + * + * @return string + */ + private function encodeAppAuthorization(Consumer $consumer) + { + $key = rawurlencode($consumer->key); + $secret = rawurlencode($consumer->secret); + return base64_encode($key . ':' . $secret); + } + + /** + * Is the code running from a Phar module. + * + * @return boolean + */ + private function pharRunning() + { + return class_exists('Phar') && \Phar::running(false) !== ''; + } + + /** + * Use included CA file instead of OS provided list. + * + * @return boolean + */ + private function useCAFile() + { + /* Use CACert file when not in a PHAR file. */ + return !$this->pharRunning(); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php new file mode 100644 index 00000000..79903eca --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/TwitterOAuthException.php @@ -0,0 +1,10 @@ + + */ +class TwitterOAuthException extends \Exception +{ +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Util.php b/twitter/vendor/abraham/twitteroauth/src/Util.php new file mode 100644 index 00000000..372af953 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Util.php @@ -0,0 +1,115 @@ + array('b','c'), 'd' => 'e') + * + * @param string $input + * + * @return array + */ + public static function parseParameters($input) + { + if (!is_string($input)) { + return []; + } + + $pairs = explode('&', $input); + + $parameters = []; + foreach ($pairs as $pair) { + $split = explode('=', $pair, 2); + $parameter = Util::urldecodeRfc3986($split[0]); + $value = isset($split[1]) ? Util::urldecodeRfc3986($split[1]) : ''; + + if (isset($parameters[$parameter])) { + // We have already recieved parameter(s) with this name, so add to the list + // of parameters with this name + + if (is_scalar($parameters[$parameter])) { + // This is the first duplicate, so transform scalar (string) into an array + // so we can add the duplicates + $parameters[$parameter] = [$parameters[$parameter]]; + } + + $parameters[$parameter][] = $value; + } else { + $parameters[$parameter] = $value; + } + } + return $parameters; + } + + /** + * @param array $params + * + * @return string + */ + public static function buildHttpQuery(array $params) + { + if (empty($params)) { + return ''; + } + + // Urlencode both keys and values + $keys = Util::urlencodeRfc3986(array_keys($params)); + $values = Util::urlencodeRfc3986(array_values($params)); + $params = array_combine($keys, $values); + + // Parameters are sorted by name, using lexicographical byte value ordering. + // Ref: Spec: 9.1.1 (1) + uksort($params, 'strcmp'); + + $pairs = []; + foreach ($params as $parameter => $value) { + if (is_array($value)) { + // If two or more parameters share the same name, they are sorted by their value + // Ref: Spec: 9.1.1 (1) + // June 12th, 2010 - changed to sort because of issue 164 by hidetaka + sort($value, SORT_STRING); + foreach ($value as $duplicateValue) { + $pairs[] = $parameter . '=' . $duplicateValue; + } + } else { + $pairs[] = $parameter . '=' . $value; + } + } + // For each parameter, the name is separated from the corresponding value by an '=' character (ASCII code 61) + // Each name-value pair is separated by an '&' character (ASCII code 38) + return implode('&', $pairs); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php b/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php new file mode 100644 index 00000000..c8589c53 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php @@ -0,0 +1,26 @@ + + */ +class JsonDecoder +{ + /** + * Decodes a JSON string to stdObject or associative array + * + * @param string $string + * @param bool $asArray + * + * @return array|object + */ + public static function decode($string, $asArray) + { + if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) { + return json_decode($string, $asArray, 512, JSON_BIGINT_AS_STRING); + } + + return json_decode($string, $asArray); + } +} diff --git a/twitter/cacert.pem b/twitter/vendor/abraham/twitteroauth/src/cacert.pem similarity index 63% rename from twitter/cacert.pem rename to twitter/vendor/abraham/twitteroauth/src/cacert.pem index 99b310bc..8849e024 100644 --- a/twitter/cacert.pem +++ b/twitter/vendor/abraham/twitteroauth/src/cacert.pem @@ -1,208 +1,22 @@ ## -## ca-bundle.crt -- Bundle of CA Root Certificates +## Bundle of CA Root Certificates ## -## Certificate data from Mozilla as of: Sat Dec 29 20:03:40 2012 +## Certificate data from Mozilla as of: Wed Jan 18 04:12:05 2017 GMT ## ## This is a bundle of X.509 certificates of public Certificate Authorities ## (CA). These were automatically extracted from Mozilla's root certificates ## file (certdata.txt). This file can be found in the mozilla source tree: -## http://mxr.mozilla.org/mozilla/source/security/nss/lib/ckfw/builtins/certdata.txt?raw=1 +## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt ## ## It contains the certificates in PEM format and therefore ## can be directly used with curl / libcurl / php_curl, or with ## an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## +## Conversion done with mk-ca-bundle.pl version 1.27. +## SHA256: dffa79e6aa993f558e82884abf7bb54bf440ab66ee91d82a27a627f6f2a4ace4 +## -# @(#) $RCSfile: certdata.txt,v $ $Revision: 1.87 $ $Date: 2012/12/29 16:32:45 $ - -GTE CyberTrust Global Root -========================== ------BEGIN CERTIFICATE----- -MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9HVEUg -Q29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNvbHV0aW9ucywgSW5jLjEjMCEG -A1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJvb3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEz -MjM1OTAwWjB1MQswCQYDVQQGEwJVUzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQL -Ex5HVEUgQ3liZXJUcnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0 -IEdsb2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrHiM3dFw4u -sJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTSr41tiGeA5u2ylc9yMcql -HHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X404Wqk2kmhXBIgD8SFcd5tB8FLztimQID -AQABMA0GCSqGSIb3DQEBBAUAA4GBAG3rGwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMW -M4ETCJ57NE7fQMh017l93PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OF -NMQkpw0PlZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ ------END CERTIFICATE----- - -Thawte Server CA -================ ------BEGIN CERTIFICATE----- -MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UE -AxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5j -b20wHhcNOTYwODAxMDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNV -BAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29u -c3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcG -A1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0 -ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl -/Kj0R1HahbUgdJSGHg91yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg7 -1CcEJRCXL+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGjEzAR -MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG7oWDTSEwjsrZqG9J -GubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6eQNuozDJ0uW8NxuOzRAvZim+aKZuZ -GCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZqdq5snUb9kLy78fyGPmJvKP/iiMucEc= ------END CERTIFICATE----- - -Thawte Premium Server CA -======================== ------BEGIN CERTIFICATE----- -MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkExFTATBgNVBAgT -DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3dGUgQ29uc3Vs -dGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UE -AxMYVGhhd3RlIFByZW1pdW0gU2VydmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZl -ckB0aGF3dGUuY29tMB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYT -AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsGA1UEChMU -VGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2VydmljZXMgRGl2 -aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNlcnZlciBDQTEoMCYGCSqGSIb3DQEJARYZ -cHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2 -aovXwlue2oFBYo847kkEVdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIh -Udib0GfQug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMRuHM/ -qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQFAAOBgQAm -SCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUIhfzJATj/Tb7yFkJD57taRvvBxhEf -8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JMpAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7t -UCemDaYj+bvLpgcUQg== ------END CERTIFICATE----- - -Equifax Secure CA -================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE -ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5 -MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT -B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR -fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW -8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE -CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS -spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961 -zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB -BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95 -70+sB3c4 ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 1 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMTAeFw05ODEy -MTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQCgbIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJE -NySZj9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlVSn5JTe2i -o74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMTAxODEwMjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFGp5fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i+DAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -ACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lNQseSJqBcNJo4cvj9axY+IO6CizEq -kzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4 -RbyhkwS7hp86W0N6w4pl ------END CERTIFICATE----- - -Digital Signature Trust Co. Global CA 3 -======================================= ------BEGIN CERTIFICATE----- -MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJVUzEkMCIGA1UE -ChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQLEwhEU1RDQSBFMjAeFw05ODEy -MDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFs -IFNpZ25hdHVyZSBUcnVzdCBDby4xETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUA -A4GLADCBhwKBgQC/k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGOD -VvsoLeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3oTQPMx7JS -xhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCGSAGG+EIBAQQEAwIABzBo -BgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 -dXJlIFRydXN0IENvLjERMA8GA1UECxMIRFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQw -IoAPMTk5ODEyMDkxOTE3MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQY -MBaAFB6CTShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5WzAM -BgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB -AEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHRxdf0CiUPPXiBng+xZ8SQTGPdXqfi -up/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVLB3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1 -mPnHfxsb1gYgAlihw6ID ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBAgUAA4GBALtMEivPLCYA -TxQT3ab7/AoRhIzzKBxnki98tsX63/Dolbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59Ah -WM1pF+NEHJwZRDmJXNycAA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2Omuf -Tqj/ZA1k ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgd -k4xWArzZbxpvUjZudVYKVdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIq -WpDBucSmFc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0Jh9ZrbWB85a7FkCMM -XErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2uluIncrKTdcu1OofdPvAbT6shkdHvC -lUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68DzFc6PLZ ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazAeFw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGljIFByaW1h -cnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNp -Z24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjx -nNuX6Zr8wgQGE75fUsjMHiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRC -wiNPStjwDqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cCAwEA -ATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9jinb3/7aHmZuovCfTK -1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAXrXfMSTWqz9iP0b63GJZHc2pUIjRk -LbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnInjBJ7xUS0rg== ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority - G2 -============================================================ ------BEGIN CERTIFICATE----- -MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMB4XDTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMgUHJpbWFy -eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2ln -biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVz -dCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCO -FoUgRm1HP9SFIIThbbP4pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71 -lSk8UOg013gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwIDAQAB -MA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSkU01UbSuvDV1Ai2TT -1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7iF6YM40AIOw7n60RzKprxaZLvcRTD -Oaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpYoJ2daZH9 ------END CERTIFICATE----- GlobalSign Root CA ================== @@ -247,111 +61,6 @@ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== -----END CERTIFICATE----- -ValiCert Class 1 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIy -MjM0OFoXDTE5MDYyNTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9YLqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIi -GQj4/xEjm84H9b9pGib+TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCm -DuJWBQ8YTfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0LBwG -lN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLWI8sogTLDAHkY7FkX -icnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPwnXS3qT6gpf+2SQMT2iLM7XGCK5nP -Orf1LXLI ------END CERTIFICATE----- - -ValiCert Class 2 VA -=================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MTk1NFoXDTE5MDYyNjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDOOnHK5avIWZJV16vYdA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVC -CSRrCl6zfN1SLUzm1NZ9WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7Rf -ZHM047QSv4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9vUJSZ -SWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTuIYEZoDJJKPTEjlbV -UjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwCW/POuZ6lcg5Ktz885hZo+L7tdEy8 -W9ViH0Pd ------END CERTIFICATE----- - -RSA Root Certificate 1 -====================== ------BEGIN CERTIFICATE----- -MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRp -b24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs -YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZh -bGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAw -MjIzM1oXDTE5MDYyNjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0 -d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMg -UG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0 -LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDjmFGWHOjVsQaBalfDcnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td -3zZxFJmP3MKS8edgkpfs2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89H -BFx1cQqYJJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliEZwgs -3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJn0WuPIqpsHEzXcjF -V9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/APhmcGcwTTYJBtYze4D1gCCAPRX5r -on+jjBXu ------END CERTIFICATE----- - -Verisign Class 1 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDEgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAN2E1Lm0+afY8wR4nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/E -bRrsC+MO8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjVojYJ -rKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjbPG7PoBMAGrgnoeS+ -Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP26KbqxzcSXKMpHgLZ2x87tNcPVkeB -FQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vrn5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -q2aN17O6x5q25lXQBfGfMY1aqtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/N -y9Sn2WCVhDr4wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 -ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrspSCAaWihT37h -a88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4E1Z5T21Q6huwtVexN2ZYI/Pc -D98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== ------END CERTIFICATE----- - -Verisign Class 2 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJBgNVBAYTAlVT -MRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29y -azE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ug -b25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0 -aW9uIEF1dGhvcml0eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJ -BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1 -c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y -aXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBD -ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEArwoNwtUs22e5LeWUJ92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6 -tW8UvxDOJxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUYwZF7 -C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9okoqQHgiBVrKtaaNS -0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjNqWm6o+sdDZykIKbBoMXRRkwXbdKs -Zj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/ESrg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0 -JhU8wI1NQ0kdvekhktdmnLfexbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf -0xwLRtxyID+u7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU -sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RIsH/7NiXaldDx -JBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTPcjnhsUPgKM+351psE2tJs//j -GHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q ------END CERTIFICATE----- - Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ -----BEGIN CERTIFICATE----- @@ -376,65 +85,14 @@ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- -Verisign Class 4 Public Primary Certification Authority - G3 -============================================================ ------BEGIN CERTIFICATE----- -MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV -UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv -cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl -IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh -dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw -CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy -dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv -cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg -Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS -tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM -8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW -Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX -Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA -j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt -mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm -fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd -RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG -UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== ------END CERTIFICATE----- - -Entrust.net Secure Server CA -============================ ------BEGIN CERTIFICATE----- -MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5uZXQvQ1BTIGluY29ycC4gYnkg -cmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRl -ZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTAeFw05OTA1MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIG -A1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBi -eSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1p -dGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0 -aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQ -aO2f55M28Qpku0f1BBc/I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5 -gXpa0zf3wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OCAdcw -ggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHboIHYpIHVMIHSMQsw -CQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5l -dC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF -bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENl -cnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu -dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0MFqBDzIwMTkw -NTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8BdiE1U9s/8KAGv7UISX8+1i0Bow -HQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAaMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA -BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyN -Ewr75Ji174z4xRAN95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9 -n9cd2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= ------END CERTIFICATE----- - Entrust.net Premium 2048 Secure Server CA ========================================= -----BEGIN CERTIFICATE----- -MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx -NzUwNTFaFw0xOTEyMjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 +NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3 d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A @@ -442,14 +100,13 @@ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi -VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo3QwcjARBglghkgBhvhC -AQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGAvtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdER -gL7YibkIozH5oSQJFrlwMB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0B -AQUFAAOCAQEAWUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo -oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQh7A6tcOdBTcS -o8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18f3v/rxzP5tsHrV7bhZ3QKw0z -2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfNB/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjX -OP/swNlQ8C5LWK5Gb9Auw2DaclVyvUxFnmG6v4SBkgPR0ml8xQ== +VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ +KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy +T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT +J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e +nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE= -----END CERTIFICATE----- Baltimore CyberTrust Root @@ -473,60 +130,6 @@ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp -----END CERTIFICATE----- -Equifax Secure Global eBusiness CA -================================== ------BEGIN CERTIFICATE----- -MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBTZWN1cmUgR2xvYmFsIGVCdXNp -bmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIwMDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMx -HDAaBgNVBAoTE0VxdWlmYXggU2VjdXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEds -b2JhbCBlQnVzaW5lc3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRV -PEnCUdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc58O/gGzN -qfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/o5brhTMhHD4ePmBudpxn -hcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAHMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0j -BBgwFoAUvqigdHJQa0S3ySPY+6j/s1draGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hs -MA0GCSqGSIb3DQEBBAUAA4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okEN -I7SS+RkAZ70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv8qIY -NMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 1 -============================= ------BEGIN CERTIFICATE----- -MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -RXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENB -LTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQwMDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UE -ChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNz -IENBLTEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ -1MRoRvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBuWqDZQu4a -IZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKwEnv+j6YDAgMBAAGjZjBk -MBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFEp4MlIR21kW -Nl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRKeDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQF -AAOBgQB1W6ibAxHm6VZMzfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5 -lSE/9dR+WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN/Bf+ -KpYrtWKmpj29f5JZzVoqgrI3eQ== ------END CERTIFICATE----- - -Equifax Secure eBusiness CA 2 -============================= ------BEGIN CERTIFICATE----- -MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEXMBUGA1UE -ChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0y -MB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoT -DkVxdWlmYXggU2VjdXJlMSYwJAYDVQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCB -nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn -2Z0GvxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/BPO3QSQ5 -BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0CAwEAAaOCAQkwggEFMHAG -A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUx -JjAkBgNVBAsTHUVxdWlmYXggU2VjdXJlIGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoG -A1UdEAQTMBGBDzIwMTkwNjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9e -uSBIplBqy/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQFMAMB -Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAAyGgq3oThr1 -jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia -78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUm -V+GRMOrN ------END CERTIFICATE----- - AddTrust Low-Value Services Root ================================ -----BEGIN CERTIFICATE----- @@ -649,27 +252,6 @@ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0 tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8 -----END CERTIFICATE----- -RSA Security 2048 v3 -==================== ------BEGIN CERTIFICATE----- -MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK -ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy -MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb -BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC -AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7 -Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb -WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH -KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP -+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/ -MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E -FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY -v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj -0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj -VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395 -nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA -pKnXwiJPZ9d37CAFYd4= ------END CERTIFICATE----- - GeoTrust Global CA ================== -----BEGIN CERTIFICATE----- @@ -772,84 +354,6 @@ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS -----END CERTIFICATE----- -UTN-USER First-Network Applications -=================================== ------BEGIN CERTIFICATE----- -MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCBozELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzAp -BgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5 -WhcNMTkwNzA5MTg1NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5T -YWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho -dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3QtTmV0d29yayBB -cHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCz+5Gh5DZVhawGNFug -mliy+LUPBXeDrjKxdpJo7CNKyXY/45y2N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4Cj -DUeJT1FxL+78P/m4FoCHiZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXu -Ozr0hAReYFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1axwi -P8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6gyN7igEL66S/ozjIE -j3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8w -HQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPhahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9j -cmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0G -CSqGSIb3DQEBBQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y -IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6LzsQCv4AdRWOOTK -RIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4ZSfP1FMa8Kxun08FDAOBp4Qp -xFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qMYEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAq -DbUMo2s/rn9X9R+WfN9v3YIwLGUbQErNaLly7HF27FSOH4UMAWr6pjisH8SE ------END CERTIFICATE----- - -America Online Root Certification Authority 1 -============================================= ------BEGIN CERTIFICATE----- -MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lkhsmj76CG -v2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym1BW32J/X3HGrfpq/m44z -DyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsWOqMFf6Dch9Wc/HKpoH145LcxVR5lu9Rh -sCFg7RAycsWSJR74kEoYeEfffjA3PlAb2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP -8c9GsEsPPt2IYriMqQkoO3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0T -AQH/BAUwAwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAUAK3Z -o/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQB8itEf -GDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkFZu90821fnZmv9ov761KyBZiibyrF -VL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAbLjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft -3OJvx8Fi8eNy1gTIdGcL+oiroQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43g -Kd8hdIaC2y+CMMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds -sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7 ------END CERTIFICATE----- - -America Online Root Certification Authority 2 -============================================= ------BEGIN CERTIFICATE----- -MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEcMBoGA1UEChMT -QW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBPbmxpbmUgUm9vdCBDZXJ0aWZp -Y2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkG -A1UEBhMCVVMxHDAaBgNVBAoTE0FtZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2Eg -T25saW5lIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQAD -ggIPADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC206B89en -fHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFciKtZHgVdEglZTvYYUAQv8 -f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2JxhP7JsowtS013wMPgwr38oE18aO6lhO -qKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JN -RvCAOVIyD+OEsnpD8l7eXz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0 -gBe4lL8BPeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67Xnfn -6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEqZ8A9W6Wa6897Gqid -FEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZo2C7HK2JNDJiuEMhBnIMoVxtRsX6 -Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnj -B453cMor9H124HhnAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3Op -aaEg5+31IqEjFNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE -AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmnxPBUlgtk87FY -T15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2LHo1YGwRgJfMqZJS5ivmae2p -+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzcccobGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXg -JXUjhx5c3LqdsKyzadsXg8n33gy8CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//Zoy -zH1kUQ7rVyZ2OuMeIjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgO -ZtMADjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2FAjgQ5ANh -1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUXOm/9riW99XJZZLF0Kjhf -GEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPbAZO1XB4Y3WRayhgoPmMEEf0cjQAPuDff -Z4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQlZvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuP -cX/9XhmgD0uRuMRUvAawRY8mkaKO/qk= ------END CERTIFICATE----- - Visa eCommerce Root =================== -----BEGIN CERTIFICATE----- @@ -1084,26 +588,6 @@ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ FL39vmwLAw== -----END CERTIFICATE----- -Sonera Class 1 Root CA -====================== ------BEGIN CERTIFICATE----- -MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG -U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAxMDQwNjEwNDkxM1oXDTIxMDQw -NjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh -IENsYXNzMSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H88 -7dF+2rDNbS82rDTG29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9 -EJUkoVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk3w0LBUXl -0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBLqdReLjVQCfOAl/QMF645 -2F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIINnvmLVz5MxxftLItyM19yejhW1ebZrgUa -HXVFsculJRwSVzb9IjcCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZT -iFIwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE9 -28Jj2VuXZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0HDjxV -yhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VOTzF2nBBhjrZTOqMR -vq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2UvkVrCqIexVmiUefkl98HVrhq4uz2P -qYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4wzMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9Z -IRlXvVWa ------END CERTIFICATE----- - Sonera Class 2 Root CA ====================== -----BEGIN CERTIFICATE----- @@ -1124,131 +608,6 @@ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH llpwrN9M -----END CERTIFICATE----- -Staat der Nederlanden Root CA -============================= ------BEGIN CERTIFICATE----- -MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE -ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g -Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w -HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh -bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt -vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P -jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca -C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth -vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6 -22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV -HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v -dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN -BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR -EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw -MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y -nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR -iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw== ------END CERTIFICATE----- - -TDC Internet Root CA -==================== ------BEGIN CERTIFICATE----- -MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJESzEVMBMGA1UE -ChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTAeFw0wMTA0MDUx -NjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNVBAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJu -ZXQxHTAbBgNVBAsTFFREQyBJbnRlcm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAxLhAvJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20j -xsNuZp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a0vnRrEvL -znWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc14izbSysseLlJ28TQx5yc -5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGNeGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6 -otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcDR0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZI -AYb4QgEBBAQDAgAHMGUGA1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMM -VERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxMEQ1JM -MTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3WjALBgNVHQ8EBAMC -AQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAwHQYDVR0OBBYEFGxkAcf9hW2syNqe -UAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJKoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0G -CSqGSIb3DQEBBQUAA4IBAQBOQ8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540m -gwV5dOy0uaOXwTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+ -2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm899qNLPg7kbWzb -O0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0jUNAE4z9mQNUecYu6oah9jrU -Cbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38aQNiuJkFBT1reBK9sG9l ------END CERTIFICATE----- - -TDC OCES Root CA -================ ------BEGIN CERTIFICATE----- -MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE -ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEwODM5MzBaFw0zNzAyMTEwOTA5 -MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuH -nEz9pPPEXyG9VhDr2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0 -zY0s2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItUGBxIYXvV -iGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKjdGqPqcNiKXEx5TukYBde -dObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+rTpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO -3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB -5DCB4TCB3gYIKoFQgSkBAQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5k -ay9yZXBvc2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRlciBm -cmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4xLiBDZXJ0aWZp -Y2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEuMS4x -LjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1UdHwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEM -MAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYm -aHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy -MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647 -+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6 -NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACromJkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4 -A9G28kNBKWKnctj7fAXmMXAnVBhOinxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYsc -A+UYyAFMP8uXBV2YcaaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9 -AOoBmbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQYqbsFbS1 -AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9BKNDLdr8C2LqL19iUw== ------END CERTIFICATE----- - -UTN DATACorp SGC Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ -BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa -MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w -HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy -dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys -raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo -wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA -9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv -33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud -DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9 -BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD -LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3 -DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft -Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0 -I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx -EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP -DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI ------END CERTIFICATE----- - -UTN USERFirst Email Root CA -=========================== ------BEGIN CERTIFICATE----- -MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0 -BgNVBAMTLVVUTi1VU0VSRmlyc3QtQ2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05 -OTA3MDkxNzI4NTBaFw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQx -FzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsx -ITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UEAxMtVVROLVVTRVJGaXJz -dC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWlsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3BYHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIx -B8dOtINknS4p1aJkxIW9hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8 -om+rWV6lL8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLmSGHG -TPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM1tZUOt4KpLoDd7Nl -yP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws6wIDAQABo4G5MIG2MAsGA1UdDwQE -AwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNV -HR8EUTBPME2gS6BJhkdodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGll -bnRBdXRoZW50aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH -AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u7mFVbwQ+zzne -xRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0xtcgBEXkzYABurorbs6q15L+ -5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQrfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarV -NZ1yQAOJujEdxRBoUp7fooXFXAimeOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZ -w7JHpsIyYdfHb0gkUSeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= ------END CERTIFICATE----- - UTN USERFirst Hardware Root CA ============================== -----BEGIN CERTIFICATE----- @@ -1275,31 +634,6 @@ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67 nfhmqA== -----END CERTIFICATE----- -UTN USERFirst Object Root CA -============================ ------BEGIN CERTIFICATE----- -MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UE -BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl -IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAb -BgNVBAMTFFVUTi1VU0VSRmlyc3QtT2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAz -NlowgZUxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkx -HjAcBgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3dy51c2Vy -dHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicPHxzfOpuCaDDASmEd8S8O+r5596Uj71VR -loTN2+O5bj4x2AogZ8f02b+U60cEPgLOKqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQ -w5ujm9M89RKZd7G3CeBo5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vu -lBe3/IW+pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehbkkj7 -RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUCAwEAAaOBrzCBrDAL -BgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU2u1kdBScFDyr3ZmpvVsoTYs8 -ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly -c3QtT2JqZWN0LmNybDApBgNVHSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQw -DQYJKoZIhvcNAQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw -NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXBmMiKVl0+7kNO -PmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU4U3GDZlDAQ0Slox4nb9QorFE -qmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK581OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCG -hU3IfdeLA/5u1fedFqySLKAj5ZyRUh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= ------END CERTIFICATE----- - Camerfirma Chambers of Commerce Root ==================================== -----BEGIN CERTIFICATE----- @@ -1354,135 +688,6 @@ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== -----END CERTIFICATE----- -NetLock Qualified (Class QA) Root -================================= ------BEGIN CERTIFICATE----- -MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQDEzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVn -eXpvaSAoQ2xhc3MgUUEpIFRhbnVzaXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0 -bG9jay5odTAeFw0wMzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTER -MA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNhZ2kgS2Z0 -LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5ldExvY2sgTWlub3NpdGV0 -dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZhbnlraWFkbzEeMBwGCSqGSIb3DQEJARYP -aW5mb0BuZXRsb2NrLmh1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRV -CacbvWy5FPSKAtt2/GoqeKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e -8ia6AFQer7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO53Lhb -m+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWdvLrqOU+L73Sa58XQ -0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0lmT+1fMptsK6ZmfoIYOcZwvK9UdPM -0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4ICwDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAQYwggJ1BglghkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2 -YW55IGEgTmV0TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh -biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQgZWxla3Ryb25p -a3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywgdmFsYW1pbnQgZWxmb2dhZGFz -YW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwg -YXogQWx0YWxhbm9zIFN6ZXJ6b2Rlc2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kg -ZWxqYXJhcyBtZWd0ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczov -L3d3dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0BuZXRsb2Nr -Lm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0 -aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMg -YXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0 -IGluZm9AbmV0bG9jay5uZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3 -DQEBBQUAA4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQMznN -wNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+NFAwLvt/MpqNPfMg -W/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCRVCHnpgu0mfVRQdzNo0ci2ccBgcTc -R08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR -5qq5aKrN9p2QdRLqOBrKROi3macqaJVmlaut74nLYKkGEsaUR+ko ------END CERTIFICATE----- - -NetLock Notary (Class A) Root -============================= ------BEGIN CERTIFICATE----- -MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI -EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j -ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX -DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH -EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD -VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz -cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM -D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ -z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC -/tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7 -tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6 -4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG -A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC -Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv -bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu -IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn -LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0 -ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz -IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh -IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu -b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh -bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg -Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp -bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5 -ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP -ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB -CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr -KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM -8CgHrTwXZoi1/baI ------END CERTIFICATE----- - -NetLock Business (Class B) Root -=============================== ------BEGIN CERTIFICATE----- -MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQDEylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikg -VGFudXNpdHZhbnlraWFkbzAeFw05OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYD -VQQGEwJIVTERMA8GA1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRv -bnNhZ2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5ldExvY2sg -VXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCB -iQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xKgZjupNTKihe5In+DCnVMm8Bp2GQ5o+2S -o/1bXHQawEfKOml2mrriRBf8TKPV/riXiK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr -1nGTLbO/CVRY7QbrqHvcQ7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNV -HQ8BAf8EBAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZ -RUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRh -dGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQuIEEgaGl0 -ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRv -c2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUg -YXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh -c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBz -Oi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6ZXNA -bmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhl -IHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2 -YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBj -cHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06sPgzTEdM -43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXan3BukxowOR0w2y7jfLKR -stE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKSNitjrFgBazMpUIaD8QFI ------END CERTIFICATE----- - -NetLock Express (Class C) Root -============================== ------BEGIN CERTIFICATE----- -MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUxETAPBgNVBAcT -CEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0b25zYWdpIEtmdC4xGjAYBgNV -BAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQDEytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBD -KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJ -BgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6 -dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMrTmV0TG9j -ayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzANBgkqhkiG9w0BAQEFAAOB -jQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNAOoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3Z -W3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63 -euyucYT2BDMIJTLrdKwWRMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQw -DgYDVR0PAQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEWggJN -RklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0YWxhbm9zIFN6b2xn -YWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBB -IGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBOZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1i -aXp0b3NpdGFzYSB2ZWRpLiBBIGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0 -ZWxlIGF6IGVsb2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs -ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25sYXBqYW4gYSBo -dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kga2VyaGV0byBheiBlbGxlbm9y -emVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4gSU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5k -IHRoZSB1c2Ugb2YgdGhpcyBjZXJ0aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQ -UyBhdmFpbGFibGUgYXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwg -YXQgY3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmYta3UzbM2 -xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2gpO0u9f38vf5NNwgMvOOW -gyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4Fp1hBWeAyNDYpQcCNJgEjTME1A== ------END CERTIFICATE----- - XRamp Global CA Root ==================== -----BEGIN CERTIFICATE----- @@ -1626,54 +831,6 @@ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS -----END CERTIFICATE----- -Firmaprofesional Root CA -======================== ------BEGIN CERTIFICATE----- -MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMxIjAgBgNVBAcT -GUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1dG9yaWRhZCBkZSBDZXJ0aWZp -Y2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FA -ZmlybWFwcm9mZXNpb25hbC5jb20wHhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTEL -MAkGA1UEBhMCRVMxIjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMT -OUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2 -ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20wggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5uCp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5V -j1H5WuretXDE7aTt/6MNbg9kUDGvASdYrv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJH -lShbz++AbOCQl4oBPB3zhxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf -3H5idPayBQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcLiam8 -NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcbAgMBAAGjgZ8wgZww -KgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lvbmFsLmNvbTASBgNVHRMBAf8ECDAG -AQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1Ud -DwEB/wQEAwIBBjAdBgNVHQ4EFgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQAD -ggEBAEdz/o0nVPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq -u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36mhoEyIwOdyPdf -wUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzflZKG+TQyTmAyX9odtsz/ny4Cm -7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBpQWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YG -VM+h4k0460tQtcsm9MracEpqoeJ5quGnM/b9Sh/22WA= ------END CERTIFICATE----- - -Wells Fargo Root CA -=================== ------BEGIN CERTIFICATE----- -MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMCVVMxFDASBgNV -BAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhv -cml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN -MDAxMDExMTY0MTI4WhcNMjEwMTE0MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dl -bGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEv -MC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG -SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n135zHCLielTWi5MbqNQ1mX -x3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHESxP9cMIlrCL1dQu3U+SlK93OvRw6esP3 -E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4OJgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5 -OEL8pahbSCOz6+MlsoCultQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4j -sNtlAHCEAQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMBAAGj -YTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcBCzAyMDAGCCsGAQUF -BwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRwb2xpY3kwDQYJKoZIhvcNAQEFBQAD -ggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrv -m+0fazbuSCUlFLZWohDo7qd/0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0R -OhPs7fpvcmR7nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx -x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ33ZwmVxwQ023 -tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s= ------END CERTIFICATE----- - Swisscom Root CA 1 ================== -----BEGIN CERTIFICATE----- @@ -1838,85 +995,6 @@ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3 oKfN5XozNmr6mis= -----END CERTIFICATE----- -TURKTRUST Certificate Services Provider Root 1 -============================================== ------BEGIN CERTIFICATE----- -MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP -MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0 -acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx -MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg -U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB -TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC -aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC -AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX -yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i -Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ -8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4 -W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME -BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46 -sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE -q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy -B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY -nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H ------END CERTIFICATE----- - -TURKTRUST Certificate Services Provider Root 2 -============================================== ------BEGIN CERTIFICATE----- -MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP -MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg -QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN -MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr -dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G -A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls -acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe -LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI -x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g -QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr -5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB -AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G -A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt -Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4 -Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+ -hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P -9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5 -UrbnBEI= ------END CERTIFICATE----- - -SwissSign Platinum CA - G2 -========================== ------BEGIN CERTIFICATE----- -MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UEBhMCQ0gxFTAT -BgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWduIFBsYXRpbnVtIENBIC0gRzIw -HhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAwWjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMM -U3dpc3NTaWduIEFHMSMwIQYDVQQDExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJ -KoZIhvcNAQEBBQADggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu -669yIIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2HtnIuJpX+UF -eNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+6ixuEFGSzH7VozPY1kne -WCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5objM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIo -j5+saCB9bzuohTEJfwvH6GXp43gOCWcwizSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/6 -8++QHkwFix7qepF6w9fl+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34T -aNhxKFrYzt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaPpZjy -domyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtFKwH3HBqi7Ri6Cr2D -+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuWae5ogObnmLo2t/5u7Su9IPhlGdpV -CX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMBAAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud -EwEB/wQFMAMBAf8wHQYDVR0OBBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCv -zAeHFUdvOMW0ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW -IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUAA4ICAQAIhab1 -Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0uMoI3LQwnkAHFmtllXcBrqS3 -NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4 -U99REJNi54Av4tHgvI42Rncz7Lj7jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8 -KV2LwUvJ4ooTHbG/u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl -9x8DYSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1puEa+S1B -aYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXaicYwu+uPyyIIoK6q8QNs -OktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbGDI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSY -Mdp08YSTcU1f+2BY0fvEwW2JorsgH51xkcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAci -IfNAChs0B0QTwoRqjt8ZWr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== ------END CERTIFICATE----- - SwissSign Gold CA - G2 ====================== -----BEGIN CERTIFICATE----- @@ -2186,30 +1264,6 @@ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY= -----END CERTIFICATE----- -IGC/A -===== ------BEGIN CERTIFICATE----- -MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD -VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE -Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy -MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI -EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT -STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB -IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2 -TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW -So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy -HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd -frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ -tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB -egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC -iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK -q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q -MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg -Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI -lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF -0mBWWg== ------END CERTIFICATE----- - Security Communication EV RootCA1 ================================= -----BEGIN CERTIFICATE----- @@ -2254,32 +1308,6 @@ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0= -----END CERTIFICATE----- -S-TRUST Authentication and Encryption Root CA 2005 PN -===================================================== ------BEGIN CERTIFICATE----- -MIIEezCCA2OgAwIBAgIQNxkY5lNUfBq1uMtZWts1tzANBgkqhkiG9w0BAQUFADCBrjELMAkGA1UE -BhMCREUxIDAeBgNVBAgTF0JhZGVuLVd1ZXJ0dGVtYmVyZyAoQlcpMRIwEAYDVQQHEwlTdHV0dGdh -cnQxKTAnBgNVBAoTIERldXRzY2hlciBTcGFya2Fzc2VuIFZlcmxhZyBHbWJIMT4wPAYDVQQDEzVT -LVRSVVNUIEF1dGhlbnRpY2F0aW9uIGFuZCBFbmNyeXB0aW9uIFJvb3QgQ0EgMjAwNTpQTjAeFw0w -NTA2MjIwMDAwMDBaFw0zMDA2MjEyMzU5NTlaMIGuMQswCQYDVQQGEwJERTEgMB4GA1UECBMXQmFk -ZW4tV3VlcnR0ZW1iZXJnIChCVykxEjAQBgNVBAcTCVN0dXR0Z2FydDEpMCcGA1UEChMgRGV1dHNj -aGVyIFNwYXJrYXNzZW4gVmVybGFnIEdtYkgxPjA8BgNVBAMTNVMtVFJVU1QgQXV0aGVudGljYXRp -b24gYW5kIEVuY3J5cHRpb24gUm9vdCBDQSAyMDA1OlBOMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A -MIIBCgKCAQEA2bVKwdMz6tNGs9HiTNL1toPQb9UY6ZOvJ44TzbUlNlA0EmQpoVXhOmCTnijJ4/Ob -4QSwI7+Vio5bG0F/WsPoTUzVJBY+h0jUJ67m91MduwwA7z5hca2/OnpYH5Q9XIHV1W/fuJvS9eXL -g3KSwlOyggLrra1fFi2SU3bxibYs9cEv4KdKb6AwajLrmnQDaHgTncovmwsdvs91DSaXm8f1Xgqf -eN+zvOyauu9VjxuapgdjKRdZYgkqeQd3peDRF2npW932kKvimAoA0SVtnteFhy+S8dF2g08LOlk3 -KC8zpxdQ1iALCvQm+Z845y2kuJuJja2tyWp9iRe79n+Ag3rm7QIDAQABo4GSMIGPMBIGA1UdEwEB -/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMCkGA1UdEQQiMCCkHjAcMRowGAYDVQQDExFTVFJv -bmxpbmUxLTIwNDgtNTAdBgNVHQ4EFgQUD8oeXHngovMpttKFswtKtWXsa1IwHwYDVR0jBBgwFoAU -D8oeXHngovMpttKFswtKtWXsa1IwDQYJKoZIhvcNAQEFBQADggEBAK8B8O0ZPCjoTVy7pWMciDMD -pwCHpB8gq9Yc4wYfl35UvbfRssnV2oDsF9eK9XvCAPbpEW+EoFolMeKJ+aQAPzFoLtU96G7m1R08 -P7K9n3frndOMusDXtk3sU5wPBG7qNWdX4wple5A64U8+wwCSersFiXOMy6ZNwPv2AtawB6MDwidA -nwzkhYItr5pCHdDHjfhA7p0GVxzZotiAFP7hYy0yh9WUUpY6RsZxlj33mA6ykaqP2vROJAA5Veit -F7nTNCtKqUDMFypVZUF0Qn71wK/Ik63yGFs9iQzbRzkk+OBM8h+wPQrKBU6JIRrjKpms/H+h8Q8b -Hz2eBIPdltkdOpQ= ------END CERTIFICATE----- - Microsec e-Szigno Root CA ========================= -----BEGIN CERTIFICATE----- @@ -2342,117 +1370,6 @@ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== -----END CERTIFICATE----- -AC Ra\xC3\xADz Certic\xC3\xA1mara S.A. -====================================== ------BEGIN CERTIFICATE----- -MIIGZjCCBE6gAwIBAgIPB35Sk3vgFeNX8GmMy+wMMA0GCSqGSIb3DQEBBQUAMHsxCzAJBgNVBAYT -AkNPMUcwRQYDVQQKDD5Tb2NpZWRhZCBDYW1lcmFsIGRlIENlcnRpZmljYWNpw7NuIERpZ2l0YWwg -LSBDZXJ0aWPDoW1hcmEgUy5BLjEjMCEGA1UEAwwaQUMgUmHDrXogQ2VydGljw6FtYXJhIFMuQS4w -HhcNMDYxMTI3MjA0NjI5WhcNMzAwNDAyMjE0MjAyWjB7MQswCQYDVQQGEwJDTzFHMEUGA1UECgw+ -U29jaWVkYWQgQ2FtZXJhbCBkZSBDZXJ0aWZpY2FjacOzbiBEaWdpdGFsIC0gQ2VydGljw6FtYXJh -IFMuQS4xIzAhBgNVBAMMGkFDIFJhw616IENlcnRpY8OhbWFyYSBTLkEuMIICIjANBgkqhkiG9w0B -AQEFAAOCAg8AMIICCgKCAgEAq2uJo1PMSCMI+8PPUZYILrgIem08kBeGqentLhM0R7LQcNzJPNCN -yu5LF6vQhbCnIwTLqKL85XXbQMpiiY9QngE9JlsYhBzLfDe3fezTf3MZsGqy2IiKLUV0qPezuMDU -2s0iiXRNWhU5cxh0T7XrmafBHoi0wpOQY5fzp6cSsgkiBzPZkc0OnB8OIMfuuzONj8LSWKdf/WU3 -4ojC2I+GdV75LaeHM/J4Ny+LvB2GNzmxlPLYvEqcgxhaBvzz1NS6jBUJJfD5to0EfhcSM2tXSExP -2yYe68yQ54v5aHxwD6Mq0Do43zeX4lvegGHTgNiRg0JaTASJaBE8rF9ogEHMYELODVoqDA+bMMCm -8Ibbq0nXl21Ii/kDwFJnmxL3wvIumGVC2daa49AZMQyth9VXAnow6IYm+48jilSH5L887uvDdUhf -HjlvgWJsxS3EF1QZtzeNnDeRyPYL1epjb4OsOMLzP96a++EjYfDIJss2yKHzMI+ko6Kh3VOz3vCa -Mh+DkXkwwakfU5tTohVTP92dsxA7SH2JD/ztA/X7JWR1DhcZDY8AFmd5ekD8LVkH2ZD6mq093ICK -5lw1omdMEWux+IBkAC1vImHFrEsm5VoQgpukg3s0956JkSCXjrdCx2bD0Omk1vUgjcTDlaxECp1b -czwmPS9KvqfJpxAe+59QafMCAwEAAaOB5jCB4zAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE -AwIBBjAdBgNVHQ4EFgQU0QnQ6dfOeXRU+Tows/RtLAMDG2gwgaAGA1UdIASBmDCBlTCBkgYEVR0g -ADCBiTArBggrBgEFBQcCARYfaHR0cDovL3d3dy5jZXJ0aWNhbWFyYS5jb20vZHBjLzBaBggrBgEF -BQcCAjBOGkxMaW1pdGFjaW9uZXMgZGUgZ2FyYW507WFzIGRlIGVzdGUgY2VydGlmaWNhZG8gc2Ug -cHVlZGVuIGVuY29udHJhciBlbiBsYSBEUEMuMA0GCSqGSIb3DQEBBQUAA4ICAQBclLW4RZFNjmEf -AygPU3zmpFmps4p6xbD/CHwso3EcIRNnoZUSQDWDg4902zNc8El2CoFS3UnUmjIz75uny3XlesuX -EpBcunvFm9+7OSPI/5jOCk0iAUgHforA1SBClETvv3eiiWdIG0ADBaGJ7M9i4z0ldma/Jre7Ir5v -/zlXdLp6yQGVwZVR6Kss+LGGIOk/yzVb0hfpKv6DExdA7ohiZVvVO2Dpezy4ydV/NgIlqmjCMRW3 -MGXrfx1IebHPOeJCgBbT9ZMj/EyXyVo3bHwi2ErN0o42gzmRkBDI8ck1fj+404HGIGQatlDCIaR4 -3NAvO2STdPCWkPHv+wlaNECW8DYSwaN0jJN+Qd53i+yG2dIPPy3RzECiiWZIHiCznCNZc6lEc7wk -eZBWN7PGKX6jD/EpOe9+XCgycDWs2rjIdWb8m0w5R44bb5tNAlQiM+9hup4phO9OSzNHdpdqy35f -/RWmnkJDW2ZaiogN9xa5P1FlK2Zqi9E4UqLWRhH6/JocdJ6PlwsCT2TG9WjTSy3/pDceiz+/RL5h -RqGEPQgnTIEgd4kI6mdAXmwIUV80WoyWaM3X94nCHNMyAK9Sy9NgWyo6R35rMDOhYil/SrnhLecU -Iw4OGEfhefwVVdCx/CVxY3UzHCMrr1zZ7Ud3YA47Dx7SwNxkBYn8eNZcLCZDqQ== ------END CERTIFICATE----- - -TC TrustCenter Class 2 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw -MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw -IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2 -xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ -Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u -SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G -dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ -KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj -TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP -JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk -vQ== ------END CERTIFICATE----- - -TC TrustCenter Class 3 CA II -============================ ------BEGIN CERTIFICATE----- -MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy -IENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYw -MTEyMTQ0MTU3WhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1 -c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UE -AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJWHt4bNwcwIi9v8Qbxq63W -yKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+QVl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo -6SI7dYnWRBpl8huXJh0obazovVkdKyT21oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZ -uV3bOx4a+9P/FRQI2AlqukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk -2ZyqBwi1Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1UdEwEB -/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NXXAek0CSnwPIA1DCB -7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90 -Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU -cnVzdENlbnRlciUyMENsYXNzJTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i -SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u -TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlNirTzwppVMXzE -O2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8TtXqluJucsG7Kv5sbviRmEb8 -yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9 -IJqDnxrcOfHFcqMRA/07QlIp2+gB95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal -092Y+tTmBvTwtiBjS+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc -5A== ------END CERTIFICATE----- - -TC TrustCenter Universal CA I -============================= ------BEGIN CERTIFICATE----- -MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN -MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg -VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw -JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC -qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv -xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw -ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O -gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j -BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC -AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG -1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy -vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3 -ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT -ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a -7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY ------END CERTIFICATE----- - Deutsche Telekom Root CA 2 ========================== -----BEGIN CERTIFICATE----- @@ -2475,50 +1392,6 @@ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU Cm26OWMohpLzGITY+9HPBVZkVw== -----END CERTIFICATE----- -ComSign CA -========== ------BEGIN CERTIFICATE----- -MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0MRMwEQYDVQQD -EwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTMy -MThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMTCkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNp -Z24xCzAJBgNVBAYTAklMMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49q -ROR+WCf4C9DklBKK8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTy -P2Q298CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb2CEJKHxN -GGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxCejVb7Us6eva1jsz/D3zk -YDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7KpiXd3DTKaCQeQzC6zJMw9kglcq/QytNuEM -rkvF7zuZ2SOzW120V+x0cAwqTwIDAQABo4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAy -oDCgLoYsaHR0cDovL2ZlZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0P -AQH/BAQDAgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRLAZs+ -VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWdfoPPbrxHbvUanlR2 -QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0McXS6hMTXcpuEfDhOZAYnKuGntewI -mbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb -/627HOkthIDYIb6FUtnUdLlphbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VG -zT2ouvDzuFYkRes3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U -AGegcQCCSA== ------END CERTIFICATE----- - -ComSign Secured CA -================== ------BEGIN CERTIFICATE----- -MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE -AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w -NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD -QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw -ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs -49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH -7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB -kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1 -9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw -AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t -U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA -j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC -AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a -BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp -FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP -51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz -OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== ------END CERTIFICATE----- - Cybertrust Global Root ====================== -----BEGIN CERTIFICATE----- @@ -2600,78 +1473,6 @@ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI= -----END CERTIFICATE----- -Buypass Class 2 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2 -MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M -cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83 -0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4 -0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R -uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV -1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt -7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2 -fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w -wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho ------END CERTIFICATE----- - -Buypass Class 3 CA 1 -==================== ------BEGIN CERTIFICATE----- -MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU -QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1 -MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh -c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI -hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx -ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0 -n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia -AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c -1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC -MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P -AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7 -pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA -EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5 -htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj -el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915 ------END CERTIFICATE----- - -EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 -========================================================================== ------BEGIN CERTIFICATE----- -MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF -bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg -QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe -Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p -ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt -IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG -SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by -X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b -gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr -eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ -TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy -Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn -uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI -qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm -ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0 -Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB -/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW -Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t -FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm -zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k -XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT -bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU -RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK -1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt -2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ -Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9 -AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT ------END CERTIFICATE----- - certSIGN ROOT CA ================ -----BEGIN CERTIFICATE----- @@ -2866,7 +1667,7 @@ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== -----END CERTIFICATE----- NetLock Arany (Class Gold) Főtanúsítvány -============================================ +======================================== -----BEGIN CERTIFICATE----- MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610 @@ -2921,58 +1722,6 @@ IPVVYpbtbZNQvOSqeK3Zywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm 66+KAQ== -----END CERTIFICATE----- -CA Disig -======== ------BEGIN CERTIFICATE----- -MIIEDzCCAvegAwIBAgIBATANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMK -QnJhdGlzbGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwHhcNMDYw -MzIyMDEzOTM0WhcNMTYwMzIyMDEzOTM0WjBKMQswCQYDVQQGEwJTSzETMBEGA1UEBxMKQnJhdGlz -bGF2YTETMBEGA1UEChMKRGlzaWcgYS5zLjERMA8GA1UEAxMIQ0EgRGlzaWcwggEiMA0GCSqGSIb3 -DQEBAQUAA4IBDwAwggEKAoIBAQCS9jHBfYj9mQGp2HvycXXxMcbzdWb6UShGhJd4NLxs/LxFWYgm -GErENx+hSkS943EE9UQX4j/8SFhvXJ56CbpRNyIjZkMhsDxkovhqFQ4/61HhVKndBpnXmjxUizkD -Pw/Fzsbrg3ICqB9x8y34dQjbYkzo+s7552oftms1grrijxaSfQUMbEYDXcDtab86wYqg6I7ZuUUo -hwjstMoVvoLdtUSLLa2GDGhibYVW8qwUYzrG0ZmsNHhWS8+2rT+MitcE5eN4TPWGqvWP+j1scaMt -ymfraHtuM6kMgiioTGohQBUgDCZbg8KpFhXAJIJdKxatymP2dACw30PEEGBWZ2NFAgMBAAGjgf8w -gfwwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUjbJJaJ1yCCW5wCf1UJNWSEZx+Y8wDgYDVR0P -AQH/BAQDAgEGMDYGA1UdEQQvMC2BE2Nhb3BlcmF0b3JAZGlzaWcuc2uGFmh0dHA6Ly93d3cuZGlz -aWcuc2svY2EwZgYDVR0fBF8wXTAtoCugKYYnaHR0cDovL3d3dy5kaXNpZy5zay9jYS9jcmwvY2Ff -ZGlzaWcuY3JsMCygKqAohiZodHRwOi8vY2EuZGlzaWcuc2svY2EvY3JsL2NhX2Rpc2lnLmNybDAa -BgNVHSAEEzARMA8GDSuBHpGT5goAAAABAQEwDQYJKoZIhvcNAQEFBQADggEBAF00dGFMrzvY/59t -WDYcPQuBDRIrRhCA/ec8J9B6yKm2fnQwM6M6int0wHl5QpNt/7EpFIKrIYwvF/k/Ji/1WcbvgAa3 -mkkp7M5+cTxqEEHA9tOasnxakZzArFvITV734VP/Q3f8nktnbNfzg9Gg4H8l37iYC5oyOGwwoPP/ -CBUz91BKez6jPiCp3C9WgArtQVCwyfTssuMmRAAOb54GvCKWU3BlxFAKRmukLyeBEicTXxChds6K -ezfqwzlhA5WYOudsiCUI/HloDYd9Yvi0X/vF2Ey9WLw/Q1vUHgFNPGO+I++MzVpQuGhU+QqZMxEA -4Z7CRneC9VkGjCFMhwnN5ag= ------END CERTIFICATE----- - -Juur-SK -======= ------BEGIN CERTIFICATE----- -MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcNAQkBFglwa2lA -c2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMRAw -DgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMwMVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqG -SIb3DQEJARYJcGtpQHNrLmVlMQswCQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVy -aW1pc2tlc2t1czEQMA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC -ggEBAIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOBSvZiF3tf -TQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkzABpTpyHhOEvWgxutr2TC -+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvHLCu3GFH+4Hv2qEivbDtPL+/40UceJlfw -UR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMPPbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDa -Tpxt4brNj3pssAki14sL2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQF -MAMBAf8wggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwICMIHD -HoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDkAGwAagBhAHMAdABh -AHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0AHMAZQBlAHIAaQBtAGkAcwBrAGUA -cwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABzAGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABr -AGkAbgBuAGkAdABhAG0AaQBzAGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nw -cy8wKwYDVR0fBCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE -FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcYP2/v6X2+MA4G -A1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOiCfP+JmeaUOTDBS8rNXiRTHyo -ERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+gkcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyL -abVAyJRld/JXIWY7zoVAtjNjGr95HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678 -IIbsSt4beDI3poHSna9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkh -Mp6qqIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0ZTbvGRNs2 -yyqcjg== ------END CERTIFICATE----- - Hongkong Post Root CA 1 ======================= -----BEGIN CERTIFICATE----- @@ -3045,38 +1794,6 @@ MCwXEGCSn1WHElkQwg9naRHMTh5+Spqtr0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3o tkYNbn5XOmeUwssfnHdKZ05phkOTOPu220+DkdRgfks+KzgHVZhepA== -----END CERTIFICATE----- -Verisign Class 1 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCED9pHoGc8JpK83P/uUii5N0wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAxIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAx -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDlGb9to1ZhLZlIcfZn3rmN67eehoAKkQ76OCWvRoiC5XOooJskXQ0fzGVuDLDQ -VoQYh5oGmxChc9+0WDlrbsH2FdWoqD+qEgaNMax/sDTXjzRniAnNFBHiTkVWaR94AoDa3EeRKbs2 -yWNcxeDXLYd7obcysHswuiovMaruo2fa2wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFgVKTk8d6Pa -XCUDfGD67gmZPCcQcMgMCeazh88K4hiWNWLMv5sneYlfycQJ9M61Hd8qveXbhpxoJeUwfLaJFf5n -0a3hUKw8fGJLj7qE1xIVGx/KXQ/BUpQqEZnae88MNhPVNdwQGVnqlMEAv3WP2fr9dgTbYruQagPZ -RjXZ+Hxb ------END CERTIFICATE----- - -Verisign Class 3 Public Primary Certification Authority -======================================================= ------BEGIN CERTIFICATE----- -MIICPDCCAaUCEDyRMcsf9tAbDpq40ES/Er4wDQYJKoZIhvcNAQEFBQAwXzELMAkGA1UEBhMCVVMx -FzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmltYXJ5 -IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2MDEyOTAwMDAwMFoXDTI4MDgwMjIzNTk1OVow -XzELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAz -IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUA -A4GNADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhEBarsAx94 -f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/isI19wKTakyYbnsZogy1Ol -hec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBABByUqkFFBky -CEHwxWsKzH4PIRnN5GfcX6kb5sroc50i2JhucwNhkcV8sEVAbkSdjbCxlnRhLQ2pRdKkkirWmnWX -bj9T/UWZYB2oK0z5XqcJ2HUw19JlYD1n1khVdWk/kfVIC0dpImmClr7JyDiGSnoscxlIaU5rfGW/ -D/xwzoiQ ------END CERTIFICATE----- - Microsec e-Szigno Root CA 2009 ============================== -----BEGIN CERTIFICATE----- @@ -3101,28 +1818,6 @@ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi LXpUq3DDfSJlgnCW -----END CERTIFICATE----- -E-Guven Kok Elektronik Sertifika Hizmet Saglayicisi -=================================================== ------BEGIN CERTIFICATE----- -MIIDtjCCAp6gAwIBAgIQRJmNPMADJ72cdpW56tustTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG -EwJUUjEoMCYGA1UEChMfRWxla3Ryb25payBCaWxnaSBHdXZlbmxpZ2kgQS5TLjE8MDoGA1UEAxMz -ZS1HdXZlbiBLb2sgRWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhZ2xheWljaXNpMB4XDTA3 -MDEwNDExMzI0OFoXDTE3MDEwNDExMzI0OFowdTELMAkGA1UEBhMCVFIxKDAmBgNVBAoTH0VsZWt0 -cm9uaWsgQmlsZ2kgR3V2ZW5saWdpIEEuUy4xPDA6BgNVBAMTM2UtR3V2ZW4gS29rIEVsZWt0cm9u -aWsgU2VydGlmaWthIEhpem1ldCBTYWdsYXlpY2lzaTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC -AQoCggEBAMMSIJ6wXgBljU5Gu4Bc6SwGl9XzcslwuedLZYDBS75+PNdUMZTe1RK6UxYC6lhj71vY -8+0qGqpxSKPcEC1fX+tcS5yWCEIlKBHMilpiAVDV6wlTL/jDj/6z/P2douNffb7tC+Bg62nsM+3Y -jfsSSYMAyYuXjDtzKjKzEve5TfL0TW3H5tYmNwjy2f1rXKPlSFxYvEK+A1qBuhw1DADT9SN+cTAI -JjjcJRFHLfO6IxClv7wC90Nex/6wN1CZew+TzuZDLMN+DfIcQ2Zgy2ExR4ejT669VmxMvLz4Bcpk -9Ok0oSy1c+HCPujIyTQlCFzz7abHlJ+tiEMl1+E5YP6sOVkCAwEAAaNCMEAwDgYDVR0PAQH/BAQD -AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJ/uRLOU1fqRTy7ZVZoEVtstxNulMA0GCSqG -SIb3DQEBBQUAA4IBAQB/X7lTW2M9dTLn+sR0GstG30ZpHFLPqk/CaOv/gKlR6D1id4k9CnU58W5d -F4dvaAXBlGzZXd/aslnLpRCKysw5zZ/rTt5S/wzw9JKp8mxTq5vSR6AfdPebmvEvFZ96ZDAYBzwq -D2fK/A+JYZ1lpTzlvBNbCNvj/+27BrtqBrF6T2XGgv0enIu1De5Iu7i9qgi0+6N8y5/NkHZchpZ4 -Vwpm+Vganf2XKWDeEaaQHBkc7gGWIjQ0LpH5t8Qn0Xvmv/uARFoW5evg1Ao4vOSR49XrXMGs3xtq -fJ7lddK2l4fbzIcrQzqECK+rPNv3PGYxhrCdU3nt+CPeQuMtgvEP5fqX ------END CERTIFICATE----- - GlobalSign Root CA - R3 ======================= -----BEGIN CERTIFICATE----- @@ -3144,29 +1839,6 @@ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r kpeDMdmztcpHWD9f -----END CERTIFICATE----- -TC TrustCenter Universal CA III -=============================== ------BEGIN CERTIFICATE----- -MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezELMAkGA1UEBhMC -REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy -IFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAe -Fw0wOTA5MDkwODE1MjdaFw0yOTEyMzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNU -QyBUcnVzdENlbnRlciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0Ex -KDAmBgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqGSIb3DQEB -AQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF5+cvAqBNLaT6hdqbJYUt -QCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYvDIRlzg9uwliT6CwLOunBjvvya8o84pxO -juT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8vzArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+Eut -CHnNaYlAJ/Uqwa1D7KRTyGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1 -M4BDj5yjdipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBhMB8G -A1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ -BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI4jANBgkqhkiG9w0BAQUFAAOCAQEA -g8ev6n9NCjw5sWi+e22JLumzCecYV42FmhfzdkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+ -KGwWaODIl0YgoGhnYIg5IFHYaAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhK -BgePxLcHsU0GDeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV -CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPHLQNjO9Po5KIq -woIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== ------END CERTIFICATE----- - Autoridad de Certificacion Firmaprofesional CIF A62634068 ========================================================= -----BEGIN CERTIFICATE----- @@ -3483,7 +2155,7 @@ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI -----END CERTIFICATE----- Certinomis - Autorité Racine -============================= +============================ -----BEGIN CERTIFICATE----- MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjETMBEGA1UEChMK Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAkBgNVBAMMHUNlcnRpbm9taXMg @@ -3513,64 +2185,6 @@ wk01+dIL8hf2rGbVJLJP0RyZwG71fet0BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/ vgt2Fl43N+bYdJeimUV5 -----END CERTIFICATE----- -Root CA Generalitat Valenciana -============================== ------BEGIN CERTIFICATE----- -MIIGizCCBXOgAwIBAgIEO0XlaDANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJFUzEfMB0GA1UE -ChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290 -IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwHhcNMDEwNzA2MTYyMjQ3WhcNMjEwNzAxMTUyMjQ3 -WjBoMQswCQYDVQQGEwJFUzEfMB0GA1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UE -CxMGUEtJR1ZBMScwJQYDVQQDEx5Sb290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmEwggEiMA0G -CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGKqtXETcvIorKA3Qdyu0togu8M1JAJke+WmmmO3I2 -F0zo37i7L3bhQEZ0ZQKQUgi0/6iMweDHiVYQOTPvaLRfX9ptI6GJXiKjSgbwJ/BXufjpTjJ3Cj9B -ZPPrZe52/lSqfR0grvPXdMIKX/UIKFIIzFVd0g/bmoGlu6GzwZTNVOAydTGRGmKy3nXiz0+J2ZGQ -D0EbtFpKd71ng+CT516nDOeB0/RSrFOyA8dEJvt55cs0YFAQexvba9dHq198aMpunUEDEO5rmXte -JajCq+TA81yc477OMUxkHl6AovWDfgzWyoxVjr7gvkkHD6MkQXpYHYTqWBLI4bft75PelAgxAgMB -AAGjggM7MIIDNzAyBggrBgEFBQcBAQQmMCQwIgYIKwYBBQUHMAGGFmh0dHA6Ly9vY3NwLnBraS5n -dmEuZXMwEgYDVR0TAQH/BAgwBgEB/wIBAjCCAjQGA1UdIASCAiswggInMIICIwYKKwYBBAG/VQIB -ADCCAhMwggHoBggrBgEFBQcCAjCCAdoeggHWAEEAdQB0AG8AcgBpAGQAYQBkACAAZABlACAAQwBl -AHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAFIAYQDtAHoAIABkAGUAIABsAGEAIABHAGUAbgBlAHIA -YQBsAGkAdABhAHQAIABWAGEAbABlAG4AYwBpAGEAbgBhAC4ADQAKAEwAYQAgAEQAZQBjAGwAYQBy -AGEAYwBpAPMAbgAgAGQAZQAgAFAAcgDhAGMAdABpAGMAYQBzACAAZABlACAAQwBlAHIAdABpAGYA -aQBjAGEAYwBpAPMAbgAgAHEAdQBlACAAcgBpAGcAZQAgAGUAbAAgAGYAdQBuAGMAaQBvAG4AYQBt -AGkAZQBuAHQAbwAgAGQAZQAgAGwAYQAgAHAAcgBlAHMAZQBuAHQAZQAgAEEAdQB0AG8AcgBpAGQA -YQBkACAAZABlACAAQwBlAHIAdABpAGYAaQBjAGEAYwBpAPMAbgAgAHMAZQAgAGUAbgBjAHUAZQBu -AHQAcgBhACAAZQBuACAAbABhACAAZABpAHIAZQBjAGMAaQDzAG4AIAB3AGUAYgAgAGgAdAB0AHAA -OgAvAC8AdwB3AHcALgBwAGsAaQAuAGcAdgBhAC4AZQBzAC8AYwBwAHMwJQYIKwYBBQUHAgEWGWh0 -dHA6Ly93d3cucGtpLmd2YS5lcy9jcHMwHQYDVR0OBBYEFHs100DSHHgZZu90ECjcPk+yeAT8MIGV -BgNVHSMEgY0wgYqAFHs100DSHHgZZu90ECjcPk+yeAT8oWykajBoMQswCQYDVQQGEwJFUzEfMB0G -A1UEChMWR2VuZXJhbGl0YXQgVmFsZW5jaWFuYTEPMA0GA1UECxMGUEtJR1ZBMScwJQYDVQQDEx5S -b290IENBIEdlbmVyYWxpdGF0IFZhbGVuY2lhbmGCBDtF5WgwDQYJKoZIhvcNAQEFBQADggEBACRh -TvW1yEICKrNcda3FbcrnlD+laJWIwVTAEGmiEi8YPyVQqHxK6sYJ2fR1xkDar1CdPaUWu20xxsdz -Ckj+IHLtb8zog2EWRpABlUt9jppSCS/2bxzkoXHPjCpaF3ODR00PNvsETUlR4hTJZGH71BTg9J63 -NI8KJr2XXPR5OkowGcytT6CYirQxlyric21+eLj4iIlPsSKRZEv1UN4D2+XFducTZnV+ZfsBn5OH -iJ35Rld8TWCvmHMTI6QgkYH60GFmuH3Rr9ZvHmw96RH9qfmCIoaZM3Fa6hlXPZHNqcCjbgcTpsnt -+GijnsNacgmHKNHEc8RzGF9QdRYxn7fofMM= ------END CERTIFICATE----- - -A-Trust-nQual-03 -================ ------BEGIN CERTIFICATE----- -MIIDzzCCAregAwIBAgIDAWweMA0GCSqGSIb3DQEBBQUAMIGNMQswCQYDVQQGEwJBVDFIMEYGA1UE -Cgw/QS1UcnVzdCBHZXMuIGYuIFNpY2hlcmhlaXRzc3lzdGVtZSBpbSBlbGVrdHIuIERhdGVudmVy -a2VociBHbWJIMRkwFwYDVQQLDBBBLVRydXN0LW5RdWFsLTAzMRkwFwYDVQQDDBBBLVRydXN0LW5R -dWFsLTAzMB4XDTA1MDgxNzIyMDAwMFoXDTE1MDgxNzIyMDAwMFowgY0xCzAJBgNVBAYTAkFUMUgw -RgYDVQQKDD9BLVRydXN0IEdlcy4gZi4gU2ljaGVyaGVpdHNzeXN0ZW1lIGltIGVsZWt0ci4gRGF0 -ZW52ZXJrZWhyIEdtYkgxGTAXBgNVBAsMEEEtVHJ1c3QtblF1YWwtMDMxGTAXBgNVBAMMEEEtVHJ1 -c3QtblF1YWwtMDMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtPWFuA/OQO8BBC4SA -zewqo51ru27CQoT3URThoKgtUaNR8t4j8DRE/5TrzAUjlUC5B3ilJfYKvUWG6Nm9wASOhURh73+n -yfrBJcyFLGM/BWBzSQXgYHiVEEvc+RFZznF/QJuKqiTfC0Li21a8StKlDJu3Qz7dg9MmEALP6iPE -SU7l0+m0iKsMrmKS1GWH2WrX9IWf5DMiJaXlyDO6w8dB3F/GaswADm0yqLaHNgBid5seHzTLkDx4 -iHQF63n1k3Flyp3HaxgtPVxO59X4PzF9j4fsCiIvI+n+u33J4PTs63zEsMMtYrWacdaxaujs2e3V -cuy+VwHOBVWf3tFgiBCzAgMBAAGjNjA0MA8GA1UdEwEB/wQFMAMBAf8wEQYDVR0OBAoECERqlWdV -eRFPMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAVdRU0VlIXLOThaq/Yy/kgM40 -ozRiPvbY7meIMQQDbwvUB/tOdQ/TLtPAF8fGKOwGDREkDg6lXb+MshOWcdzUzg4NCmgybLlBMRmr -sQd7TZjTXLDR8KdCoLXEjq/+8T/0709GAHbrAvv5ndJAlseIOrifEXnzgGWovR/TeIGgUUw3tKZd -JXDRZslo+S4RFGjxVJgIrCaSD96JntT6s3kr0qN51OyLrIdTaEJMUVF0HhsnLuP1Hyl0Te2v9+GS -mYHovjrHF1D2t8b8m7CKa9aIA5GPBnc6hQLdmNVDeD/GMBWsm2vLV7eJUYs66MmEDNuxUCAKGkq6 -ahq97BvIxYSazQ== ------END CERTIFICATE----- - TWCA Root Certification Authority ================================= -----BEGIN CERTIFICATE----- @@ -3893,3 +2507,1537 @@ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM dcGWxZ0= -----END CERTIFICATE----- + +TURKTRUST Certificate Services Provider Root 2007 +================================================= +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP +MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg +QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X +DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl +a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N +YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv +KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya +KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT +rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC +AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s +Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO +Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb +BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK +poRq0Tl9 +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 2009 +============================== +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe +Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE +LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD +ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA +BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv +KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z +p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC +AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ +4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y +eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw +MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G +PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw +OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm +2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV +dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph +X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- + +D-TRUST Root Class 3 CA 2 EV 2009 +================================= +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK +DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw +OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS +egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh +zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T +7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60 +sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35 +11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv +cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v +ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El +MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp +b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh +c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+ +PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX +ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA +NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv +w9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- + +PSCProcert +========== +-----BEGIN CERTIFICATE----- +MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk +ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ +MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz +dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl +cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw +IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw +MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w +DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD +ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp +Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw +DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC +wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA +3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh +RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO +EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2 +0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH +0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU +td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw +Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp +r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/ +AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz +Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId +xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp +ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH +EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h +Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k +ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG +9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG +MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG +LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52 +ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy +YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v +Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o +dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq +T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN +g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q +uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1 +n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn +FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo +5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq +3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5 +poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y +eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km +-----END CERTIFICATE----- + +China Internet Network Information Center EV Certificates Root +============================================================== +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgIESJ8AATANBgkqhkiG9w0BAQUFADCBijELMAkGA1UEBhMCQ04xMjAwBgNV +BAoMKUNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyMUcwRQYDVQQDDD5D +aGluYSBJbnRlcm5ldCBOZXR3b3JrIEluZm9ybWF0aW9uIENlbnRlciBFViBDZXJ0aWZpY2F0ZXMg +Um9vdDAeFw0xMDA4MzEwNzExMjVaFw0zMDA4MzEwNzExMjVaMIGKMQswCQYDVQQGEwJDTjEyMDAG +A1UECgwpQ2hpbmEgSW50ZXJuZXQgTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIxRzBFBgNVBAMM +PkNoaW5hIEludGVybmV0IE5ldHdvcmsgSW5mb3JtYXRpb24gQ2VudGVyIEVWIENlcnRpZmljYXRl +cyBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAm35z7r07eKpkQ0H1UN+U8i6y +jUqORlTSIRLIOTJCBumD1Z9S7eVnAztUwYyZmczpwA//DdmEEbK40ctb3B75aDFk4Zv6dOtouSCV +98YPjUesWgbdYavi7NifFy2cyjw1l1VxzUOFsUcW9SxTgHbP0wBkvUCZ3czY28Sf1hNfQYOL+Q2H +klY0bBoQCxfVWhyXWIQ8hBouXJE0bhlffxdpxWXvayHG1VA6v2G5BY3vbzQ6sm8UY78WO5upKv23 +KzhmBsUs4qpnHkWnjQRmQvaPK++IIGmPMowUc9orhpFjIpryp9vOiYurXccUwVswah+xt54ugQEC +7c+WXmPbqOY4twIDAQABo2MwYTAfBgNVHSMEGDAWgBR8cks5x8DbYqVPm6oYNJKiyoOCWTAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUfHJLOcfA22KlT5uqGDSSosqD +glkwDQYJKoZIhvcNAQEFBQADggEBACrDx0M3j92tpLIM7twUbY8opJhJywyA6vPtI2Z1fcXTIWd5 +0XPFtQO3WKwMVC/GVhMPMdoG52U7HW8228gd+f2ABsqjPWYWqJ1MFn3AlUa1UeTiH9fqBk1jjZaM +7+czV0I664zBechNdn3e9rG3geCg+aF4RhcaVpjwTj2rHO3sOdwHSPdj/gauwqRcalsyiMXHM4Ws +ZkJHwlgkmeHlPuV1LI5D1l08eB6olYIpUNHRFrrvwb562bTYzB5MRuF3sTGrvSrIzo9uoV1/A3U0 +5K2JRVRevq4opbs/eHnrc7MKDf2+yfdWrPa37S+bISnHOLaVxATywy39FCqQmbkHzJ8= +-----END CERTIFICATE----- + +Swisscom Root CA 2 +================== +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBkMQswCQYDVQQG +EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy +dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2 +MjUwNzM4MTRaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln +aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIIC +IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvErjw0DzpPM +LgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r0rk0X2s682Q2zsKwzxNo +ysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJ +wDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVPACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpH +Wrumnf2U5NGKpV+GY3aFy6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1a +SgJA/MTAtukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL6yxS +NLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0uPoTXGiTOmekl9Ab +mbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrALacywlKinh/LTSlDcX3KwFnUey7QY +Ypqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velhk6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3 +qPyZ7iVNTA6z00yPhOgpD/0QVAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw +HQYDVR0hBBYwFDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O +BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqhb97iEoHF8Twu +MA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4RfbgZPnm3qKhyN2abGu2sEzsO +v2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ +82YqZh6NM4OKb3xuqFp1mrjX2lhIREeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLz +o9v/tdhZsnPdTSpxsrpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcs +a0vvaGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciATwoCqISxx +OQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99nBjx8Oto0QuFmtEYE3saW +mA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5Wt6NlUe07qxS/TFED6F+KBZvuim6c779o ++sjaC+NCydAXFJy3SuCvkychVSa1ZC+N8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TC +rvJcwhbtkj6EPnNgiLx29CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX +5OfNeOI5wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- + +Swisscom Root EV CA 2 +===================== +-----BEGIN CERTIFICATE----- +MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAwZzELMAkGA1UE +BhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdpdGFsIENlcnRpZmljYXRlIFNl +cnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcN +MzEwNjI1MDg0NTA4WjBnMQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsT +HERpZ2l0YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYg +Q0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7BxUglgRCgz +o3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD1ycfMQ4jFrclyxy0uYAy +Xhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPHoCE2G3pXKSinLr9xJZDzRINpUKTk4Rti +GZQJo/PDvO/0vezbE53PnUgJUmfANykRHvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8Li +qG12W0OfvrSdsyaGOx9/5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaH +Za0zKcQvidm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHLOdAG +alNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaCNYGu+HuB5ur+rPQa +m3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f46Fq9mDU5zXNysRojddxyNMkM3Ox +bPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCBUWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDi +xzgHcgplwLa7JSnaFp6LNYth7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED +MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWBbj2ITY1x0kbB +bkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6xXCX5145v9Ydkn+0UjrgEjihL +j6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98TPLr+flaYC/NUn81ETm484T4VvwYmneTwkLbU +wp4wLh/vx3rEUMfqe9pQy3omywC0Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7 +XwgiG/W9mR4U9s70WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH +59yLGn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm7JFe3VE/ +23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4Snr8PyQUQ3nqjsTzyP6Wq +J3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VNvBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyA +HmBR3NdUIR7KYndP+tiPsys6DXhyyWhBWkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/gi +uMod89a2GQ+fYWVq6nTIfI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuW +l8PVP3wbI+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- + +CA Disig Root R1 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQyMDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy +3QRkD2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/oOI7bm+V8 +u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3AfQ+lekLZWnDZv6fXARz2 +m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJeIgpFy4QxTaz+29FHuvlglzmxZcfe+5nk +CiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8noc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTa +YVKvJrT1cU/J19IG32PK/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6 +vpmumwKjrckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD3AjL +LhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE7cderVC6xkGbrPAX +ZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkCyC2fg69naQanMVXVz0tv/wQFx1is +XxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLdqvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ +04IwDQYJKoZIhvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaASfX8MPWbTx9B +LxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXoHqJPYNcHKfyyo6SdbhWSVhlM +CrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpBemOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5Gfb +VSUZP/3oNn6z4eGBrxEWi1CXYBmCAMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85 +YmLLW1AL14FABZyb7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKS +ds+xDzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvkF7mGnjix +lAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqFa3qdnom2piiZk4hA9z7N +UaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsTQ6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJ +a7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- + +CA Disig Root R2 +================ +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNVBAYTAlNLMRMw +EQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMuMRkwFwYDVQQDExBDQSBEaXNp +ZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQyMDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sx +EzARBgNVBAcTCkJyYXRpc2xhdmExEzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERp +c2lnIFJvb3QgUjIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbC +w3OeNcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNHPWSb6Wia +xswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3Ix2ymrdMxp7zo5eFm1tL7 +A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbeQTg06ov80egEFGEtQX6sx3dOy1FU+16S +GBsEWmjGycT6txOgmLcRK7fWV8x8nhfRyyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqV +g8NTEQxzHQuyRpDRQjrOQG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa +5Beny912H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJQfYE +koopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUDi/ZnWejBBhG93c+A +Ak9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORsnLMOPReisjQS1n6yqEm70XooQL6i +Fh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5u +Qu0wDQYJKoZIhvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqfGopTpti72TVV +sRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkblvdhuDvEK7Z4bLQjb/D907Je +dR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka+elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W8 +1k/BfDxujRNt+3vrMNDcTa/F1balTFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjx +mHHEt38OFdAlab0inSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01 +utI3gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18DrG5gPcFw0 +sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3OszMOl6W8KjptlwlCFtaOg +UxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8xL4ysEr3vQCj8KWefshNPZiTEUxnpHikV +7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- + +ACCVRAIZ1 +========= +-----BEGIN CERTIFICATE----- +MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB +SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1 +MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH +UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC +DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM +jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0 +RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD +aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ +0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG +WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7 +8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR +5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J +9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK +Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw +Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu +Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2 +VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM +Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA +QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh +AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA +YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj +AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA +IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk +aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0 +dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2 +MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI +hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E +R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN +YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49 +nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ +TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3 +sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h +I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg +Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd +3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p +EfbRD0tVNEYqi4Y7 +-----END CERTIFICATE----- + +TWCA Global Root CA +=================== +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT +CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD +QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK +EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg +Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C +nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV +r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR +Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV +tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W +KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99 +sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p +yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn +kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI +zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g +cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M +8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg +/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg +lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP +A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m +i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8 +EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3 +zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0= +-----END CERTIFICATE----- + +TeliaSonera Root CA v1 +====================== +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE +CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4 +MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW +VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+ +6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA +3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k +B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn +Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH +oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3 +F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ +oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7 +gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc +TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB +AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW +DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm +zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW +pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV +G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc +c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT +JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2 +qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6 +Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems +WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- + +E-Tugra Certification Authority +=============================== +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w +DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls +ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw +NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx +QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl +cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD +DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd +hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K +CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g +ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ +BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0 +E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz +rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq +jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5 +dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB +/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG +MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK +kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO +XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807 +VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo +a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc +dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV +KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT +Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0 +8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G +C7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- + +T-TeleSec GlobalRoot Class 2 +============================ +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM +IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU +cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx +MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz +dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD +ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ +SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F +vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970 +2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV +WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy +YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4 +r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf +vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR +3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg== +-----END CERTIFICATE----- + +Atos TrustedRoot 2011 +===================== +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU +cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4 +MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG +A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV +hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr +54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+ +DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320 +HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR +z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R +l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ +bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB +CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h +k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh +TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9 +61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G +3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed +-----END CERTIFICATE----- + +QuoVadis Root CA 1 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakE +PBtVwedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWerNrwU8lm +PNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF34168Xfuw6cwI2H44g4hWf6 +Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh4Pw5qlPafX7PGglTvF0FBM+hSo+LdoIN +ofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXpUhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/l +g6AnhF4EwfWQvTA9xO+oabw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV +7qJZjqlc3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/GKubX +9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSthfbZxbGL0eUQMk1f +iyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KOTk0k+17kBL5yG6YnLUlamXrXXAkg +t3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOtzCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZI +hvcNAQELBQADggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2cDMT/uFPpiN3 +GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUNqXsCHKnQO18LwIE6PWThv6ct +Tr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP ++V04ikkwj+3x6xn0dxoxGE1nVGwvb2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh +3jRJjehZrJ3ydlo28hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fa +wx/kNSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNjZgKAvQU6 +O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhpq1467HxpvMc7hU6eFbm0 +FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFtnh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOV +hMJKzRwuJIczYOXD +-----END CERTIFICATE----- + +QuoVadis Root CA 2 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFh +ZiFfqq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMWn4rjyduY +NM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ymc5GQYaYDFCDy54ejiK2t +oIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+O7q414AB+6XrW7PFXmAqMaCvN+ggOp+o +MiwMzAkd056OXbxMmO7FGmh77FOm6RQ1o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+l +V0POKa2Mq1W/xPtbAd0jIaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZo +L1NesNKqIcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz8eQQ +sSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43ehvNURG3YBZwjgQQvD +6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l7ZizlWNof/k19N+IxWA1ksB8aRxh +lRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALGcC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZI +hvcNAQELBQADggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RCroijQ1h5fq7K +pVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0GaW/ZZGYjeVYg3UQt4XAoeo0L9 +x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4nlv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgz +dWqTHBLmYF5vHX/JHyPLhGGfHoJE+V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6X +U/IyAgkwo1jwDQHVcsaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+Nw +mNtddbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNgKCLjsZWD +zYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeMHVOyToV7BjjHLPj4sHKN +JeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4WSr2Rz0ZiC3oheGe7IUIarFsNMkd7Egr +O3jtZsSOeWmD3n+M +-----END CERTIFICATE----- + +QuoVadis Root CA 3 G3 +===================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQELBQAwSDELMAkG +A1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAcBgNVBAMTFVF1b1ZhZGlzIFJv +b3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJN +MRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMg +RzMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286 +IxSR/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNuFoM7pmRL +Mon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXRU7Ox7sWTaYI+FrUoRqHe +6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+cra1AdHkrAj80//ogaX3T7mH1urPnMNA3 +I4ZyYUUpSFlob3emLoG+B01vr87ERRORFHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3U +VDmrJqMz6nWB2i3ND0/kA9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f7 +5li59wzweyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634RylsSqi +Md5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBpVzgeAVuNVejH38DM +dyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0QA4XN8f+MFrXBsj6IbGB/kE+V9/Yt +rQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZI +hvcNAQELBQADggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnIFUBhynLWcKzS +t/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5WvvoxXqA/4Ti2Tk08HS6IT7SdEQ +TXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFgu/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9Du +DcpmvJRPpq3t/O5jrFc/ZSXPsoaP0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGib +Ih6BJpsQBJFxwAYf3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmD +hPbl8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+DhcI00iX +0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HNPlopNLk9hM6xZdRZkZFW +dSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ywaZWWDYWGWVjUTR939+J399roD1B0y2 +PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- + +DigiCert Assured ID Root G2 +=========================== +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw +IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw +MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL +ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH +35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq +bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw +VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP +YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn +lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO +w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv +0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz +d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW +hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M +jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- + +DigiCert Assured ID Root G3 +=========================== +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD +VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ +BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb +RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs +KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF +UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy +YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy +1vUhZscv6pZjamVFkpUBtA== +-----END CERTIFICATE----- + +DigiCert Global Root G2 +======================= +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw +HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx +MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3 +dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq +hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ +kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO +3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV +BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM +UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB +o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu +5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr +F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U +WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH +QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/ +iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- + +DigiCert Global Root G3 +======================= +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD +VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw +MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k +aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C +AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O +YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp +Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y +3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34 +VOKa5Vt8sycX +-----END CERTIFICATE----- + +DigiCert Trusted Root G4 +======================== +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBiMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSEw +HwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1 +MTIwMDAwWjBiMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3yithZwuEp +pz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1Ifxp4VpX6+n6lXFllVcq9o +k3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDVySAdYyktzuxeTsiT+CFhmzTrBcZe7Fsa +vOvJz82sNEBfsXpm7nfISKhmV1efVFiODCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGY +QJB5w3jHtrHEtWoYOAMQjdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6 +MUSaM0C/CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCiEhtm +mnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADMfRyVw4/3IbKyEbe7 +f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QYuKZ3AeEPlAwhHbJUKSWJbOUOUlFH +dL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXKchYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8 +oR7FwI+isX4KJpn15GkvmB0t9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBhjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2SV1EY+CtnJYY +ZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd+SeuMIW59mdNOj6PWTkiU0Tr +yF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWcfFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy +7zBZLq7gcfJW5GqXb5JQbZaNaHqasjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iah +ixTXTBmyUEFxPT9NcCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN +5r5N0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie4u1Ki7wb +/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mIr/OSmbaz5mEP0oUA51Aa +5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tK +G48BtieVU+i2iW1bvGjUI+iLUaJW+fCmgKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP +82Z+ +-----END CERTIFICATE----- + +WoSign +====== +-----BEGIN CERTIFICATE----- +MIIFdjCCA16gAwIBAgIQXmjWEXGUY1BWAGjzPsnFkTANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxKjAoBgNVBAMTIUNlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMFUxCzAJ +BgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEqMCgGA1UEAxMhQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkgb2YgV29TaWduMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA +vcqNrLiRFVaXe2tcesLea9mhsMMQI/qnobLMMfo+2aYpbxY94Gv4uEBf2zmoAHqLoE1UfcIiePyO +CbiohdfMlZdLdNiefvAA5A6JrkkoRBoQmTIPJYhTpA2zDxIIFgsDcSccf+Hb0v1naMQFXQoOXXDX +2JegvFNBmpGN9J42Znp+VsGQX+axaCA2pIwkLCxHC1l2ZjC1vt7tj/id07sBMOby8w7gLJKA84X5 +KIq0VC6a7fd2/BVoFutKbOsuEo/Uz/4Mx1wdC34FMr5esAkqQtXJTpCzWQ27en7N1QhatH/YHGkR ++ScPewavVIMYe+HdVHpRaG53/Ma/UkpmRqGyZxq7o093oL5d//xWC0Nyd5DKnvnyOfUNqfTq1+ez +EC8wQjchzDBwyYaYD8xYTYO7feUapTeNtqwylwA6Y3EkHp43xP901DfA4v6IRmAR3Qg/UDaruHqk +lWJqbrDKaiFaafPz+x1wOZXzp26mgYmhiMU7ccqjUu6Du/2gd/Tkb+dC221KmYo0SLwX3OSACCK2 +8jHAPwQ+658geda4BmRkAjHXqc1S+4RFaQkAKtxVi8QGRkvASh0JWzko/amrzgD5LkhLJuYwTKVY +yrREgk/nkR4zw7CT/xH8gdLKH3Ep3XZPkiWvHYG3Dy+MwwbMLyejSuQOmbp8HkUff6oZRZb9/D0C +AwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFOFmzw7R +8bNLtwYgFP6HEtX2/vs+MA0GCSqGSIb3DQEBBQUAA4ICAQCoy3JAsnbBfnv8rWTjMnvMPLZdRtP1 +LOJwXcgu2AZ9mNELIaCJWSQBnfmvCX0KI4I01fx8cpm5o9dU9OpScA7F9dY74ToJMuYhOZO9sxXq +T2r09Ys/L3yNWC7F4TmgPsc9SnOeQHrAK2GpZ8nzJLmzbVUsWh2eJXLOC62qx1ViC777Y7NhRCOj +y+EaDveaBk3e1CNOIZZbOVtXHS9dCF4Jef98l7VNg64N1uajeeAz0JmWAjCnPv/So0M/BVoG6kQC +2nz4SNAzqfkHx5Xh9T71XXG68pWpdIhhWeO/yloTunK0jF02h+mmxTwTv97QRCbut+wucPrXnbes +5cVAWubXbHssw1abR80LzvobtCHXt2a49CUwi1wNuepnsvRtrtWhnk/Yn+knArAdBtaP4/tIEp9/ +EaEQPkxROpaw0RPxx9gmrjrKkcRpnd8BKWRRb2jaFOwIQZeQjdCygPLPwj2/kWjFgGcexGATVdVh +mVd8upUPYUk6ynW8yQqTP2cOEvIo4jEbwFcW3wh8GcF+Dx+FHgo2fFt+J7x6v+Db9NpSvd4MVHAx +kUOVyLzwPt0JfjBkUO1/AaQzZ01oT74V77D2AhGiGxMlOtzCWfHjXEa7ZywCRuoeSKbmW9m1vFGi +kpbbqsY3Iqb+zCB0oy2pLmvLwIIRIbWTee5Ehr7XHuQe+w== +-----END CERTIFICATE----- + +WoSign China +============ +-----BEGIN CERTIFICATE----- +MIIFWDCCA0CgAwIBAgIQUHBrzdgT/BtOOzNy0hFIjTANBgkqhkiG9w0BAQsFADBGMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMMEkNBIOayg+mAmuagueiv +geS5pjAeFw0wOTA4MDgwMTAwMDFaFw0zOTA4MDgwMTAwMDFaMEYxCzAJBgNVBAYTAkNOMRowGAYD +VQQKExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAwwSQ0Eg5rKD6YCa5qC56K+B5LmmMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0EkhHiX8h8EqwqzbdoYGTufQdDTc7WU1/FDWiD+k +8H/rD195L4mx/bxjWDeTmzj4t1up+thxx7S8gJeNbEvxUNUqKaqoGXqW5pWOdO2XCld19AXbbQs5 +uQF/qvbW2mzmBeCkTVL829B0txGMe41P/4eDrv8FAxNXUDf+jJZSEExfv5RxadmWPgxDT74wwJ85 +dE8GRV2j1lY5aAfMh09Qd5Nx2UQIsYo06Yms25tO4dnkUkWMLhQfkWsZHWgpLFbE4h4TV2TwYeO5 +Ed+w4VegG63XX9Gv2ystP9Bojg/qnw+LNVgbExz03jWhCl3W6t8Sb8D7aQdGctyB9gQjF+BNdeFy +b7Ao65vh4YOhn0pdr8yb+gIgthhid5E7o9Vlrdx8kHccREGkSovrlXLp9glk3Kgtn3R46MGiCWOc +76DbT52VqyBPt7D3h1ymoOQ3OMdc4zUPLK2jgKLsLl3Az+2LBcLmc272idX10kaO6m1jGx6KyX2m ++Jzr5dVjhU1zZmkR/sgO9MHHZklTfuQZa/HpelmjbX7FF+Ynxu8b22/8DU0GAbQOXDBGVWCvOGU6 +yke6rCzMRh+yRpY/8+0mBe53oWprfi1tWFxK1I5nuPHa1UaKJ/kR8slC/k7e3x9cxKSGhxYzoacX +GKUN5AXlK8IrC6KVkLn9YDxOiT7nnO4fuwECAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wHQYDVR0OBBYEFOBNv9ybQV0T6GTwp+kVpOGBwboxMA0GCSqGSIb3DQEBCwUA +A4ICAQBqinA4WbbaixjIvirTthnVZil6Xc1bL3McJk6jfW+rtylNpumlEYOnOXOvEESS5iVdT2H6 +yAa+Tkvv/vMx/sZ8cApBWNromUuWyXi8mHwCKe0JgOYKOoICKuLJL8hWGSbueBwj/feTZU7n85iY +r83d2Z5AiDEoOqsuC7CsDCT6eiaY8xJhEPRdF/d+4niXVOKM6Cm6jBAyvd0zaziGfjk9DgNyp115 +j0WKWa5bIW4xRtVZjc8VX90xJc/bYNaBRHIpAlf2ltTW/+op2znFuCyKGo3Oy+dCMYYFaA6eFN0A +kLppRQjbbpCBhqcqBT/mhDn4t/lXX0ykeVoQDF7Va/81XwVRHmyjdanPUIPTfPRm94KNPQx96N97 +qA4bLJyuQHCH2u2nFoJavjVsIE4iYdm8UXrNemHcSxH5/mc0zy4EZmFcV5cjjPOGG0jfKq+nwf/Y +jj4Du9gqsPoUJbJRa4ZDhS4HIxaAjUz7tGM7zMN07RujHv41D198HRaG9Q7DlfEvr10lO1Hm13ZB +ONFLAzkopR6RctR9q5czxNM+4Gm2KHmgCY0c0f9BckgG/Jou5yD5m6Leie2uPAmvylezkolwQOQv +T8Jwg0DXJCxr5wkf09XHwQj02w47HAcLQxGEIYbpgNR12KvxAmLBsX5VYc8T1yaw15zLKYs4SgsO +kI26oQ== +-----END CERTIFICATE----- + +COMODO RSA Certification Authority +================================== +-----BEGIN CERTIFICATE----- +MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE +BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG +A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC +R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE +ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn +dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ +FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+ +5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG +x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX +2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL +OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3 +sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C +GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5 +WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E +FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w +DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt +rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+ +nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg +tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW +sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp +pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA +zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq +ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52 +7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I +LaZRfyHBNVOFBkpdn627G190 +-----END CERTIFICATE----- + +USERTrust RSA Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIIF3jCCA8agAwIBAgIQAf1tMPyjylGoG7xkDjUDLTANBgkqhkiG9w0BAQwFADCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UE +BhMCVVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQK +ExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBSU0EgQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCAEmUXNg7D2wiz +0KxXDXbtzSfTTK1Qg2HiqiBNCS1kCdzOiZ/MPans9s/B3PHTsdZ7NygRK0faOca8Ohm0X6a9fZ2j +Y0K2dvKpOyuR+OJv0OwWIJAJPuLodMkYtJHUYmTbf6MG8YgYapAiPLz+E/CHFHv25B+O1ORRxhFn +RghRy4YUVD+8M/5+bJz/Fp0YvVGONaanZshyZ9shZrHUm3gDwFA66Mzw3LyeTP6vBZY1H1dat//O ++T23LLb2VN3I5xI6Ta5MirdcmrS3ID3KfyI0rn47aGYBROcBTkZTmzNg95S+UzeQc0PzMsNT79uq +/nROacdrjGCT3sTHDN/hMq7MkztReJVni+49Vv4M0GkPGw/zJSZrM233bkf6c0Plfg6lZrEpfDKE +Y1WJxA3Bk1QwGROs0303p+tdOmw1XNtB1xLaqUkL39iAigmTYo61Zs8liM2EuLE/pDkP2QKe6xJM +lXzzawWpXhaDzLhn4ugTncxbgtNMs+1b/97lc6wjOy0AvzVVdAlJ2ElYGn+SNuZRkg7zJn0cTRe8 +yexDJtC/QV9AqURE9JnnV4eeUB9XVKg+/XRjL7FQZQnmWEIuQxpMtPAlR1n6BB6T1CZGSlCBst6+ +eLf8ZxXhyVeEHg9j1uliutZfVS7qXMYoCAQlObgOK6nyTJccBz8NUvXt7y+CDwIDAQABo0IwQDAd +BgNVHQ4EFgQUU3m/WqorSs9UgOHYm8Cd8rIDZsswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wDQYJKoZIhvcNAQEMBQADggIBAFzUfA3P9wF9QZllDHPFUp/L+M+ZBn8b2kMVn54CVVeW +FPFSPCeHlCjtHzoBN6J2/FNQwISbxmtOuowhT6KOVWKR82kV2LyI48SqC/3vqOlLVSoGIG1VeCkZ +7l8wXEskEVX/JJpuXior7gtNn3/3ATiUFJVDBwn7YKnuHKsSjKCaXqeYalltiz8I+8jRRa8YFWSQ +Eg9zKC7F4iRO/Fjs8PRF/iKz6y+O0tlFYQXBl2+odnKPi4w2r78NBc5xjeambx9spnFixdjQg3IM +8WcRiQycE0xyNN+81XHfqnHd4blsjDwSXWXavVcStkNr/+XeTWYRUc+ZruwXtuhxkYzeSf7dNXGi +FSeUHM9h4ya7b6NnJSFd5t0dCy5oGzuCr+yDZ4XUmFF0sbmZgIn/f3gZXHlKYC6SQK5MNyosycdi +yA5d9zZbyuAlJQG03RoHnHcAP9Dc1ew91Pq7P8yF1m9/qS3fuQL39ZeatTXaw2ewh0qpKJ4jjv9c +J2vhsE/zB+4ALtRZh8tSQZXq9EfX7mRBVXyNWQKV3WKdwrnuWih0hKWbt5DHDAff9Yk2dDLWKMGw +sAvgnEzDHNb842m1R0aBL6KCq9NjRHDEjf8tM7qtj3u1cIiuPhnPQCjY/MiQu12ZIvVS5ljFH4gx +Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9 +-----END CERTIFICATE----- + +USERTrust ECC Certification Authority +===================================== +-----BEGIN CERTIFICATE----- +MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC +VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU +aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2 +0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez +nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV +HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB +HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu +9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R4 +=========================== +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl +OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P +AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV +MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF +JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q= +-----END CERTIFICATE----- + +GlobalSign ECC Root CA - R5 +=========================== +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb +R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD +EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6 +SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS +h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx +uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7 +yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- + +Staat der Nederlanden Root CA - G3 +================================== +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC +TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l +ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y +olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t +x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy +EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K +Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur +mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5 +1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp +07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo +FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE +41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu +yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq +KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1 +v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA +8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b +8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r +mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq +1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI +JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV +tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk= +-----END CERTIFICATE----- + +Staat der Nederlanden EV Root CA +================================ +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJOTDEeMBwGA1UE +CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFhdCBkZXIgTmVkZXJsYW5kZW4g +RVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0yMjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5M +MR4wHAYDVQQKDBVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRl +cmxhbmRlbiBFViBSb290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkk +SzrSM4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nCUiY4iKTW +O0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3dZ//BYY1jTw+bbRcwJu+r +0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46prfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8 +Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13lpJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gV +XJrm0w912fxBmJc+qiXbj5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr +08C+eKxCKFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS/ZbV +0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0XcgOPvZuM5l5Tnrmd +74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH1vI4gnPah1vlPNOePqc7nvQDs/nx +fRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrPpx9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNC +MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwa +ivsnuL8wbqg7MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u2dfOWBfoqSmu +c0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHSv4ilf0X8rLiltTMMgsT7B/Zq +5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTCwPTxGfARKbalGAKb12NMcIxHowNDXLldRqAN +b/9Zjr7dn3LDWyvfjFvO5QxGbJKyCqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tN +f1zuacpzEPuKqf2evTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi +5Dp6Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIaGl6I6lD4 +WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeLeG9QgkRQP2YGiqtDhFZK +DyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGy +eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg== +-----END CERTIFICATE----- + +IdenTrust Commercial Root CA 1 +============================== +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBS +b290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQwMTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzES +MBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENB +IDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ld +hNlT3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU+ehcCuz/ +mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gpS0l4PJNgiCL8mdo2yMKi +1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1bVoE/c40yiTcdCMbXTMTEl3EASX2MN0C +XZ/g1Ue9tOsbobtJSdifWwLziuQkkORiT0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl +3ZBWzvurpWCdxJ35UrCLvYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzy +NeVJSQjKVsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZKdHzV +WYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHTc+XvvqDtMwt0viAg +xGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hvl7yTmvmcEpB4eoCHFddydJxVdHix +uuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5NiGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZI +hvcNAQELBQADggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwtLRvM7Kqas6pg +ghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93nAbowacYXVKV7cndJZ5t+qnt +ozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3+wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmV +YjzlVYA211QC//G5Xc7UI2/YRYRKW2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUX +feu+h1sXIFRRk0pTAwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/ro +kTLql1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG4iZZRHUe +2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZmUlO+KWA2yUPHGNiiskz +Z2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7R +cGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- + +IdenTrust Public Sector Root CA 1 +================================= +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBNMQswCQYDVQQG +EwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3Rv +ciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcNMzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJV +UzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBS +b290IENBIDEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTy +P4o7ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGyRBb06tD6 +Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlSbdsHyo+1W/CD80/HLaXI +rcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF/YTLNiCBWS2ab21ISGHKTN9T0a9SvESf +qy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoS +mJxZZoY+rfGwyj4GD3vwEUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFn +ol57plzy9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9VGxyh +LrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ2fjXctscvG29ZV/v +iDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsVWaFHVCkugyhfHMKiq3IXAAaOReyL +4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gDW/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8B +Af8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMw +DQYJKoZIhvcNAQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHVDRDtfULAj+7A +mgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9TaDKQGXSc3z1i9kKlT/YPyNt +GtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8GlwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFt +m6/n6J91eEyrRjuazr8FGF1NFTwWmhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMx +NRF4eKLg6TCMf4DfWN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4 +Mhn5+bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJtshquDDI +ajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhAGaQdp/lLQzfcaFpPz+vC +ZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ +3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- + +Entrust Root Certification Authority - G2 +========================================= +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV +BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy +bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug +b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw +HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT +DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx +OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP +/vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz +HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU +s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y +TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx +AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6 +0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z +iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi +nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+ +vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO +e4pIb4tF9g== +-----END CERTIFICATE----- + +Entrust Root Certification Authority - EC1 +========================================== +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx +FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn +YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw +FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs +LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg +dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy +AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef +9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h +vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8 +kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- + +CFCA EV ROOT +============ +-----BEGIN CERTIFICATE----- +MIIFjTCCA3WgAwIBAgIEGErM1jANBgkqhkiG9w0BAQsFADBWMQswCQYDVQQGEwJDTjEwMC4GA1UE +CgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQDDAxDRkNB +IEVWIFJPT1QwHhcNMTIwODA4MDMwNzAxWhcNMjkxMjMxMDMwNzAxWjBWMQswCQYDVQQGEwJDTjEw +MC4GA1UECgwnQ2hpbmEgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MRUwEwYDVQQD +DAxDRkNBIEVWIFJPT1QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDXXWvNED8fBVnV +BU03sQ7smCuOFR36k0sXgiFxEFLXUWRwFsJVaU2OFW2fvwwbwuCjZ9YMrM8irq93VCpLTIpTUnrD +7i7es3ElweldPe6hL6P3KjzJIx1qqx2hp/Hz7KDVRM8Vz3IvHWOX6Jn5/ZOkVIBMUtRSqy5J35DN +uF++P96hyk0g1CXohClTt7GIH//62pCfCqktQT+x8Rgp7hZZLDRJGqgG16iI0gNyejLi6mhNbiyW +ZXvKWfry4t3uMCz7zEasxGPrb382KzRzEpR/38wmnvFyXVBlWY9ps4deMm/DGIq1lY+wejfeWkU7 +xzbh72fROdOXW3NiGUgthxwG+3SYIElz8AXSG7Ggo7cbcNOIabla1jj0Ytwli3i/+Oh+uFzJlU9f +py25IGvPa931DfSCt/SyZi4QKPaXWnuWFo8BGS1sbn85WAZkgwGDg8NNkt0yxoekN+kWzqotaK8K +gWU6cMGbrU1tVMoqLUuFG7OA5nBFDWteNfB/O7ic5ARwiRIlk9oKmSJgamNgTnYGmE69g60dWIol +hdLHZR4tjsbftsbhf4oEIRUpdPA+nJCdDC7xij5aqgwJHsfVPKPtl8MeNPo4+QgO48BdK4PRVmrJ +tqhUUy54Mmc9gn900PvhtgVguXDbjgv5E1hvcWAQUhC5wUEJ73IfZzF4/5YFjQIDAQABo2MwYTAf +BgNVHSMEGDAWgBTj/i39KNALtbq2osS/BqoFjJP7LzAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU4/4t/SjQC7W6tqLEvwaqBYyT+y8wDQYJKoZIhvcNAQELBQADggIB +ACXGumvrh8vegjmWPfBEp2uEcwPenStPuiB/vHiyz5ewG5zz13ku9Ui20vsXiObTej/tUxPQ4i9q +ecsAIyjmHjdXNYmEwnZPNDatZ8POQQaIxffu2Bq41gt/UP+TqhdLjOztUmCypAbqTuv0axn96/Ua +4CUqmtzHQTb3yHQFhDmVOdYLO6Qn+gjYXB74BGBSESgoA//vU2YApUo0FmZ8/Qmkrp5nGm9BC2sG +E5uPhnEFtC+NiWYzKXZUmhH4J/qyP5Hgzg0b8zAarb8iXRvTvyUFTeGSGn+ZnzxEk8rUQElsgIfX +BDrDMlI1Dlb4pd19xIsNER9Tyx6yF7Zod1rg1MvIB671Oi6ON7fQAUtDKXeMOZePglr4UeWJoBjn +aH9dCi77o0cOPaYjesYBx4/IXr9tgFa+iiS6M+qf4TIRnvHST4D2G0CvOJ4RUHlzEhLN5mydLIhy +PDCBBpEi6lmt2hkuIsKNuYyH4Ga8cyNfIWRjgEj1oDwYPZTISEEdQLpe/v5WOaHIz16eGWRGENoX +kbcFgKyLmZJ956LYBws2J+dIeWCKw9cTXPhyQN9Ky8+ZAAoACxGV2lZFA4gKn2fQ1XmxqI1AbQ3C +ekD6819kR5LLU7m7Wc5P/dAVUwHY3+vZ5nbv0CO7O6l5s9UCKc2Jo5YPSjXnTkLAdc0Hz+Ys63su +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5 +==================================================== +-----BEGIN CERTIFICATE----- +MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN +BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp +bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg +RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw +ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w +SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE +n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp +ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537 +jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m +ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP +9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV +4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH +HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI +hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo +BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq +URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl +lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8 +B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU= +-----END CERTIFICATE----- + +TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H6 +==================================================== +-----BEGIN CERTIFICATE----- +MIIEJjCCAw6gAwIBAgIGfaHyZeyKMA0GCSqGSIb3DQEBCwUAMIGxMQswCQYDVQQGEwJUUjEPMA0G +A1UEBwwGQW5rYXJhMU0wSwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls +acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBF +bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg2MB4XDTEzMTIxODA5 +MDQxMFoXDTIzMTIxNjA5MDQxMFowgbExCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExTTBL +BgNVBAoMRFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSf +aSBIaXptZXRsZXJpIEEuxZ4uMUIwQAYDVQQDDDlUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2VydGlm +aWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLEgSDYwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdsGjW6L0UlqMACprx9MfMkU1xeHe59yEmFXNRFpQJRwXiM/VomjX/3EsvMsew7eKC5W/a +2uqsxgbPJQ1BgfbBOCK9+bGlprMBvD9QFyv26WZV1DOzXPhDIHiTVRZwGTLmiddk671IUP320EED +wnS3/faAz1vFq6TWlRKb55cTMgPp1KtDWxbtMyJkKbbSk60vbNg9tvYdDjTu0n2pVQ8g9P0pu5Fb +HH3GQjhtQiht1AH7zYiXSX6484P4tZgvsycLSF5W506jM7NE1qXyGJTtHB6plVxiSvgNZ1GpryHV ++DKdeboaX+UEVU0TRv/yz3THGmNtwx8XEsMeED5gCLMxAgMBAAGjQjBAMB0GA1UdDgQWBBTdVRcT +9qzoSCHK77Wv0QAy7Z6MtTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG +9w0BAQsFAAOCAQEAb1gNl0OqFlQ+v6nfkkU/hQu7VtMMUszIv3ZnXuaqs6fvuay0EBQNdH49ba3R +fdCaqaXKGDsCQC4qnFAUi/5XfldcEQlLNkVS9z2sFP1E34uXI9TDwe7UU5X+LEr+DXCqu4svLcsy +o4LyVN/Y8t3XSHLuSqMplsNEzm61kod2pLv0kmzOLBQJZo6NrRa1xxsJYTvjIKIDgI6tflEATseW +hvtDmHd9KMeP2Cpu54Rvl0EpABZeTeIT6lnAY2c6RPuY/ATTMHKm9ocJV612ph1jmv3XZch4gyt1 +O6VbuA1df74jrlZVlFjvH4GMKrLN5ptjnhi85WsGtAuYSyher4hYyw== +-----END CERTIFICATE----- + +Certinomis - Root CA +==================== +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjETMBEGA1UEChMK +Q2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAbBgNVBAMTFENlcnRpbm9taXMg +LSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMzMTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIx +EzARBgNVBAoTCkNlcnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRD +ZXJ0aW5vbWlzIC0gUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQos +P5L2fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJflLieY6pOo +d5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQVWZUKxkd8aRi5pwP5ynap +z8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDFTKWrteoB4owuZH9kb/2jJZOLyKIOSY00 +8B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09x +RLWtwHkziOC/7aOgFLScCbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE +6OXWk6RiwsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJwx3t +FvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SGm/lg0h9tkQPTYKbV +PZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4F2iw4lNVYC2vPsKD2NkJK/DAZNuH +i5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZngWVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGj +YzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I +6tNxIqSSaHh02TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/0KGRHCwPT5iV +WVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWwF6YSjNRieOpWauwK0kDDPAUw +Pk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZSg081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAX +lCOotQqSD7J6wWAsOMwaplv/8gzjqh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJ +y29SWwNyhlCVCNSNh4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9 +Iff/ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8Vbtaw5Bng +DwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwjY/M50n92Uaf0yKHxDHYi +I0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nM +cyrDflOR1m749fPH0FFNjkulW+YZFzvWgQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVr +hkIGuUE= +-----END CERTIFICATE----- + +OISTE WISeKey Global Root GB CA +=============================== +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG +EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw +MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds +b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX +scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP +rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk +9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o +Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg +GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI +hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD +dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0 +VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui +HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- + +Certification Authority of WoSign G2 +==================================== +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG +EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g +QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx +CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB +CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai +XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du +W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9 +5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK +v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC +AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI +hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY +P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3 +TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu ++sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+ +7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg= +-----END CERTIFICATE----- + +CA WoSign ECC Root +================== +-----BEGIN CERTIFICATE----- +MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD +TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v +dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK +ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI +zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU +t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw +QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R +MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0 +Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu +a/GRspBl9JrmkO5K +-----END CERTIFICATE----- + +SZAFIR ROOT CA2 +=============== +-----BEGIN CERTIFICATE----- +MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG +A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV +BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ +BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD +VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q +qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK +DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE +2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ +ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi +ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P +AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC +AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5 +O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67 +oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul +4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6 ++/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw== +-----END CERTIFICATE----- + +Certum Trusted Network CA 2 +=========================== +-----BEGIN CERTIFICATE----- +MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE +BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1 +bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y +ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ +TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB +IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9 +7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o +CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b +Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p +uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130 +GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ +9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB +Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye +hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM +BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI +hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW +Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA +L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo +clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM +pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb +w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo +J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm +ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX +is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7 +zAYspsbiDrW5viSP +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions RootCA 2015 +======================================================= +-----BEGIN CERTIFICATE----- +MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT +BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0 +aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl +YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx +MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg +QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV +BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw +MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv +bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh +iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+ +6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd +FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr +i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F +GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2 +fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu +iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc +Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD +AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI +hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+ +D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM +d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y +d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn +82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb +davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F +Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt +J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa +JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q +p/UsQu0yrbYhnr68 +-----END CERTIFICATE----- + +Hellenic Academic and Research Institutions ECC RootCA 2015 +=========================================================== +-----BEGIN CERTIFICATE----- +MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0 +aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u +cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj +aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw +MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj +IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD +VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290 +Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP +dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK +Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O +BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA +GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn +dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR +-----END CERTIFICATE----- + +Certplus Root CA G1 +=================== +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgISESBVg+QtPlRWhS2DN7cs3EYRMA0GCSqGSIb3DQEBDQUAMD4xCzAJBgNV +BAYTAkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTAe +Fw0xNDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhD +ZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMTCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBANpQh7bauKk+nWT6VjOaVj0W5QOVsjQcmm1iBdTYj+eJZJ+622SLZOZ5KmHN +r49aiZFluVj8tANfkT8tEBXgfs+8/H9DZ6itXjYj2JizTfNDnjl8KvzsiNWI7nC9hRYt6kuJPKNx +Qv4c/dMcLRC4hlTqQ7jbxofaqK6AJc96Jh2qkbBIb6613p7Y1/oA/caP0FG7Yn2ksYyy/yARujVj +BYZHYEMzkPZHogNPlk2dT8Hq6pyi/jQu3rfKG3akt62f6ajUeD94/vI4CTYd0hYCyOwqaK/1jpTv +LRN6HkJKHRUxrgwEV/xhc/MxVoYxgKDEEW4wduOU8F8ExKyHcomYxZ3MVwia9Az8fXoFOvpHgDm2 +z4QTd28n6v+WZxcIbekN1iNQMLAVdBM+5S//Ds3EC0pd8NgAM0lm66EYfFkuPSi5YXHLtaW6uOrc +4nBvCGrch2c0798wct3zyT8j/zXhviEpIDCB5BmlIOklynMxdCm+4kLV87ImZsdo/Rmz5yCTmehd +4F6H50boJZwKKSTUzViGUkAksnsPmBIgJPaQbEfIDbsYIC7Z/fyL8inqh3SV4EJQeIQEQWGw9CEj +jy3LKCHyamz0GqbFFLQ3ZU+V/YDI+HLlJWvEYLF7bY5KinPOWftwenMGE9nTdDckQQoRb5fc5+R+ +ob0V8rqHDz1oihYHAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0G +A1UdDgQWBBSowcCbkahDFXxdBie0KlHYlwuBsTAfBgNVHSMEGDAWgBSowcCbkahDFXxdBie0KlHY +lwuBsTANBgkqhkiG9w0BAQ0FAAOCAgEAnFZvAX7RvUz1isbwJh/k4DgYzDLDKTudQSk0YcbX8ACh +66Ryj5QXvBMsdbRX7gp8CXrc1cqh0DQT+Hern+X+2B50ioUHj3/MeXrKls3N/U/7/SMNkPX0XtPG +YX2eEeAC7gkE2Qfdpoq3DIMku4NQkv5gdRE+2J2winq14J2by5BSS7CTKtQ+FjPlnsZlFT5kOwQ/ +2wyPX1wdaR+v8+khjPPvl/aatxm2hHSco1S1cE5j2FddUyGbQJJD+tZ3VTNPZNX70Cxqjm0lpu+F +6ALEUz65noe8zDUa3qHpimOHZR4RKttjd5cUvpoUmRGywO6wT/gUITJDT5+rosuoD6o7BlXGEilX +CNQ314cnrUlZp5GrRHpejXDbl85IULFzk/bwg2D5zfHhMf1bfHEhYxQUqq/F3pN+aLHsIqKqkHWe +tUNy6mSjhEv9DKgma3GX7lZjZuhCVPnHHd/Qj1vfyDBviP4NxDMcU6ij/UgQ8uQKTuEVV/xuZDDC +VRHc6qnNSlSsKWNEz0pAoNZoWRsz+e86i9sgktxChL8Bq4fA1SCC28a5g4VCXA9DO2pJNdWY9BW/ ++mGBDAkgGNLQFwzLSABQ6XaCjGTXOqAHVcweMcDvOrRl++O/QmueD6i9a5jc2NvLi6Td11n0bt3+ +qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo= +-----END CERTIFICATE----- + +Certplus Root CA G2 +=================== +-----BEGIN CERTIFICATE----- +MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT +AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x +NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0 +cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA +BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN +Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD +AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud +IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV +HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl +vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw== +-----END CERTIFICATE----- + +OpenTrust Root CA G1 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx +MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa +Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87 +ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO +YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9 +xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO +9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq +3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi +n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9 +URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr +TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px +N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E +PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv +uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK +n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh +X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80 +nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm +GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/ +bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o +4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA +OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx +-----END CERTIFICATE----- + +OpenTrust Root CA G2 +==================== +-----BEGIN CERTIFICATE----- +MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy +MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM +CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+ +Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz +4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV +eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt +UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz +3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj +3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz +9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0 +0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT +y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59 +M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz +Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI +mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG +S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp +EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ +6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr +gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo +SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0 +YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm +u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK +-----END CERTIFICATE----- + +OpenTrust Root CA G3 +==================== +-----BEGIN CERTIFICATE----- +MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X +DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w +ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA +IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B +ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB +/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf +BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM +BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta +3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB +-----END CERTIFICATE----- + +ISRG Root X1 +============ +-----BEGIN CERTIFICATE----- +MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAwTzELMAkGA1UE +BhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2VhcmNoIEdyb3VwMRUwEwYDVQQD +EwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQG +EwJVUzEpMCcGA1UEChMgSW50ZXJuZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMT +DElTUkcgUm9vdCBYMTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54r +Vygch77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+0TM8ukj1 +3Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6UA5/TR5d8mUgjU+g4rk8K +b4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sWT8KOEUt+zwvo/7V3LvSye0rgTBIlDHCN +Aymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyHB5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ +4Q7e2RCOFvu396j3x+UCB5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf +1b0SHzUvKBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWnOlFu +hjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTnjh8BCNAw1FtxNrQH +usEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbwqHyGO0aoSCqI3Haadr8faqU9GY/r +OPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CIrU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4G +A1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY +9umbbjANBgkqhkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL +ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ3BebYhtF8GaV +0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KKNFtY2PwByVS5uCbMiogziUwt +hDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJw +TdwJx4nLCgdNbOhdjsnvzqvHu7UrTkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nx +e5AW0wdeRlN8NwdCjNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZA +JzVcoyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq4RgqsahD +YVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPAmRGunUHBcnWEvgJBQl9n +JEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57demyPxgcYxn/eR44/KJ4EBs+lVDR3veyJ +m+kXQ99b21/+jh5Xos1AnX5iItreGCc= +-----END CERTIFICATE----- + +AC RAIZ FNMT-RCM +================ +-----BEGIN CERTIFICATE----- +MIIFgzCCA2ugAwIBAgIPXZONMGc2yAYdGsdUhGkHMA0GCSqGSIb3DQEBCwUAMDsxCzAJBgNVBAYT +AkVTMREwDwYDVQQKDAhGTk1ULVJDTTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTAeFw0wODEw +MjkxNTU5NTZaFw0zMDAxMDEwMDAwMDBaMDsxCzAJBgNVBAYTAkVTMREwDwYDVQQKDAhGTk1ULVJD +TTEZMBcGA1UECwwQQUMgUkFJWiBGTk1ULVJDTTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBALpxgHpMhm5/yBNtwMZ9HACXjywMI7sQmkCpGreHiPibVmr75nuOi5KOpyVdWRHbNi63URcf +qQgfBBckWKo3Shjf5TnUV/3XwSyRAZHiItQDwFj8d0fsjz50Q7qsNI1NOHZnjrDIbzAzWHFctPVr +btQBULgTfmxKo0nRIBnuvMApGGWn3v7v3QqQIecaZ5JCEJhfTzC8PhxFtBDXaEAUwED653cXeuYL +j2VbPNmaUtu1vZ5Gzz3rkQUCwJaydkxNEJY7kvqcfw+Z374jNUUeAlz+taibmSXaXvMiwzn15Cou +08YfxGyqxRxqAQVKL9LFwag0Jl1mpdICIfkYtwb1TplvqKtMUejPUBjFd8g5CSxJkjKZqLsXF3mw +WsXmo8RZZUc1g16p6DULmbvkzSDGm0oGObVo/CK67lWMK07q87Hj/LaZmtVC+nFNCM+HHmpxffnT +tOmlcYF7wk5HlqX2doWjKI/pgG6BU6VtX7hI+cL5NqYuSf+4lsKMB7ObiFj86xsc3i1w4peSMKGJ +47xVqCfWS+2QrYv6YyVZLag13cqXM7zlzced0ezvXg5KkAYmY6252TUtB7p2ZSysV4999AeU14EC +ll2jB0nVetBX+RvnU0Z1qrB5QstocQjpYL05ac70r8NWQMetUqIJ5G+GR4of6ygnXYMgrwTJbFaa +i0b1AgMBAAGjgYMwgYAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FPd9xf3E6Jobd2Sn9R2gzL+HYJptMD4GA1UdIAQ3MDUwMwYEVR0gADArMCkGCCsGAQUFBwIBFh1o +dHRwOi8vd3d3LmNlcnQuZm5tdC5lcy9kcGNzLzANBgkqhkiG9w0BAQsFAAOCAgEAB5BK3/MjTvDD +nFFlm5wioooMhfNzKWtN/gHiqQxjAb8EZ6WdmF/9ARP67Jpi6Yb+tmLSbkyU+8B1RXxlDPiyN8+s +D8+Nb/kZ94/sHvJwnvDKuO+3/3Y3dlv2bojzr2IyIpMNOmqOFGYMLVN0V2Ue1bLdI4E7pWYjJ2cJ +j+F3qkPNZVEI7VFY/uY5+ctHhKQV8Xa7pO6kO8Rf77IzlhEYt8llvhjho6Tc+hj507wTmzl6NLrT +Qfv6MooqtyuGC2mDOL7Nii4LcK2NJpLuHvUBKwrZ1pebbuCoGRw6IYsMHkCtA+fdZn71uSANA+iW ++YJF1DngoABd15jmfZ5nc8OaKveri6E6FO80vFIOiZiaBECEHX5FaZNXzuvO+FB8TxxuBEOb+dY7 +Ixjp6o7RTUaN8Tvkasq6+yO3m/qZASlaWFot4/nUbQ4mrcFuNLwy+AwF+mWj2zs3gyLp1txyM/1d +8iC9djwj2ij3+RvrWWTV3F9yfiD8zYm1kGdNYno/Tq0dwzn+evQoFt9B9kiABdcPUXmsEKvU7ANm +5mqwujGSQkBqvjrTcuFqN1W8rB2Vt2lh8kORdOag0wokRqEIr9baRRmW1FMdW4R58MD3R++Lj8UG +rp1MYp3/RgT408m2ECVAdf4WqslKYIYvuu8wd+RU4riEmViAqhOLUTpPSPaLtrM= +-----END CERTIFICATE----- + +Amazon Root CA 1 +================ +-----BEGIN CERTIFICATE----- +MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1 +MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH +FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ +gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t +dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce +VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3 +DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM +CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy +8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa +2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2 +xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5 +-----END CERTIFICATE----- + +Amazon Root CA 2 +================ +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD +VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1 +MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv +bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4 +kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp +N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9 +AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd +fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx +kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS +btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0 +Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN +c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+ +3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw +DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA +A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY ++gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE +YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW +xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ +gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW +aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV +Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3 +KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi +JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw= +-----END CERTIFICATE----- + +Amazon Root CA 3 +================ +-----BEGIN CERTIFICATE----- +MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB +f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr +Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43 +rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc +eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw== +-----END CERTIFICATE----- + +Amazon Root CA 4 +================ +-----BEGIN CERTIFICATE----- +MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG +EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy +NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ +MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN +/sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri +83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA +MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1 +AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA== +-----END CERTIFICATE----- + +LuxTrust Global Root 2 +====================== +-----BEGIN CERTIFICATE----- +MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG +A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh +bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW +MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC +AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm +Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2 +xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC +wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm +1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm +FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF +wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/ +a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U +ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ +MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB +/zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5 +Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT ++Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ +FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN +H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW +7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu +ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA +VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR +TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt +/f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc +7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I +iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr +-----END CERTIFICATE----- diff --git a/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php b/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php new file mode 100644 index 00000000..344b4c1f --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/AbstractSignatureMethodTest.php @@ -0,0 +1,51 @@ +assertEquals($this->name, $this->getClass()->getName()); + } + + /** + * @dataProvider signatureDataProvider + */ + public function testBuildSignature($expected, $request, $consumer, $token) + { + $this->assertEquals($expected, $this->getClass()->buildSignature($request, $consumer, $token)); + } + + protected function getRequest() + { + return $this->getMockBuilder('Abraham\TwitterOAuth\Request') + ->disableOriginalConstructor() + ->getMock(); + } + + protected function getConsumer($key = null, $secret = null, $callbackUrl = null) + { + return $this->getMockBuilder('Abraham\TwitterOAuth\Consumer') + ->setConstructorArgs([$key, $secret, $callbackUrl]) + ->getMock(); + } + + protected function getToken($key = null, $secret = null) + { + return $this->getMockBuilder('Abraham\TwitterOAuth\Token') + ->setConstructorArgs([$key, $secret]) + ->getMock(); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php b/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php new file mode 100644 index 00000000..3ec810a9 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/ConsumerTest.php @@ -0,0 +1,16 @@ +assertEquals("Consumer[key=$key,secret=$secret]", $consumer->__toString()); + } +} \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php b/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php new file mode 100644 index 00000000..cf37a22e --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/HmacSha1Test.php @@ -0,0 +1,35 @@ +getRequest(), $this->getConsumer(), $this->getToken()], + [ + 'EBw0gHngam3BTx8kfPfNNSyKem4=', + $this->getRequest(), + $this->getConsumer('key', 'secret'), + $this->getToken() + ], + [ + 'kDsHFZzws2a5M6cAQjfpdNBo+v8=', + $this->getRequest(), + $this->getConsumer('key', 'secret'), + $this->getToken('key', 'secret') + ], + ['EBw0gHngam3BTx8kfPfNNSyKem4=', $this->getRequest(), $this->getConsumer('key', 'secret'), null], + ]; + } +} \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php b/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php new file mode 100644 index 00000000..5be372be --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/TokenTest.php @@ -0,0 +1,26 @@ +assertEquals($expected, $token->__toString()); + } + + public function tokenProvider() + { + return [ + ['oauth_token=key&oauth_token_secret=secret', 'key', 'secret'], + ['oauth_token=key%2Bkey&oauth_token_secret=secret', 'key+key', 'secret'], + ['oauth_token=key~key&oauth_token_secret=secret', 'key~key', 'secret'], + ]; + } +} \ No newline at end of file diff --git a/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php b/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php new file mode 100644 index 00000000..730bd34e --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/TwitterOAuthTest.php @@ -0,0 +1,256 @@ +twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + } + + public function testBuildClient() + { + $this->assertObjectHasAttribute('consumer', $this->twitter); + $this->assertObjectHasAttribute('token', $this->twitter); + } + + public function testSetOauthToken() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + $twitter->setOauthToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET); + $this->assertObjectHasAttribute('consumer', $twitter); + $this->assertObjectHasAttribute('token', $twitter); + $twitter->get('friendships/show', ['target_screen_name' => 'twitterapi']); + $this->assertEquals(200, $twitter->getLastHttpCode()); + } + + public function testOauth2Token() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + $result = $twitter->oauth2('oauth2/token', ['grant_type' => 'client_credentials']); + $this->assertEquals(200, $twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('token_type', $result); + $this->assertObjectHasAttribute('access_token', $result); + $this->assertEquals('bearer', $result->token_type); + return $result; + } + + /** + * @depends testOauth2Token + */ + public function testBearerToken($accessToken) + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, null, $accessToken->access_token); + $result = $twitter->get('statuses/user_timeline', ['screen_name' => 'twitterapi']); + if ($twitter->getLastHttpCode() !== 200) { + $this->assertEquals('foo', substr($accessToken->access_token, 0, 75)); + $this->assertEquals('foo', print_r($result, true)); + } + $this->assertEquals(200, $twitter->getLastHttpCode()); + return $accessToken; + } + + // This causes issues for parallel run tests. + // /** + // * @depends testBearerToken + // */ + // public function testOauth2TokenInvalidate($accessToken) + // { + // $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + // // HACK: access_token is already urlencoded but gets urlencoded again breaking the invalidate request. + // $result = $twitter->oauth2( + // 'oauth2/invalidate_token', + // array('access_token' => urldecode($accessToken->access_token)) + // ); + // $this->assertEquals(200, $twitter->getLastHttpCode()); + // $this->assertObjectHasAttribute('access_token', $result); + // return $result; + // } + + public function testOauthRequestToken() + { + $twitter = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET); + $result = $twitter->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]); + $this->assertEquals(200, $twitter->getLastHttpCode()); + $this->assertArrayHasKey('oauth_token', $result); + $this->assertArrayHasKey('oauth_token_secret', $result); + $this->assertArrayHasKey('oauth_callback_confirmed', $result); + $this->assertEquals('true', $result['oauth_callback_confirmed']); + return $result; + } + + /** + * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException + * @expectedExceptionMessage Could not authenticate you + */ + public function testOauthRequestTokenException() + { + $twitter = new TwitterOAuth('CONSUMER_KEY', 'CONSUMER_SECRET'); + $result = $twitter->oauth('oauth/request_token', ['oauth_callback' => OAUTH_CALLBACK]); + return $result; + } + + /** + * @expectedException \Abraham\TwitterOAuth\TwitterOAuthException + * @expectedExceptionMessage Invalid oauth_verifier parameter + * @depends testOauthRequestToken + */ + public function testOauthAccessTokenTokenException(array $requestToken) + { + // Can't test this without a browser logging into Twitter so check for the correct error instead. + $twitter = new TwitterOAuth( + CONSUMER_KEY, + CONSUMER_SECRET, + $requestToken['oauth_token'], + $requestToken['oauth_token_secret'] + ); + $twitter->oauth("oauth/access_token", ["oauth_verifier" => "fake_oauth_verifier"]); + } + + public function testUrl() + { + $url = $this->twitter->url('oauth/authorize', ['foo' => 'bar', 'baz' => 'qux']); + $this->assertEquals('https://api.twitter.com/oauth/authorize?foo=bar&baz=qux', $url); + } + + public function testGetAccountVerifyCredentials() + { + // Include entities boolean added to test parameter value cohearsion + $this->twitter->get('account/verify_credentials', ["include_entities" => false]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + // BUG: testing is too unreliable for now + // public function testSetProxy() + // { + // $this->twitter->setProxy(array( + // 'CURLOPT_PROXY' => PROXY, + // 'CURLOPT_PROXYUSERPWD' => PROXYUSERPWD, + // 'CURLOPT_PROXYPORT' => PROXYPORT, + // )); + // $this->twitter->setTimeouts(60, 60); + // $result = $this->twitter->get('account/verify_credentials'); + // $this->assertEquals(200, $this->twitter->getLastHttpCode()); + // $this->assertObjectHasAttribute('id', $result); + // } + + public function testGetStatusesMentionsTimeline() + { + $this->twitter->get('statuses/mentions_timeline'); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testGetSearchTweets() + { + $result = $this->twitter->get('search/tweets', ['q' => 'twitter']); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + return $result->statuses; + } + + /** + * @depends testGetSearchTweets + */ + public function testGetSearchTweetsWithMaxId($statuses) + { + $maxId = array_pop($statuses)->id_str; + $this->twitter->get('search/tweets', ['q' => 'twitter', 'max_id' => $maxId]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testPostFavoritesCreate() + { + $result = $this->twitter->post('favorites/create', ['id' => '6242973112']); + if ($this->twitter->getLastHttpCode() == 403) { + // Status already favorited + $this->assertEquals(139, $result->errors[0]->code); + } else { + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + } + + /** + * @depends testPostFavoritesCreate + */ + public function testPostFavoritesDestroy() + { + $this->twitter->post('favorites/destroy', ['id' => '6242973112']); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testPostStatusesUpdateWithMedia() + { + $this->twitter->setTimeouts(60, 30); + // Image source https://www.flickr.com/photos/titrans/8548825587/ + $file_path = __DIR__ . '/kitten.jpg'; + $result = $this->twitter->upload('media/upload', ['media' => $file_path]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('media_id_string', $result); + $parameters = ['status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string]; + $result = $this->twitter->post('statuses/update', $parameters); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + if ($this->twitter->getLastHttpCode() == 200) { + $result = $this->twitter->post('statuses/destroy/' . $result->id_str); + } + return $result; + } + + public function testPostStatusesUpdateWithMediaChunked() + { + $this->twitter->setTimeouts(60, 30); + // Video source http://www.sample-videos.com/ + $file_path = __DIR__ . '/video.mp4'; + $result = $this->twitter->upload('media/upload', ['media' => $file_path, 'media_type' => 'video/mp4'], true); + $this->assertEquals(201, $this->twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('media_id_string', $result); + $parameters = ['status' => 'Hello World ' . time(), 'media_ids' => $result->media_id_string]; + $result = $this->twitter->post('statuses/update', $parameters); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + if ($this->twitter->getLastHttpCode() == 200) { + $result = $this->twitter->post('statuses/destroy/' . $result->id_str); + } + return $result; + } + + public function testPostStatusesUpdateUtf8() + { + $result = $this->twitter->post('statuses/update', ['status' => 'xこんにちは世界 ' . time()]); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + return $result; + } + + /** + * @depends testPostStatusesUpdateUtf8 + */ + public function testPostStatusesDestroy($status) + { + $this->twitter->post('statuses/destroy/' . $status->id_str); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + } + + public function testLastResult() + { + $this->twitter->get('search/tweets', ['q' => 'twitter']); + $this->assertEquals('search/tweets', $this->twitter->getLastApiPath()); + $this->assertEquals(200, $this->twitter->getLastHttpCode()); + $this->assertObjectHasAttribute('statuses', $this->twitter->getLastBody()); + } + + /** + * @depends testLastResult + */ + public function testResetLastResponse() + { + $this->twitter->resetLastResponse(); + $this->assertEquals('', $this->twitter->getLastApiPath()); + $this->assertEquals(0, $this->twitter->getLastHttpCode()); + $this->assertEquals([], $this->twitter->getLastBody()); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php b/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php new file mode 100644 index 00000000..609382d6 --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/Util/JsonDecoderTest.php @@ -0,0 +1,50 @@ +assertEquals($expected, JsonDecoder::decode($input, $asArray)); + } + + public function jsonProvider() + { + return [ + ['[]', true, []], + ['[1,2,3]', true, [1, 2, 3]], + ['[{"id": 556179961825226750}]', true, [['id' => 556179961825226750]]], + ['[]', false, []], + ['[1,2,3]', false, [1, 2, 3]], + [ + '[{"id": 556179961825226750}]', + false, + [ + $this->getClass(function ($object) { + $object->id = 556179961825226750; + return $object; + }) + ] + ], + + ]; + } + + /** + * @param callable $callable + * + * @return stdClass + */ + private function getClass(\Closure $callable) + { + $object = new \stdClass(); + + return $callable($object); + } +} diff --git a/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php b/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php new file mode 100644 index 00000000..7cc9c27f --- /dev/null +++ b/twitter/vendor/abraham/twitteroauth/tests/bootstrap.php @@ -0,0 +1,12 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Autoload; + +/** + * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. + * + * $loader = new \Composer\Autoload\ClassLoader(); + * + * // register classes with namespaces + * $loader->add('Symfony\Component', __DIR__.'/component'); + * $loader->add('Symfony', __DIR__.'/framework'); + * + * // activate the autoloader + * $loader->register(); + * + * // to enable searching the include path (eg. for PEAR packages) + * $loader->setUseIncludePath(true); + * + * In this example, if you try to use a class in the Symfony\Component + * namespace or one of its children (Symfony\Component\Console for instance), + * the autoloader will first look for the class under the component/ + * directory, and it will then fallback to the framework/ directory if not + * found before giving up. + * + * This class is loosely based on the Symfony UniversalClassLoader. + * + * @author Fabien Potencier + * @author Jordi Boggiano + * @see http://www.php-fig.org/psr/psr-0/ + * @see http://www.php-fig.org/psr/psr-4/ + */ +class ClassLoader +{ + // PSR-4 + private $prefixLengthsPsr4 = array(); + private $prefixDirsPsr4 = array(); + private $fallbackDirsPsr4 = array(); + + // PSR-0 + private $prefixesPsr0 = array(); + private $fallbackDirsPsr0 = array(); + + private $useIncludePath = false; + private $classMap = array(); + private $classMapAuthoritative = false; + private $missingClasses = array(); + private $apcuPrefix; + + public function getPrefixes() + { + if (!empty($this->prefixesPsr0)) { + return call_user_func_array('array_merge', $this->prefixesPsr0); + } + + return array(); + } + + public function getPrefixesPsr4() + { + return $this->prefixDirsPsr4; + } + + public function getFallbackDirs() + { + return $this->fallbackDirsPsr0; + } + + public function getFallbackDirsPsr4() + { + return $this->fallbackDirsPsr4; + } + + public function getClassMap() + { + return $this->classMap; + } + + /** + * @param array $classMap Class to filename map + */ + public function addClassMap(array $classMap) + { + if ($this->classMap) { + $this->classMap = array_merge($this->classMap, $classMap); + } else { + $this->classMap = $classMap; + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, either + * appending or prepending to the ones previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 root directories + * @param bool $prepend Whether to prepend the directories + */ + public function add($prefix, $paths, $prepend = false) + { + if (!$prefix) { + if ($prepend) { + $this->fallbackDirsPsr0 = array_merge( + (array) $paths, + $this->fallbackDirsPsr0 + ); + } else { + $this->fallbackDirsPsr0 = array_merge( + $this->fallbackDirsPsr0, + (array) $paths + ); + } + + return; + } + + $first = $prefix[0]; + if (!isset($this->prefixesPsr0[$first][$prefix])) { + $this->prefixesPsr0[$first][$prefix] = (array) $paths; + + return; + } + if ($prepend) { + $this->prefixesPsr0[$first][$prefix] = array_merge( + (array) $paths, + $this->prefixesPsr0[$first][$prefix] + ); + } else { + $this->prefixesPsr0[$first][$prefix] = array_merge( + $this->prefixesPsr0[$first][$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, either + * appending or prepending to the ones previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * @param bool $prepend Whether to prepend the directories + * + * @throws \InvalidArgumentException + */ + public function addPsr4($prefix, $paths, $prepend = false) + { + if (!$prefix) { + // Register directories for the root namespace. + if ($prepend) { + $this->fallbackDirsPsr4 = array_merge( + (array) $paths, + $this->fallbackDirsPsr4 + ); + } else { + $this->fallbackDirsPsr4 = array_merge( + $this->fallbackDirsPsr4, + (array) $paths + ); + } + } elseif (!isset($this->prefixDirsPsr4[$prefix])) { + // Register directories for a new namespace. + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } elseif ($prepend) { + // Prepend directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + (array) $paths, + $this->prefixDirsPsr4[$prefix] + ); + } else { + // Append directories for an already registered namespace. + $this->prefixDirsPsr4[$prefix] = array_merge( + $this->prefixDirsPsr4[$prefix], + (array) $paths + ); + } + } + + /** + * Registers a set of PSR-0 directories for a given prefix, + * replacing any others previously set for this prefix. + * + * @param string $prefix The prefix + * @param array|string $paths The PSR-0 base directories + */ + public function set($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr0 = (array) $paths; + } else { + $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; + } + } + + /** + * Registers a set of PSR-4 directories for a given namespace, + * replacing any others previously set for this namespace. + * + * @param string $prefix The prefix/namespace, with trailing '\\' + * @param array|string $paths The PSR-4 base directories + * + * @throws \InvalidArgumentException + */ + public function setPsr4($prefix, $paths) + { + if (!$prefix) { + $this->fallbackDirsPsr4 = (array) $paths; + } else { + $length = strlen($prefix); + if ('\\' !== $prefix[$length - 1]) { + throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); + } + $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; + $this->prefixDirsPsr4[$prefix] = (array) $paths; + } + } + + /** + * Turns on searching the include path for class files. + * + * @param bool $useIncludePath + */ + public function setUseIncludePath($useIncludePath) + { + $this->useIncludePath = $useIncludePath; + } + + /** + * Can be used to check if the autoloader uses the include path to check + * for classes. + * + * @return bool + */ + public function getUseIncludePath() + { + return $this->useIncludePath; + } + + /** + * Turns off searching the prefix and fallback directories for classes + * that have not been registered with the class map. + * + * @param bool $classMapAuthoritative + */ + public function setClassMapAuthoritative($classMapAuthoritative) + { + $this->classMapAuthoritative = $classMapAuthoritative; + } + + /** + * Should class lookup fail if not found in the current class map? + * + * @return bool + */ + public function isClassMapAuthoritative() + { + return $this->classMapAuthoritative; + } + + /** + * APCu prefix to use to cache found/not-found classes, if the extension is enabled. + * + * @param string|null $apcuPrefix + */ + public function setApcuPrefix($apcuPrefix) + { + $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + } + + /** + * The APCu prefix in use, or null if APCu caching is not enabled. + * + * @return string|null + */ + public function getApcuPrefix() + { + return $this->apcuPrefix; + } + + /** + * Registers this instance as an autoloader. + * + * @param bool $prepend Whether to prepend the autoloader or not + */ + public function register($prepend = false) + { + spl_autoload_register(array($this, 'loadClass'), true, $prepend); + } + + /** + * Unregisters this instance as an autoloader. + */ + public function unregister() + { + spl_autoload_unregister(array($this, 'loadClass')); + } + + /** + * Loads the given class or interface. + * + * @param string $class The name of the class + * @return bool|null True if loaded, null otherwise + */ + public function loadClass($class) + { + if ($file = $this->findFile($class)) { + includeFile($file); + + return true; + } + } + + /** + * Finds the path to the file where the class is defined. + * + * @param string $class The name of the class + * + * @return string|false The path if found, false otherwise + */ + public function findFile($class) + { + // class map lookup + if (isset($this->classMap[$class])) { + return $this->classMap[$class]; + } + if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { + return false; + } + if (null !== $this->apcuPrefix) { + $file = apcu_fetch($this->apcuPrefix.$class, $hit); + if ($hit) { + return $file; + } + } + + $file = $this->findFileWithExtension($class, '.php'); + + // Search for Hack files if we are running on HHVM + if (false === $file && defined('HHVM_VERSION')) { + $file = $this->findFileWithExtension($class, '.hh'); + } + + if (null !== $this->apcuPrefix) { + apcu_add($this->apcuPrefix.$class, $file); + } + + if (false === $file) { + // Remember that this class does not exist. + $this->missingClasses[$class] = true; + } + + return $file; + } + + private function findFileWithExtension($class, $ext) + { + // PSR-4 lookup + $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; + + $first = $class[0]; + if (isset($this->prefixLengthsPsr4[$first])) { + $subPath = $class; + while (false !== $lastPos = strrpos($subPath, '\\')) { + $subPath = substr($subPath, 0, $lastPos); + $search = $subPath.'\\'; + if (isset($this->prefixDirsPsr4[$search])) { + $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); + foreach ($this->prefixDirsPsr4[$search] as $dir) { + if (file_exists($file = $dir . $pathEnd)) { + return $file; + } + } + } + } + } + + // PSR-4 fallback dirs + foreach ($this->fallbackDirsPsr4 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { + return $file; + } + } + + // PSR-0 lookup + if (false !== $pos = strrpos($class, '\\')) { + // namespaced class name + $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) + . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); + } else { + // PEAR-like class name + $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; + } + + if (isset($this->prefixesPsr0[$first])) { + foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { + if (0 === strpos($class, $prefix)) { + foreach ($dirs as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + } + } + } + + // PSR-0 fallback dirs + foreach ($this->fallbackDirsPsr0 as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { + return $file; + } + } + + // PSR-0 include paths. + if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { + return $file; + } + + return false; + } +} + +/** + * Scope isolated include. + * + * Prevents access to $this/self from included files. + */ +function includeFile($file) +{ + include $file; +} diff --git a/twitter/vendor/composer/LICENSE b/twitter/vendor/composer/LICENSE new file mode 100644 index 00000000..f27399a0 --- /dev/null +++ b/twitter/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) Nils Adermann, Jordi Boggiano + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is furnished +to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/twitter/vendor/composer/autoload_classmap.php b/twitter/vendor/composer/autoload_classmap.php new file mode 100644 index 00000000..7a91153b --- /dev/null +++ b/twitter/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/abraham/twitteroauth/src'), +); diff --git a/twitter/vendor/composer/autoload_real.php b/twitter/vendor/composer/autoload_real.php new file mode 100644 index 00000000..f1480a81 --- /dev/null +++ b/twitter/vendor/composer/autoload_real.php @@ -0,0 +1,52 @@ += 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); + if ($useStaticLoader) { + require_once __DIR__ . '/autoload_static.php'; + + call_user_func(\Composer\Autoload\ComposerStaticInitd051a3fd38373f38066f9a7f62be4c25::getInitializer($loader)); + } else { + $map = require __DIR__ . '/autoload_namespaces.php'; + foreach ($map as $namespace => $path) { + $loader->set($namespace, $path); + } + + $map = require __DIR__ . '/autoload_psr4.php'; + foreach ($map as $namespace => $path) { + $loader->setPsr4($namespace, $path); + } + + $classMap = require __DIR__ . '/autoload_classmap.php'; + if ($classMap) { + $loader->addClassMap($classMap); + } + } + + $loader->register(true); + + return $loader; + } +} diff --git a/twitter/vendor/composer/autoload_static.php b/twitter/vendor/composer/autoload_static.php new file mode 100644 index 00000000..a02e4d6d --- /dev/null +++ b/twitter/vendor/composer/autoload_static.php @@ -0,0 +1,31 @@ + + array ( + 'Abraham\\TwitterOAuth\\' => 21, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'Abraham\\TwitterOAuth\\' => + array ( + 0 => __DIR__ . '/..' . '/abraham/twitteroauth/src', + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInitd051a3fd38373f38066f9a7f62be4c25::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInitd051a3fd38373f38066f9a7f62be4c25::$prefixDirsPsr4; + + }, null, ClassLoader::class); + } +} diff --git a/twitter/vendor/composer/installed.json b/twitter/vendor/composer/installed.json new file mode 100644 index 00000000..3ee3d3de --- /dev/null +++ b/twitter/vendor/composer/installed.json @@ -0,0 +1,58 @@ +[ + { + "name": "abraham/twitteroauth", + "version": "0.7.4", + "version_normalized": "0.7.4.0", + "source": { + "type": "git", + "url": "https://github.com/abraham/twitteroauth.git", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/abraham/twitteroauth/zipball/c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "reference": "c6f9e692552dd037b2324ed0dfa28a4e60875acf", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "php": "^5.6 || ^7.0" + }, + "require-dev": { + "phpmd/phpmd": "~2.6", + "phpunit/phpunit": "~5.7", + "squizlabs/php_codesniffer": "~3.0" + }, + "time": "2017-06-30T22:02:01+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Abraham\\TwitterOAuth\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Abraham Williams", + "email": "abraham@abrah.am", + "homepage": "https://abrah.am", + "role": "Developer" + } + ], + "description": "The most popular PHP library for use with the Twitter OAuth REST API.", + "homepage": "https://twitteroauth.com", + "keywords": [ + "Twitter API", + "Twitter oAuth", + "api", + "oauth", + "rest", + "social", + "twitter" + ] + } +] diff --git a/unicode_smilies/unicode_smilies.php b/unicode_smilies/unicode_smilies.php index 583f6c97..faa553cc 100644 --- a/unicode_smilies/unicode_smilies.php +++ b/unicode_smilies/unicode_smilies.php @@ -5,15 +5,15 @@ * Version: 1.0 * Author: Michael Vogel */ - -require_once 'include/Smilies.php'; +use Friendica\Core\Addon; +use Friendica\Content\Smilies; function unicode_smilies_install() { - register_hook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); + Addon::registerHook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); } function unicode_smilies_uninstall() { - unregister_hook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); + Addon::unregisterHook('smilie', 'addon/unicode_smilies/unicode_smilies.php', 'unicode_smilies_smilies'); } function unicode_smilies_smilies(&$a,&$b) { diff --git a/viewsrc/lang/it/messages.po b/viewsrc/lang/it/messages.po new file mode 100644 index 00000000..0b9f3f93 --- /dev/null +++ b/viewsrc/lang/it/messages.po @@ -0,0 +1,23 @@ +# ADDON viewsrc +# Copyright (C) +# This file is distributed under the same license as the Friendica viewsrc addon package. +# +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2013-02-27 05:01-0500\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: fabrixxm , 2018\n" +"Language-Team: Italian (https://www.transifex.com/Friendica/teams/12172/it/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: it\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" + +#: viewsrc.php:39 +msgid "View Source" +msgstr "Vedi Sorgente" diff --git a/viewsrc/lang/it/strings.php b/viewsrc/lang/it/strings.php index a567e3f6..09b93909 100644 --- a/viewsrc/lang/it/strings.php +++ b/viewsrc/lang/it/strings.php @@ -1,3 +1,8 @@ -strings["View Source"] = "Vedi sorgente"; +strings["View Source"] = "Vedi Sorgente"; diff --git a/viewsrc/viewsrc.php b/viewsrc/viewsrc.php index 687d9253..d3d9876b 100644 --- a/viewsrc/viewsrc.php +++ b/viewsrc/viewsrc.php @@ -1,6 +1,4 @@ * */ +use Friendica\Core\Addon; +use Friendica\Core\L10n; function viewsrc_install() { - register_hook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); - register_hook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); + Addon::registerHook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); + Addon::registerHook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); } function viewsrc_uninstall() { - unregister_hook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); - unregister_hook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); + Addon::unregisterHook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu'); + Addon::unregisterHook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end'); } @@ -33,27 +33,29 @@ function viewsrc_page_end(&$a, &$o){ EOS; } -function viewsrc_item_photo_menu(&$a,&$b) { - if(!local_user()) +function viewsrc_item_photo_menu(&$a, &$b) +{ + if (!local_user()) { return; + } if (local_user() != $b['item']['uid']) { $r = q("SELECT `id` FROM `item` WHERE `uid` = %d AND `guid` = '%s'", intval(local_user()), dbesc($b['item']['guid'])); - if (!$r) + if (!$r) { return; + } $item_id = $r[0]['id']; - - } else + } else { $item_id = $b['item']['id']; + } - $b['menu'] = array_merge( array( t('View Source') => $a->get_baseurl() . '/viewsrc/'. $item_id), $b['menu']); + $b['menu'] = array_merge([L10n::t('View Source') => $a->get_baseurl() . '/viewsrc/'. $item_id], $b['menu']); //if((! local_user()) || (local_user() != $b['item']['uid'])) // return; - //$b['menu'] = array_merge( array( t('View Source') => $a->get_baseurl() . '/viewsrc/'. $b['item']['id']), $b['menu']); - + //$b['menu'] = array_merge(array(L10n::t('View Source') => $a->get_baseurl() . '/viewsrc/'. $b['item']['id']), $b['menu']); } diff --git a/webrtc/README.md b/webrtc/README.md index 4f6c55ca..2b5c9ed0 100644 --- a/webrtc/README.md +++ b/webrtc/README.md @@ -1,8 +1,8 @@ -WebRTC Plugin +WebRTC Addon ============= This is a quick and dirty addon to add a [webrtc][1] website as an app. As webrtc -advances so rapidly there is s a chance this plugin will be obsolete. Webrtc is +advances so rapidly there is s a chance this addon will be obsolete. Webrtc is a new video and audio conferencing tool that is browser to browser communication, no need to download specific software for just conferencing. There are many different webrtc instances and because of the technology it is @@ -10,7 +10,7 @@ really a person 2 person communication, using the server to only signal who wants to talk to who, the actual transfer of the audio and video is directly between the participants. -If you would like to try this plugin please download one of the following +If you would like to try this addon please download one of the following either Chrome/Chromium 25 or higher or Firefox 21 or higher. Then test it by visiting a known webrtc instance (i.e. [live.mayfirst.org](https://live.mayfirst.org)) create a room, you should be asked to share your camera and microphone (firefox will let diff --git a/webrtc/lang/it/messages.po b/webrtc/lang/it/messages.po index ae800a32..9410d594 100644 --- a/webrtc/lang/it/messages.po +++ b/webrtc/lang/it/messages.po @@ -10,7 +10,7 @@ msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-06-23 14:45+0200\n" -"PO-Revision-Date: 2014-09-10 14:50+0000\n" +"PO-Revision-Date: 2017-09-20 06:09+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" diff --git a/webrtc/webrtc.php b/webrtc/webrtc.php index 8b3a243e..cdf7fd2a 100644 --- a/webrtc/webrtc.php +++ b/webrtc/webrtc.php @@ -6,31 +6,34 @@ * Author: Stephen Mahood * Author: Tobias Diekershoff */ +use Friendica\Core\Addon; +use Friendica\Core\Config; +use Friendica\Core\L10n; function webrtc_install() { - register_hook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); + Addon::registerHook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); } function webrtc_uninstall() { - unregister_hook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); + Addon::unregisterHook('app_menu', 'addon/webrtc/webrtc.php', 'webrtc_app_menu'); } function webrtc_app_menu($a,&$b) { - $b['app_menu'][] = ''; + $b['app_menu'][] = ''; } -function webrtc_plugin_admin (&$a, &$o) { +function webrtc_addon_admin (&$a, &$o) { $t = get_markup_template( "admin.tpl", "addon/webrtc/" ); - $o = replace_macros( $t, array( - '$submit' => t('Save Settings'), - '$webrtcurl' => array('webrtcurl', t('WebRTC Base URL'), get_config('webrtc','webrtcurl' ), t('Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .')), - )); + $o = replace_macros( $t, [ + '$submit' => L10n::t('Save Settings'), + '$webrtcurl' => ['webrtcurl', L10n::t('WebRTC Base URL'), Config::get('webrtc','webrtcurl' ), L10n::t('Page your users will create a WebRTC chat room on. For example you could use https://live.mayfirst.org .')], + ]); } -function webrtc_plugin_admin_post (&$a) { +function webrtc_addon_admin_post (&$a) { $url = ((x($_POST, 'webrtcurl')) ? notags(trim($_POST['webrtcurl'])) : ''); - set_config('webrtc', 'webrtcurl', $url); - info( t('Settings updated.'). EOL); + Config::set('webrtc', 'webrtcurl', $url); + info(L10n::t('Settings updated.'). EOL); } function webrtc_module() { @@ -44,10 +47,10 @@ function webrtc_content(&$a) { $webrtcurl = get_config('webrtc','webrtcurl'); /* embedd the landing page in an iframe */ - $o .= '

'.t('Video Chat').'

'; - $o .= '

'.t('WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.').'

'; + $o .= '

'.L10n::t('Video Chat').'

'; + $o .= '

'.L10n::t('WebRTC is a video and audio conferencing tool that works with Firefox (version 21 and above) and Chrome/Chromium (version 25 and above). Just create a new chat room and send the link to someone you want to chat with.').'

'; if ($webrtcurl == '') { - $o .= '

'.t('Please contact your friendica admin and send a reminder to configure the WebRTC addon.').'

'; + $o .= '

'.L10n::t('Please contact your friendica admin and send a reminder to configure the WebRTC addon.').'

'; } else { $o .= ''; } diff --git a/widgets/lang/C/messages.po b/widgets/lang/C/messages.po index c903d2bf..79a7a402 100644 --- a/widgets/lang/C/messages.po +++ b/widgets/lang/C/messages.po @@ -49,7 +49,7 @@ msgid "Widgets available" msgstr "" #: widgets.php:124 -msgid "Plugin Settings" +msgid "Addon Settings" msgstr "" #: widget_friendheader.php:40 diff --git a/widgets/lang/ca/strings.php b/widgets/lang/ca/strings.php index db19a10b..fb4bd472 100644 --- a/widgets/lang/ca/strings.php +++ b/widgets/lang/ca/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Connectar en Friendica"; $a->strings["Generate new key"] = "Generar nova clau"; $a->strings["Widgets key"] = "Ginys clau"; $a->strings["Widgets available"] = "Ginys disponibles"; -$a->strings["Plugin Settings"] = "Ajustos de Plugin"; +$a->strings["Addon Settings"] = "Ajustos de Addon"; $a->strings["Get added to this list!"] = "S'afegeixen a aquesta llista!"; diff --git a/widgets/lang/cs/strings.php b/widgets/lang/cs/strings.php index 68c4f81f..e6da406d 100644 --- a/widgets/lang/cs/strings.php +++ b/widgets/lang/cs/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Připojit na Friendica!"; $a->strings["Generate new key"] = "Generovat nové klíče"; $a->strings["Widgets key"] = "Widgety klíč"; $a->strings["Widgets available"] = "Widgety k dispozici"; -$a->strings["Plugin Settings"] = "Nastavení doplňku"; +$a->strings["Addon Settings"] = "Nastavení doplňku"; $a->strings["Get added to this list!"] = "Nechte se přidat do tohoto listu!"; diff --git a/widgets/lang/de/strings.php b/widgets/lang/de/strings.php index 3137f02d..86e42c68 100644 --- a/widgets/lang/de/strings.php +++ b/widgets/lang/de/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "In Friendica verbinden!"; $a->strings["Generate new key"] = "Neuen Schlüssel erstellen"; $a->strings["Widgets key"] = "Widgets Schlüssel"; $a->strings["Widgets available"] = "Verfügbare Widgets"; -$a->strings["Plugin Settings"] = "Plugin-Einstellungen"; +$a->strings["Addon Settings"] = "Addon-Einstellungen"; $a->strings["Get added to this list!"] = "Werde Mitglied dieser Liste"; diff --git a/widgets/lang/eo/strings.php b/widgets/lang/eo/strings.php index 5a599474..7585a6bb 100644 --- a/widgets/lang/eo/strings.php +++ b/widgets/lang/eo/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Konekti ĉe Friendica!"; $a->strings["Generate new key"] = "Generi novan ĉifroŝlosilon"; $a->strings["Widgets key"] = "Ŝlosilo por fenestraĵoj"; $a->strings["Widgets available"] = "Disponeblaj fenestraĵoj"; -$a->strings["Plugin Settings"] = "Kromprogramoagordoj"; +$a->strings["Addon Settings"] = "Kromprogramoagordoj"; $a->strings["Get added to this list!"] = "Iĝu membro de ĉi tiu listo!"; diff --git a/widgets/lang/es/strings.php b/widgets/lang/es/strings.php index 181ae8e0..736ae769 100644 --- a/widgets/lang/es/strings.php +++ b/widgets/lang/es/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "¡Conéctate en Friendica!"; $a->strings["Generate new key"] = "Generar clave nueva"; $a->strings["Widgets key"] = "Clave de aplicaciones"; $a->strings["Widgets available"] = "Aplicaciones disponibles"; -$a->strings["Plugin Settings"] = "Configuración de los módulos"; +$a->strings["Addon Settings"] = "Configuración de los módulos"; $a->strings["Get added to this list!"] = "¡Añadido a la lista!"; diff --git a/widgets/lang/fr/strings.php b/widgets/lang/fr/strings.php index b3b6108d..2a3000e3 100644 --- a/widgets/lang/fr/strings.php +++ b/widgets/lang/fr/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Se connecter sur Friendica!"; $a->strings["Generate new key"] = "Générer une nouvelle clé"; $a->strings["Widgets key"] = "Clé des widgets"; $a->strings["Widgets available"] = "Widgets disponibles"; -$a->strings["Plugin Settings"] = "Extensions"; +$a->strings["Addon Settings"] = "Extensions"; $a->strings["Get added to this list!"] = "Ajoutez-vous à cette liste!"; diff --git a/widgets/lang/is/strings.php b/widgets/lang/is/strings.php index 9892b5f4..7867762d 100644 --- a/widgets/lang/is/strings.php +++ b/widgets/lang/is/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Tengist á Friendica!"; $a->strings["Generate new key"] = "Búa til nýjan lykil"; $a->strings["Widgets key"] = "Lykill smáforrits "; $a->strings["Widgets available"] = "Smáforrit til"; -$a->strings["Plugin Settings"] = "Eininga stillingar"; +$a->strings["Addon Settings"] = "Eininga stillingar"; $a->strings["Get added to this list!"] = "Láta bæta þér við þennan lista!"; diff --git a/widgets/lang/it/strings.php b/widgets/lang/it/strings.php index d713d8ce..277f1f86 100644 --- a/widgets/lang/it/strings.php +++ b/widgets/lang/it/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Connettiti su Friendica!"; $a->strings["Generate new key"] = "Genera una nuova chiave"; $a->strings["Widgets key"] = "Chiave Widget"; $a->strings["Widgets available"] = "Widget disponibili"; -$a->strings["Plugin Settings"] = "Impostazioni plugin"; +$a->strings["Addon Settings"] = "Impostazioni addon"; $a->strings["Get added to this list!"] = "Aggiungiti a questa lista!"; diff --git a/widgets/lang/nb-no/strings.php b/widgets/lang/nb-no/strings.php index 7774c639..cdcf3f43 100644 --- a/widgets/lang/nb-no/strings.php +++ b/widgets/lang/nb-no/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = ""; $a->strings["Generate new key"] = "Lag ny nøkkel"; $a->strings["Widgets key"] = "Nøkkel til småprogrammer"; $a->strings["Widgets available"] = "Småprogrammer er tilgjengelige"; -$a->strings["Plugin Settings"] = "Tilleggsinnstillinger"; +$a->strings["Addon Settings"] = "Tilleggsinnstillinger"; $a->strings["Get added to this list!"] = ""; diff --git a/widgets/lang/pl/strings.php b/widgets/lang/pl/strings.php index 967b998b..b36b2cf5 100644 --- a/widgets/lang/pl/strings.php +++ b/widgets/lang/pl/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Połączono z Friendica!"; $a->strings["Generate new key"] = "Stwórz nowy klucz"; $a->strings["Widgets key"] = ""; $a->strings["Widgets available"] = "Widgety są dostępne"; -$a->strings["Plugin Settings"] = "Ustawienia wtyczki"; +$a->strings["Addon Settings"] = "Ustawienia wtyczki"; $a->strings["Get added to this list!"] = "Zostań dodany do listy!"; diff --git a/widgets/lang/pt-br/strings.php b/widgets/lang/pt-br/strings.php index 965c39eb..934ffea3 100644 --- a/widgets/lang/pt-br/strings.php +++ b/widgets/lang/pt-br/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Conecte no Friendica!"; $a->strings["Generate new key"] = "Gerar nova chave"; $a->strings["Widgets key"] = "Chave de widgets"; $a->strings["Widgets available"] = "Widgets disponíveis"; -$a->strings["Plugin Settings"] = "Configurações do plugin"; +$a->strings["Addon Settings"] = "Configurações do addon"; $a->strings["Get added to this list!"] = ""; diff --git a/widgets/lang/ru/strings.php b/widgets/lang/ru/strings.php index 3c455eb3..8d8cf250 100644 --- a/widgets/lang/ru/strings.php +++ b/widgets/lang/ru/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "Подключены к Friendica!"; $a->strings["Generate new key"] = "Сгенерировать новый ключ"; $a->strings["Widgets key"] = "Ключ виджетов"; $a->strings["Widgets available"] = "Виджеты доступны"; -$a->strings["Plugin Settings"] = "Настройки плагина"; +$a->strings["Addon Settings"] = "Настройки плагина"; $a->strings["Get added to this list!"] = ""; diff --git a/widgets/lang/sv/strings.php b/widgets/lang/sv/strings.php index 0d27628b..6b34aac1 100644 --- a/widgets/lang/sv/strings.php +++ b/widgets/lang/sv/strings.php @@ -1,3 +1,3 @@ strings["Plugin Settings"] = "Inställningar för insticksprogram"; +$a->strings["Addon Settings"] = "Inställningar för insticksprogram"; diff --git a/widgets/lang/zh-cn/strings.php b/widgets/lang/zh-cn/strings.php index 11f1a96e..df8fc494 100644 --- a/widgets/lang/zh-cn/strings.php +++ b/widgets/lang/zh-cn/strings.php @@ -6,5 +6,5 @@ $a->strings["Connect on Friendica!"] = "连接在Friendica!"; $a->strings["Generate new key"] = "造成新钥匙"; $a->strings["Widgets key"] = "小窗口钥匙"; $a->strings["Widgets available"] = "可用的小窗口"; -$a->strings["Plugin Settings"] = "插件设置"; +$a->strings["Addon Settings"] = "插件设置"; $a->strings["Get added to this list!"] = "被在这个单子加入!"; diff --git a/widgets/widget_friendheader.php b/widgets/widget_friendheader.php index 20a84e25..cd3083c4 100644 --- a/widgets/widget_friendheader.php +++ b/widgets/widget_friendheader.php @@ -1,29 +1,38 @@ profile = $r[0]; $o = ""; @@ -37,7 +46,7 @@ function friendheader_widget_content(&$a, $conf){ "; $o .= _abs_url(contact_block()); - $o .= "profile['nickname']."' target=new>". t('Get added to this list!') .""; - + $o .= "profile['nickname']."' target=new>". L10n::t('Get added to this list!') .""; + return $o; } diff --git a/widgets/widget_friends.php b/widgets/widget_friends.php index 195667e8..0d218b13 100644 --- a/widgets/widget_friends.php +++ b/widgets/widget_friends.php @@ -1,29 +1,40 @@ profile = $r[0]; $o = ""; @@ -37,6 +48,6 @@ function friends_widget_content(&$a, $conf){ "; $o .= _abs_url(contact_block()); - $o .= "profile['nickname']."'>". t('Connect on Friendica!') .""; + $o .= "profile['nickname']."'>". L10n::t('Connect on Friendica!') .""; return $o; } diff --git a/widgets/widget_like.php b/widgets/widget_like.php index 8f356da9..27b5fbe6 100644 --- a/widgets/widget_like.php +++ b/widgets/widget_like.php @@ -1,5 +1,7 @@ $likes, - '$strlike' => sprintf( tt("%d person likes this", "%d people like this", $likes), $likes), - + '$strlike' => L10n::tt("%d person likes this", "%d people like this", $likes), + '$dislike' => $dislikes, - '$strdislike'=> sprintf( tt("%d person doesn't like this", "%d people don't like this", $dislikes), $dislikes), - + '$strdislike'=> L10n::tt("%d person doesn't like this", "%d people don't like this", $dislikes), + '$baseurl' => $a->get_baseurl(), )); diff --git a/widgets/widgets.php b/widgets/widgets.php index 72534ce3..76fc14b4 100644 --- a/widgets/widgets.php +++ b/widgets/widgets.php @@ -5,16 +5,18 @@ * Version: 1.0 * Author: Fabio Comuni */ - - +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; + function widgets_install() { - register_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); - register_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); + Addon::registerHook('addon_settings', 'addon/widgets/widgets.php', 'widgets_settings'); + Addon::registerHook('addon_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); logger("installed widgets"); } function widgets_uninstall() { - unregister_hook('plugin_settings', 'addon/widgets/widgets.php', 'widgets_settings'); - unregister_hook('plugin_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); + Addon::unregisterHook('addon_settings', 'addon/widgets/widgets.php', 'widgets_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/widgets/widgets.php', 'widgets_settings_post'); } @@ -53,13 +55,13 @@ function widgets_settings(&$a,&$o) { # $t = file_get_contents( dirname(__file__). "/settings.tpl" ); $t = get_markup_template("settings.tpl", "addon/widgets/"); - $o .= replace_macros($t, array( - '$submit' => t('Generate new key'), + $o .= replace_macros($t, [ + '$submit' => L10n::t('Generate new key'), '$baseurl' => $a->get_baseurl(), '$title' => "Widgets", - '$label' => t('Widgets key'), + '$label' => L10n::t('Widgets key'), '$key' => $key, - '$widgets_h' => t('Widgets available'), + '$widgets_h' => L10n::t('Widgets available'), '$widgets' => $widgets, )); @@ -121,7 +123,7 @@ function widgets_content(&$a) { if (isset($_GET['p']) && local_user()==$conf['uid'] ) { $o .= ""; $o .= "

Preview Widget

"; - $o .= ''. t("Plugin Settings") .''; + $o .= ''. L10n::t("Addon Settings") .''; $o .= "

".call_user_func($a->argv[1].'_widget_name')."

"; $o .= call_user_func($a->argv[1].'_widget_help'); @@ -165,15 +167,9 @@ function widgets_content(&$a) { return $o; - } - - } - + } + } + echo $o; killme(); } - - - - -?> diff --git a/windowsphonepush/lang/C/messages.po b/windowsphonepush/lang/C/messages.po index b6a10a74..8643694a 100644 --- a/windowsphonepush/lang/C/messages.po +++ b/windowsphonepush/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "WindowsPhonePush Settings" msgstr "" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" +msgid "Enable WindowsPhonePush Addon" msgstr "" #: windowsphonepush.php:122 diff --git a/windowsphonepush/lang/de/messages.po b/windowsphonepush/lang/de/messages.po index 672ab3f2..58bf87cf 100644 --- a/windowsphonepush/lang/de/messages.po +++ b/windowsphonepush/lang/de/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "WindowsPhonePush Einstellungen" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Aktiviere WindowsPhonePush Plugin" +msgid "Enable WindowsPhonePush Addon" +msgstr "Aktiviere WindowsPhonePush Addon" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/de/strings.php b/windowsphonepush/lang/de/strings.php index 5dbbafc2..e03a0bd7 100644 --- a/windowsphonepush/lang/de/strings.php +++ b/windowsphonepush/lang/de/strings.php @@ -7,6 +7,6 @@ function string_plural_select_de($n){ ; $a->strings["WindowsPhonePush settings updated."] = "WindowsPhonePush Einstellungen aktualisiert."; $a->strings["WindowsPhonePush Settings"] = "WindowsPhonePush Einstellungen"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Aktiviere WindowsPhonePush Plugin"; +$a->strings["Enable WindowsPhonePush Addon"] = "Aktiviere WindowsPhonePush Addon"; $a->strings["Push text of new item"] = "Text senden"; $a->strings["Save Settings"] = "Einstellungen speichern"; diff --git a/windowsphonepush/lang/es/messages.po b/windowsphonepush/lang/es/messages.po index 7d561c21..52d8e807 100644 --- a/windowsphonepush/lang/es/messages.po +++ b/windowsphonepush/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "Ajustes de WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Habilitar Plugin de WindowsPhonePush" +msgid "Enable WindowsPhonePush Addon" +msgstr "Habilitar Addon de WindowsPhonePush" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/es/strings.php b/windowsphonepush/lang/es/strings.php index 22a5c4c5..b1a1bd37 100644 --- a/windowsphonepush/lang/es/strings.php +++ b/windowsphonepush/lang/es/strings.php @@ -7,6 +7,6 @@ function string_plural_select_es($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Ajustes de WindowsPhonePush actualizados."; $a->strings["WindowsPhonePush Settings"] = "Ajustes de WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Habilitar Plugin de WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Habilitar Addon de WindowsPhonePush"; $a->strings["Push text of new item"] = "Empujar texto de nuevo objeto"; $a->strings["Save Settings"] = "Guardar Ajustes"; diff --git a/windowsphonepush/lang/fr/messages.po b/windowsphonepush/lang/fr/messages.po index 612f4d6c..b1b9a65c 100644 --- a/windowsphonepush/lang/fr/messages.po +++ b/windowsphonepush/lang/fr/messages.po @@ -28,7 +28,7 @@ msgid "WindowsPhonePush Settings" msgstr "Paramètres WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" +msgid "Enable WindowsPhonePush Addon" msgstr "Activer le greffon WindowsPhonePush" #: windowsphonepush.php:122 diff --git a/windowsphonepush/lang/fr/strings.php b/windowsphonepush/lang/fr/strings.php index 8edca6fc..bff0edb3 100644 --- a/windowsphonepush/lang/fr/strings.php +++ b/windowsphonepush/lang/fr/strings.php @@ -7,6 +7,6 @@ function string_plural_select_fr($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Paramètres WindowsPhonePush mis à jour"; $a->strings["WindowsPhonePush Settings"] = "Paramètres WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Activer le greffon WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Activer le greffon WindowsPhonePush"; $a->strings["Push text of new item"] = "Pousse le texte du nouvel élément"; $a->strings["Save Settings"] = "Sauvegarde des paramètres"; diff --git a/windowsphonepush/lang/it/messages.po b/windowsphonepush/lang/it/messages.po index be085107..39e29279 100644 --- a/windowsphonepush/lang/it/messages.po +++ b/windowsphonepush/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014 +# fabrixxm , 2014,2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2014-10-26 15:02+0100\n" -"PO-Revision-Date: 2014-10-31 13:46+0000\n" +"PO-Revision-Date: 2018-03-19 13:26+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "Impostazioni WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Abilita plugin WindowsPhonePush" +msgid "Enable WindowsPhonePush Addon" +msgstr "Abilita componente aggiuntivo WindowsPhonePush" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/it/strings.php b/windowsphonepush/lang/it/strings.php index a472a7c1..a45c2c7f 100644 --- a/windowsphonepush/lang/it/strings.php +++ b/windowsphonepush/lang/it/strings.php @@ -7,6 +7,6 @@ function string_plural_select_it($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Impostazioni WindowsPhonePush aggiornate."; $a->strings["WindowsPhonePush Settings"] = "Impostazioni WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Abilita plugin WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Abilita componente aggiuntivo WindowsPhonePush"; $a->strings["Push text of new item"] = "Notifica il testo dei nuovi elementi"; $a->strings["Save Settings"] = "Salva Impostazioni"; diff --git a/windowsphonepush/lang/ro/messages.po b/windowsphonepush/lang/ro/messages.po index 3b55d4a4..cbef36da 100644 --- a/windowsphonepush/lang/ro/messages.po +++ b/windowsphonepush/lang/ro/messages.po @@ -28,8 +28,8 @@ msgid "WindowsPhonePush Settings" msgstr "Configurare WindowsPhonePush" #: windowsphonepush.php:117 -msgid "Enable WindowsPhonePush Plugin" -msgstr "Activare Plugin WindowsPhonePush" +msgid "Enable WindowsPhonePush Addon" +msgstr "Activare Addon WindowsPhonePush" #: windowsphonepush.php:122 msgid "Push text of new item" diff --git a/windowsphonepush/lang/ro/strings.php b/windowsphonepush/lang/ro/strings.php index 1c29eaba..819ef6fe 100644 --- a/windowsphonepush/lang/ro/strings.php +++ b/windowsphonepush/lang/ro/strings.php @@ -7,6 +7,6 @@ function string_plural_select_ro($n){ ; $a->strings["WindowsPhonePush settings updated."] = "Configurări WindowsPhonePush actualizate."; $a->strings["WindowsPhonePush Settings"] = "Configurare WindowsPhonePush"; -$a->strings["Enable WindowsPhonePush Plugin"] = "Activare Plugin WindowsPhonePush"; +$a->strings["Enable WindowsPhonePush Addon"] = "Activare Addon WindowsPhonePush"; $a->strings["Push text of new item"] = "Tastează textul noului element"; $a->strings["Save Settings"] = "Salvare Configurări"; diff --git a/windowsphonepush/windowsphonepush.php b/windowsphonepush/windowsphonepush.php index 21f986e0..9837e1fe 100644 --- a/windowsphonepush/windowsphonepush.php +++ b/windowsphonepush/windowsphonepush.php @@ -9,7 +9,7 @@ * Pre-requisite: Windows Phone mobile device (at least WP 7.0) * Friendica mobile app on Windows Phone * - * When plugin is installed, the system calls the plugin + * When addon is installed, the system calls the addon * name_install() function, located in 'addon/name/name.php', * where 'name' is the name of the addon. * If the addon is removed from the configuration list, the @@ -25,30 +25,30 @@ * count only unseen elements which are not type=activity (likes and dislikes not seen as new elements) */ +use Friendica\App; +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Model\User; -function windowsphonepush_install() { - - /** - * - * Our plugin will attach in three places. - * The first is within cron - so the push notifications will be +function windowsphonepush_install() +{ + /* Our addon will attach in three places. + * The first is within cron - so the push notifications will be * sent every 10 minutes (or whatever is set in crontab). * */ + Addon::registerHook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); - register_hook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); - - /** - * - * Then we'll attach into the plugin settings page, and also the + /* Then we'll attach into the addon settings page, and also the * settings post hook so that we can create and update - * user preferences. User shall be able to activate the plugin and + * user preferences. User shall be able to activate the addon and * define whether he allows pushing first characters of item text * */ - - register_hook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); - register_hook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); + Addon::registerHook('addon_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); + Addon::registerHook('addon_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); logger("installed windowsphonepush"); } @@ -62,10 +62,9 @@ function windowsphonepush_uninstall() { * during install. Don't delete data in table `pconfig`. * */ - - unregister_hook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); - unregister_hook('plugin_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); - unregister_hook('plugin_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); + Addon::unregisterHook('cron', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_cron'); + Addon::unregisterHook('addon_settings', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/windowsphonepush/windowsphonepush.php', 'windowsphonepush_settings_post'); logger("removed windowsphonepush"); } @@ -95,13 +94,10 @@ function windowsphonepush_settings_post($a,$post) { set_pconfig(local_user(),'windowsphonepush','senditemtext',intval($_POST['windowsphonepush-senditemtext'])); - info( t('WindowsPhonePush settings updated.') . EOL); + info(L10n::t('WindowsPhonePush settings updated.') . EOL); } - -/** - * - * Called from the Plugin Setting form. +/* Called from the Addon Setting form. * Add our own settings info to the page. * */ @@ -124,20 +120,20 @@ function windowsphonepush_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= '
'; - $s .= '

' . t('WindowsPhonePush Settings') . '

'; + $s .= '

' . L10n::t('WindowsPhonePush Settings') . '

'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; $s .= '
'; - $s .= ''; + $s .= ''; $s .= ''; $s .= '
'; - /* provide a submit button - enable und senditemtext can be changed by the user*/ - $s .= '
'; + /* provide a submit button - enable und senditemtext can be changed by the user */ + $s .= '
'; /* provide further read-only information concerning the addon (useful for */ $s .= '
'; @@ -149,16 +145,13 @@ function windowsphonepush_settings(&$a,&$s) { } - -/** - * - * Cron function used to regularly check all users on the server with active windowsphonepushplugin and send +/* Cron function used to regularly check all users on the server with active windowsphonepushaddon and send * notifications to the Microsoft servers and consequently to the Windows Phone device * */ - -function windowsphonepush_cron() { - // retrieve all UID's for which the plugin windowsphonepush is enabled and loop through every user +function windowsphonepush_cron() +{ + // retrieve all UID's for which the addon windowsphonepush is enabled and loop through every user $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'windowsphonepush' AND `k` = 'enable' AND `v` = 1"); if(count($r)) { foreach($r as $rr) { @@ -168,8 +161,8 @@ function windowsphonepush_cron() { // pushing only possible if device_url (the URI on Microsoft server) is available or not "NA" (which will be sent // by app if user has switched the server setting in app - sending blank not possible as this would return an update error) - if ( ( $device_url == "" ) || ( $device_url == "NA" ) ) { - // no Device-URL for the user availabe, but plugin is enabled --> write info to Logger + if (( $device_url == "" ) || ( $device_url == "NA" )) { + // no Device-URL for the user availabe, but addon is enabled --> write info to Logger logger("WARN: windowsphonepush is enable for user " . $rr['uid'] . ", but no Device-URL is specified for the user."); } else { // retrieve the number of unseen items and the id of the latest one (if there are more than @@ -228,10 +221,10 @@ function windowsphonepush_cron() { $body = $item[0]['body']; if (substr($body, 0, 4) == "[url") $body = "URL/Image ..."; - else { - require_once('include/bbcode.php'); + } else { require_once("include/html2plain.php"); - $body = bbcode($body, false, false, 2, true); + + $body = BBCode::convert($body, false, 2, true); $body = html2plain($body, 0); $body = ((strlen($body) > 137) ? substr($body, 0, 137) . "..." : $body); } @@ -425,9 +418,9 @@ function windowsphonepush_updatesettings(&$a) { return "Not Authenticated"; } - // no updating if user hasn't enabled the plugin - $enable = get_pconfig(local_user(), 'windowsphonepush', 'enable'); - if(! $enable) { + // no updating if user hasn't enabled the addon + $enable = PConfig::get(local_user(), 'windowsphonepush', 'enable'); + if (!$enable) { return "Plug-in not enabled"; } @@ -467,9 +460,9 @@ function windowsphonepush_updatecounterunseen() { return "Not Authenticated"; } - // no updating if user hasn't enabled the plugin - $enable = get_pconfig(local_user(), 'windowsphonepush', 'enable'); - if(! $enable) { + // no updating if user hasn't enabled the addon + $enable = PConfig::get(local_user(), 'windowsphonepush', 'enable'); + if (!$enable) { return "Plug-in not enabled"; } @@ -509,8 +502,9 @@ function windowsphonepush_login() { die('This api requires login'); } - require_once('include/security.php'); - authenticate_success($record); $_SESSION["allow_api"] = true; - call_hooks('logged_in', $a->user); + require_once 'include/security.php'; + authenticate_success($record); + $_SESSION["allow_api"] = true; + Addon::callHooks('logged_in', $a->user); } diff --git a/wppost/lang/C/messages.po b/wppost/lang/C/messages.po index 27baa960..92bc721d 100644 --- a/wppost/lang/C/messages.po +++ b/wppost/lang/C/messages.po @@ -26,7 +26,7 @@ msgid "Wordpress Export" msgstr "" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "" #: wppost.php:92 diff --git a/wppost/lang/ca/strings.php b/wppost/lang/ca/strings.php index 2856b55c..fb8f7d65 100644 --- a/wppost/lang/ca/strings.php +++ b/wppost/lang/ca/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Publica-ho al Wordpress"; $a->strings["WordPress Post Settings"] = "Configuració d'enviaments a WordPress"; -$a->strings["Enable WordPress Post Plugin"] = "Habilitar Configuració d'Enviaments a WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Habilitar Configuració d'Enviaments a WordPress"; $a->strings["WordPress username"] = "Nom d'usuari de WordPress"; $a->strings["WordPress password"] = "Contrasenya de WordPress"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/lang/cs/messages.po b/wppost/lang/cs/messages.po index 992a95db..d2571365 100644 --- a/wppost/lang/cs/messages.po +++ b/wppost/lang/cs/messages.po @@ -28,7 +28,7 @@ msgid "Wordpress Export" msgstr "Wordpress Export" #: wppost.php:86 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "Povolit rozšíření na WordPress" #: wppost.php:91 diff --git a/wppost/lang/cs/strings.php b/wppost/lang/cs/strings.php index 00352ce7..45783422 100644 --- a/wppost/lang/cs/strings.php +++ b/wppost/lang/cs/strings.php @@ -7,7 +7,7 @@ function string_plural_select_cs($n){ ; $a->strings["Post to Wordpress"] = "Příspěvky do WordPress"; $a->strings["Wordpress Export"] = "Wordpress Export"; -$a->strings["Enable WordPress Post Plugin"] = "Povolit rozšíření na WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Povolit rozšíření na WordPress"; $a->strings["WordPress username"] = "WordPress uživatelské jméno"; $a->strings["WordPress password"] = "WordPress heslo"; $a->strings["WordPress API URL"] = "URL adresa API WordPress"; diff --git a/wppost/lang/de/messages.po b/wppost/lang/de/messages.po index 57dde23f..eb10db40 100644 --- a/wppost/lang/de/messages.po +++ b/wppost/lang/de/messages.po @@ -30,8 +30,8 @@ msgid "Wordpress Export" msgstr "Wordpress Export" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" -msgstr "WordPress Plugin aktivieren" +msgid "Enable WordPress Post Addon" +msgstr "WordPress Addon aktivieren" #: wppost.php:92 msgid "WordPress username" diff --git a/wppost/lang/de/strings.php b/wppost/lang/de/strings.php index 9cdc292a..57ae6afe 100644 --- a/wppost/lang/de/strings.php +++ b/wppost/lang/de/strings.php @@ -7,7 +7,7 @@ function string_plural_select_de($n){ ; $a->strings["Post to Wordpress"] = "Bei WordPress veröffentlichen"; $a->strings["Wordpress Export"] = "Wordpress Export"; -$a->strings["Enable WordPress Post Plugin"] = "WordPress Plugin aktivieren"; +$a->strings["Enable WordPress Post Addon"] = "WordPress Addon aktivieren"; $a->strings["WordPress username"] = "WordPress-Benutzername"; $a->strings["WordPress password"] = "WordPress-Passwort"; $a->strings["WordPress API URL"] = "WordPress-API-URL"; diff --git a/wppost/lang/eo/strings.php b/wppost/lang/eo/strings.php index 7c786666..04130d73 100644 --- a/wppost/lang/eo/strings.php +++ b/wppost/lang/eo/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Afiŝi al Wordpress"; $a->strings["WordPress Post Settings"] = "Agordoj por WordPress afiŝojn"; -$a->strings["Enable WordPress Post Plugin"] = "Ŝalti la Wordpress-afiŝo kromprogramon"; +$a->strings["Enable WordPress Post Addon"] = "Ŝalti la Wordpress-afiŝo kromprogramon"; $a->strings["WordPress username"] = "WordPress salutnomo"; $a->strings["WordPress password"] = "WordPress pasvorto"; $a->strings["WordPress API URL"] = "Wordpress API URL adreso"; diff --git a/wppost/lang/es/messages.po b/wppost/lang/es/messages.po index baac8034..0c555a7f 100644 --- a/wppost/lang/es/messages.po +++ b/wppost/lang/es/messages.po @@ -28,8 +28,8 @@ msgid "Wordpress Export" msgstr "Exportar a Wordpress" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" -msgstr "Habilitar Plugin de publicación de WordPress" +msgid "Enable WordPress Post Addon" +msgstr "Habilitar Addon de publicación de WordPress" #: wppost.php:92 msgid "WordPress username" diff --git a/wppost/lang/es/strings.php b/wppost/lang/es/strings.php index 13753311..fab68021 100644 --- a/wppost/lang/es/strings.php +++ b/wppost/lang/es/strings.php @@ -7,7 +7,7 @@ function string_plural_select_es($n){ ; $a->strings["Post to Wordpress"] = "Publicar en Wordpress"; $a->strings["Wordpress Export"] = "Exportar a Wordpress"; -$a->strings["Enable WordPress Post Plugin"] = "Habilitar Plugin de publicación de WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Habilitar Addon de publicación de WordPress"; $a->strings["WordPress username"] = "Nombre de usuario de WordPress"; $a->strings["WordPress password"] = "Contraseña de WordPress"; $a->strings["WordPress API URL"] = "URL de API de WordPress"; diff --git a/wppost/lang/fr/strings.php b/wppost/lang/fr/strings.php index 9cd4456f..ed511397 100644 --- a/wppost/lang/fr/strings.php +++ b/wppost/lang/fr/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Poster sur WordPress"; $a->strings["WordPress Post Settings"] = "Réglages WordPress"; -$a->strings["Enable WordPress Post Plugin"] = "Activer l'extension WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Activer l'extension WordPress"; $a->strings["WordPress username"] = "Utilisateur WordPress"; $a->strings["WordPress password"] = "Mot de passe WordPress"; $a->strings["WordPress API URL"] = "URL de l'API WordPress"; diff --git a/wppost/lang/is/strings.php b/wppost/lang/is/strings.php index 0b7f3fe7..bca63d56 100644 --- a/wppost/lang/is/strings.php +++ b/wppost/lang/is/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Senda færslu á Wordpress"; $a->strings["WordPress Post Settings"] = "Wordpress Post stillingar"; -$a->strings["Enable WordPress Post Plugin"] = "Kveikja á WordPress Post viðbót"; +$a->strings["Enable WordPress Post Addon"] = "Kveikja á WordPress Post viðbót"; $a->strings["WordPress username"] = "Wordpress aðgangsorð"; $a->strings["WordPress password"] = "Wordpress aðgagnsorð"; $a->strings["WordPress API URL"] = "Slóð á Wordpress API"; diff --git a/wppost/lang/it/messages.po b/wppost/lang/it/messages.po index 2369d955..85e2b317 100644 --- a/wppost/lang/it/messages.po +++ b/wppost/lang/it/messages.po @@ -4,13 +4,13 @@ # # # Translators: -# fabrixxm , 2014-2015 +# fabrixxm , 2014-2015,2017-2018 msgid "" msgstr "" "Project-Id-Version: friendica\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-01-24 21:06+0100\n" -"PO-Revision-Date: 2017-02-10 08:18+0000\n" +"PO-Revision-Date: 2018-03-19 13:26+0000\n" "Last-Translator: fabrixxm \n" "Language-Team: Italian (http://www.transifex.com/Friendica/friendica/language/it/)\n" "MIME-Version: 1.0\n" @@ -25,11 +25,11 @@ msgstr "Invia a Wordpress" #: wppost.php:80 wppost.php:84 msgid "Wordpress Export" -msgstr "" +msgstr "Esporta a Wordpress" #: wppost.php:87 -msgid "Enable WordPress Post Plugin" -msgstr "Abilita il plugin di invio a Wordpress" +msgid "Enable WordPress Post Addon" +msgstr "Abilita il componente aggiuntivo di invio a Wordpress" #: wppost.php:92 msgid "WordPress username" @@ -55,19 +55,19 @@ msgstr "Inserisci un link al messaggio originale su Friendica" msgid "" "Text for the backlink, e.g. Read the original post and comment stream on " "Friendica." -msgstr "" +msgstr "Testo per il backlink, p.e. Leggi il post originale e i commenti su Friendica." #: wppost.php:121 msgid "Don't post messages that are too short" -msgstr "" +msgstr "Non inviare messaggi troppo corti" #: wppost.php:127 msgid "Save Settings" -msgstr "" +msgstr "Salva Impostazioni" #: wppost.php:206 msgid "Read the orig­i­nal post and com­ment stream on Friendica" -msgstr "" +msgstr "Leggi il messaggio originale e i commenti su Friendica" #: wppost.php:269 msgid "Post from Friendica" diff --git a/wppost/lang/it/strings.php b/wppost/lang/it/strings.php index 3f616900..c982dbcd 100644 --- a/wppost/lang/it/strings.php +++ b/wppost/lang/it/strings.php @@ -6,15 +6,15 @@ function string_plural_select_it($n){ }} ; $a->strings["Post to Wordpress"] = "Invia a Wordpress"; -$a->strings["Wordpress Export"] = ""; -$a->strings["Enable WordPress Post Plugin"] = "Abilita il plugin di invio a Wordpress"; +$a->strings["Wordpress Export"] = "Esporta a Wordpress"; +$a->strings["Enable WordPress Post Addon"] = "Abilita il componente aggiuntivo di invio a Wordpress"; $a->strings["WordPress username"] = "Nome utente Wordpress"; $a->strings["WordPress password"] = "Password Wordpress"; $a->strings["WordPress API URL"] = "Indirizzo API Wordpress"; $a->strings["Post to WordPress by default"] = "Invia sempre a Wordpress"; $a->strings["Provide a backlink to the Friendica post"] = "Inserisci un link al messaggio originale su Friendica"; -$a->strings["Text for the backlink, e.g. Read the original post and comment stream on Friendica."] = ""; -$a->strings["Don't post messages that are too short"] = ""; -$a->strings["Save Settings"] = ""; -$a->strings["Read the orig­i­nal post and com­ment stream on Friendica"] = ""; +$a->strings["Text for the backlink, e.g. Read the original post and comment stream on Friendica."] = "Testo per il backlink, p.e. Leggi il post originale e i commenti su Friendica."; +$a->strings["Don't post messages that are too short"] = "Non inviare messaggi troppo corti"; +$a->strings["Save Settings"] = "Salva Impostazioni"; +$a->strings["Read the orig­i­nal post and com­ment stream on Friendica"] = "Leggi il messaggio originale e i commenti su Friendica"; $a->strings["Post from Friendica"] = "Messaggio da Friendica"; diff --git a/wppost/lang/nb-no/strings.php b/wppost/lang/nb-no/strings.php index 5c840e67..3d125aa6 100644 --- a/wppost/lang/nb-no/strings.php +++ b/wppost/lang/nb-no/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = ""; $a->strings["WordPress Post Settings"] = ""; -$a->strings["Enable WordPress Post Plugin"] = ""; +$a->strings["Enable WordPress Post Addon"] = ""; $a->strings["WordPress username"] = ""; $a->strings["WordPress password"] = ""; $a->strings["WordPress API URL"] = ""; diff --git a/wppost/lang/pl/strings.php b/wppost/lang/pl/strings.php index 201ead1d..ab2df6a7 100644 --- a/wppost/lang/pl/strings.php +++ b/wppost/lang/pl/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Opublikuj na Wordpress"; $a->strings["WordPress Post Settings"] = "Ustawienia wpisów WorldPress"; -$a->strings["Enable WordPress Post Plugin"] = "Włącz plugin wpisów WorldPress"; +$a->strings["Enable WordPress Post Addon"] = "Włącz addon wpisów WorldPress"; $a->strings["WordPress username"] = "nazwa użytkownika WordPress"; $a->strings["WordPress password"] = "hasło WordPress"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/lang/pt-br/messages.po b/wppost/lang/pt-br/messages.po index 3d2ad0ff..b011d0c2 100644 --- a/wppost/lang/pt-br/messages.po +++ b/wppost/lang/pt-br/messages.po @@ -28,7 +28,7 @@ msgid "WordPress Post Settings" msgstr "Configurações de publicação no WordPress" #: wppost.php:78 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "Habilitar plug-in para publicar no WordPress" #: wppost.php:83 diff --git a/wppost/lang/pt-br/strings.php b/wppost/lang/pt-br/strings.php index dbb6eb1f..fc59fcb3 100644 --- a/wppost/lang/pt-br/strings.php +++ b/wppost/lang/pt-br/strings.php @@ -7,7 +7,7 @@ function string_plural_select_pt_br($n){ ; $a->strings["Post to Wordpress"] = "Publicar no Wordpress"; $a->strings["WordPress Post Settings"] = "Configurações de publicação no WordPress"; -$a->strings["Enable WordPress Post Plugin"] = "Habilitar plug-in para publicar no WordPress"; +$a->strings["Enable WordPress Post Addon"] = "Habilitar plug-in para publicar no WordPress"; $a->strings["WordPress username"] = "Nome de usuário no WordPress"; $a->strings["WordPress password"] = "Senha do WordPress"; $a->strings["WordPress API URL"] = ""; diff --git a/wppost/lang/ro/messages.po b/wppost/lang/ro/messages.po index d329836d..a239bcb5 100644 --- a/wppost/lang/ro/messages.po +++ b/wppost/lang/ro/messages.po @@ -27,7 +27,7 @@ msgid "Wordpress Export" msgstr "Export pe Wordpress" #: wppost.php:86 -msgid "Enable WordPress Post Plugin" +msgid "Enable WordPress Post Addon" msgstr "Activare Modul Postare pe Wordpress" #: wppost.php:91 diff --git a/wppost/lang/ro/strings.php b/wppost/lang/ro/strings.php index 86835bc3..fcd0efa4 100644 --- a/wppost/lang/ro/strings.php +++ b/wppost/lang/ro/strings.php @@ -7,7 +7,7 @@ function string_plural_select_ro($n){ ; $a->strings["Post to Wordpress"] = "Postați pe Wordpress"; $a->strings["Wordpress Export"] = "Export pe Wordpress"; -$a->strings["Enable WordPress Post Plugin"] = "Activare Modul Postare pe Wordpress"; +$a->strings["Enable WordPress Post Addon"] = "Activare Modul Postare pe Wordpress"; $a->strings["WordPress username"] = "Utilizator WordPress "; $a->strings["WordPress password"] = "Parolă WordPress "; $a->strings["WordPress API URL"] = "URL Cheie API WordPress"; diff --git a/wppost/lang/ru/strings.php b/wppost/lang/ru/strings.php index f193addc..5eefa639 100644 --- a/wppost/lang/ru/strings.php +++ b/wppost/lang/ru/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "Сообщение для Wordpress"; $a->strings["WordPress Post Settings"] = "Настройки сообщений для Wordpress"; -$a->strings["Enable WordPress Post Plugin"] = "Включить WordPress плагин сообщений"; +$a->strings["Enable WordPress Post Addon"] = "Включить WordPress плагин сообщений"; $a->strings["WordPress username"] = "WordPress Имя пользователя"; $a->strings["WordPress password"] = "WordPress паролъ"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/lang/zh-cn/strings.php b/wppost/lang/zh-cn/strings.php index 74db6306..9ac233fd 100644 --- a/wppost/lang/zh-cn/strings.php +++ b/wppost/lang/zh-cn/strings.php @@ -2,7 +2,7 @@ $a->strings["Post to Wordpress"] = "发送到Wordpress"; $a->strings["WordPress Post Settings"] = "Wordpress发送设置"; -$a->strings["Enable WordPress Post Plugin"] = "使Wordpress发送插件可用"; +$a->strings["Enable WordPress Post Addon"] = "使Wordpress发送插件可用"; $a->strings["WordPress username"] = "Wordpress用户名"; $a->strings["WordPress password"] = "Wordpress密码"; $a->strings["WordPress API URL"] = "WordPress API URL"; diff --git a/wppost/wppost.php b/wppost/wppost.php index fc9244af..96209b15 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -1,31 +1,35 @@ */ +use Friendica\Content\Text\BBCode; +use Friendica\Core\Addon; +use Friendica\Core\L10n; +use Friendica\Core\PConfig; +use Friendica\Util\Network; function wppost_install() { - register_hook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); - register_hook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); - register_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); - register_hook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - register_hook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::registerHook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); + Addon::registerHook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); + Addon::registerHook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); + Addon::registerHook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::registerHook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); } function wppost_uninstall() { - unregister_hook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); - unregister_hook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); - unregister_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); - unregister_hook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - unregister_hook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::unregisterHook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); + Addon::unregisterHook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); + Addon::unregisterHook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); + Addon::unregisterHook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::unregisterHook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); // obsolete - remove - unregister_hook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); - unregister_hook('plugin_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - unregister_hook('plugin_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + Addon::unregisterHook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); + Addon::unregisterHook('addon_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + Addon::unregisterHook('addon_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); } @@ -39,7 +43,7 @@ function wppost_jot_nets(&$a,&$b) { $wp_defpost = get_pconfig(local_user(),'wppost','post_by_default'); $selected = ((intval($wp_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to Wordpress') . '
'; + . L10n::t('Post to Wordpress') . '
'; } } @@ -77,54 +81,54 @@ function wppost_settings(&$a,&$s) { /* Add some HTML to the existing form */ $s .= ''; - $s .= '

'. t('Wordpress Export').'

'; + $s .= '

'. L10n::t('Wordpress Export').'

'; $s .= '
'; $s .= ''; + $s .= '
'; } @@ -141,7 +145,7 @@ function wppost_settings_post(&$a,&$b) { set_pconfig(local_user(),'wppost','backlink',trim($_POST['wp_backlink'])); set_pconfig(local_user(),'wppost','shortcheck',trim($_POST['wp_shortcheck'])); $wp_backlink_text = notags(trim($_POST['wp_backlink_text'])); - $wp_backlink_text = bbcode($wp_backlink_text, false, false, 8); + $wp_backlink_text = BBCode::convert($wp_backlink_text, false, 8); $wp_backlink_text = html2plain($wp_backlink_text, 0, true); set_pconfig(local_user(),'wppost','wp_backlink_text', $wp_backlink_text); @@ -204,21 +208,18 @@ function wppost_send(&$a,&$b) { $wp_blog = get_pconfig($b['uid'],'wppost','wp_blog'); $wp_backlink_text = get_pconfig($b['uid'],'wppost','wp_backlink_text'); if ($wp_backlink_text == '') { - $wp_backlink_text = t('Read the orig­i­nal post and com­ment stream on Friendica'); + $wp_backlink_text = L10n::t('Read the orig­i­nal post and com­ment stream on Friendica'); } - if($wp_username && $wp_password && $wp_blog) { - - require_once('include/bbcode.php'); - require_once('include/html2plain.php'); - require_once('include/plaintext.php'); + if ($wp_username && $wp_password && $wp_blog) { + require_once 'include/html2plain.php'; $wptitle = trim($b['title']); - if (intval(get_pconfig($b['uid'],'wppost','shortcheck'))) { + if (intval(PConfig::get($b['uid'], 'wppost', 'shortcheck'))) { // Checking, if its a post that is worth a blog post $postentry = false; - $siteinfo = get_attached_data($b["body"]); + $siteinfo = BBCode::getAttachedData($b["body"]); // Is it a link to an aricle, a video or a photo? if (isset($siteinfo["type"])) { @@ -245,7 +246,7 @@ function wppost_send(&$a,&$b) { // If the title is empty then try to guess if ($wptitle == '') { // Fetch information about the post - $siteinfo = get_attached_data($b["body"]); + $siteinfo = BBCode::getAttachedData($b["body"]); if (isset($siteinfo["title"])) { $wptitle = $siteinfo["title"]; } @@ -255,7 +256,7 @@ function wppost_send(&$a,&$b) { // Remove the share element before fetching the first line $title = trim(preg_replace("/\[share.*?\](.*?)\[\/share\]/ism","\n$1\n",$b['body'])); - $title = html2plain(bbcode($title, false, false), 0, true)."\n"; + $title = html2plain(BBCode::convert($title, false), 0, true)."\n"; $pos = strpos($title, "\n"); $trailer = ""; if (($pos == 0) || ($pos > 100)) { @@ -267,8 +268,8 @@ function wppost_send(&$a,&$b) { } } - $title = '' . (($wptitle) ? $wptitle : t('Post from Friendica')) . ''; - $post = bbcode($b['body'], false, false, 4); + $title = '' . (($wptitle) ? $wptitle : L10n::t('Post from Friendica')) . ''; + $post = BBCode::convert($b['body'], false, 4); // If a link goes to youtube then remove the stuff around it. Wordpress detects youtube links and embeds it $post = preg_replace('/(.*?)<\/a>/ism',"\n$1\n",$post); @@ -303,10 +304,9 @@ EOT; logger('wppost: data: ' . $xml, LOGGER_DATA); - if($wp_blog !== 'test') { - $x = post_url($wp_blog,$xml); + if ($wp_blog !== 'test') { + $x = Network::post($wp_blog, $xml); } logger('posted to wordpress: ' . (($x) ? $x : ''), LOGGER_DEBUG); - } } diff --git a/xmpp/converse/README.rst b/xmpp/converse/README.rst index f0a5b991..96b61a76 100644 --- a/xmpp/converse/README.rst +++ b/xmpp/converse/README.rst @@ -55,7 +55,7 @@ Integration into other frameworks `django-conversejs `_ is an app that makes it easer to integrate *Converse.js* into Django. `django-xmpp `_ adds XMPP chat integration with converse.js by letting Ejabberd authenticate against your Django site. * `Roundcube `_: - `roundcube-converse.js-xmpp-plugin `_ is a plugin for Roundcube Webmail. + `roundcube-converse.js-xmpp-plugin `_ is an addon for Roundcube Webmail. * `Wordpress `_: `ConverseJS `_ * `Patternslib `_: diff --git a/xmpp/converse/builds/converse.min.js b/xmpp/converse/builds/converse.min.js index 7efcf960..7ac83109 100644 --- a/xmpp/converse/builds/converse.min.js +++ b/xmpp/converse/builds/converse.min.js @@ -2,8 +2,8 @@ * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/almond for details - */ - + */ + /*! * jQuery JavaScript Library v1.11.0 * http://jquery.com/ @@ -16,8 +16,8 @@ * http://jquery.org/license * * Date: 2014-01-23T21:02Z - */ - + */ + /*! * Sizzle CSS Selector Engine v1.10.16 * http://sizzlejs.com/ @@ -27,49 +27,49 @@ * http://jquery.org/license * * Date: 2014-01-13 - */ - -// Underscore.js 1.8.3 -// http://underscorejs.org -// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Underscore may be freely distributed under the MIT license. - + */ + +// Underscore.js 1.8.3 +// http://underscorejs.org +// (c) 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Underscore may be freely distributed under the MIT license. + /** * @license RequireJS text 2.0.14 Copyright (c) 2010-2014, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/requirejs/text for details - */ - -// RequireJS UnderscoreJS template plugin -// http://github.com/jfparadis/requirejs-tpl -// -// An alternative to http://github.com/ZeeAgency/requirejs-tpl -// -// Using UnderscoreJS micro-templates at http://underscorejs.org/#template -// Using and RequireJS text.js at http://requirejs.org/docs/api.html#text -// @author JF Paradis -// @version 0.0.2 -// -// Released under the MIT license -// -// Usage: -// require(['backbone', 'tpl!mytemplate'], function (Backbone, mytemplate) { -// return Backbone.View.extend({ -// initialize: function(){ -// this.render(); -// }, -// render: function(){ -// this.$el.html(mytemplate({message: 'hello'})); -// }); -// }); -// -// Configuration: (optional) -// require.config({ -// tpl: { -// extension: '.tpl' // default = '.html' -// } -// }); - + */ + +// RequireJS UnderscoreJS template addon +// http://github.com/jfparadis/requirejs-tpl +// +// An alternative to http://github.com/ZeeAgency/requirejs-tpl +// +// Using UnderscoreJS micro-templates at http://underscorejs.org/#template +// Using and RequireJS text.js at http://requirejs.org/docs/api.html#text +// @author JF Paradis +// @version 0.0.2 +// +// Released under the MIT license +// +// Usage: +// require(['backbone', 'tpl!mytemplate'], function (Backbone, mytemplate) { +// return Backbone.View.extend({ +// initialize: function(){ +// this.render(); +// }, +// render: function(){ +// this.$el.html(mytemplate({message: 'hello'})); +// }); +// }); +// +// Configuration: (optional) +// require.config({ +// tpl: { +// extension: '.tpl' // default = '.html' +// } +// }); + /* jed.js v0.5.0beta @@ -91,10 +91,10 @@ Many thanks to Joshua I. Miller - unrtst@cpan.org - who wrote gettext.js back in 2008. I was able to vet a lot of my ideas against his. I also made sure Jed passed against his tests in order to offer easy upgrades -- jsgettext.berlios.de -*/ - -// Underscore 1.3.0 was used to port and is licensed - +*/ + +// Underscore 1.3.0 was used to port and is licensed + /** sprintf() for JavaScript 0.7-beta1 http://www.diveintojavascript.com/projects/javascript-sprintf @@ -123,8 +123,8 @@ in order to offer easy upgrades -- jsgettext.berlios.de ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - + */ + /*! * jQuery Browser Plugin 0.0.8 * https://github.com/gabceb/jquery-browser-plugin @@ -138,22 +138,22 @@ in order to offer easy upgrades -- jsgettext.berlios.de * Released under the MIT license * * Date: 05-07-2015 - */ - + */ + /* CryptoJS v3.1.2 code.google.com/p/crypto-js (c) 2009-2013 by Jeff Mott. All rights reserved. code.google.com/p/crypto-js/wiki/License -*/ - +*/ + /*! * EventEmitter v4.2.3 - git.io/ee * Oliver Caldwell * MIT license * @preserve - */ - + */ + /*! otr.js v0.2.12 - 2014-04-15 @@ -163,14 +163,14 @@ code.google.com/p/crypto-js/wiki/License This file is concatenated for the browser. Please see: https://github.com/arlolra/otr -*/ - -//! moment.js -//! version : 2.10.6 -//! authors : Tim Wood, Iskren Chernev, Moment.js contributors -//! license : MIT -//! momentjs.com - +*/ + +//! moment.js +//! version : 2.10.6 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + /* * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined * in FIPS PUB 180-1 @@ -178,8 +178,8 @@ code.google.com/p/crypto-js/wiki/License * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for details. - */ - + */ + /* * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message * Digest Algorithm, as defined in RFC 1321. @@ -187,51 +187,51 @@ code.google.com/p/crypto-js/wiki/License * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet * Distributed under the BSD License * See http://pajhome.org.uk/crypt/md5 for more info. - */ - + */ + /* This program is distributed under the terms of the MIT license. Please see the LICENSE file for details. Copyright 2006-2008, OGG, LLC -*/ - +*/ + /* Copyright 2010, François de Metz -*/ - +*/ + /* * Based on Ping Strophejs plugins (https://github.com/metajack/strophejs-plugins/tree/master/ping) -* This plugin is distributed under the terms of the MIT licence. +* This addon is distributed under the terms of the MIT licence. * Please see the LICENCE file for details. * * Copyright (c) Markus Kohlhase, 2010 * Refactored by Pavel Lang, 2011 -*/ - -// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors -// Backbone may be freely distributed under the MIT license. -// For all details and documentation: -// http://backbonejs.org - +*/ + +// (c) 2010-2014 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors +// Backbone may be freely distributed under the MIT license. +// For all details and documentation: +// http://backbonejs.org + /*! * Backbone.Overview * * Copyright (c) 2014, JC Brand * Licensed under the Mozilla Public License (MPL) - */ - + */ + /*! * typeahead.js 0.10.5 * https://github.com/twitter/typeahead.js * Copyright 2013-2014 Twitter, Inc. and other contributors; Licensed MIT - */ - -// Converse.js (A browser based XMPP chat client) -// http://conversejs.org -// -// Copyright (c) 2012-2015, Jan-Carel Brand -// Licensed under the Mozilla Public License (MPLv2) -// - + */ + +// Converse.js (A browser based XMPP chat client) +// http://conversejs.org +// +// Copyright (c) 2012-2015, Jan-Carel Brand +// Licensed under the Mozilla Public License (MPLv2) +// + var requirejs,require,define;(function(e){function h(e,t){return f.call(e,t)}function p(e,t){var n,r,i,s,o,a,f,l,h,p,d,v=t&&t.split("/"),m=u.map,g=m&&m["*"]||{};if(e&&e.charAt(0)===".")if(t){e=e.split("/"),o=e.length-1,u.nodeIdCompat&&c.test(e[o])&&(e[o]=e[o].replace(c,"")),e=v.slice(0,v.length-1).concat(e);for(h=0;h0&&(e.splice(h-1,2),h-=2)}}e=e.join("/")}else e.indexOf("./")===0&&(e=e.substring(2));if((v||g)&&m){n=e.split("/");for(h=n.length;h>0;h-=1){r=n.slice(0,h).join("/");if(v)for(p=v.length;p>0;p-=1){i=m[v.slice(0,p).join("/")];if(i){i=i[r];if(i){s=i,a=h;break}}}if(s)break;!f&&g&&g[r]&&(f=g[r],l=h)}!s&&f&&(s=f,a=l),s&&(n.splice(0,a,s),e=n.join("/"))}return e}function d(t,r){return function(){var i=l.call(arguments,0);return typeof i[0]!="string"&&i.length===1&&i.push(null),n.apply(e,i.concat([t,r]))}}function v(e){return function(t){return p(t,e)}}function m(e){return function(t){s[e]=t}}function g(n){if(h(o,n)){var r=o[n];delete o[n],a[n]=!0,t.apply(e,r)}if(!h(s,n)&&!h(a,n))throw new Error("No "+n);return s[n]}function y(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function b(e){return function(){return u&&u.config&&u.config[e]||{}}}var t,n,r,i,s={},o={},u={},a={},f=Object.prototype.hasOwnProperty,l=[].slice,c=/\.js$/;r=function(e,t){var n,r=y(e),i=r[0];return e=r[1],i&&(i=p(i,t),n=g(i)),i?n&&n.normalize?e=n.normalize(e,v(t)):e=p(e,t):(e=p(e,t),r=y(e),i=r[0],e=r[1],i&&(n=g(i))),{f:i?i+"!"+e:e,n:e,pr:i,p:n}},i={require:function(e){return d(e)},exports:function(e){var t=s[e];return typeof t!="undefined"?t:s[e]={}},module:function(e){return{id:e,uri:"",exports:s[e],config:b(e)}}},t=function(t,n,u,f){var l,c,p,v,y,b=[],w=typeof u,E;f=f||t;if(w==="undefined"||w==="function"){n=!n.length&&u.length?["require","exports","module"]:n;for(y=0;y0&&t-1 in e}function x(e,t,n){if(p.isFunction(t))return p.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return p.grep(e,function(e){return e===t!==n});if(typeof t=="string"){if(S.test(t))return p.filter(t,e,n);t=p.filter(t,e)}return p.grep(e,function(e){return p.inArray(e,t)>=0!==n})}function O(e,t){do e=e[t];while(e&&e.nodeType!==1);return e}function D(e){var t=_[e]={};return p.each(e.match(M)||[],function(e,n){t[n]=!0}),t}function H(){N.addEventListener?(N.removeEventListener("DOMContentLoaded",B,!1),e.removeEventListener("load",B,!1)):(N.detachEvent("onreadystatechange",B),e.detachEvent("onload",B))}function B(){if(N.addEventListener||event.type==="load"||N.readyState==="complete")H(),p.ready()}function R(e,t,n){if(n===undefined&&e.nodeType===1){var r="data-"+t.replace(q,"-$1").toLowerCase();n=e.getAttribute(r);if(typeof n=="string"){try{n=n==="true"?!0:n==="false"?!1:n==="null"?null:+n+""===n?+n:I.test(n)?p.parseJSON(n):n}catch(i){}p.data(e,t,n)}else n=undefined}return n}function U(e){var t;for(t in e){if(t==="data"&&p.isEmptyObject(e[t]))continue;if(t!=="toJSON")return!1}return!0}function z(e,t,r,i){if(!p.acceptData(e))return;var s,o,u=p.expando,a=e.nodeType,f=a?p.cache:e,l=a?e[u]:e[u]&&u;if((!l||!f[l]||!i&&!f[l].data)&&r===undefined&&typeof t=="string")return;l||(a?l=e[u]=n.pop()||p.guid++:l=u),f[l]||(f[l]=a?{}:{toJSON:p.noop});if(typeof t=="object"||typeof t=="function")i?f[l]=p.extend(f[l],t):f[l].data=p.extend(f[l].data,t);return o=f[l],i||(o.data||(o.data={}),o=o.data),r!==undefined&&(o[p.camelCase(t)]=r),typeof t=="string"?(s=o[t],s==null&&(s=o[p.camelCase(t)])):s=o,s}function W(e,t,n){if(!p.acceptData(e))return;var r,i,s=e.nodeType,o=s?p.cache:e,u=s?e[p.expando]:p.expando;if(!o[u])return;if(t){r=n?o[u]:o[u].data;if(r){p.isArray(t)?t=t.concat(p.map(t,p.camelCase)):t in r?t=[t]:(t=p.camelCase(t),t in r?t=[t]:t=t.split(" ")),i=t.length;while(i--)delete r[t[i]];if(n?!U(r):!p.isEmptyObject(r))return}}if(!n){delete o[u].data;if(!U(o[u]))return}s?p.cleanData([e],!0):c.deleteExpando||o!=o.window?delete o[u]:o[u]=null}function tt(){return!0}function nt(){return!1}function rt(){try{return N.activeElement}catch(e){}}function it(e){var t=st.split("|"),n=e.createDocumentFragment();if(n.createElement)while(t.length)n.createElement(t.pop());return n}function Et(e,t){var n,r,i=0,s=typeof e.getElementsByTagName!==j?e.getElementsByTagName(t||"*"):typeof e.querySelectorAll!==j?e.querySelectorAll(t||"*"):undefined;if(!s)for(s=[],n=e.childNodes||e;(r=n[i])!=null;i++)!t||p.nodeName(r,t)?s.push(r):p.merge(s,Et(r,t));return t===undefined||t&&p.nodeName(e,t)?p.merge([e],s):s}function St(e){K.test(e.type)&&(e.defaultChecked=e.checked)}function xt(e,t){return p.nodeName(e,"table")&&p.nodeName(t.nodeType!==11?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function Tt(e){return e.type=(p.find.attr(e,"type")!==null)+"/"+e.type,e}function Nt(e){var t=mt.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function Ct(e,t){var n,r=0;for(;(n=e[r])!=null;r++)p._data(n,"globalEval",!t||p._data(t[r],"globalEval"))}function kt(e,t){if(t.nodeType!==1||!p.hasData(e))return;var n,r,i,s=p._data(e),o=p._data(t,s),u=s.events;if(u){delete o.handle,o.events={};for(n in u)for(r=0,i=u[n].length;r")).appendTo(t.documentElement),t=(At[0].contentWindow||At[0].contentDocument).document,t.write(),t.close(),n=Mt(e,t),At.detach();Ot[e]=n}return n}function Ft(e,t){return{get:function(){var n=e();if(n==null)return;if(n){delete this.get;return}return(this.get=t).apply(this,arguments)}}}function $t(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=Vt.length;while(i--){t=Vt[i]+n;if(t in e)return t}return r}function Jt(e,t){var n,r,i,s=[],o=0,u=e.length;for(;o=0&&n=0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},isPlainObject:function(e){var t;if(!e||p.type(e)!=="object"||e.nodeType||p.isWindow(e))return!1;try{if(e.constructor&&!f.call(e,"constructor")&&!f.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(n){return!1}if(c.ownLast)for(t in e)return f.call(e,t);for(t in e);return t===undefined||f.call(e,t)},type:function(e){return e==null?e+"":typeof e=="object"||typeof e=="function"?u[a.call(e)]||"object":typeof e},globalEval:function(t){t&&p.trim(t)&&(e.execScript||function(t){e.eval.call(e,t)})(t)},camelCase:function(e){return e.replace(v,"ms-").replace(m,g)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,s=e.length,o=y(e);if(n)if(o)for(;ir.cacheLength&&delete t[e.shift()],t[n+" "]=i}var e=[];return t}function st(e){return e[y]=!0,e}function ot(e){var t=c.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ut(e,t){var n=e.split("|"),i=e.length;while(i--)r.attrHandle[n[i]]=t}function at(e,t){var n=t&&e,r=n&&e.nodeType===1&&t.nodeType===1&&(~t.sourceIndex||k)-(~e.sourceIndex||k);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ft(e){return function(t){var n=t.nodeName.toLowerCase();return n==="input"&&t.type===e}}function lt(e){return function(t){var n=t.nodeName.toLowerCase();return(n==="input"||n==="button")&&t.type===e}}function ct(e){return st(function(t){return t=+t,st(function(n,r){var i,s=e([],n.length,t),o=s.length;while(o--)n[i=s[o]]&&(n[i]=!(r[i]=n[i]))})})}function ht(e){return e&&typeof e.getElementsByTagName!==C&&e}function pt(){}function dt(e,t){var n,i,s,o,u,a,f,l=x[e+" "];if(l)return t?0:l.slice(0);u=e,a=[],f=r.preFilter;while(u){if(!n||(i=U.exec(u)))i&&(u=u.slice(i[0].length)||u),a.push(s=[]);n=!1;if(i=z.exec(u))n=i.shift(),s.push({value:n,type:i[0].replace(R," ")}),u=u.slice(n.length);for(o in r.filter)(i=$[o].exec(u))&&(!f[o]||(i=f[o](i)))&&(n=i.shift(),s.push({value:n,type:o,matches:i}),u=u.slice(n.length));if(!n)break}return t?u.length:u?rt.error(e):x(e,a).slice(0)}function vt(e){var t=0,n=e.length,r="";for(;t1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function yt(e,t,n,r,i){var s,o=[],u=0,a=e.length,f=t!=null;for(;u-1&&(s[f]=!(o[f]=c))}}else g=yt(g===o?g.splice(d,g.length):g),i?i(null,o,g,a):_.apply(o,g)})}function wt(e){var t,n,i,s=e.length,o=r.relative[e[0].type],a=o||r.relative[" "],f=o?1:0,l=mt(function(e){return e===t},a,!0),c=mt(function(e){return P.call(t,e)>-1},a,!0),h=[function(e,n,r){return!o&&(r||n!==u)||((t=n).nodeType?l(e,n,r):c(e,n,r))}];for(;f1&>(h),f>1&&vt(e.slice(0,f-1).concat({value:e[f-2].type===" "?"*":""})).replace(R,"$1"),n,f0,i=e.length>0,s=function(s,o,a,f,l){var h,p,d,v=0,m="0",g=s&&[],y=[],b=u,E=s||i&&r.find.TAG("*",l),S=w+=b==null?1:Math.random()||.1,x=E.length;l&&(u=o!==c&&o);for(;m!==x&&(h=E[m])!=null;m++){if(i&&h){p=0;while(d=e[p++])if(d(h,o,a)){f.push(h);break}l&&(w=S)}n&&((h=!d&&h)&&v--,s&&g.push(h))}v+=m;if(n&&m!==v){p=0;while(d=t[p++])d(g,y,o,a);if(s){if(v>0)while(m--)!g[m]&&!y[m]&&(y[m]=O.call(f));y=yt(y)}_.apply(f,y),l&&!s&&y.length>0&&v+t.length>1&&rt.uniqueSort(f)}return l&&(w=S,u=b),g};return n?st(s):s}function St(e,t,n){var r=0,i=t.length;for(;r2&&(f=a[0]).type==="ID"&&n.getById&&t.nodeType===9&&p&&r.relative[a[1].type]){t=(r.find.ID(f.matches[0].replace(et,tt),t)||[])[0];if(!t)return i;e=e.slice(a.shift().value.length)}u=$.needsContext.test(e)?0:a.length;while(u--){f=a[u];if(r.relative[l=f.type])break;if(c=r.find[l])if(s=c(f.matches[0].replace(et,tt),Y.test(a[0].type)&&ht(t.parentNode)||t)){a.splice(u,1),e=s.length&&vt(a);if(!e)return _.apply(i,s),i;break}}}return o(e,h)(s,t,!p,i,Y.test(e)&&ht(t.parentNode)||t),i}var t,n,r,i,s,o,u,a,f,l,c,h,p,d,v,m,g,y="sizzle"+ -(new Date),b=e.document,w=0,E=0,S=it(),x=it(),T=it(),N=function(e,t){return e===t&&(f=!0),0},C=typeof undefined,k=1<<31,L={}.hasOwnProperty,A=[],O=A.pop,M=A.push,_=A.push,D=A.slice,P=A.indexOf||function(e){var t=0,n=this.length;for(;t+~]|"+B+")"+B+"*"),W=new RegExp("="+B+"*([^\\]'\"]*?)"+B+"*\\]","g"),X=new RegExp(q),V=new RegExp("^"+F+"$"),$={ID:new RegExp("^#("+j+")"),CLASS:new RegExp("^\\.("+j+")"),TAG:new RegExp("^("+j.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+q),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+B+"*(even|odd|(([+-]|)(\\d*)n|)"+B+"*(?:([+-]|)"+B+"*(\\d+)|))"+B+"*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^"+B+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+B+"*((?:-\\d)?\\d*)"+B+"*\\)|)(?=[^-]|$)","i")},J=/^(?:input|select|textarea|button)$/i,K=/^h\d$/i,Q=/^[^{]+\{\s*\[native \w/,G=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,Y=/[+~]/,Z=/'|\\/g,et=new RegExp("\\\\([\\da-f]{1,6}"+B+"?|("+B+")|.)","ig"),tt=function(e,t,n){var r="0x"+t-65536;return r!==r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,r&1023|56320)};try{_.apply(A=D.call(b.childNodes),b.childNodes),A[b.childNodes.length].nodeType}catch(nt){_={apply:A.length?function(e,t){M.apply(e,D.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}n=rt.support={},s=rt.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?t.nodeName!=="HTML":!1},l=rt.setDocument=function(e){var t,i=e?e.ownerDocument||e:b,o=i.defaultView;if(i===c||i.nodeType!==9||!i.documentElement)return c;c=i,h=i.documentElement,p=!s(i),o&&o!==o.top&&(o.addEventListener?o.addEventListener("unload",function(){l()},!1):o.attachEvent&&o.attachEvent("onunload",function(){l()})),n.attributes=ot(function(e){return e.className="i",!e.getAttribute("className")}),n.getElementsByTagName=ot(function(e){return e.appendChild(i.createComment("")),!e.getElementsByTagName("*").length}),n.getElementsByClassName=Q.test(i.getElementsByClassName)&&ot(function(e){return e.innerHTML="
",e.firstChild.className="i",e.getElementsByClassName("i").length===2}),n.getById=ot(function(e){return h.appendChild(e).id=y,!i.getElementsByName||!i.getElementsByName(y).length}),n.getById?(r.find.ID=function(e,t){if(typeof t.getElementById!==C&&p){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(e){var t=e.replace(et,tt);return function(e){return e.getAttribute("id")===t}}):(delete r.find.ID,r.filter.ID=function(e){var t=e.replace(et,tt);return function(e){var n=typeof e.getAttributeNode!==C&&e.getAttributeNode("id");return n&&n.value===t}}),r.find.TAG=n.getElementsByTagName?function(e,t){if(typeof t.getElementsByTagName!==C)return t.getElementsByTagName(e)}:function(e,t){var n,r=[],i=0,s=t.getElementsByTagName(e);if(e==="*"){while(n=s[i++])n.nodeType===1&&r.push(n);return r}return s},r.find.CLASS=n.getElementsByClassName&&function(e,t){if(typeof t.getElementsByClassName!==C&&p)return t.getElementsByClassName(e)},v=[],d=[];if(n.qsa=Q.test(i.querySelectorAll))ot(function(e){e.innerHTML="",e.querySelectorAll("[t^='']").length&&d.push("[*^$]="+B+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||d.push("\\["+B+"*(?:value|"+H+")"),e.querySelectorAll(":checked").length||d.push(":checked")}),ot(function(e){var t=i.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&d.push("name"+B+"*[*^$|!~]?="),e.querySelectorAll(":enabled").length||d.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),d.push(",.*:")});return(n.matchesSelector=Q.test(m=h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ot(function(e){n.disconnectedMatch=m.call(e,"div"),m.call(e,"[s!='']:x"),v.push("!=",q)}),d=d.length&&new RegExp(d.join("|")),v=v.length&&new RegExp(v.join("|")),t=Q.test(h.compareDocumentPosition),g=t||Q.test(h.contains)?function(e,t){var n=e.nodeType===9?e.documentElement:e,r=t&&t.parentNode;return e===r||!!r&&r.nodeType===1&&!!(n.contains?n.contains(r):e.compareDocumentPosition&&e.compareDocumentPosition(r)&16)}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},N=t?function(e,t){if(e===t)return f=!0,0;var r=!e.compareDocumentPosition-!t.compareDocumentPosition;return r?r:(r=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1,r&1||!n.sortDetached&&t.compareDocumentPosition(e)===r?e===i||e.ownerDocument===b&&g(b,e)?-1:t===i||t.ownerDocument===b&&g(b,t)?1:a?P.call(a,e)-P.call(a,t):0:r&4?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,r=0,s=e.parentNode,o=t.parentNode,u=[e],l=[t];if(!s||!o)return e===i?-1:t===i?1:s?-1:o?1:a?P.call(a,e)-P.call(a,t):0;if(s===o)return at(e,t);n=e;while(n=n.parentNode)u.unshift(n);n=t;while(n=n.parentNode)l.unshift(n);while(u[r]===l[r])r++;return r?at(u[r],l[r]):u[r]===b?-1:l[r]===b?1:0},i},rt.matches=function(e,t){return rt(e,null,null,t)},rt.matchesSelector=function(e,t){(e.ownerDocument||e)!==c&&l(e),t=t.replace(W,"='$1']");if(n.matchesSelector&&p&&(!v||!v.test(t))&&(!d||!d.test(t)))try{var r=m.call(e,t);if(r||n.disconnectedMatch||e.document&&e.document.nodeType!==11)return r}catch(i){}return rt(t,c,null,[e]).length>0},rt.contains=function(e,t){return(e.ownerDocument||e)!==c&&l(e),g(e,t)},rt.attr=function(e,t){(e.ownerDocument||e)!==c&&l(e);var i=r.attrHandle[t.toLowerCase()],s=i&&L.call(r.attrHandle,t.toLowerCase())?i(e,t,!p):undefined;return s!==undefined?s:n.attributes||!p?e.getAttribute(t):(s=e.getAttributeNode(t))&&s.specified?s.value:null},rt.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},rt.uniqueSort=function(e){var t,r=[],i=0,s=0;f=!n.detectDuplicates,a=!n.sortStable&&e.slice(0),e.sort(N);if(f){while(t=e[s++])t===e[s]&&(i=r.push(s));while(i--)e.splice(r[i],1)}return a=null,e},i=rt.getText=function(e){var t,n="",r=0,s=e.nodeType;if(!s)while(t=e[r++])n+=i(t);else if(s===1||s===9||s===11){if(typeof e.textContent=="string")return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(s===3||s===4)return e.nodeValue;return n},r=rt.selectors={cacheLength:50,createPseudo:st,match:$,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(et,tt),e[3]=(e[4]||e[5]||"").replace(et,tt),e[2]==="~="&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),e[1].slice(0,3)==="nth"?(e[3]||rt.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(e[3]==="even"||e[3]==="odd")),e[5]=+(e[7]+e[8]||e[3]==="odd")):e[3]&&rt.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return $.CHILD.test(e[0])?null:(e[3]&&e[4]!==undefined?e[2]=e[4]:n&&X.test(n)&&(t=dt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(et,tt).toLowerCase();return e==="*"?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=S[e+" "];return t||(t=new RegExp("(^|"+B+")"+e+"("+B+"|$)"))&&S(e,function(e){return t.test(typeof e.className=="string"&&e.className||typeof e.getAttribute!==C&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=rt.attr(r,e);return i==null?t==="!=":t?(i+="",t==="="?i===n:t==="!="?i!==n:t==="^="?n&&i.indexOf(n)===0:t==="*="?n&&i.indexOf(n)>-1:t==="$="?n&&i.slice(-n.length)===n:t==="~="?(" "+i+" ").indexOf(n)>-1:t==="|="?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var s=e.slice(0,3)!=="nth",o=e.slice(-4)!=="last",u=t==="of-type";return r===1&&i===0?function(e){return!!e.parentNode}:function(t,n,a){var f,l,c,h,p,d,v=s!==o?"nextSibling":"previousSibling",m=t.parentNode,g=u&&t.nodeName.toLowerCase(),b=!a&&!u;if(m){if(s){while(v){c=t;while(c=c[v])if(u?c.nodeName.toLowerCase()===g:c.nodeType===1)return!1;d=v=e==="only"&&!d&&"nextSibling"}return!0}d=[o?m.firstChild:m.lastChild];if(o&&b){l=m[y]||(m[y]={}),f=l[e]||[],p=f[0]===w&&f[1],h=f[0]===w&&f[2],c=p&&m.childNodes[p];while(c=++p&&c&&c[v]||(h=p=0)||d.pop())if(c.nodeType===1&&++h&&c===t){l[e]=[w,p,h];break}}else if(b&&(f=(t[y]||(t[y]={}))[e])&&f[0]===w)h=f[1];else while(c=++p&&c&&c[v]||(h=p=0)||d.pop())if((u?c.nodeName.toLowerCase()===g:c.nodeType===1)&&++h){b&&((c[y]||(c[y]={}))[e]=[w,h]);if(c===t)break}return h-=i,h===r||h%r===0&&h/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||rt.error("unsupported pseudo: "+e);return i[y]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?st(function(e,n){var r,s=i(e,t),o=s.length;while(o--)r=P.call(e,s[o]),e[r]=!(n[r]=s[o])}):function(e){return i(e,0,n)}):i}},pseudos:{not:st(function(e){var t=[],n=[],r=o(e.replace(R,"$1"));return r[y]?st(function(e,t,n,i){var s,o=r(e,null,i,[]),u=e.length;while(u--)if(s=o[u])e[u]=!(t[u]=s)}):function(e,i,s){return t[0]=e,r(t,null,s,n),!n.pop()}}),has:st(function(e){return function(t){return rt(e,t).length>0}}),contains:st(function(e){return function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:st(function(e){return V.test(e||"")||rt.error("unsupported lang: "+e),e=e.replace(et,tt).toLowerCase(),function(t){var n;do if(n=p?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||n.indexOf(e+"-")===0;while((t=t.parentNode)&&t.nodeType===1);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===c.activeElement&&(!c.hasFocus||c.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&!!e.checked||t==="option"&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return K.test(e.nodeName)},input:function(e){return J.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return t==="input"&&e.type==="button"||t==="button"},text:function(e){var t;return e.nodeName.toLowerCase()==="input"&&e.type==="text"&&((t=e.getAttribute("type"))==null||t.toLowerCase()==="text")},first:ct(function(){return[0]}),last:ct(function(e,t){return[t-1]}),eq:ct(function(e,t,n){return[n<0?n+t:n]}),even:ct(function(e,t){var n=0;for(;n=0;)e.push(r);return e}),gt:ct(function(e,t,n){var r=n<0?n+t:n;for(;++r(?:<\/\1>|)$/,S=/^.[^:#\[\.,]*$/;p.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),t.length===1&&r.nodeType===1?p.find.matchesSelector(r,e)?[r]:[]:p.find.matches(e,p.grep(t,function(e){return e.nodeType===1}))},p.fn.extend({find:function(e){var t,n=[],r=this,i=r.length;if(typeof e!="string")return this.pushStack(p(e).filter(function(){for(t=0;t1?p.unique(n):n),n.selector=this.selector?this.selector+" "+e:e,n},filter:function(e){return this.pushStack(x(this,e||[],!1))},not:function(e){return this.pushStack(x(this,e||[],!0))},is:function(e){return!!x(this,typeof e=="string"&&w.test(e)?p(e):e||[],!1).length}});var T,N=e.document,C=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,k=p.fn.init=function(e,t){var n,r;if(!e)return this;if(typeof e=="string"){e.charAt(0)==="<"&&e.charAt(e.length-1)===">"&&e.length>=3?n=[null,e,null]:n=C.exec(e);if(n&&(n[1]||!t)){if(n[1]){t=t instanceof p?t[0]:t,p.merge(this,p.parseHTML(n[1],t&&t.nodeType?t.ownerDocument||t:N,!0));if(E.test(n[1])&&p.isPlainObject(t))for(n in t)p.isFunction(this[n])?this[n](t[n]):this.attr(n,t[n]);return this}r=N.getElementById(n[2]);if(r&&r.parentNode){if(r.id!==n[2])return T.find(e);this.length=1,this[0]=r}return this.context=N,this.selector=e,this}return!t||t.jquery?(t||T).find(e):this.constructor(t).find(e)}return e.nodeType?(this.context=this[0]=e,this.length=1,this):p.isFunction(e)?typeof T.ready!="undefined"?T.ready(e):e(p):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),p.makeArray(e,this))};k.prototype=p.fn,T=p(N);var L=/^(?:parents|prev(?:Until|All))/,A={children:!0,contents:!0,next:!0,prev:!0};p.extend({dir:function(e,t,n){var r=[],i=e[t];while(i&&i.nodeType!==9&&(n===undefined||i.nodeType!==1||!p(i).is(n)))i.nodeType===1&&r.push(i),i=i[t];return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)e.nodeType===1&&e!==t&&n.push(e);return n}}),p.fn.extend({has:function(e){var t,n=p(e,this),r=n.length;return this.filter(function(){for(t=0;t-1:n.nodeType===1&&p.find.matchesSelector(n,e))){s.push(n);break}return this.pushStack(s.length>1?p.unique(s):s)},index:function(e){return e?typeof e=="string"?p.inArray(this[0],p(e)):p.inArray(e.jquery?e[0]:e,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(p.unique(p.merge(this.get(),p(e,t))))},addBack:function(e){return this.add(e==null?this.prevObject:this.prevObject.filter(e))}}),p.each({parent:function(e){var t=e.parentNode;return t&&t.nodeType!==11?t:null},parents:function(e){return p.dir(e,"parentNode")},parentsUntil:function(e,t,n){return p.dir(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return p.dir(e,"nextSibling")},prevAll:function(e){return p.dir(e,"previousSibling")},nextUntil:function(e,t,n){return p.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return p.dir(e,"previousSibling",n)},siblings:function(e){return p.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return p.sibling(e.firstChild)},contents:function(e){return p.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:p.merge([],e.childNodes)}},function(e,t){p.fn[e]=function(n,r){var i=p.map(this,t,n);return e.slice(-5)!=="Until"&&(r=n),r&&typeof r=="string"&&(i=p.filter(r,i)),this.length>1&&(A[e]||(i=p.unique(i)),L.test(e)&&(i=i.reverse())),this.pushStack(i)}});var M=/\S+/g,_={};p.Callbacks=function(e){e=typeof e=="string"?_[e]||D(e):p.extend({},e);var t,n,r,i,s,o,u=[],a=!e.once&&[],f=function(c){n=e.memory&&c,r=!0,s=o||0,o=0,i=u.length,t=!0;for(;u&&s-1)u.splice(r,1),t&&(r<=i&&i--,r<=s&&s--)}),this},has:function(e){return e?p.inArray(e,u)>-1:!!u&&!!u.length},empty:function(){return u=[],i=0,this},disable:function(){return u=a=n=undefined,this},disabled:function(){return!u},lock:function(){return a=undefined,n||l.disable(),this},locked:function(){return!a},fireWith:function(e,n){return u&&(!r||a)&&(n=n||[],n=[e,n.slice?n.slice():n],t?a.push(n):f(n)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!r}};return l},p.extend({Deferred:function(e){var t=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return p.Deferred(function(n){p.each(t,function(t,s){var o=p.isFunction(e[t])&&e[t];i[s[1]](function(){var e=o&&o.apply(this,arguments);e&&p.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s[0]+"With"](this===r?n.promise():this,o?[e]:arguments)})}),e=null}).promise()},promise:function(e){return e!=null?p.extend(e,r):r}},i={};return r.pipe=r.then,p.each(t,function(e,s){var o=s[2],u=s[3];r[s[1]]=o.add,u&&o.add(function(){n=u},t[e^1][2].disable,t[2][2].lock),i[s[0]]=function(){return i[s[0]+"With"](this===i?r:this,arguments),this},i[s[0]+"With"]=o.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=r.call(arguments),i=n.length,s=i!==1||e&&p.isFunction(e.promise)?i:0,o=s===1?e:p.Deferred(),u=function(e,t,n){return function(i){t[e]=this,n[e]=arguments.length>1?r.call(arguments):i,n===a?o.notifyWith(t,n):--s||o.resolveWith(t,n)}},a,f,l;if(i>1){a=new Array(i),f=new Array(i),l=new Array(i);for(;t0)return;P.resolveWith(N,[p]),p.fn.trigger&&p(N).trigger("ready").off("ready")}}),p.ready.promise=function(t){if(!P){P=p.Deferred();if(N.readyState==="complete")setTimeout(p.ready);else if(N.addEventListener)N.addEventListener("DOMContentLoaded",B,!1),e.addEventListener("load",B,!1);else{N.attachEvent("onreadystatechange",B),e.attachEvent("onload",B);var n=!1;try{n=e.frameElement==null&&N.documentElement}catch(r){}n&&n.doScroll&&function i(){if(!p.isReady){try{n.doScroll("left")}catch(e){return setTimeout(i,50)}H(),p.ready()}}()}}return P.promise(t)};var j=typeof undefined,F;for(F in p(c))break;c.ownLast=F!=="0",c.inlineBlockNeedsLayout=!1,p(function(){var e,t,n=N.getElementsByTagName("body")[0];if(!n)return;e=N.createElement("div"),e.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",t=N.createElement("div"),n.appendChild(e).appendChild(t);if(typeof t.style.zoom!==j){t.style.cssText="border:0;margin:0;width:1px;padding:1px;display:inline;zoom:1";if(c.inlineBlockNeedsLayout=t.offsetWidth===3)n.style.zoom=1}n.removeChild(e),e=t=null}),function(){var e=N.createElement("div");if(c.deleteExpando==null){c.deleteExpando=!0;try{delete e.test}catch(t){c.deleteExpando=!1}}e=null}(),p.acceptData=function(e){var t=p.noData[(e.nodeName+" ").toLowerCase()],n=+e.nodeType||1;return n!==1&&n!==9?!1:!t||t!==!0&&e.getAttribute("classid")===t};var I=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,q=/([A-Z])/g;p.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(e){return e=e.nodeType?p.cache[e[p.expando]]:e[p.expando],!!e&&!U(e)},data:function(e,t,n){return z(e,t,n)},removeData:function(e,t){return W(e,t)},_data:function(e,t,n){return z(e,t,n,!0)},_removeData:function(e,t){return W(e,t,!0)}}),p.fn.extend({data:function(e,t){var n,r,i,s=this[0],o=s&&s.attributes;if(e===undefined){if(this.length){i=p.data(s);if(s.nodeType===1&&!p._data(s,"parsedAttrs")){n=o.length;while(n--)r=o[n].name,r.indexOf("data-")===0&&(r=p.camelCase(r.slice(5)),R(s,r,i[r]));p._data(s,"parsedAttrs",!0)}}return i}return typeof e=="object"?this.each(function(){p.data(this,e)}):arguments.length>1?this.each(function(){p.data(this,e,t)}):s?R(s,e,p.data(s,e)):undefined},removeData:function(e){return this.each(function(){p.removeData(this,e)})}}),p.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=p._data(e,t),n&&(!r||p.isArray(n)?r=p._data(e,t,p.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=p.queue(e,t),r=n.length,i=n.shift(),s=p._queueHooks(e,t),o=function(){p.dequeue(e,t)};i==="inprogress"&&(i=n.shift(),r--),i&&(t==="fx"&&n.unshift("inprogress"),delete s.stop,i.call(e,o,s)),!r&&s&&s.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return p._data(e,n)||p._data(e,n,{empty:p.Callbacks("once memory").add(function(){p._removeData(e,t+"queue"),p._removeData(e,n)})})}}),p.fn.extend({queue:function(e,t){var n=2;return typeof e!="string"&&(t=e,e="fx",n--),arguments.length
a",c.leadingWhitespace=t.firstChild.nodeType===3,c.tbody=!t.getElementsByTagName("tbody").length,c.htmlSerialize=!!t.getElementsByTagName("link").length,c.html5Clone=N.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",n.type="checkbox",n.checked=!0,e.appendChild(n),c.appendChecked=n.checked,t.innerHTML="",c.noCloneChecked=!!t.cloneNode(!0).lastChild.defaultValue,e.appendChild(t),t.innerHTML="",c.checkClone=t.cloneNode(!0).cloneNode(!0).lastChild.checked,c.noCloneEvent=!0,t.attachEvent&&(t.attachEvent("onclick",function(){c.noCloneEvent=!1}),t.cloneNode(!0).click());if(c.deleteExpando==null){c.deleteExpando=!0;try{delete t.test}catch(r){c.deleteExpando=!1}}e=t=n=null})(),function(){var t,n,r=N.createElement("div");for(t in{submit:!0,change:!0,focusin:!0})n="on"+t,(c[t+"Bubbles"]=n in e)||(r.setAttribute(n,"t"),c[t+"Bubbles"]=r.attributes[n].expando===!1);r=null}();var Q=/^(?:input|select|textarea)$/i,G=/^key/,Y=/^(?:mouse|contextmenu)|click/,Z=/^(?:focusinfocus|focusoutblur)$/,et=/^([^.]*)(?:\.(.+)|)$/;p.event={global:{},add:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,d,v,m,g=p._data(e);if(!g)return;n.handler&&(a=n,n=a.handler,i=a.selector),n.guid||(n.guid=p.guid++),(o=g.events)||(o=g.events={}),(l=g.handle)||(l=g.handle=function(e){return typeof p===j||!!e&&p.event.triggered===e.type?undefined:p.event.dispatch.apply(l.elem,arguments)},l.elem=e),t=(t||"").match(M)||[""],u=t.length;while(u--){s=et.exec(t[u])||[],d=m=s[1],v=(s[2]||"").split(".").sort();if(!d)continue;f=p.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=p.event.special[d]||{},c=p.extend({type:d,origType:m,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&p.expr.match.needsContext.test(i),namespace:v.join(".")},a);if(!(h=o[d])){h=o[d]=[],h.delegateCount=0;if(!f.setup||f.setup.call(e,r,v,l)===!1)e.addEventListener?e.addEventListener(d,l,!1):e.attachEvent&&e.attachEvent("on"+d,l)}f.add&&(f.add.call(e,c),c.handler.guid||(c.handler.guid=n.guid)),i?h.splice(h.delegateCount++,0,c):h.push(c),p.event.global[d]=!0}e=null},remove:function(e,t,n,r,i){var s,o,u,a,f,l,c,h,d,v,m,g=p.hasData(e)&&p._data(e);if(!g||!(l=g.events))return;t=(t||"").match(M)||[""],f=t.length;while(f--){u=et.exec(t[f])||[],d=m=u[1],v=(u[2]||"").split(".").sort();if(!d){for(d in l)p.event.remove(e,d+t[f],n,r,!0);continue}c=p.event.special[d]||{},d=(r?c.delegateType:c.bindType)||d,h=l[d]||[],u=u[2]&&new RegExp("(^|\\.)"+v.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=s=h.length;while(s--)o=h[s],(i||m===o.origType)&&(!n||n.guid===o.guid)&&(!u||u.test(o.namespace))&&(!r||r===o.selector||r==="**"&&o.selector)&&(h.splice(s,1),o.selector&&h.delegateCount--,c.remove&&c.remove.call(e,o));a&&!h.length&&((!c.teardown||c.teardown.call(e,v,g.handle)===!1)&&p.removeEvent(e,d,g.handle),delete l[d])}p.isEmptyObject(l)&&(delete g.handle,p._removeData(e,"events"))},trigger:function(t,n,r,i){var s,o,u,a,l,c,h,d=[r||N],v=f.call(t,"type")?t.type:t,m=f.call(t,"namespace")?t.namespace.split("."):[];u=c=r=r||N;if(r.nodeType===3||r.nodeType===8)return;if(Z.test(v+p.event.triggered))return;v.indexOf(".")>=0&&(m=v.split("."),v=m.shift(),m.sort()),o=v.indexOf(":")<0&&"on"+v,t=t[p.expando]?t:new p.Event(v,typeof t=="object"&&t),t.isTrigger=i?2:3,t.namespace=m.join("."),t.namespace_re=t.namespace?new RegExp("(^|\\.)"+m.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=n==null?[t]:p.makeArray(n,[t]),l=p.event.special[v]||{};if(!i&&l.trigger&&l.trigger.apply(r,n)===!1)return;if(!i&&!l.noBubble&&!p.isWindow(r)){a=l.delegateType||v,Z.test(a+v)||(u=u.parentNode);for(;u;u=u.parentNode)d.push(u),c=u;c===(r.ownerDocument||N)&&d.push(c.defaultView||c.parentWindow||e)}h=0;while((u=d[h++])&&!t.isPropagationStopped())t.type=h>1?a:l.bindType||v,s=(p._data(u,"events")||{})[t.type]&&p._data(u,"handle"),s&&s.apply(u,n),s=o&&u[o],s&&s.apply&&p.acceptData(u)&&(t.result=s.apply(u,n),t.result===!1&&t.preventDefault());t.type=v;if(!i&&!t.isDefaultPrevented()&&(!l._default||l._default.apply(d.pop(),n)===!1)&&p.acceptData(r)&&o&&r[v]&&!p.isWindow(r)){c=r[o],c&&(r[o]=null),p.event.triggered=v;try{r[v]()}catch(g){}p.event.triggered=undefined,c&&(r[o]=c)}return t.result},dispatch:function(e){e=p.event.fix(e);var t,n,i,s,o,u=[],a=r.call(arguments),f=(p._data(this,"events")||{})[e.type]||[],l=p.event.special[e.type]||{};a[0]=e,e.delegateTarget=this;if(l.preDispatch&&l.preDispatch.call(this,e)===!1)return;u=p.event.handlers.call(this,e,f),t=0;while((s=u[t++])&&!e.isPropagationStopped()){e.currentTarget=s.elem,o=0;while((i=s.handlers[o++])&&!e.isImmediatePropagationStopped())if(!e.namespace_re||e.namespace_re.test(i.namespace))e.handleObj=i,e.data=i.data,n=((p.event.special[i.origType]||{}).handle||i.handler).apply(s.elem,a),n!==undefined&&(e.result=n)===!1&&(e.preventDefault(),e.stopPropagation())}return l.postDispatch&&l.postDispatch.call(this,e),e.result},handlers:function(e,t){var n,r,i,s,o=[],u=t.delegateCount,a=e.target;if(u&&a.nodeType&&(!e.button||e.type!=="click"))for(;a!=this;a=a.parentNode||this)if(a.nodeType===1&&(a.disabled!==!0||e.type!=="click")){i=[];for(s=0;s=0:p.find(n,this,null,[a]).length),i[n]&&i.push(r);i.length&&o.push({elem:a,handlers:i})}return u]","i"),at=/^\s+/,ft=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,lt=/<([\w:]+)/,ct=/\s*$/g,yt={option:[1,""],legend:[1,"
","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:c.htmlSerialize?[0,"",""]:[1,"X
","
"]},bt=it(N),wt=bt.appendChild(N.createElement("div"));yt.optgroup=yt.option,yt.tbody=yt.tfoot=yt.colgroup=yt.caption=yt.thead,yt.th=yt.td,p.extend({clone:function(e,t,n){var r,i,s,o,u,a=p.contains(e.ownerDocument,e);c.html5Clone||p.isXMLDoc(e)||!ut.test("<"+e.nodeName+">")?s=e.cloneNode(!0):(wt.innerHTML=e.outerHTML,wt.removeChild(s=wt.firstChild));if((!c.noCloneEvent||!c.noCloneChecked)&&(e.nodeType===1||e.nodeType===11)&&!p.isXMLDoc(e)){r=Et(s),u=Et(e);for(o=0;(i=u[o])!=null;++o)r[o]&&Lt(i,r[o])}if(t)if(n){u=u||Et(e),r=r||Et(s);for(o=0;(i=u[o])!=null;o++)kt(i,r[o])}else kt(e,s);return r=Et(s,"script"),r.length>0&&Ct(r,!a&&Et(e,"script")),r=u=i=null,s},buildFragment:function(e,t,n,r){var i,s,o,u,a,f,l,h=e.length,d=it(t),v=[],m=0;for(;m")+l[2],i=l[0];while(i--)u=u.lastChild;!c.leadingWhitespace&&at.test(s)&&v.push(t.createTextNode(at.exec(s)[0]));if(!c.tbody){s=a==="table"&&!ct.test(s)?u.firstChild:l[1]===""&&!ct.test(s)?u:0,i=s&&s.childNodes.length;while(i--)p.nodeName(f=s.childNodes[i],"tbody")&&!f.childNodes.length&&s.removeChild(f)}p.merge(v,u.childNodes),u.textContent="";while(u.firstChild)u.removeChild(u.firstChild);u=d.lastChild}}u&&d.removeChild(u),c.appendChecked||p.grep(Et(v,"input"),St),m=0;while(s=v[m++]){if(r&&p.inArray(s,r)!==-1)continue;o=p.contains(s.ownerDocument,s),u=Et(d.appendChild(s),"script"),o&&Ct(u);if(n){i=0;while(s=u[i++])vt.test(s.type||"")&&n.push(s)}}return u=null,d},cleanData:function(e,t){var r,i,s,o,u=0,a=p.expando,f=p.cache,l=c.deleteExpando,h=p.event.special;for(;(r=e[u])!=null;u++)if(t||p.acceptData(r)){s=r[a],o=s&&f[s];if(o){if(o.events)for(i in o.events)h[i]?p.event.remove(r,i):p.removeEvent(r,i,o.handle);f[s]&&(delete f[s],l?delete r[a]:typeof r.removeAttribute!==j?r.removeAttribute(a):r[a]=null,n.push(s))}}}}),p.fn.extend({text:function(e){return J(this,function(e){return e===undefined?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||N).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=xt(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var t=xt(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?p.filter(e,this):this,i=0;for(;(n=r[i])!=null;i++)!t&&n.nodeType===1&&p.cleanData(Et(n)),n.parentNode&&(t&&p.contains(n.ownerDocument,n)&&Ct(Et(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;(e=this[t])!=null;t++){e.nodeType===1&&p.cleanData(Et(e,!1));while(e.firstChild)e.removeChild(e.firstChild);e.options&&p.nodeName(e,"select")&&(e.options.length=0)}return this},clone:function(e,t){return e=e==null?!1:e,t=t==null?e:t,this.map(function(){return p.clone(this,e,t)})},html:function(e){return J(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined)return t.nodeType===1?t.innerHTML.replace(ot,""):undefined;if(typeof e=="string"&&!pt.test(e)&&(c.htmlSerialize||!ut.test(e))&&(c.leadingWhitespace||!at.test(e))&&!yt[(lt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(ft,"<$1>");try{for(;n1&&typeof v=="string"&&!c.checkClone&&dt.test(v))return this.each(function(n){var r=h.eq(n);m&&(e[0]=v.call(this,n,r.html())),r.domManip(e,t)});if(l){a=p.buildFragment(e,this[0].ownerDocument,!1,this),n=a.firstChild,a.childNodes.length===1&&(a=n);if(n){o=p.map(Et(a,"script"),Tt),s=o.length;for(;f
a",e=n.getElementsByTagName("a")[0],e.style.cssText="float:left;opacity:.5",c.opacity=/^0.5/.test(e.style.opacity),c.cssFloat=!!e.style.cssFloat,n.style.backgroundClip="content-box",n.cloneNode(!0).style.backgroundClip="",c.clearCloneStyle=n.style.backgroundClip==="content-box",e=n=null,c.shrinkWrapBlocks=function(){var e,n,i,s;if(t==null){e=N.getElementsByTagName("body")[0];if(!e)return;s="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",n=N.createElement("div"),i=N.createElement("div"),e.appendChild(n).appendChild(i),t=!1,typeof i.style.zoom!==j&&(i.style.cssText=r+";width:1px;padding:1px;zoom:1",i.innerHTML="
",i.firstChild.style.width="5px",t=i.offsetWidth!==3),e.removeChild(n),e=n=i=null}return t}})();var Dt=/^margin/,Pt=new RegExp("^("+X+")(?!px)[a-z%]+$","i"),Ht,Bt,jt=/^(top|right|bottom|left)$/;e.getComputedStyle?(Ht=function(e){return e.ownerDocument.defaultView.getComputedStyle(e,null)},Bt=function(e,t,n){var r,i,s,o,u=e.style;return n=n||Ht(e),o=n?n.getPropertyValue(t)||n[t]:undefined,n&&(o===""&&!p.contains(e.ownerDocument,e)&&(o=p.style(e,t)),Pt.test(o)&&Dt.test(t)&&(r=u.width,i=u.minWidth,s=u.maxWidth,u.minWidth=u.maxWidth=u.width=o,o=n.width,u.width=r,u.minWidth=i,u.maxWidth=s)),o===undefined?o:o+""}):N.documentElement.currentStyle&&(Ht=function(e){return e.currentStyle},Bt=function(e,t,n){var r,i,s,o,u=e.style;return n=n||Ht(e),o=n?n[t]:undefined,o==null&&u&&u[t]&&(o=u[t]),Pt.test(o)&&!jt.test(t)&&(r=u.left,i=e.runtimeStyle,s=i&&i.left,s&&(i.left=e.currentStyle.left),u.left=t==="fontSize"?"1em":o,o=u.pixelLeft+"px",u.left=r,s&&(i.left=s)),o===undefined?o:o+""||"auto"}),function(){function l(){var t,n,u=N.getElementsByTagName("body")[0];if(!u)return;t=N.createElement("div"),n=N.createElement("div"),t.style.cssText=a,u.appendChild(t).appendChild(n),n.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;position:absolute;display:block;padding:1px;border:1px;width:4px;margin-top:1%;top:1%",p.swap(u,u.style.zoom!=null?{zoom:1}:{},function(){r=n.offsetWidth===4}),i=!0,s=!1,o=!0,e.getComputedStyle&&(s=(e.getComputedStyle(n,null)||{}).top!=="1%",i=(e.getComputedStyle(n,null)||{width:"4px"}).width==="4px"),u.removeChild(t),n=u=null}var t,n,r,i,s,o,u=N.createElement("div"),a="border:0;width:0;height:0;position:absolute;top:0;left:-9999px",f="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;padding:0;margin:0;border:0";u.innerHTML="
a",t=u.getElementsByTagName("a")[0],t.style.cssText="float:left;opacity:.5",c.opacity=/^0.5/.test(t.style.opacity),c.cssFloat=!!t.style.cssFloat,u.style.backgroundClip="content-box",u.cloneNode(!0).style.backgroundClip="",c.clearCloneStyle=u.style.backgroundClip==="content-box",t=u=null,p.extend(c,{reliableHiddenOffsets:function(){if(n!=null)return n;var e,t,r,i=N.createElement("div"),s=N.getElementsByTagName("body")[0];if(!s)return;return i.setAttribute("className","t"),i.innerHTML="
a",e=N.createElement("div"),e.style.cssText=a,s.appendChild(e).appendChild(i),i.innerHTML="
t
",t=i.getElementsByTagName("td"),t[0].style.cssText="padding:0;margin:0;border:0;display:none",r=t[0].offsetHeight===0,t[0].style.display="",t[1].style.display="none",n=r&&t[0].offsetHeight===0,s.removeChild(e),i=s=null,n},boxSizing:function(){return r==null&&l(),r},boxSizingReliable:function(){return i==null&&l(),i},pixelPosition:function(){return s==null&&l(),s},reliableMarginRight:function(){var t,n,r,i;if(o==null&&e.getComputedStyle){t=N.getElementsByTagName("body")[0];if(!t)return;n=N.createElement("div"),r=N.createElement("div"),n.style.cssText=a,t.appendChild(n).appendChild(r),i=r.appendChild(N.createElement("div")),i.style.cssText=r.style.cssText=f,i.style.marginRight=i.style.width="0",r.style.width="1px",o=!parseFloat((e.getComputedStyle(i,null)||{}).marginRight),t.removeChild(n)}return o}})}(),p.swap=function(e,t,n,r){var i,s,o={};for(s in t)o[s]=e.style[s],e.style[s]=t[s];i=n.apply(e,r||[]);for(s in t)e.style[s]=o[s];return i};var It=/alpha\([^)]*\)/i,qt=/opacity\s*=\s*([^)]*)/,Rt=/^(none|table(?!-c[ea]).+)/,Ut=new RegExp("^("+X+")(.*)$","i"),zt=new RegExp("^([+-])=("+X+")","i"),Wt={position:"absolute",visibility:"hidden",display:"block"},Xt={letterSpacing:0,fontWeight:400},Vt=["Webkit","O","Moz","ms"];p.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Bt(e,"opacity");return n===""?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":c.cssFloat?"cssFloat":"styleFloat"},style:function(e,t,n,r){if(!e||e.nodeType===3||e.nodeType===8||!e.style)return;var i,s,o,u=p.camelCase(t),a=e.style;t=p.cssProps[u]||(p.cssProps[u]=$t(a,u)),o=p.cssHooks[t]||p.cssHooks[u];if(n===undefined)return o&&"get"in o&&(i=o.get(e,!1,r))!==undefined?i:a[t];s=typeof n,s==="string"&&(i=zt.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(p.css(e,t)),s="number");if(n==null||n!==n)return;s==="number"&&!p.cssNumber[u]&&(n+="px"),!c.clearCloneStyle&&n===""&&t.indexOf("background")===0&&(a[t]="inherit");if(!o||!("set"in o)||(n=o.set(e,n,r))!==undefined)try{a[t]="",a[t]=n}catch(f){}},css:function(e,t,n,r){var i,s,o,u=p.camelCase(t);return t=p.cssProps[u]||(p.cssProps[u]=$t(e.style,u)),o=p.cssHooks[t]||p.cssHooks[u],o&&"get"in o&&(s=o.get(e,!0,n)),s===undefined&&(s=Bt(e,t,r)),s==="normal"&&t in Xt&&(s=Xt[t]),n===""||n?(i=parseFloat(s),n===!0||p.isNumeric(i)?i||0:s):s}}),p.each(["height","width"],function(e,t){p.cssHooks[t]={get:function(e,n,r){if(n)return e.offsetWidth===0&&Rt.test(p.css(e,"display"))?p.swap(e,Wt,function(){return Gt(e,t,r)}):Gt(e,t,r)},set:function(e,n,r){var i=r&&Ht(e);return Kt(e,n,r?Qt(e,t,r,c.boxSizing()&&p.css(e,"boxSizing",!1,i)==="border-box",i):0)}}}),c.opacity||(p.cssHooks.opacity={get:function(e,t){return qt.test((t&&e.currentStyle?e.currentStyle.filter:e.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":t?"1":""},set:function(e,t){var n=e.style,r=e.currentStyle,i=p.isNumeric(t)?"alpha(opacity="+t*100+")":"",s=r&&r.filter||n.filter||"";n.zoom=1;if((t>=1||t==="")&&p.trim(s.replace(It,""))===""&&n.removeAttribute){n.removeAttribute("filter");if(t===""||r&&!r.filter)return}n.filter=It.test(s)?s.replace(It,i):s+" "+i}}),p.cssHooks.marginRight=Ft(c.reliableMarginRight,function(e,t){if(t)return p.swap(e,{display:"inline-block"},Bt,[e,"marginRight"])}),p.each({margin:"",padding:"",border:"Width"},function(e,t){p.cssHooks[e+t]={expand:function(n){var r=0,i={},s=typeof n=="string"?n.split(" "):[n];for(;r<4;r++)i[e+V[r]+t]=s[r]||s[r-2]||s[0];return i}},Dt.test(e)||(p.cssHooks[e+t].set=Kt)}),p.fn.extend({css:function(e,t){return J(this,function(e,t,n){var r,i,s={},o=0;if(p.isArray(t)){r=Ht(e),i=t.length;for(;o1)},show:function(){return Jt(this,!0)},hide:function(){return Jt(this)},toggle:function(e){return typeof e=="boolean"?e?this.show():this.hide():this.each(function(){$(this)?p(this).show():p(this).hide()})}}),p.Tween=Yt,Yt.prototype={constructor:Yt,init:function(e,t,n,r,i,s){this.elem=e,this.prop=n,this.easing=i||"swing",this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=s||(p.cssNumber[n]?"":"px")},cur:function(){var e=Yt.propHooks[this.prop];return e&&e.get?e.get(this):Yt.propHooks._default.get(this)},run:function(e){var t,n=Yt.propHooks[this.prop];return this.options.duration?this.pos=t=p.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):Yt.propHooks._default.set(this),this}},Yt.prototype.init.prototype=Yt.prototype,Yt.propHooks={_default:{get:function(e){var t;return e.elem[e.prop]==null||!!e.elem.style&&e.elem.style[e.prop]!=null?(t=p.css(e.elem,e.prop,""),!t||t==="auto"?0:t):e.elem[e.prop]},set:function(e){p.fx.step[e.prop]?p.fx.step[e.prop](e):e.elem.style&&(e.elem.style[p.cssProps[e.prop]]!=null||p.cssHooks[e.prop])?p.style(e.elem,e.prop,e.now+e.unit):e.elem[e.prop]=e.now}}},Yt.propHooks.scrollTop=Yt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},p.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2}},p.fx=Yt.prototype.init,p.fx.step={};var Zt,en,tn=/^(?:toggle|show|hide)$/,nn=new RegExp("^(?:([+-])=|)("+X+")([a-z%]*)$","i"),rn=/queueHooks$/,sn=[ln],on={"*":[function(e,t){var n=this.createTween(e,t),r=n.cur(),i=nn.exec(t),s=i&&i[3]||(p.cssNumber[e]?"":"px"),o=(p.cssNumber[e]||s!=="px"&&+r)&&nn.exec(p.css(n.elem,e)),u=1,a=20;if(o&&o[3]!==s){s=s||o[3],i=i||[],o=+r||1;do u=u||".5",o/=u,p.style(n.elem,e,o+s);while(u!==(u=n.cur()/r)&&u!==1&&--a)}return i&&(o=n.start=+o||+r||0,n.unit=s,n.end=i[1]?o+(i[1]+1)*i[2]:+i[2]),n}]};p.Animation=p.extend(hn,{tweener:function(e,t){p.isFunction(e)?(t=e,e=["*"]):e=e.split(" ");var n,r=0,i=e.length;for(;r
a",e=i.getElementsByTagName("a")[0],n=N.createElement("select"),r=n.appendChild(N.createElement("option")),t=i.getElementsByTagName("input")[0],e.style.cssText="top:1px",c.getSetAttribute=i.className!=="t",c.style=/top/.test(e.getAttribute("style")),c.hrefNormalized=e.getAttribute("href")==="/a",c.checkOn=!!t.value,c.optSelected=r.selected,c.enctype=!!N.createElement("form").enctype,n.disabled=!0,c.optDisabled=!r.disabled,t=N.createElement("input"),t.setAttribute("value",""),c.input=t.getAttribute("value")==="",t.value="t",t.setAttribute("type","radio"),c.radioValue=t.value==="t",e=t=n=r=i=null}();var pn=/\r/g;p.fn.extend({val:function(e){var t,n,r,i=this[0];if(!arguments.length){if(i)return t=p.valHooks[i.type]||p.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,typeof n=="string"?n.replace(pn,""):n==null?"":n);return}return r=p.isFunction(e),this.each(function(n){var i;if(this.nodeType!==1)return;r?i=e.call(this,n,p(this).val()):i=e,i==null?i="":typeof i=="number"?i+="":p.isArray(i)&&(i=p.map(i,function(e){return e==null?"":e+""})),t=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!t||!("set"in t)||t.set(this,i,"value")===undefined)this.value=i})}}),p.extend({valHooks:{option:{get:function(e){var t=p.find.attr(e,"value");return t!=null?t:p.text(e)}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,s=e.type==="select-one"||i<0,o=s?null:[],u=s?i+1:r.length,a=i<0?u:s?i:0;for(;a=0)try{r.selected=n=!0}catch(u){r.scrollHeight}else r.selected=!1}return n||(e.selectedIndex=-1),i}}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]={set:function(e,t){if(p.isArray(t))return e.checked=p.inArray(p(e).val(),t)>=0}},c.checkOn||(p.valHooks[this].get=function(e){return e.getAttribute("value")===null?"on":e.value})});var dn,vn,mn=p.expr.attrHandle,gn=/^(?:checked|selected)$/i,yn=c.getSetAttribute,bn=c.input;p.fn.extend({attr:function(e,t){return J(this,p.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){p.removeAttr(this,e)})}}),p.extend({attr:function(e,t,n){var r,i,s=e.nodeType;if(!e||s===3||s===8||s===2)return;if(typeof e.getAttribute===j)return p.prop(e,t,n);if(s!==1||!p.isXMLDoc(e))t=t.toLowerCase(),r=p.attrHooks[t]||(p.expr.match.bool.test(t)?vn:dn);if(n===undefined)return r&&"get"in r&&(i=r.get(e,t))!==null?i:(i=p.find.attr(e,t),i==null?undefined:i);if(n!==null)return r&&"set"in r&&(i=r.set(e,n,t))!==undefined?i:(e.setAttribute(t,n+""),n);p.removeAttr(e,t)},removeAttr:function(e,t){var n,r,i=0,s=t&&t.match(M);if(s&&e.nodeType===1)while(n=s[i++])r=p.propFix[n]||n,p.expr.match.bool.test(n)?bn&&yn||!gn.test(n)?e[r]=!1:e[p.camelCase("default-"+n)]=e[r]=!1:p.attr(e,n,""),e.removeAttribute(yn?n:r)},attrHooks:{type:{set:function(e,t){if(!c.radioValue&&t==="radio"&&p.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}}}),vn={set:function(e,t,n){return t===!1?p.removeAttr(e,n):bn&&yn||!gn.test(n)?e.setAttribute(!yn&&p.propFix[n]||n,n):e[p.camelCase("default-"+n)]=e[n]=!0,n}},p.each(p.expr.match.bool.source.match(/\w+/g),function(e,t){var n=mn[t]||p.find.attr;mn[t]=bn&&yn||!gn.test(t)?function(e,t,r){var i,s;return r||(s=mn[t],mn[t]=i,i=n(e,t,r)!=null?t.toLowerCase():null,mn[t]=s),i}:function(e,t,n){if(!n)return e[p.camelCase("default-"+t)]?t.toLowerCase():null}});if(!bn||!yn)p.attrHooks.value={set:function(e,t,n){if(!p.nodeName(e,"input"))return dn&&dn.set(e,t,n);e.defaultValue=t}};yn||(dn={set:function(e,t,n){var r=e.getAttributeNode(n);r||e.setAttributeNode(r=e.ownerDocument.createAttribute(n)),r.value=t+="";if(n==="value"||t===e.getAttribute(n))return t}},mn.id=mn.name=mn.coords=function(e,t,n){var r;if(!n)return(r=e.getAttributeNode(t))&&r.value!==""?r.value:null},p.valHooks.button={get:function(e,t){var n=e.getAttributeNode(t);if(n&&n.specified)return n.value},set:dn.set},p.attrHooks.contenteditable={set:function(e,t,n){dn.set(e,t===""?!1:t,n)}},p.each(["width","height"],function(e,t){p.attrHooks[t]={set:function(e,n){if(n==="")return e.setAttribute(t,"auto"),n}}})),c.style||(p.attrHooks.style={get:function(e){return e.style.cssText||undefined},set:function(e,t){return e.style.cssText=t+""}});var wn=/^(?:input|select|textarea|button|object)$/i,En=/^(?:a|area)$/i;p.fn.extend({prop:function(e,t){return J(this,p.prop,e,t,arguments.length>1)},removeProp:function(e){return e=p.propFix[e]||e,this.each(function(){try{this[e]=undefined,delete this[e]}catch(t){}})}}),p.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,s,o=e.nodeType;if(!e||o===3||o===8||o===2)return;return s=o!==1||!p.isXMLDoc(e),s&&(t=p.propFix[t]||t,i=p.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&(r=i.get(e,t))!==null?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=p.find.attr(e,"tabindex");return t?parseInt(t,10):wn.test(e.nodeName)||En.test(e.nodeName)&&e.href?0:-1}}}}),c.hrefNormalized||p.each(["href","src"],function(e,t){p.propHooks[t]={get:function(e){return e.getAttribute(t,4)}}}),c.optSelected||(p.propHooks.selected={get:function(e){var t=e.parentNode;return t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex),null}}),p.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){p.propFix[this.toLowerCase()]=this}),c.enctype||(p.propFix.enctype="encoding");var Sn=/[\t\r\n\f]/g;p.fn.extend({addClass:function(e){var t,n,r,i,s,o,u=0,a=this.length,f=typeof e=="string"&&e;if(p.isFunction(e))return this.each(function(t){p(this).addClass(e.call(this,t,this.className))});if(f){t=(e||"").match(M)||[];for(;u=0)r=r.replace(" "+i+" "," ");o=e?p.trim(r):"",n.className!==o&&(n.className=o)}}}return this},toggleClass:function(e,t){var n=typeof e;return typeof t=="boolean"&&n==="string"?t?this.addClass(e):this.removeClass(e):p.isFunction(e)?this.each(function(n){p(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if(n==="string"){var t,r=0,i=p(this),s=e.match(M)||[];while(t=s[r++])i.hasClass(t)?i.removeClass(t):i.addClass(t)}else if(n===j||n==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||e===!1?"":p._data(this,"__className__")||""})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;n=0)return!0;return!1}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(e,t){p.fn[t]=function(e,n){return arguments.length>0?this.on(t,null,e,n):this.trigger(t)}}),p.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)},bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return arguments.length===1?this.off(e,"**"):this.off(t,e||"**",n)}});var xn=p.now(),Tn=/\?/,Nn=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;p.parseJSON=function(t){if(e.JSON&&e.JSON.parse)return e.JSON.parse(t+"");var n,r=null,i=p.trim(t+"");return i&&!p.trim(i.replace(Nn,function(e,t,i,s){return n&&t&&(r=0),r===0?e:(n=i||t,r+=!s-!i,"")}))?Function("return "+i)():p.error("Invalid JSON: "+t)},p.parseXML=function(t){var n,r;if(!t||typeof t!="string")return null;try{e.DOMParser?(r=new DOMParser,n=r.parseFromString(t,"text/xml")):(n=new ActiveXObject("Microsoft.XMLDOM"),n.async="false",n.loadXML(t))}catch(i){n=undefined}return(!n||!n.documentElement||n.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+t),n};var Cn,kn,Ln=/#.*$/,An=/([?&])_=[^&]*/,On=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,Mn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,_n=/^(?:GET|HEAD)$/,Dn=/^\/\//,Pn=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hn={},Bn={},jn="*/".concat("*");try{kn=location.href}catch(Fn){kn=N.createElement("a"),kn.href="",kn=kn.href}Cn=Pn.exec(kn.toLowerCase())||[],p.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:kn,type:"GET",isLocal:Mn.test(Cn[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":jn,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Rn(Rn(e,p.ajaxSettings),t):Rn(p.ajaxSettings,e)},ajaxPrefilter:In(Hn),ajaxTransport:In(Bn),ajax:function(e,t){function x(e,t,n,r){var f,g,y,w,S,x=t;if(b===2)return;b=2,o&&clearTimeout(o),a=undefined,s=r||"",E.readyState=e>0?4:0,f=e>=200&&e<300||e===304,n&&(w=Un(l,E,n)),w=zn(l,w,E,f);if(f)l.ifModified&&(S=E.getResponseHeader("Last-Modified"),S&&(p.lastModified[i]=S),S=E.getResponseHeader("etag"),S&&(p.etag[i]=S)),e===204||l.type==="HEAD"?x="nocontent":e===304?x="notmodified":(x=w.state,g=w.data,y=w.error,f=!y);else{y=x;if(e||!x)x="error",e<0&&(e=0)}E.status=e,E.statusText=(t||x)+"",f?d.resolveWith(c,[g,x,E]):d.rejectWith(c,[E,x,y]),E.statusCode(m),m=undefined,u&&h.trigger(f?"ajaxSuccess":"ajaxError",[E,l,f?g:y]),v.fireWith(c,[E,x]),u&&(h.trigger("ajaxComplete",[E,l]),--p.active||p.event.trigger("ajaxStop"))}typeof e=="object"&&(t=e,e=undefined),t=t||{};var n,r,i,s,o,u,a,f,l=p.ajaxSetup({},t),c=l.context||l,h=l.context&&(c.nodeType||c.jquery)?p(c):p.event,d=p.Deferred(),v=p.Callbacks("once memory"),m=l.statusCode||{},g={},y={},b=0,w="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(b===2){if(!f){f={};while(t=On.exec(s))f[t[1].toLowerCase()]=t[2]}t=f[e.toLowerCase()]}return t==null?null:t},getAllResponseHeaders:function(){return b===2?s:null},setRequestHeader:function(e,t){var n=e.toLowerCase();return b||(e=y[n]=y[n]||e,g[e]=t),this},overrideMimeType:function(e){return b||(l.mimeType=e),this},statusCode:function(e){var t;if(e)if(b<2)for(t in e)m[t]=[m[t],e[t]];else E.always(e[E.status]);return this},abort:function(e){var t=e||w;return a&&a.abort(t),x(0,t),this}};d.promise(E).complete=v.add,E.success=E.done,E.error=E.fail,l.url=((e||l.url||kn)+"").replace(Ln,"").replace(Dn,Cn[1]+"//"),l.type=t.method||t.type||l.method||l.type,l.dataTypes=p.trim(l.dataType||"*").toLowerCase().match(M)||[""],l.crossDomain==null&&(n=Pn.exec(l.url.toLowerCase()),l.crossDomain=!(!n||n[1]===Cn[1]&&n[2]===Cn[2]&&(n[3]||(n[1]==="http:"?"80":"443"))===(Cn[3]||(Cn[1]==="http:"?"80":"443")))),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),qn(Hn,l,t,E);if(b===2)return E;u=l.global,u&&p.active++===0&&p.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!_n.test(l.type),i=l.url,l.hasContent||(l.data&&(i=l.url+=(Tn.test(i)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=An.test(i)?i.replace(An,"$1_="+xn++):i+(Tn.test(i)?"&":"?")+"_="+xn++)),l.ifModified&&(p.lastModified[i]&&E.setRequestHeader("If-Modified-Since",p.lastModified[i]),p.etag[i]&&E.setRequestHeader("If-None-Match",p.etag[i])),(l.data&&l.hasContent&&l.contentType!==!1||t.contentType)&&E.setRequestHeader("Content-Type",l.contentType),E.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+jn+"; q=0.01":""):l.accepts["*"]);for(r in l.headers)E.setRequestHeader(r,l.headers[r]);if(!l.beforeSend||l.beforeSend.call(c,E,l)!==!1&&b!==2){w="abort";for(r in{success:1,error:1,complete:1})E[r](l[r]);a=qn(Bn,l,t,E);if(!a)x(-1,"No Transport");else{E.readyState=1,u&&h.trigger("ajaxSend",[E,l]),l.async&&l.timeout>0&&(o=setTimeout(function(){E.abort("timeout")},l.timeout));try{b=1,a.send(g,x)}catch(S){if(!(b<2))throw S;x(-1,S)}}return E}return E.abort()},getJSON:function(e,t,n){return p.get(e,t,n,"json")},getScript:function(e,t){return p.get(e,undefined,t,"script")}}),p.each(["get","post"],function(e,t){p[t]=function(e,n,r,i){return p.isFunction(n)&&(i=i||r,r=n,n=undefined),p.ajax({url:e,type:t,dataType:i,data:n,success:r})}}),p.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){p.fn[t]=function(e){return this.on(t,e)}}),p._evalUrl=function(e){return p.ajax({url:e,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},p.fn.extend({wrapAll:function(e){if(p.isFunction(e))return this.each(function(t){p(this).wrapAll(e.call(this,t))});if(this[0]){var t=p(e,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstChild&&e.firstChild.nodeType===1)e=e.firstChild;return e}).append(this)}return this},wrapInner:function(e){return p.isFunction(e)?this.each(function(t){p(this).wrapInner(e.call(this,t))}):this.each(function(){var t=p(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=p.isFunction(e);return this.each(function(n){p(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()}}),p.expr.filters.hidden=function(e){return e.offsetWidth<=0&&e.offsetHeight<=0||!c.reliableHiddenOffsets()&&(e.style&&e.style.display||p.css(e,"display"))==="none"},p.expr.filters.visible=function(e){return!p.expr.filters.hidden(e)};var Wn=/%20/g,Xn=/\[\]$/,Vn=/\r?\n/g,$n=/^(?:submit|button|image|reset|file)$/i,Jn=/^(?:input|select|textarea|keygen)/i;p.param=function(e,t){var n,r=[],i=function(e,t){t=p.isFunction(t)?t():t==null?"":t,r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(t)};t===undefined&&(t=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(e)||e.jquery&&!p.isPlainObject(e))p.each(e,function(){i(this.name,this.value)});else for(n in e)Kn(n,e[n],t,i);return r.join("&").replace(Wn,"+")},p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=p.prop(this,"elements");return e?p.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!p(this).is(":disabled")&&Jn.test(this.nodeName)&&!$n.test(e)&&(this.checked||!K.test(e))}).map(function(e,t){var n=p(this).val();return n==null?null:p.isArray(n)?p.map(n,function(e){return{name:t.name,value:e.replace(Vn,"\r\n")}}):{name:t.name,value:n.replace(Vn,"\r\n")}}).get()}}),p.ajaxSettings.xhr=e.ActiveXObject!==undefined?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zn()||er()}:Zn;var Qn=0,Gn={},Yn=p.ajaxSettings.xhr();e.ActiveXObject&&p(e).on("unload",function(){for(var e in Gn)Gn[e](undefined,!0)}),c.cors=!!Yn&&"withCredentials"in Yn,Yn=c.ajax=!!Yn,Yn&&p.ajaxTransport(function(e){if(!e.crossDomain||c.cors){var t;return{send:function(n,r){var i,s=e.xhr(),o=++Qn;s.open(e.type,e.url,e.async,e.username,e.password);if(e.xhrFields)for(i in e.xhrFields)s[i]=e.xhrFields[i];e.mimeType&&s.overrideMimeType&&s.overrideMimeType(e.mimeType),!e.crossDomain&&!n["X-Requested-With"]&&(n["X-Requested-With"]="XMLHttpRequest");for(i in n)n[i]!==undefined&&s.setRequestHeader(i,n[i]+"");s.send(e.hasContent&&e.data||null),t=function(n,i){var u,a,f;if(t&&(i||s.readyState===4)){delete Gn[o],t=undefined,s.onreadystatechange=p.noop;if(i)s.readyState!==4&&s.abort();else{f={},u=s.status,typeof s.responseText=="string"&&(f.text=s.responseText);try{a=s.statusText}catch(l){a=""}!u&&e.isLocal&&!e.crossDomain?u=f.text?200:404:u===1223&&(u=204)}}f&&r(u,a,f,s.getAllResponseHeaders())},e.async?s.readyState===4?setTimeout(t):s.onreadystatechange=Gn[o]=t:t()},abort:function(){t&&t(undefined,!0)}}}}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(e){return p.globalEval(e),e}}}),p.ajaxPrefilter("script",function(e){e.cache===undefined&&(e.cache=!1),e.crossDomain&&(e.type="GET",e.global=!1)}),p.ajaxTransport("script",function(e){if(e.crossDomain){var t,n=N.head||p("head")[0]||N.documentElement;return{send:function(r,i){t=N.createElement("script"),t.async=!0,e.scriptCharset&&(t.charset=e.scriptCharset),t.src=e.url,t.onload=t.onreadystatechange=function(e,n){if(n||!t.readyState||/loaded|complete/.test(t.readyState))t.onload=t.onreadystatechange=null,t.parentNode&&t.parentNode.removeChild(t),t=null,n||i(200,"success")},n.insertBefore(t,n.firstChild)},abort:function(){t&&t.onload(undefined,!0)}}}});var tr=[],nr=/(=)\?(?=&|$)|\?\?/;p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=tr.pop()||p.expando+"_"+xn++;return this[e]=!0,e}}),p.ajaxPrefilter("json jsonp",function(t,n,r){var i,s,o,u=t.jsonp!==!1&&(nr.test(t.url)?"url":typeof t.data=="string"&&!(t.contentType||"").indexOf("application/x-www-form-urlencoded")&&nr.test(t.data)&&"data");if(u||t.dataTypes[0]==="jsonp")return i=t.jsonpCallback=p.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,u?t[u]=t[u].replace(nr,"$1"+i):t.jsonp!==!1&&(t.url+=(Tn.test(t.url)?"&":"?")+t.jsonp+"="+i),t.converters["script json"]=function(){return o||p.error(i+" was not called"),o[0]},t.dataTypes[0]="json",s=e[i],e[i]=function(){o=arguments},r.always(function(){e[i]=s,t[i]&&(t.jsonpCallback=n.jsonpCallback,tr.push(i)),o&&p.isFunction(s)&&s(o[0]),o=s=undefined}),"script"}),p.parseHTML=function(e,t,n){if(!e||typeof e!="string")return null;typeof t=="boolean"&&(n=t,t=!1),t=t||N;var r=E.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=p.buildFragment([e],t,i),i&&i.length&&p(i).remove(),p.merge([],r.childNodes))};var rr=p.fn.load;p.fn.load=function(e,t,n){if(typeof e!="string"&&rr)return rr.apply(this,arguments);var r,i,s,o=this,u=e.indexOf(" ");return u>=0&&(r=e.slice(u,e.length),e=e.slice(0,u)),p.isFunction(t)?(n=t,t=undefined):t&&typeof t=="object"&&(s="POST"),o.length>0&&p.ajax({url:e,type:s,dataType:"html",data:t}).done(function(e){i=arguments,o.html(r?p("
").append(p.parseHTML(e)).find(r):e)}).complete(n&&function(e,t){o.each(n,i||[e.responseText,t,e])}),this},p.expr.filters.animated=function(e){return p.grep(p.timers,function(t){return e===t.elem}).length};var ir=e.document.documentElement;p.offset={setOffset:function(e,t,n){var r,i,s,o,u,a,f,l=p.css(e,"position"),c=p(e),h={};l==="static"&&(e.style.position="relative"),u=c.offset(),s=p.css(e,"top"),a=p.css(e,"left"),f=(l==="absolute"||l==="fixed")&&p.inArray("auto",[s,a])>-1,f?(r=c.position(),o=r.top,i=r.left):(o=parseFloat(s)||0,i=parseFloat(a)||0),p.isFunction(t)&&(t=t.call(e,n,u)),t.top!=null&&(h.top=t.top-u.top+o),t.left!=null&&(h.left=t.left-u.left+i),"using"in t?t.using.call(e,h):c.css(h)}},p.fn.extend({offset:function(e){if(arguments.length)return e===undefined?this:this.each(function(t){p.offset.setOffset(this,e,t)});var t,n,r={top:0,left:0},i=this[0],s=i&&i.ownerDocument;if(!s)return;return t=s.documentElement,p.contains(t,i)?(typeof i.getBoundingClientRect!==j&&(r=i.getBoundingClientRect()),n=sr(s),{top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0),left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)}):r},position:function(){if(!this[0])return;var e,t,n={top:0,left:0},r=this[0];return p.css(r,"position")==="fixed"?t=r.getBoundingClientRect():(e=this.offsetParent(),t=this.offset(),p.nodeName(e[0],"html")||(n=e.offset()),n.top+=p.css(e[0],"borderTopWidth",!0),n.left+=p.css(e[0],"borderLeftWidth",!0)),{top:t.top-n.top-p.css(r,"marginTop",!0),left:t.left-n.left-p.css(r,"marginLeft",!0)}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||ir;while(e&&!p.nodeName(e,"html")&&p.css(e,"position")==="static")e=e.offsetParent;return e||ir})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(e,t){var n=/Y/.test(t);p.fn[e]=function(r){return J(this,function(e,r,i){var s=sr(e);if(i===undefined)return s?t in s?s[t]:s.document.documentElement[r]:e[r];s?s.scrollTo(n?p(s).scrollLeft():i,n?i:p(s).scrollTop()):e[r]=i},e,r,arguments.length,null)}}),p.each(["top","left"],function(e,t){p.cssHooks[t]=Ft(c.pixelPosition,function(e,n){if(n)return n=Bt(e,t),Pt.test(n)?p(e).position()[t]+"px":n})}),p.each({Height:"height",Width:"width"},function(e,t){p.each({padding:"inner"+e,content:t,"":"outer"+e},function(n,r){p.fn[r]=function(r,i){var s=arguments.length&&(n||typeof r!="boolean"),o=n||(r===!0||i===!0?"margin":"border");return J(this,function(t,n,r){var i;return p.isWindow(t)?t.document.documentElement["client"+e]:t.nodeType===9?(i=t.documentElement,Math.max(t.body["scroll"+e],i["scroll"+e],t.body["offset"+e],i["offset"+e],i["client"+e])):r===undefined?p.css(t,n,o):p.style(t,n,r,o)},t,s?r:undefined,s,null)}})}),p.fn.size=function(){return this.length},p.fn.andSelf=p.fn.addBack,typeof define=="function"&&define.amd&&define("jquery",[],function(){return p});var or=e.jQuery,ur=e.$;return p.noConflict=function(t){return e.$===p&&(e.$=ur),t&&e.jQuery===p&&(e.jQuery=or),p},typeof t===j&&(e.jQuery=e.$=p),p}),define("jquery-private",["jquery"],function(e){return e.noConflict(!0)}),function(){function x(e){function t(t,n,r,i,s,o){for(;s>=0&&s0?0:u-1;return arguments.length<3&&(i=n[o?o[a]:a],a+=e),t(n,r,i,o,a,u)}}function C(e){return function(t,n,r){n=m(n,r);var i=E(t),s=e>0?0:i-1;for(;s>=0&&s0?u=s>=0?s:Math.max(s+a,u):a=s>=0?Math.min(s+1,a):s+a+1;else if(n&&s&&a)return s=n(r,i),r[s]===i?s:-1;if(i!==i)return s=t(o.call(r,u,a),d.isNaN),s>=0?s+u:-1;for(s=e>0?u:a-1;s>=0&&s=0&&t<=w};d.each=d.forEach=function(e,t,n){t=v(t,n);var r,i;if(S(e))for(r=0,i=e.length;r=0},d.invoke=function(e,t){var n=o.call(arguments,2),r=d.isFunction(t);return d.map(e,function(e){var i=r?t:e[t];return i==null?i:i.apply(e,n)})},d.pluck=function(e,t){return d.map(e,d.property(t))},d.where=function(e,t){return d.filter(e,d.matcher(t))},d.findWhere=function(e,t){return d.find(e,d.matcher(t))},d.max=function(e,t,n){var r=-Infinity,i=-Infinity,s,o;if(t==null&&e!=null){e=S(e)?e:d.values(e);for(var u=0,a=e.length;ur&&(r=s)}else t=m(t,n),d.each(e,function(e,n,s){o=t(e,n,s);if(o>i||o===-Infinity&&r===-Infinity)r=e,i=o});return r},d.min=function(e,t,n){var r=Infinity,i=Infinity,s,o;if(t==null&&e!=null){e=S(e)?e:d.values(e);for(var u=0,a=e.length;ur||n===void 0)return 1;if(nt?(o&&(clearTimeout(o),o=null),u=f,s=e.apply(r,i),o||(r=i=null)):!o&&n.trailing!==!1&&(o=setTimeout(a,l)),s}},d.debounce=function(e,t,n){var r,i,s,o,u,a=function(){var f=d.now()-o;f=0?r=setTimeout(a,t-f):(r=null,n||(u=e.apply(s,i),r||(s=i=null)))};return function(){s=this,i=arguments,o=d.now();var f=n&&!r;return r||(r=setTimeout(a,t)),f&&(u=e.apply(s,i),s=i=null),u}},d.wrap=function(e,t){return d.partial(t,e)},d.negate=function(e){return function(){return!e.apply(this,arguments)}},d.compose=function(){var e=arguments,t=e.length-1;return function(){var n=t,r=e[t].apply(this,arguments);while(n--)r=e[n].call(this,r);return r}},d.after=function(e,t){return function(){if(--e<1)return t.apply(this,arguments)}},d.before=function(e,t){var n;return function(){return--e>0&&(n=t.apply(this,arguments)),e<=1&&(t=null),n}},d.once=d.partial(d.before,2);var A=!{toString:null}.propertyIsEnumerable("toString"),O=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleString"];d.keys=function(e){if(!d.isObject(e))return[];if(l)return l(e);var t=[];for(var n in e)d.has(e,n)&&t.push(n);return A&&M(e,t),t},d.allKeys=function(e){if(!d.isObject(e))return[];var t=[];for(var n in e)t.push(n);return A&&M(e,t),t},d.values=function(e){var t=d.keys(e),n=t.length,r=Array(n);for(var i=0;i":">",'"':""","'":"'","`":"`"},P=d.invert(D),H=function(e){var t=function(t){return e[t]},n="(?:"+d.keys(e).join("|")+")",r=RegExp(n),i=RegExp(n,"g");return function(e){return e=e==null?"":""+e,r.test(e)?e.replace(i,t):e}};d.escape=H(D),d.unescape=H(P),d.result=function(e,t,n){var r=e==null?void 0:e[t];return r===void 0&&(r=n),d.isFunction(r)?r.call(e):r};var B=0;d.uniqueId=function(e){var t=++B+"";return e?e+t:t},d.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var j=/(.)^/,F={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},I=/\\|'|\r|\n|\u2028|\u2029/g,q=function(e){return"\\"+F[e]};d.template=function(e,t,n){!t&&n&&(t=n),t=d.defaults({},t,d.templateSettings);var r=RegExp([(t.escape||j).source,(t.interpolate||j).source,(t.evaluate||j).source].join("|")+"|$","g"),i=0,s="__p+='";e.replace(r,function(t,n,r,o,u){return s+=e.slice(i,u).replace(I,q),i=u+t.length,n?s+="'+\n((__t=("+n+"))==null?'':_.escape(__t))+\n'":r?s+="'+\n((__t=("+r+"))==null?'':__t)+\n'":o&&(s+="';\n"+o+"\n__p+='"),t}),s+="';\n",t.variable||(s="with(obj||{}){\n"+s+"}\n"),s="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+s+"return __p;\n";try{var o=new Function(t.variable||"obj","_",s)}catch(u){throw u.source=s,u}var a=function(e){return o.call(this,e,d)},f=t.variable||"obj";return a.source="function("+f+"){\n"+s+"}",a},d.chain=function(e){var t=d(e);return t._chain=!0,t};var R=function(e,t){return e._chain?d(t).chain():t};d.mixin=function(e){d.each(d.functions(e),function(t){var n=d[t]=e[t];d.prototype[t]=function(){var e=[this._wrapped];return s.apply(e,arguments),R(this,n.apply(d,e))}})},d.mixin(d),d.each(["pop","push","reverse","shift","sort","splice","unshift"],function(e){var t=n[e];d.prototype[e]=function(){var n=this._wrapped;return t.apply(n,arguments),(e==="shift"||e==="splice")&&n.length===0&&delete n[0],R(this,n)}}),d.each(["concat","join","slice"],function(e){var t=n[e];d.prototype[e]=function(){return R(this,t.apply(this._wrapped,arguments))}}),d.prototype.value=function(){return this._wrapped},d.prototype.valueOf=d.prototype.toJSON=d.prototype.value,d.prototype.toString=function(){return""+this._wrapped},typeof define=="function"&&define.amd&&define("underscore",[],function(){return d})}.call(this),String.prototype.endsWith||(String.prototype.endsWith=function(e,t){var n=this.toString();if(t===undefined||t>n.length)t=n.length;t-=e.length;var r=n.indexOf(e,t);return r!==-1&&r===t}),String.prototype.splitOnce=function(e){var t=this.split(e);return[t.shift(),t.join(e)]},String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")}),define("polyfill",function(){}),define("text",["module"],function(e){"use strict";var t,n,r,i,s,o=["Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0"],u=/^\s*<\?xml(\s)+version=[\'\"](\d)*.(\d)*[\'\"](\s)*\?>/im,a=/]*>\s*([\s\S]+)\s*<\/body>/im,f=typeof location!="undefined"&&location.href,l=f&&location.protocol&&location.protocol.replace(/\:/,""),c=f&&location.hostname,h=f&&(location.port||undefined),p={},d=e.config&&e.config()||{};t={version:"2.0.14",strip:function(e){if(e){e=e.replace(u,"");var t=e.match(a);t&&(e=t[1])}else e="";return e},jsEscape:function(e){return e.replace(/(['\\])/g,"\\$1").replace(/[\f]/g,"\\f").replace(/[\b]/g,"\\b").replace(/[\n]/g,"\\n").replace(/[\t]/g,"\\t").replace(/[\r]/g,"\\r").replace(/[\u2028]/g,"\\u2028").replace(/[\u2029]/g,"\\u2029")},createXhr:d.createXhr||function(){var e,t,n;if(typeof XMLHttpRequest!="undefined")return new XMLHttpRequest;if(typeof ActiveXObject!="undefined")for(t=0;t<3;t+=1){n=o[t];try{e=new ActiveXObject(n)}catch(r){}if(e){o=[n];break}}return e},parseName:function(e){var t,n,r,i=!1,s=e.lastIndexOf("."),o=e.indexOf("./")===0||e.indexOf("../")===0;return s!==-1&&(!o||s>1)?(t=e.substring(0,s),n=e.substring(s+1)):t=e,r=n||t,s=r.indexOf("!"),s!==-1&&(i=r.substring(s+1)==="strip",r=r.substring(0,s),n?n=r:t=r),{moduleName:t,ext:n,strip:i}},xdRegExp:/^((\w+)\:)?\/\/([^\/\\]+)/,useXhr:function(e,n,r,i){var s,o,u,a=t.xdRegExp.exec(e);return a?(s=a[2],o=a[3],o=o.split(":"),u=o[1],o=o[0],(!s||s===n)&&(!o||o.toLowerCase()===r.toLowerCase())&&(!u&&!o||u===i)):!0},finishLoad:function(e,n,r,i){r=n?t.strip(r):r,d.isBuild&&(p[e]=r),i(r)},load:function(e,n,r,i){if(i&&i.isBuild&&!i.inlineText){r();return}d.isBuild=i&&i.isBuild;var s=t.parseName(e),o=s.moduleName+(s.ext?"."+s.ext:""),u=n.toUrl(o),a=d.useXhr||t.useXhr;if(u.indexOf("empty:")===0){r();return}!f||a(u,l,c,h)?t.get(u,function(n){t.finishLoad(e,s.strip,n,r)},function(e){r.error&&r.error(e)}):n([o],function(e){t.finishLoad(s.moduleName+"."+s.ext,s.strip,e,r)})},write:function(e,n,r,i){if(p.hasOwnProperty(n)){var s=t.jsEscape(p[n]);r.asModule(e+"!"+n,"define(function () { return '"+s+"';});\n")}},writeFile:function(e,n,r,i,s){var o=t.parseName(n),u=o.ext?"."+o.ext:"",a=o.moduleName+u,f=r.toUrl(o.moduleName+u)+".js";t.load(a,r,function(n){var r=function(e){return i(f,e)};r.asModule=function(e,t){return i.asModule(e,f,t)},t.write(e,a,r,s)},s)}};if(d.env==="node"||!d.env&&typeof process!="undefined"&&process.versions&&!!process.versions.node&&!process.versions["node-webkit"]&&!process.versions["atom-shell"])n=require.nodeRequire("fs"),t.get=function(e,t,r){try{var i=n.readFileSync(e,"utf8");i[0]===""&&(i=i.substring(1)),t(i)}catch(s){r&&r(s)}};else if(d.env==="xhr"||!d.env&&t.createXhr())t.get=function(e,n,r,i){var s=t.createXhr(),o;s.open("GET",e,!0);if(i)for(o in i)i.hasOwnProperty(o)&&s.setRequestHeader(o.toLowerCase(),i[o]);d.onXhr&&d.onXhr(s,e),s.onreadystatechange=function(t){var i,o;s.readyState===4&&(i=s.status||0,i>399&&i<600?(o=new Error(e+" HTTP status: "+i),o.xhr=s,r&&r(o)):n(s.responseText),d.onXhrComplete&&d.onXhrComplete(s,e))},s.send(null)};else if(d.env==="rhino"||!d.env&&typeof Packages!="undefined"&&typeof java!="undefined")t.get=function(e,t){var n,r,i="utf-8",s=new java.io.File(e),o=java.lang.System.getProperty("line.separator"),u=new java.io.BufferedReader(new java.io.InputStreamReader(new java.io.FileInputStream(s),i)),a="";try{n=new java.lang.StringBuffer,r=u.readLine(),r&&r.length()&&r.charAt(0)===65279&&(r=r.substring(1)),r!==null&&n.append(r);while((r=u.readLine())!==null)n.append(o),n.append(r);a=String(n.toString())}finally{u.close()}t(a)};else if(d.env==="xpconnect"||!d.env&&typeof Components!="undefined"&&Components.classes&&Components.interfaces)r=Components.classes,i=Components.interfaces,Components.utils["import"]("resource://gre/modules/FileUtils.jsm"),s="@mozilla.org/windows-registry-key;1"in r,t.get=function(e,t){var n,o,u,a={};s&&(e=e.replace(/\//g,"\\")),u=new FileUtils.File(e);try{n=r["@mozilla.org/network/file-input-stream;1"].createInstance(i.nsIFileInputStream),n.init(u,1,0,!1),o=r["@mozilla.org/intl/converter-input-stream;1"].createInstance(i.nsIConverterInputStream),o.init(n,"utf-8",n.available(),i.nsIConverterInputStream.DEFAULT_REPLACEMENT_CHARACTER),o.readString(n.available(),a),o.close(),n.close(),t(a.value)}catch(f){throw new Error((u&&u.path||"")+": "+f)}};return t}),define("tpl",["text","underscore"],function(e,t){"use strict";var n={},r="define('{pluginName}!{moduleName}', function () { return {source}; });\n";return{version:"0.0.2",load:function(r,i,s,o){o.tpl&&o.tpl.templateSettings&&(t.templateSettings=o.tpl.templateSettings);if(n[r])s(n[r]);else{var u=o.tpl&&o.tpl.extension||".html",a=o.tpl&&o.tpl.path||"";e.load(a+r+u,i,function(e){n[r]=t.template(e),s(n[r])},o)}},write:function(e,t,i){var s=n[t],o=s&&s.source;o&&i.asModule(e+"!"+t,r.replace("{pluginName}",e).replace("{moduleName}",t).replace("{source}",o))}}}),define("tpl!action",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
\n '+((__t=time)==null?"":__t)+" **"+((__t=username)==null?"":__t)+' \n '+((__t=message)==null?"":__t)+"\n
\n";return __p}}),define("tpl!add_contact_dropdown",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='\n';return __p}}),define("tpl!add_contact_form",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
  • \n \n \n \n \n
  • \n";return __p}}),define("tpl!change_status_message",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
    \n
    \n \n \n \n \n
    \n
    \n';return __p}}),define("tpl!chat_status",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='\n';return __p}}),define("tpl!chatarea",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
    \n
    \n
    \n ',show_toolbar&&(__p+='\n
      \n '),__p+='\n \n";return __p}}),define("tpl!form_username",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+="",label&&(__p+="\n\n"),__p+='\n
      \n '+((__t=domain)==null?"":__t)+"\n
      \n";return __p}}),define("tpl!group_header",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+=''+((__t=label_group)==null?"":__t)+"\n";return __p}}),define("tpl!info",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='
      '+((__t=message)==null?"":__t)+"
      \n";return __p}}),define("tpl!login_panel",[],function(){return function(obj){var __t,__p="",__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,"")};with(obj||{})__p+='\n ',auto_login&&(__p+='\n