commit 20f4ba629ce6aff7a8bdb7047d29b0fbb437e645 Author: n Date: Sat Feb 27 16:45:53 2021 +0100 initial commit diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..456c488 --- /dev/null +++ b/LICENSE @@ -0,0 +1,13 @@ + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + Version 2, December 2004 + + Copyright (C) 2004 Sam Hocevar + + Everyone is permitted to copy and distribute verbatim or modified + copies of this license document, and changing it is allowed as long + as the name is changed. + + DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. You just DO WHAT THE FUCK YOU WANT TO. diff --git a/README.md b/README.md new file mode 100644 index 0000000..36ba26d --- /dev/null +++ b/README.md @@ -0,0 +1,8 @@ +# ShaarGem + +[Shaarli](https://github.com/shaarli/Shaarli/) plugin for Gemini capsules shaaring. + +## Manual + +1. Activate plugin. +2. Share a gemini:// IRI. diff --git a/languages/fr/LC_MESSAGES/shaargem.mo b/languages/fr/LC_MESSAGES/shaargem.mo new file mode 100644 index 0000000..5f00802 Binary files /dev/null and b/languages/fr/LC_MESSAGES/shaargem.mo differ diff --git a/languages/fr/LC_MESSAGES/shaargem.po b/languages/fr/LC_MESSAGES/shaargem.po new file mode 100644 index 0000000..c292074 --- /dev/null +++ b/languages/fr/LC_MESSAGES/shaargem.po @@ -0,0 +1,21 @@ +msgid "" +msgstr "" +"Project-Id-Version: ShaarGem plugin\n" +"POT-Creation-Date: 2017-08-19 10:45+0200\n" +"PO-Revision-Date: 2021-02-27 16:27+0100\n" +"Language-Team: shaargem\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Generator: Poedit 2.4.1\n" +"X-Poedit-Basepath: ../../..\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" +"X-Poedit-KeywordsList: ;shaargem_plugin_t:1,2;shaargem_plugin_t\n" +"X-Poedit-SourceCharset: UTF-8\n" +"Last-Translator: \n" +"Language: fr_FR\n" +"X-Poedit-SearchPath-0: .\n" + +#: shaargem.php:108 +msgid "Provides Gemini protocol support." +msgstr "Provides Gemini protocol support." diff --git a/shaargem.meta b/shaargem.meta new file mode 100644 index 0000000..4a36feb --- /dev/null +++ b/shaargem.meta @@ -0,0 +1 @@ +description="Provides Gemini protocol support." diff --git a/shaargem.php b/shaargem.php new file mode 100644 index 0000000..ce8e825 --- /dev/null +++ b/shaargem.php @@ -0,0 +1,151 @@ +exists('translation.extensions.shaargem')) { + // Custom translation with the domain 'shaargem' + $conf->set('translation.extensions.shaargem', 'plugins/shaargem/languages/'); + $conf->write(true); + } + + $errors[] = 'This a shaargem init error.'; + return $errors; +} + +/** + * Hook render_editlink. + * + * Template placeholders: + * - field_plugin: add link fields after tags. + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_shaargem_render_editlink($data) +{ + $ret=preg_match(",gemini://(.*)?/?(.*),", $data['link']['url'] ,$domain); + + error_log("ret:".$ret); + if ($ret) + { + $stream_context = stream_context_create([ 'ssl' => [ + 'verify_peer' => false, + 'verify_peer_name' => false, + 'allow_self_signed' => true, + 'verify_depth' => 0 ]]); + + $fp = stream_socket_client("tls://".$domain[1].":1965", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $stream_context); + + if (!$fp) { + error_log("$errstr ($errno)"); + } else { + fwrite($fp, $data['link']['url']."\r\n"); + $header = fgets($fp,1024); + error_log("header:".$header); + if (strstr($header, "20 text/gemini")) + { + $data['link']['title'] = substr(fgets($fp,1024),2,-1); + } + else + { + error_log("[shaargem] invalid response:".$header); + } + fclose($fp); + } + } + return $data; +} + +/** + * Hook savelink. + * + * Triggered when a link is save (new or edit). + * All new links now contain a 'stuff' value. + * + * @param array $data contains the new link data. + * + * @return array altered $data. + */ +function hook_shaargem_save_link($data) +{ + // ugly hack to get scheme + if(isset($_POST['lf_url'])) { + if(strstr($_POST['lf_url'],"gemini://")) + { + $new_url = str_replace("http://","gemini://",$data['url']); + $data['url'] = $new_url; + } + } + return $data; +} + +/** + * Hook render_linklist. + * + * Template placeholders: + * - action_plugin: next to 'private only' button. + * - plugin_start_zone: page start + * - plugin_end_zone: page end + * - link_plugin: icons below each links. + * + * Data: + * - _LOGGEDIN_: true/false + * + * @param array $data data passed to plugin + * + * @return array altered $data. + */ +function hook_shaargem_render_linklist($data) +{ + foreach ($data['links'] as &$value) { + $value['description'] = preg_replace(',gemini://([\d\w\.\+\-@\:%._\~#=/]+),','gemini://\1',$value['description']); + } + return $data; +} + +/** + * This function is never called, but contains translation calls for GNU gettext extraction. + */ +function shaargem_dummy_translation() +{ + // meta + t('Provides Gemini protocol support.'); +} +