update to PSR12

master
Jean-Christian Paul Denis 2021-11-06 16:43:02 +01:00
parent 40a3269b20
commit cfcccf32d7
Signed by: JcDenis
GPG Key ID: 1B5B8C5B90B6C951
29 changed files with 798 additions and 790 deletions

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return null; return null;
} }
@ -65,7 +64,7 @@ class adminKutrl
public static function antispamDashboardFavorites(dcCore $core, $favs) public static function antispamDashboardFavorites(dcCore $core, $favs)
{ {
$favs->register( $favs->register(
'kUtRL', 'kUtRL',
[ [
'title' => __('Links shortener'), 'title' => __('Links shortener'),
'url' => $core->adminurl->get('admin.plugin.kUtRL'), 'url' => $core->adminurl->get('admin.plugin.kUtRL'),
@ -118,14 +117,13 @@ class adminKutrl
if ($post) { if ($post) {
$post_url = $post->getURL(); $post_url = $post->getURL();
$rs = $kut->isKnowUrl($post_url); $rs = $kut->isKnowUrl($post_url);
} else { } else {
$post_url = ''; $post_url = '';
$rs = false; $rs = false;
} }
$ret = $ret = '<div id="kUtRL"><h5>' . __('Short link') . '</h5>' .
'<div id="kUtRL"><h5>' . __('Short link') . '</h5>' .
form::hidden(['kutrl_old_post_url'], $post_url); form::hidden(['kutrl_old_post_url'], $post_url);
if (!$rs) { if (!$rs) {
@ -134,14 +132,12 @@ class adminKutrl
} else { } else {
$chk = !empty($_POST['kutrl_create']); $chk = !empty($_POST['kutrl_create']);
} }
$ret .= $ret .= '<p><label class="classic">' .
'<p><label class="classic">' .
form::checkbox('kutrl_create', 1, $chk, '', 3) . ' ' . form::checkbox('kutrl_create', 1, $chk, '', 3) . ' ' .
__('Create short link') . '</label></p>'; __('Create short link') . '</label></p>';
if ($kut->allow_custom_hash) { if ($kut->allow_custom_hash) {
$ret .= $ret .= '<p class="classic">' .
'<p class="classic">' .
'<label for="custom">' . __('Custom short link:') . ' ' . '<label for="custom">' . __('Custom short link:') . ' ' .
form::field('kutrl_create_custom', 32, 32, '', 3) . form::field('kutrl_create_custom', 32, 32, '', 3) .
'</label></p>'; '</label></p>';
@ -153,12 +149,11 @@ class adminKutrl
} elseif ($count == 1) { } elseif ($count == 1) {
$title = __('followed one time'); $title = __('followed one time');
} else { } else {
$title = sprintf(__('followed %s times'),$count); $title = sprintf(__('followed %s times'), $count);
} }
$href = $kut->url_base . $rs->hash; $href = $kut->url_base . $rs->hash;
$ret .= $ret .= '<p><label class="classic">' .
'<p><label class="classic">' .
form::checkbox('kutrl_delete', 1, !empty($_POST['kutrl_delete']), '', 3) . ' ' . form::checkbox('kutrl_delete', 1, !empty($_POST['kutrl_delete']), '', 3) . ' ' .
__('Delete short link') . '</label></p>' . __('Delete short link') . '</label></p>' .
'<p><a href="' . $href . '" ' . 'title="' . $title . '">' . $href . '</a></p>'; '<p><a href="' . $href . '" ' . 'title="' . $title . '">' . $href . '</a></p>';
@ -194,7 +189,7 @@ class adminKutrl
if ($rs->isEmpty()) { if ($rs->isEmpty()) {
return null; return null;
} }
$title = html::escapeHTML($rs->post_title); $title = html::escapeHTML($rs->post_title);
$new_post_url = $rs->getURL(); $new_post_url = $rs->getURL();
# Delete # Delete
@ -208,12 +203,12 @@ class adminKutrl
$kut->remove($old_post_url); $kut->remove($old_post_url);
$rs = $kut->hash($new_post_url, $custom); // better to update (not yet implemented) $rs = $kut->hash($new_post_url, $custom); // better to update (not yet implemented)
$url = $kut->url_base . $rs->hash; $url = $kut->url_base . $rs->hash;
# ex: Send new url to messengers # ex: Send new url to messengers
if (!empty($rs)) { if (!empty($rs)) {
$core->callBehavior('adminAfterKutrlCreate' ,$core, $rs, $title); $core->callBehavior('adminAfterKutrlCreate', $core, $rs, $title);
} }
} }
} }
@ -239,7 +234,7 @@ class adminKutrl
$custom = !empty($_POST['kutrl_create_custom']) && $kut->allow_custom_hash ? $custom = !empty($_POST['kutrl_create_custom']) && $kut->allow_custom_hash ?
$_POST['kutrl_create_custom'] : null; $_POST['kutrl_create_custom'] : null;
$rs = $kut->hash($rs->getURL(), $custom); $rs = $kut->hash($rs->getURL(), $custom);
$url = $kut->url_base . $rs->hash; $url = $kut->url_base . $rs->hash;
# ex: Send new url to messengers # ex: Send new url to messengers
@ -273,8 +268,8 @@ class adminKutrl
global $core; global $core;
$s = $core->blog->settings->kUtRL; $s = $core->blog->settings->kUtRL;
if (!$s->kutrl_active if (!$s->kutrl_active
|| !$core->auth->check('admin',$core->blog->id)) { || !$core->auth->check('admin', $core->blog->id)) {
return null; return null;
} }
@ -284,7 +279,7 @@ class adminKutrl
public static function adminPostsActions(dcCore $core, $posts, $action, $redir) public static function adminPostsActions(dcCore $core, $posts, $action, $redir)
{ {
if ($action != 'kutrl_create' if ($action != 'kutrl_create'
&& $action != 'kutrl_delete') { && $action != 'kutrl_delete') {
return null; return null;
} }
@ -316,7 +311,8 @@ class backupKutrl
{ {
public static function exportSingle($core, $exp, $blog_id) public static function exportSingle($core, $exp, $blog_id)
{ {
$exp->export('kutrl', $exp->export(
'kutrl',
'SELECT kut_id, blog_id, kut_service, kut_type, ' . 'SELECT kut_id, blog_id, kut_service, kut_type, ' .
'kut_hash, kut_url, kut_dt, kut_password, kut_counter ' . 'kut_hash, kut_url, kut_dt, kut_password, kut_counter ' .
'FROM ' . $core->prefix . 'kutrl ' . 'FROM ' . $core->prefix . 'kutrl ' .
@ -332,10 +328,10 @@ class backupKutrl
public static function importInit($bk, $core) public static function importInit($bk, $core)
{ {
$bk->cur_kutrl = $core->con->openCursor($core->prefix . 'kutrl'); $bk->cur_kutrl = $core->con->openCursor($core->prefix . 'kutrl');
$bk->kutrl = new kutrlLog($core); $bk->kutrl = new kutrlLog($core);
} }
public static function importSingle($line,$bk,$core) public static function importSingle($line, $bk, $core)
{ {
if ($line->__name == 'kutrl') { if ($line->__name == 'kutrl') {
# Do nothing if str/type exists ! # Do nothing if str/type exists !
@ -349,16 +345,16 @@ class backupKutrl
{ {
if ($line->__name == 'kutrl') { if ($line->__name == 'kutrl') {
$bk->cur_kutrl->clean(); $bk->cur_kutrl->clean();
$bk->cur_kutrl->kut_id = (integer) $line->kut_id; $bk->cur_kutrl->kut_id = (int) $line->kut_id;
$bk->cur_kutrl->blog_id = (string) $line->blog_id; $bk->cur_kutrl->blog_id = (string) $line->blog_id;
$bk->cur_kutrl->kut_service = (string) $line->kut_service; $bk->cur_kutrl->kut_service = (string) $line->kut_service;
$bk->cur_kutrl->kut_type = (string) $line->kut_type; $bk->cur_kutrl->kut_type = (string) $line->kut_type;
$bk->cur_kutrl->kut_hash = (string) $line->kut_hash; $bk->cur_kutrl->kut_hash = (string) $line->kut_hash;
$bk->cur_kutrl->kut_url = (string) $line->kut_url; $bk->cur_kutrl->kut_url = (string) $line->kut_url;
$bk->cur_kutrl->kut_dt = (string) $line->miniurl_dt; $bk->cur_kutrl->kut_dt = (string) $line->miniurl_dt;
$bk->cur_kutrl->kut_counter = (integer) $line->kut_counter; $bk->cur_kutrl->kut_counter = (int) $line->kut_counter;
$bk->cur_kutrl->kut_password = (string) $line->kut_password; $bk->cur_kutrl->kut_password = (string) $line->kut_password;
$bk->cur_kutrl->insert(); $bk->cur_kutrl->insert();
} }
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return; return;
} }
@ -26,34 +25,34 @@ $img_green = '<img src="images/check-on.png" alt="ok" />';
$img_red = '<img src="images/check-off.png" alt="fail" />'; $img_red = '<img src="images/check-off.png" alt="fail" />';
$services_combo = []; $services_combo = [];
foreach(kutrl::getServices($core) as $service_id => $service) { foreach (kutrl::getServices($core) as $service_id => $service) {
$o = new $service($core); $o = new $service($core);
$services_combo[__($o->name)] = $o->id; $services_combo[__($o->name)] = $o->id;
} }
$ext_services_combo = array_merge([__('Disabled') => ''], $services_combo); $ext_services_combo = array_merge([__('Disabled') => ''], $services_combo);
$lst_services_combo = array_merge(['-' => ''], $services_combo); $lst_services_combo = array_merge(['-' => ''], $services_combo);
$s_active = (boolean) $s->kutrl_active; $s_active = (bool) $s->kutrl_active;
$s_plugin_service = (string) $s->kutrl_plugin_service; $s_plugin_service = (string) $s->kutrl_plugin_service;
$s_admin_service = (string) $s->kutrl_admin_service; $s_admin_service = (string) $s->kutrl_admin_service;
$s_tpl_service = (string) $s->kutrl_tpl_service; $s_tpl_service = (string) $s->kutrl_tpl_service;
$s_wiki_service = (string) $s->kutrl_wiki_service; $s_wiki_service = (string) $s->kutrl_wiki_service;
$s_allow_external_url = (boolean) $s->kutrl_allow_external_url; $s_allow_external_url = (bool) $s->kutrl_allow_external_url;
$s_tpl_passive = (boolean) $s->kutrl_tpl_passive; $s_tpl_passive = (bool) $s->kutrl_tpl_passive;
$s_tpl_active = (boolean) $s->kutrl_tpl_active; $s_tpl_active = (bool) $s->kutrl_tpl_active;
$s_admin_entry_default = (string) $s->kutrl_admin_entry_default; $s_admin_entry_default = (string) $s->kutrl_admin_entry_default;
if (!empty($_POST['save'])) { if (!empty($_POST['save'])) {
try { try {
# settings # settings
$s_active = !empty($_POST['s_active']); $s_active = !empty($_POST['s_active']);
$s_admin_service = (string) $_POST['s_admin_service']; $s_admin_service = (string) $_POST['s_admin_service'];
$s_plugin_service = (string) $_POST['s_plugin_service']; $s_plugin_service = (string) $_POST['s_plugin_service'];
$s_tpl_service = (string) $_POST['s_tpl_service']; $s_tpl_service = (string) $_POST['s_tpl_service'];
$s_wiki_service = (string) $_POST['s_wiki_service']; $s_wiki_service = (string) $_POST['s_wiki_service'];
$s_allow_external_url = !empty($_POST['s_allow_external_url']); $s_allow_external_url = !empty($_POST['s_allow_external_url']);
$s_tpl_passive = !empty($_POST['s_tpl_passive']); $s_tpl_passive = !empty($_POST['s_tpl_passive']);
$s_tpl_active = !empty($_POST['s_tpl_active']); $s_tpl_active = !empty($_POST['s_tpl_active']);
$s_admin_entry_default = !empty($_POST['s_admin_entry_default']); $s_admin_entry_default = !empty($_POST['s_admin_entry_default']);
$s->put('kutrl_active', $s_active); $s->put('kutrl_active', $s_active);
@ -67,7 +66,7 @@ if (!empty($_POST['save'])) {
$s->put('kutrl_admin_entry_default', $s_admin_entry_default); $s->put('kutrl_admin_entry_default', $s_admin_entry_default);
# services # services
foreach(kutrl::getServices($core) as $service_id => $service) { foreach (kutrl::getServices($core) as $service_id => $service) {
$o = new $service($core); $o = new $service($core);
$o->saveSettings(); $o->saveSettings();
} }
@ -79,7 +78,7 @@ if (!empty($_POST['save'])) {
); );
$core->adminurl->redirect( $core->adminurl->redirect(
'admin.plugins', 'admin.plugins',
['module' => 'kUtRL', 'conf' => 1, 'chk' => 1, 'redir' => $list->getRedir()] ['module' => 'kUtRL', 'conf' => 1, 'chk' => 1, 'redir' => $list->getRedir()]
); );
} catch (Exception $e) { } catch (Exception $e) {
@ -88,45 +87,45 @@ if (!empty($_POST['save'])) {
} }
echo ' echo '
<div class="fieldset"><h4>' . __('Settings') . '</h4> <div class="fieldset"><h4>' . __('Settings') . '</h4>
<div id="setting-plugin"> <div id="setting-plugin">
<h5>' . __('Activation') . '</h5> <h5>' . __('Activation') . '</h5>
<p><label class="classic">' . <p><label class="classic">' .
form::checkbox(['s_active'], '1', $s_active) . form::checkbox(['s_active'], '1', $s_active) .
__('Enable plugin') . '</label></p> __('Enable plugin') . '</label></p>
</div> </div>
<hr/><div id="setting-option"> <hr/><div id="setting-option">
<h5>' . __('Behaviors') . '</h5> <h5>' . __('Behaviors') . '</h5>
<p><label class="classic">' . <p><label class="classic">' .
form::checkbox(['s_allow_external_url'], '1', $s_allow_external_url) . form::checkbox(['s_allow_external_url'], '1', $s_allow_external_url) .
__('Allow short link for external URL') . '</label></p> __('Allow short link for external URL') . '</label></p>
<p class="form-note">' . __('Not only link started with this blog URL could be shortened.') . '</p> <p class="form-note">' . __('Not only link started with this blog URL could be shortened.') . '</p>
<p><label class="classic">' . <p><label class="classic">' .
form::checkbox(['s_tpl_passive'], '1', $s_tpl_passive) . form::checkbox(['s_tpl_passive'], '1', $s_tpl_passive) .
__('Passive mode') . '</label></p> __('Passive mode') . '</label></p>
<p class="form-note">' . __('If this extension is disabled and the passive mode is enabled, "kutrl" tags (like EntryKurl) will display long urls instead of nothing on templates.') . '</p> <p class="form-note">' . __('If this extension is disabled and the passive mode is enabled, "kutrl" tags (like EntryKurl) will display long urls instead of nothing on templates.') . '</p>
<p><label class="classic">' . <p><label class="classic">' .
form::checkbox(['s_tpl_active'], '1', $s_tpl_active) . form::checkbox(['s_tpl_active'], '1', $s_tpl_active) .
__('Active mode') . '</label></p> __('Active mode') . '</label></p>
<p class="form-note">' . __('If the active mode is enabled, all know default template tags (like EntryURL) will display short urls instead of long ones on templates.') . '<br />' . <p class="form-note">' . __('If the active mode is enabled, all know default template tags (like EntryURL) will display short urls instead of long ones on templates.') . '<br />' .
__('You can disable URL shortening for a specific template tag by adding attribute disable_kutrl="1" to it . ') . '</p> __('You can disable URL shortening for a specific template tag by adding attribute disable_kutrl="1" to it . ') . '</p>
<p class="warning">' . __('We strongly discourage using active mode as it crashes public post form and complex url if theme is not customize for kUtRL.') . '</p> <p class="warning">' . __('We strongly discourage using active mode as it crashes public post form and complex url if theme is not customize for kUtRL.') . '</p>
<p><label class="classic">' . <p><label class="classic">' .
form::checkbox(['s_admin_entry_default'], '1', $s_admin_entry_default) . form::checkbox(['s_admin_entry_default'], '1', $s_admin_entry_default) .
__('Create short link for new entries') . '</label></p> __('Create short link for new entries') . '</label></p>
<p class="form-note">' . __('This can be changed on page of creation/edition of an entry.') . '</p> <p class="form-note">' . __('This can be changed on page of creation/edition of an entry.') . '</p>
</div> </div>
<hr/><div id="setting-service"> <hr/><div id="setting-service">
<h5>' . __('Default services') . '</h5> <h5>' . __('Default services') . '</h5>
<p><label>'; <p><label>';
if (!empty($_REQUEST['chk'])) { if (!empty($_REQUEST['chk'])) {
if (null !== ($o = kutrl::quickPlace($s_admin_service))) { if (null !== ($o = kutrl::quickPlace($s_admin_service))) {
echo $o->testService() ? $img_green : $img_red; echo $o->testService() ? $img_green : $img_red;
} }
} }
echo '&nbsp;' . __('Administration:') . '<br />' . echo '&nbsp;' . __('Administration:') . '<br />' .
form::combo(['s_admin_service'], $services_combo, $s_admin_service) . ' form::combo(['s_admin_service'], $services_combo, $s_admin_service) . '
</label></p> </label></p>
<p class="form-note">' . __('Service to use in this admin page and on edit page of an entry.') . '</p> <p class="form-note">' . __('Service to use in this admin page and on edit page of an entry.') . '</p>
@ -136,7 +135,7 @@ if (!empty($_REQUEST['chk'])) {
echo $o->testService() ? $img_green : $img_red; echo $o->testService() ? $img_green : $img_red;
} }
} }
echo '&nbsp;' . __('Extensions:') . '<br />' . echo '&nbsp;' . __('Extensions:') . '<br />' .
form::combo(['s_plugin_service'], $services_combo, $s_plugin_service) . ' form::combo(['s_plugin_service'], $services_combo, $s_plugin_service) . '
</label></p> </label></p>
<p class="form-note">' . __('Service to use on third part plugins.') . '</p> <p class="form-note">' . __('Service to use on third part plugins.') . '</p>
@ -146,7 +145,7 @@ if (!empty($_REQUEST['chk'])) {
echo $o->testService() ? $img_green : $img_red; echo $o->testService() ? $img_green : $img_red;
} }
} }
echo '&nbsp;' . __('Templates:') . '<br />' . echo '&nbsp;' . __('Templates:') . '<br />' .
form::combo(['s_tpl_service'], $ext_services_combo, $s_tpl_service) . ' form::combo(['s_tpl_service'], $ext_services_combo, $s_tpl_service) . '
</label></p> </label></p>
<p class="form-note">' . __('Shorten links automatically when using template value like "EntryKutrl".') . '</p> <p class="form-note">' . __('Shorten links automatically when using template value like "EntryKutrl".') . '</p>
@ -156,7 +155,7 @@ if (!empty($_REQUEST['chk'])) {
echo $o->testService() ? $img_green : $img_red; echo $o->testService() ? $img_green : $img_red;
} }
} }
echo '&nbsp;' . __('Contents:') . '<br />' . echo '&nbsp;' . __('Contents:') . '<br />' .
form::combo(['s_wiki_service'], $ext_services_combo, $s_wiki_service) . ' form::combo(['s_wiki_service'], $ext_services_combo, $s_wiki_service) . '
</label></p> </label></p>
<p class="form-note">' . __('Shorten links automatically found in contents using wiki synthax.') . '</p> <p class="form-note">' . __('Shorten links automatically found in contents using wiki synthax.') . '</p>
@ -164,17 +163,18 @@ form::combo(['s_wiki_service'], $ext_services_combo, $s_wiki_service) . '
</div> </div>
<div class="fieldset"> <div class="fieldset">
<h4>' .__('Services') . '</h4> <h4>' . __('Services') . '</h4>
<p class="info">' . __('List of services you can use to shorten links with pkugin kUtRL.') . '</p> <p class="info">' . __('List of services you can use to shorten links with pkugin kUtRL.') . '</p>
'; ';
foreach(kutrl::getServices($core) as $service_id => $service) { foreach (kutrl::getServices($core) as $service_id => $service) {
$o = new $service($core); $o = new $service($core);
echo '<hr/><div id="setting-' . $service_id . '"><h5>' . $o->name . '</h5>'; echo '<hr/><div id="setting-' . $service_id . '"><h5>' . $o->name . '</h5>';
if (!empty($_REQUEST['chk'])) { if (!empty($_REQUEST['chk'])) {
$img_chk = $img_red . ' ' . sprintf(__('Failed to test %s API.'), $o->name); $img_chk = $img_red . ' ' . sprintf(__('Failed to test %s API.'), $o->name);
try { try {
if ($o->testService()) { if ($o->testService()) {
$img_chk = $img_green . ' ' . sprintf(__('%s API is well configured and runing.'), $o->name); $img_chk = $img_green . ' ' . sprintf(__('%s API is well configured and runing.'), $o->name);
@ -192,4 +192,4 @@ foreach(kutrl::getServices($core) as $service_id => $service) {
echo '</div>'; echo '</div>';
} }
echo'</div>'; echo'</div>';

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -28,4 +27,4 @@ $this->registerModule(
'details' => 'http://plugins.dotaddict.org/dc2/details/kUtRL', 'details' => 'http://plugins.dotaddict.org/dc2/details/kUtRL',
'repository' => 'https://raw.githubusercontent.com/JcDenis/kUtRL/master/dcstore.xml' 'repository' => 'https://raw.githubusercontent.com/JcDenis/kUtRL/master/dcstore.xml'
] ]
); );

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return; return;
} }
@ -45,7 +44,7 @@ try {
->index('idx_kut_service', 'btree', 'kut_service') ->index('idx_kut_service', 'btree', 'kut_service')
->index('idx_kut_type', 'btree', 'kut_type'); ->index('idx_kut_type', 'btree', 'kut_type');
$ti = new dbStruct($core->con, $core->prefix); $ti = new dbStruct($core->con, $core->prefix);
$changes = $ti->synchronize($t); $changes = $ti->synchronize($t);
# Settings # Settings
@ -61,9 +60,8 @@ try {
$s->put('kutrl_tpl_active', false, 'boolean', 'Return short url on dotclear tags if kutrl is active', false, true); $s->put('kutrl_tpl_active', false, 'boolean', 'Return short url on dotclear tags if kutrl is active', false, true);
$s->put('kutrl_admin_entry_default', true, 'boolean', 'Create short link on new entry by default', false, true); $s->put('kutrl_admin_entry_default', true, 'boolean', 'Create short link on new entry by default', false, true);
# Settings for "local" service # Settings for "local" service
$local_css = $local_css = ".shortenkutrlwidget input { border: 1px solid #CCCCCC; }\n" .
".shortenkutrlwidget input { border: 1px solid #CCCCCC; }\n" . '.dc-kutrl input { border: 1px solid #CCCCCC; margin: 10px; }';
".dc-kutrl input { border: 1px solid #CCCCCC; margin: 10px; }";
$s->put('kutrl_srv_local_protocols', 'http:,https:,ftp:,ftps:,irc:', 'string', 'Allowed kutrl local service protocols', false, true); $s->put('kutrl_srv_local_protocols', 'http:,https:,ftp:,ftps:,irc:', 'string', 'Allowed kutrl local service protocols', false, true);
$s->put('kutrl_srv_local_public', false, 'boolean', 'Enabled local service public page', false, true); $s->put('kutrl_srv_local_public', false, 'boolean', 'Enabled local service public page', false, true);
$s->put('kutrl_srv_local_css', $local_css, 'string', 'Special CSS for kutrl local service', false, true); $s->put('kutrl_srv_local_css', $local_css, 'string', 'Special CSS for kutrl local service', false, true);
@ -82,9 +80,10 @@ try {
if ($core->plugins->moduleExists('dcMiniUrl')) { if ($core->plugins->moduleExists('dcMiniUrl')) {
require_once dirname(__FILE__) . '/inc/patch.dcminiurl.php'; require_once dirname(__FILE__) . '/inc/patch.dcminiurl.php';
} }
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {
$core->error->add($e->getMessage()); $core->error->add($e->getMessage());
} }
return false; return false;

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return; return;
} }
@ -33,7 +32,7 @@ if (!defined('SHORTEN_SERVICE_ENCODE')) {
} }
# Main class # Main class
$d = dirname(__FILE__) . '/inc/'; $d = dirname(__FILE__) . '/inc/';
$__autoload['kutrl'] = $d . 'class.kutrl.php'; $__autoload['kutrl'] = $d . 'class.kutrl.php';
$__autoload['kutrlService'] = $d . 'lib.kutrl.srv.php'; $__autoload['kutrlService'] = $d . 'lib.kutrl.srv.php';
$__autoload['kutrlLog'] = $d . 'lib.kutrl.log.php'; $__autoload['kutrlLog'] = $d . 'lib.kutrl.log.php';
@ -41,22 +40,22 @@ $__autoload['kutrlLinksList'] = $d . 'lib.kutrl.lst.php';
# Services # Services
$__autoload['defaultKutrlService'] = $d . 'services/class.default.service.php'; $__autoload['defaultKutrlService'] = $d . 'services/class.default.service.php';
$core->addBehavior('kutrlService', function() { return ["default","defaultKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['default','defaultKutrlService']; });
if (!defined('SHORTEN_SERVICE_DISABLE_CUSTOM')) { if (!defined('SHORTEN_SERVICE_DISABLE_CUSTOM')) {
$__autoload['customKutrlService'] = $d . 'services/class.custom.service.php'; $__autoload['customKutrlService'] = $d . 'services/class.custom.service.php';
$core->addBehavior('kutrlService', function() { return ["custom","customKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['custom','customKutrlService']; });
} }
if (!defined('SHORTEN_SERVICE_DISABLE_LOCAL')) { if (!defined('SHORTEN_SERVICE_DISABLE_LOCAL')) {
$__autoload['localKutrlService'] = $d . 'services/class.local.service.php'; $__autoload['localKutrlService'] = $d . 'services/class.local.service.php';
$core->addBehavior('kutrlService', function() { return ["local","localKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['local','localKutrlService']; });
} }
if (!defined('SHORTEN_SERVICE_DISABLE_BILBOLINKS')) { if (!defined('SHORTEN_SERVICE_DISABLE_BILBOLINKS')) {
$__autoload['bilbolinksKutrlService'] = $d . 'services/class.bilbolinks.service.php'; $__autoload['bilbolinksKutrlService'] = $d . 'services/class.bilbolinks.service.php';
$core->addBehavior('kutrlService', function() { return ["bilbolinks","bilbolinksKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['bilbolinks','bilbolinksKutrlService']; });
} }
if (!defined('SHORTEN_SERVICE_DISABLE_BITLY')) { if (!defined('SHORTEN_SERVICE_DISABLE_BITLY')) {
$__autoload['bitlyKutrlService'] = $d . 'services/class.bitly.service.php'; $__autoload['bitlyKutrlService'] = $d . 'services/class.bitly.service.php';
$core->addBehavior('kutrlService', function() { return ["bitly","bitlyKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['bitly','bitlyKutrlService']; });
} }
//if (!defined('SHORTEN_SERVICE_DISABLE_GOOGL')) { //if (!defined('SHORTEN_SERVICE_DISABLE_GOOGL')) {
// $__autoload['googlKutrlService'] = $d . 'services/class.googl.service.php'; // $__autoload['googlKutrlService'] = $d . 'services/class.googl.service.php';
@ -64,7 +63,7 @@ if (!defined('SHORTEN_SERVICE_DISABLE_BITLY')) {
//} //}
if (!defined('SHORTEN_SERVICE_DISABLE_ISGD')) { if (!defined('SHORTEN_SERVICE_DISABLE_ISGD')) {
$__autoload['isgdKutrlService'] = $d . 'services/class.isgd.service.php'; $__autoload['isgdKutrlService'] = $d . 'services/class.isgd.service.php';
$core->addBehavior('kutrlService', function() { return ["isgd","isgdKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['isgd','isgdKutrlService']; });
} }
//if (!defined('SHORTEN_SERVICE_DISABLE_SHORTTO')) { //if (!defined('SHORTEN_SERVICE_DISABLE_SHORTTO')) {
// $__autoload['shorttoKutrlService'] = $d . 'services/class.shortto.service.php'; // $__autoload['shorttoKutrlService'] = $d . 'services/class.shortto.service.php';
@ -76,7 +75,7 @@ if (!defined('SHORTEN_SERVICE_DISABLE_ISGD')) {
//} //}
if (!defined('SHORTEN_SERVICE_DISABLE_YOURLS')) { if (!defined('SHORTEN_SERVICE_DISABLE_YOURLS')) {
$__autoload['yourlsKutrlService'] = $d . 'services/class.yourls.service.php'; $__autoload['yourlsKutrlService'] = $d . 'services/class.yourls.service.php';
$core->addBehavior('kutrlService', function() { return ["yourls","yourlsKutrlService"]; } ); $core->addBehavior('kutrlService', function () { return ['yourls','yourlsKutrlService']; });
} }
//if (!defined('SHORTEN_SERVICE_DISABLE_SUPR')) { //if (!defined('SHORTEN_SERVICE_DISABLE_SUPR')) {
// $__autoload['suprKutrlService'] = $d . 'services/class.supr.service.php'; // $__autoload['suprKutrlService'] = $d . 'services/class.supr.service.php';
@ -85,9 +84,9 @@ if (!defined('SHORTEN_SERVICE_DISABLE_YOURLS')) {
# Shorten url passed through wiki functions # Shorten url passed through wiki functions
$__autoload['kutrlWiki'] = $d . 'lib.wiki.kutrl.php'; $__autoload['kutrlWiki'] = $d . 'lib.wiki.kutrl.php';
$core->addBehavior('coreInitWikiPost',['kutrlWiki','coreInitWiki']); $core->addBehavior('coreInitWikiPost', ['kutrlWiki','coreInitWiki']);
$core->addBehavior('coreInitWikiComment',['kutrlWiki','coreInitWiki']); $core->addBehavior('coreInitWikiComment', ['kutrlWiki','coreInitWiki']);
$core->addBehavior('coreInitWikiSimpleComment',['kutrlWiki','coreInitWiki']); $core->addBehavior('coreInitWikiSimpleComment', ['kutrlWiki','coreInitWiki']);
# Public page # Public page
$core->url->register('kutrl', 'go', '^go(/(.*?)|)$', ['urlKutrl', 'redirectUrl']); $core->url->register('kutrl', 'go', '^go(/(.*?)|)$', ['urlKutrl', 'redirectUrl']);
@ -95,4 +94,4 @@ $core->url->register('kutrl', 'go', '^go(/(.*?)|)$', ['urlKutrl', 'redirectUrl']
# Add kUtRL events on plugin activityReport # Add kUtRL events on plugin activityReport
if (defined('ACTIVITY_REPORT')) { if (defined('ACTIVITY_REPORT')) {
require_once $d . 'lib.kutrl.activityreport.php'; require_once $d . 'lib.kutrl.activityreport.php';
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -67,9 +66,9 @@ class urlKutrl extends dcUrlHandlers
return null; return null;
} }
$args = isset($m[3]) ? $m[3] : ''; $args = $m[3] ?? '';
$_ctx->kutrl_msg = ''; $_ctx->kutrl_msg = '';
$_ctx->kutrl_hmf = hmfKutrl::create(); $_ctx->kutrl_hmf = hmfKutrl::create();
$_ctx->kutrl_hmfp = hmfKutrl::protect($_ctx->kutrl_hmf); $_ctx->kutrl_hmfp = hmfKutrl::protect($_ctx->kutrl_hmf);
$kut = new localKutrlService($core); $kut = new localKutrlService($core);
@ -81,7 +80,7 @@ class urlKutrl extends dcUrlHandlers
# find suffix on redirect url # find suffix on redirect url
$suffix = ''; $suffix = '';
if (preg_match('@^([^?/#]+)(.*?)$@', $args, $more)) { if (preg_match('@^([^?/#]+)(.*?)$@', $args, $more)) {
$args = $more[1]; $args = $more[1];
$suffix = $more[2]; $suffix = $more[2];
} }
# No arg, go to kurtl page # No arg, go to kurtl page
@ -131,50 +130,50 @@ class urlKutrl extends dcUrlHandlers
# Validation form # Validation form
$url = !empty($_POST['longurl']) ? trim($core->con->escape($_POST['longurl'])) : ''; $url = !empty($_POST['longurl']) ? trim($core->con->escape($_POST['longurl'])) : '';
if (!empty($url)) { if (!empty($url)) {
$hmf = !empty($_POST['hmf']) ? $_POST['hmf'] : '!'; $hmf = !empty($_POST['hmf']) ? $_POST['hmf'] : '!';
$hmfu = !empty($_POST['hmfp']) ? hmfKutrl::unprotect($_POST['hmfp']) : '?'; $hmfu = !empty($_POST['hmfp']) ? hmfKutrl::unprotect($_POST['hmfp']) : '?';
$err = false; $err = false;
if (!$err) { if (!$err) {
if ($hmf != $hmfu) { if ($hmf != $hmfu) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('Failed to verify protected field.'); $_ctx->kutrl_msg = __('Failed to verify protected field.');
} }
} }
if (!$err) { if (!$err) {
if (!$kut->testService()) { if (!$kut->testService()) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('Service is not well configured.'); $_ctx->kutrl_msg = __('Service is not well configured.');
} }
} }
if (!$err) { if (!$err) {
if (!$kut->isValidUrl($url)) { if (!$kut->isValidUrl($url)) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('This string is not a valid URL.'); $_ctx->kutrl_msg = __('This string is not a valid URL.');
} }
} }
if (!$err) { if (!$err) {
if (!$kut->isLongerUrl($url)) { if (!$kut->isLongerUrl($url)) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('This link is too short.'); $_ctx->kutrl_msg = __('This link is too short.');
} }
} }
if (!$err) { if (!$err) {
if (!$kut->isProtocolUrl($url)) { if (!$kut->isProtocolUrl($url)) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('This type of link is not allowed.'); $_ctx->kutrl_msg = __('This type of link is not allowed.');
} }
} }
if (!$err) { if (!$err) {
if (!$kut->allow_external_url && !$kut->isBlogUrl($url)) { if (!$kut->allow_external_url && !$kut->isBlogUrl($url)) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('Short links are limited to this blog URL.'); $_ctx->kutrl_msg = __('Short links are limited to this blog URL.');
} }
} }
if (!$err) { if (!$err) {
if ($kut->isServiceUrl($url)) { if ($kut->isServiceUrl($url)) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('This link is already a short link.'); $_ctx->kutrl_msg = __('This link is already a short link.');
} }
} }
@ -182,7 +181,7 @@ class urlKutrl extends dcUrlHandlers
if (false !== ($rs = $kut->isKnowUrl($url))) { if (false !== ($rs = $kut->isKnowUrl($url))) {
$err = true; $err = true;
$url = $rs->url; $url = $rs->url;
$new_url = $kut->url_base . $rs->hash; $new_url = $kut->url_base . $rs->hash;
$_ctx->kutrl_msg = sprintf( $_ctx->kutrl_msg = sprintf(
@ -194,10 +193,10 @@ class urlKutrl extends dcUrlHandlers
} }
if (!$err) { if (!$err) {
if (false === ($rs = $kut->hash($url))) { if (false === ($rs = $kut->hash($url))) {
$err = true; $err = true;
$_ctx->kutrl_msg = __('Failed to create short link.'); $_ctx->kutrl_msg = __('Failed to create short link.');
} else { } else {
$url = $rs->url; $url = $rs->url;
$new_url = $kut->url_base . $rs->hash; $new_url = $kut->url_base . $rs->hash;
$_ctx->kutrl_msg = sprintf( $_ctx->kutrl_msg = sprintf(
@ -232,13 +231,13 @@ class urlKutrl extends dcUrlHandlers
} }
$core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__) . '/default-templates'); $core->tpl->setPath($core->tpl->getPath(), dirname(__FILE__) . '/default-templates');
$_ctx =& $GLOBALS['_ctx']; $_ctx = & $GLOBALS['_ctx'];
$core = $GLOBALS['core']; $core = $GLOBALS['core'];
header('Content-Type: text/html; charset=UTF-8'); header('Content-Type: text/html; charset=UTF-8');
http::head(404, 'Not Found'); http::head(404, 'Not Found');
$core->url->type = '404'; $core->url->type = '404';
$_ctx->current_tpl = 'kutrl404.html'; $_ctx->current_tpl = 'kutrl404.html';
$_ctx->content_type = 'text/html'; $_ctx->content_type = 'text/html';
echo $core->tpl->getData($_ctx->current_tpl); echo $core->tpl->getData($_ctx->current_tpl);
@ -266,18 +265,20 @@ class pubKutrl
# Disable URL shoretning on filtered tag # Disable URL shoretning on filtered tag
public static function templateBeforeValue($core, $tag, $attr) public static function templateBeforeValue($core, $tag, $attr)
{ {
if (!empty($attr['disable_kutrl']) && in_array($tag,pubKutrl::$know_tags)) { if (!empty($attr['disable_kutrl']) && in_array($tag, pubKutrl::$know_tags)) {
return '<?php $GLOBALS["disable_kutrl"] = true; ?>'; return '<?php $GLOBALS["disable_kutrl"] = true; ?>';
} }
return null; return null;
} }
# Re unable it after tag # Re unable it after tag
public static function templateAfterValue($core, $tag, $attr) public static function templateAfterValue($core, $tag, $attr)
{ {
if (!empty($attr['disable_kutrl']) && in_array($tag,pubKutrl::$know_tags)) { if (!empty($attr['disable_kutrl']) && in_array($tag, pubKutrl::$know_tags)) {
return '<?php $GLOBALS["disable_kutrl"] = false; ?>'; return '<?php $GLOBALS["disable_kutrl"] = false; ?>';
} }
return null; return null;
} }
@ -285,13 +286,13 @@ class pubKutrl
public static function publicBeforeContentFilter($core, $tag, $args) public static function publicBeforeContentFilter($core, $tag, $args)
{ {
# Unknow tag # Unknow tag
if (!in_array($tag,pubKutrl::$know_tags)) { if (!in_array($tag, pubKutrl::$know_tags)) {
return null; return null;
} }
# URL shortening is disabled by tag attribute # URL shortening is disabled by tag attribute
if (empty($GLOBALS['disable_kutrl'])) { if (empty($GLOBALS['disable_kutrl'])) {
# kUtRL is not activated # kUtRL is not activated
if (!$core->blog->settings->kUtRL->kutrl_active if (!$core->blog->settings->kUtRL->kutrl_active
|| !$core->blog->settings->kUtRL->kutrl_tpl_active || !$core->blog->settings->kUtRL->kutrl_tpl_active
) { ) {
return null; return null;
@ -324,7 +325,7 @@ class pubKutrl
$s = $core->blog->settings->kUtRL; $s = $core->blog->settings->kUtRL;
# Passive : all kutrl tag return long url # Passive : all kutrl tag return long url
$_ctx->kutrl_passive = (boolean) $s->kutrl_tpl_passive; $_ctx->kutrl_passive = (bool) $s->kutrl_tpl_passive;
if (!$s->kutrl_active || !$s->kutrl_tpl_service) { if (!$s->kutrl_active || !$s->kutrl_tpl_service) {
return null; return null;
@ -339,7 +340,7 @@ class pubKutrl
{ {
$css = $core->blog->settings->kUtRL->kutrl_srv_local_css; $css = $core->blog->settings->kUtRL->kutrl_srv_local_css;
if ($css) { if ($css) {
echo echo
"\n<!-- CSS for kUtRL --> \n" . "\n<!-- CSS for kUtRL --> \n" .
"<style type=\"text/css\"> \n" . "<style type=\"text/css\"> \n" .
html::escapeHTML($css) . "\n" . html::escapeHTML($css) . "\n" .
@ -353,6 +354,7 @@ class tplKutrl
public static function pageURL($attr) public static function pageURL($attr)
{ {
$f = $GLOBALS['core']->tpl->getFilters($attr); $f = $GLOBALS['core']->tpl->getFilters($attr);
return '<?php echo ' . sprintf($f, '$core->blog->url.$core->url->getBase("kutrl")') . '; ?>'; return '<?php echo ' . sprintf($f, '$core->blog->url.$core->url->getBase("kutrl")') . '; ?>';
} }
@ -361,15 +363,15 @@ class tplKutrl
$operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&'; $operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&';
if (isset($attr['is_active'])) { if (isset($attr['is_active'])) {
$sign = (boolean) $attr['is_active'] ? '' : '!'; $sign = (bool) $attr['is_active'] ? '' : '!';
$if[] = $sign . '$core->blog->settings->kUtRL->kutrl_srv_local_public'; $if[] = $sign . '$core->blog->settings->kUtRL->kutrl_srv_local_public';
} }
if (empty($if)) { if (empty($if)) {
return $content; return $content;
} }
return return
"<?php if(" . implode(' ' . $operator . ' ', $if) . ") : ?>\n" . '<?php if(' . implode(' ' . $operator . ' ', $if) . ") : ?>\n" .
$content . $content .
"<?php endif; unset(\$s);?>\n"; "<?php endif; unset(\$s);?>\n";
} }
@ -379,15 +381,15 @@ class tplKutrl
$operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&'; $operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&';
if (isset($attr['has_message'])) { if (isset($attr['has_message'])) {
$sign = (boolean) $attr['has_message'] ? '!' : '='; $sign = (bool) $attr['has_message'] ? '!' : '=';
$if[] = '"" ' . $sign . '= $_ctx->kutrl_msg'; $if[] = '"" ' . $sign . '= $_ctx->kutrl_msg';
} }
if (empty($if)) { if (empty($if)) {
return $content; return $content;
} }
return return
"<?php if(" . implode(' ' . $operator . ' ', $if) . ") : ?>\n" . '<?php if(' . implode(' ' . $operator . ' ', $if) . ") : ?>\n" .
$content . $content .
"<?php endif; ?>\n"; "<?php endif; ?>\n";
} }
@ -404,9 +406,9 @@ class tplKutrl
public static function humanFieldProtect($attr) public static function humanFieldProtect($attr)
{ {
return return
"<input type=\"hidden\" name=\"hmfp\" id=\"hmfp\" value=\"<?php echo \$_ctx->kutrl_hmfp; ?>\" />". '<input type="hidden" name="hmfp" id="hmfp" value="<?php echo $_ctx->kutrl_hmfp; ?>" />' .
"<?php echo \$core->formNonce(); ?>"; '<?php echo $core->formNonce(); ?>';
} }
public static function AttachmentKutrlIf($attr, $content) public static function AttachmentKutrlIf($attr, $content)
@ -439,7 +441,7 @@ class tplKutrl
return self::genericKutrl('$_ctx->posts->user_url', $attr); return self::genericKutrl('$_ctx->posts->user_url', $attr);
} }
public static function EntryKutrlIf($attr,$content) public static function EntryKutrlIf($attr, $content)
{ {
return self::genericKutrlIf('$_ctx->posts->getURL()', $attr, $content); return self::genericKutrlIf('$_ctx->posts->getURL()', $attr, $content);
} }
@ -474,22 +476,23 @@ class tplKutrl
$operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&'; $operator = isset($attr['operator']) ? self::getOperator($attr['operator']) : '&&';
if (isset($attr['is_active'])) { if (isset($attr['is_active'])) {
$sign = (boolean) $attr['is_active'] ? '' : '!'; $sign = (bool) $attr['is_active'] ? '' : '!';
$if[] = $sign . '$_ctx->exists("kutrl")'; $if[] = $sign . '$_ctx->exists("kutrl")';
} }
if (isset($attr['passive_mode'])) { if (isset($attr['passive_mode'])) {
$sign = (boolean) $attr['passive_mode'] ? '' : '!'; $sign = (bool) $attr['passive_mode'] ? '' : '!';
$if[] = $sign . '$_ctx->kutrl_passive'; $if[] = $sign . '$_ctx->kutrl_passive';
} }
if (isset($attr['has_kutrl'])) { if (isset($attr['has_kutrl'])) {
$sign = (boolean) $attr['has_kutrl'] ? '!' : '='; $sign = (bool) $attr['has_kutrl'] ? '!' : '=';
$if[] = '($_ctx->exists("kutrl") && false ' . $sign . '== $_ctx->kutrl->select(' . $str . ',null,null,"kutrl"))'; $if[] = '($_ctx->exists("kutrl") && false ' . $sign . '== $_ctx->kutrl->select(' . $str . ',null,null,"kutrl"))';
} }
if (empty($if)) { if (empty($if)) {
return $content; return $content;
} }
return
"<?php if(" . implode(' ' . $operator . ' ', $if) . ") : ?>\n" . return
'<?php if(' . implode(' ' . $operator . ' ', $if) . ") : ?>\n" .
$content . $content .
"<?php endif; ?>\n"; "<?php endif; ?>\n";
} }
@ -497,29 +500,30 @@ class tplKutrl
protected static function genericKutrl($str, $attr) protected static function genericKutrl($str, $attr)
{ {
$f = $GLOBALS['core']->tpl->getFilters($attr); $f = $GLOBALS['core']->tpl->getFilters($attr);
return
return
"<?php \n" . "<?php \n" .
# Preview # Preview
"if (\$_ctx->preview) { \n" . "if (\$_ctx->preview) { \n" .
" echo " . sprintf($f, $str) . "; " . ' echo ' . sprintf($f, $str) . '; ' .
"} else { \n" . "} else { \n" .
# Disable # Disable
"if (!\$_ctx->exists('kutrl')) { \n" . "if (!\$_ctx->exists('kutrl')) { \n" .
# Passive mode # Passive mode
" if (\$_ctx->kutrl_passive) { " . ' if ($_ctx->kutrl_passive) { ' .
" echo " . sprintf($f, $str) . "; " . ' echo ' . sprintf($f, $str) . '; ' .
" } \n" . " } \n" .
"} else { \n" . "} else { \n" .
# Existing # Existing
" if (false !== (\$kutrl_rs = \$_ctx->kutrl->isKnowUrl(" . $str . "))) { " . ' if (false !== ($kutrl_rs = $_ctx->kutrl->isKnowUrl(' . $str . '))) { ' .
" echo " . sprintf($f, '$_ctx->kutrl->url_base.$kutrl_rs->hash') . "; " . ' echo ' . sprintf($f, '$_ctx->kutrl->url_base.$kutrl_rs->hash') . '; ' .
" } \n" . " } \n" .
# New # New
" elseif (false !== (\$kutrl_rs = \$_ctx->kutrl->hash(" . $str . "))) { " . ' elseif (false !== ($kutrl_rs = $_ctx->kutrl->hash(' . $str . '))) { ' .
" echo " . sprintf($f, '$_ctx->kutrl->url_base.$kutrl_rs->hash') . "; " . ' echo ' . sprintf($f, '$_ctx->kutrl->url_base.$kutrl_rs->hash') . '; ' .
# ex: Send new url to messengers # ex: Send new url to messengers
" if (!empty(\$kutrl_rs)) { " . ' if (!empty($kutrl_rs)) { ' .
" \$core->callBehavior('publicAfterKutrlCreate',\$core,\$kutrl_rs,__('New public short URL')); " . " \$core->callBehavior('publicAfterKutrlCreate',\$core,\$kutrl_rs,__('New public short URL')); " .
" } \n" . " } \n" .
@ -548,34 +552,36 @@ class hmfKutrl
{ {
public static $chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'; public static $chars = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789';
public static function create($len=6) public static function create($len = 6)
{ {
$res = ''; $res = '';
$chars = self::$chars; $chars = self::$chars;
for($i = 0; $i < $len; $i++) { for ($i = 0; $i < $len; $i++) {
$res .= $chars[rand(0, strlen($chars)-1)]; $res .= $chars[rand(0, strlen($chars) - 1)];
} }
return $res; return $res;
} }
public static function protect($str) public static function protect($str)
{ {
$res = ''; $res = '';
$chars = self::$chars; $chars = self::$chars;
for($i = 0; $i < strlen($str); $i++) for ($i = 0; $i < strlen($str); $i++) {
{ $res .= $chars[rand(0, strlen($chars) - 1)] . $str[$i];
$res .= $chars[rand(0, strlen($chars)-1)] . $str[$i];
} }
return $res; return $res;
} }
public static function unprotect($str) public static function unprotect($str)
{ {
$res = ''; $res = '';
for($i = 0; $i < strlen($str); $i++) { for ($i = 0; $i < strlen($str); $i++) {
$i++; $i++;
$res .= $str[$i]; $res .= $str[$i];
} }
return $res; return $res;
} }
} }

View File

@ -1,68 +1,95 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return; return;
} }
$this->addUserAction( $this->addUserAction(
/* type */ 'settings', /* type */
/* action */ 'delete_all', 'settings',
/* ns */ 'kUtRL', /* action */
/* description */ __('delete all settings') 'delete_all',
/* ns */
'kUtRL',
/* description */
__('delete all settings')
); );
$this->addUserAction( $this->addUserAction(
/* type */ 'tables', /* type */
/* action */ 'delete', 'tables',
/* ns */ 'kutrl', /* action */
/* description */ __('delete table') 'delete',
/* ns */
'kutrl',
/* description */
__('delete table')
); );
$this->addUserAction( $this->addUserAction(
/* type */ 'plugins', /* type */
/* action */ 'delete', 'plugins',
/* ns */ 'kUtRL', /* action */
/* description */ __('delete plugin files') 'delete',
/* ns */
'kUtRL',
/* description */
__('delete plugin files')
); );
$this->addUserAction( $this->addUserAction(
/* type */ 'versions', /* type */
/* action */ 'delete', 'versions',
/* ns */ 'kUtRL', /* action */
/* description */ __('delete the version number') 'delete',
/* ns */
'kUtRL',
/* description */
__('delete the version number')
); );
# Delete only dc version and plugin files from pluginsBeforeDelete # Delete only dc version and plugin files from pluginsBeforeDelete
# Keep table # Keep table
$this->addDirectAction( $this->addDirectAction(
/* type */ 'settings', /* type */
/* action */ 'delete_all', 'settings',
/* ns */ 'kUtRL', /* action */
/* description */ sprintf(__('delete all %s settings'),'kUtRL') 'delete_all',
/* ns */
'kUtRL',
/* description */
sprintf(__('delete all %s settings'), 'kUtRL')
); );
$this->addDirectAction( $this->addDirectAction(
/* type */ 'versions', /* type */
/* action */ 'delete', 'versions',
/* ns */ 'kUtRL', /* action */
/* description */ sprintf(__('delete %s version number'),'kUtRL') 'delete',
/* ns */
'kUtRL',
/* description */
sprintf(__('delete %s version number'), 'kUtRL')
); );
$this->addDirectAction( $this->addDirectAction(
/* type */ 'plugins', /* type */
/* action */ 'delete', 'plugins',
/* ns */ 'kUtRL', /* action */
/* description */ sprintf(__('delete %s plugin files'),'kUtRL') 'delete',
); /* ns */
'kUtRL',
/* description */
sprintf(__('delete %s plugin files'), 'kUtRL')
);

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -60,10 +59,11 @@ class widgetKutrl
'type', 'type',
__('Type:'), __('Type:'),
'all', 'all',
'combo',[ 'combo',
__('All') => '-', [
__('Mini URL') => 'localnormal', __('All') => '-',
__('Custom URL') => 'localcustom', __('Mini URL') => 'localnormal',
__('Custom URL') => 'localcustom',
__('Semi-custom') => 'localmix' __('Semi-custom') => 'localmix'
] ]
) )
@ -90,7 +90,7 @@ class widgetKutrl
'desc', 'desc',
'combo', 'combo',
[ [
__('Ascending') => 'asc', __('Ascending') => 'asc',
__('Descending') => 'desc' __('Descending') => 'desc'
] ]
) )
@ -117,14 +117,14 @@ class widgetKutrl
global $core; global $core;
$s = $core->blog->settings->kUtRL; $s = $core->blog->settings->kUtRL;
if (!$s->kutrl_active if (!$s->kutrl_active
|| !$s->kutrl_srv_local_public || !$s->kutrl_srv_local_public
|| ($w->homeonly == 1 && !$core->url->isHome($core->url->type)) || ($w->homeonly == 2 && $core->url->isHome($core->url->type)) || ($w->homeonly == 1 && !$core->url->isHome($core->url->type)) || ($w->homeonly == 2 && $core->url->isHome($core->url->type))
|| $core->url->type == 'kutrl') { || $core->url->type == 'kutrl') {
return null; return null;
} }
$hmf = hmfKutrl::create(); $hmf = hmfKutrl::create();
$hmfp = hmfKutrl::protect($hmf); $hmfp = hmfKutrl::protect($hmf);
return $w->renderDiv( return $w->renderDiv(
@ -140,10 +140,10 @@ class widgetKutrl
'</label></p>' . '</label></p>' .
'<p><label>' . '<p><label>' .
sprintf(__('Rewrite "%s" in next field to show that you are not a robot:'), $hmf) . '<br />' . sprintf(__('Rewrite "%s" in next field to show that you are not a robot:'), $hmf) . '<br />' .
form::field('hmf',20,255,'') . form::field('hmf', 20, 255, '') .
'</label></p>' . '</label></p>' .
'<p><input class="submit" type="submit" name="submiturl" value="' . __('Shorten') . '" />' . '<p><input class="submit" type="submit" name="submiturl" value="' . __('Shorten') . '" />' .
form::hidden('hmfp',$hmfp) . form::hidden('hmfp', $hmfp) .
$core->formNonce() . $core->formNonce() .
'</p>' . '</p>' .
'</form>' '</form>'
@ -155,32 +155,32 @@ class widgetKutrl
global $core; global $core;
$s = $core->blog->settings->kUtRL; $s = $core->blog->settings->kUtRL;
if (!$s->kutrl_active if (!$s->kutrl_active
|| ($w->homeonly == 1 && !$core->url->isHome($core->url->type)) || ($w->homeonly == 2 && $core->url->isHome($core->url->type))) { || ($w->homeonly == 1 && !$core->url->isHome($core->url->type)) || ($w->homeonly == 2 && $core->url->isHome($core->url->type))) {
return null; return null;
} }
$type = in_array($w->type, ['localnormal', 'localmix', 'localcustom']) ? $type = in_array($w->type, ['localnormal', 'localmix', 'localcustom']) ?
"AND kut_type ='" . $w->type . "' " : "AND kut_type ='" . $w->type . "' " :
"AND kut_type " . $core->con->in(['localnormal', 'localmix', 'localcustom']) . " "; 'AND kut_type ' . $core->con->in(['localnormal', 'localmix', 'localcustom']) . ' ';
$hide = (boolean) $w->hideempty ? 'AND kut_counter > 0 ' : ''; $hide = (bool) $w->hideempty ? 'AND kut_counter > 0 ' : '';
$more = ''; $more = '';
if ($w->type == 'localmix' && '' != $w->mixprefix) { if ($w->type == 'localmix' && '' != $w->mixprefix) {
$more = "AND kut_hash LIKE '" . $core->con->escape($w->mixprefix) . "%' "; $more = "AND kut_hash LIKE '" . $core->con->escape($w->mixprefix) . "%' ";
} }
$order = ($w->sortby && in_array($w->sortby, ['kut_dt', 'kut_counter', 'kut_hash'])) ? $order = ($w->sortby && in_array($w->sortby, ['kut_dt', 'kut_counter', 'kut_hash'])) ?
$w->sortby : 'kut_dt'; $w->sortby : 'kut_dt';
$order .= $w->sort == 'desc' ? ' DESC' : ' ASC'; $order .= $w->sort == 'desc' ? ' DESC' : ' ASC';
$limit = $core->con->limit(abs((integer) $w->limit)); $limit = $core->con->limit(abs((int) $w->limit));
$rs = $core->con->select( $rs = $core->con->select(
'SELECT kut_counter, kut_hash ' . 'SELECT kut_counter, kut_hash ' .
"FROM " . $core->prefix . "kutrl " . 'FROM ' . $core->prefix . 'kutrl ' .
"WHERE blog_id='" . $core->con->escape($core->blog->id) . "' " . "WHERE blog_id='" . $core->con->escape($core->blog->id) . "' " .
"AND kut_service = 'local' " . "AND kut_service = 'local' " .
$type . $hide . $more . 'ORDER BY ' . $order . $limit $type . $hide . $more . 'ORDER BY ' . $order . $limit
@ -191,23 +191,23 @@ class widgetKutrl
} }
$content = ''; $content = '';
$i = 0; $i = 0;
while($rs->fetch()) { while ($rs->fetch()) {
$i++; $i++;
$rank = '<span class="rankkutrl-rank">' . $i . '</span>'; $rank = '<span class="rankkutrl-rank">' . $i . '</span>';
$hash = $rs->kut_hash; $hash = $rs->kut_hash;
$url = $core->blog->url . $core->url->getBase('kutrl') . '/' . $hash; $url = $core->blog->url . $core->url->getBase('kutrl') . '/' . $hash;
$cut_len = - abs((integer) $w->urllen); $cut_len = - abs((int) $w->urllen);
if (strlen($url) > $cut_len) { if (strlen($url) > $cut_len) {
$url = '...' . substr($url, $cut_len); $url = '...' . substr($url, $cut_len);
} }
/* /*
if (strlen($hash) > $cut_len) { if (strlen($hash) > $cut_len) {
$url = '...'.substr($hash, $cut_len); $url = '...'.substr($hash, $cut_len);
} }
//*/ //*/
if ($rs->kut_counter == 0) { if ($rs->kut_counter == 0) {
$counttext = __('never followed'); $counttext = __('never followed');
} elseif ($rs->kut_counter == 1) { } elseif ($rs->kut_counter == 1) {
@ -216,8 +216,7 @@ class widgetKutrl
$counttext = sprintf(__('followed %s times'), $rs->kut_counter); $counttext = sprintf(__('followed %s times'), $rs->kut_counter);
} }
$content .= $content .= '<li><a href="' .
'<li><a href="' .
$core->blog->url . $core->url->getBase('kutrl') . '/' . $rs->kut_hash . $core->blog->url . $core->url->getBase('kutrl') . '/' . $rs->kut_hash .
'">' . '">' .
str_replace( str_replace(
@ -238,7 +237,6 @@ class widgetKutrl
'', '',
($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '') . ($w->title ? $w->renderTitle(html::escapeHTML($w->title)) : '') .
sprintf('<ul>%s</ul>', $content) sprintf('<ul>%s</ul>', $content)
); );
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -24,16 +23,14 @@ class kUtRL
$list = $core->getBehaviors('kutrlService'); $list = $core->getBehaviors('kutrlService');
if (empty($list)) { if (empty($list)) {
return []; return [];
} }
$services = []; $services = [];
foreach($list as $k => $callback) { foreach ($list as $k => $callback) {
try { try {
list($service_id,$service_class) = call_user_func($callback); list($service_id, $service_class) = call_user_func($callback);
$services[(string) $service_id] = (string) $service_class; $services[(string) $service_id] = (string) $service_class;
} catch (Exception $e) { } catch (Exception $e) {
} }
} }
@ -48,18 +45,16 @@ class kUtRL
try { try {
if (empty($id)) { if (empty($id)) {
return null; return null;
} }
$services = self::getServices($core); $services = self::getServices($core);
if (isset($services[$id])) { if (isset($services[$id])) {
return new $services[$id]($core); return new $services[$id]($core);
} }
} catch(Exception $e) { } catch (Exception $e) {
} }
return null; return null;
} }
# Silently try to load a service according to its place # Silently try to load a service according to its place
@ -70,18 +65,16 @@ class kUtRL
try { try {
if (!in_array($place, ['tpl', 'wiki', 'admin', 'plugin'])) { if (!in_array($place, ['tpl', 'wiki', 'admin', 'plugin'])) {
return null; return null;
} }
$id = $core->blog->settings->kUtRL->get('kutrl_' . $place .'_service'); $id = $core->blog->settings->kUtRL->get('kutrl_' . $place . '_service');
if (!empty($id)) { if (!empty($id)) {
return self::quickService($id); return self::quickService($id);
} }
} catch(Exception $e) { } catch (Exception $e) {
} }
return null; return null;
} }
# Silently try to reduce url (using 'plugin' place) # Silently try to reduce url (using 'plugin' place)
@ -93,18 +86,17 @@ class kUtRL
try { try {
$srv = self::quickPlace($place); $srv = self::quickPlace($place);
if (empty($srv)) { if (empty($srv)) {
return $url; return $url;
} }
$rs = $srv->hash($url,$custom); $rs = $srv->hash($url, $custom);
if (empty($rs)) { if (empty($rs)) {
return $url; return $url;
} }
return $srv->url_base.$rs->hash;
} catch(Exception $e) { return $srv->url_base . $rs->hash;
} catch (Exception $e) {
} }
return $url; return $url;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
# This file is used with plugin activityReport # This file is used with plugin activityReport
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
@ -37,4 +36,4 @@ class kutrlActivityReportBehaviors
$GLOBALS['core']->activityReport->addLog('kutrl', 'create', $logs); $GLOBALS['core']->activityReport->addLog('kutrl', 'create', $logs);
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
# This file contents class to acces local short links records # This file contents class to acces local short links records
class kutrlLog class kutrlLog
@ -54,27 +53,27 @@ class kutrlLog
$this->con->unlock(); $this->con->unlock();
return [ return [
'id' => $cur->kut_id, 'id' => $cur->kut_id,
'url' => $url, 'url' => $url,
'hash' => $hash, 'hash' => $hash,
'type' => $type, 'type' => $type,
'service' => $service, 'service' => $service,
'counter '=> 0 'counter ' => 0
]; ];
} catch (Exception $e) { } catch (Exception $e) {
$this->con->unlock(); $this->con->unlock();
throw $e; throw $e;
} }
return false; return false;
} }
public function select($url = null, $hash = null, $type =null, $service = 'kutrl') public function select($url = null, $hash = null, $type = null, $service = 'kutrl')
{ {
//$this->con->writeLock($this->table); //$this->con->writeLock($this->table);
$req = $req = 'SELECT kut_id as id, kut_hash as hash, kut_url as url, ' .
'SELECT kut_id as id, kut_hash as hash, kut_url as url, ' .
'kut_type as type, kut_service as service, kut_counter as counter ' . 'kut_type as type, kut_service as service, kut_counter as counter ' .
'FROM ' . $this->table . ' ' . 'FROM ' . $this->table . ' ' .
"WHERE blog_id = '" . $this->blog . "' " . "WHERE blog_id = '" . $this->blog . "' " .
@ -88,7 +87,7 @@ class kutrlLog
} }
if (null !== $type) { if (null !== $type) {
if (is_array($type)) { if (is_array($type)) {
$req .= "AND kut_type '" . $this->con->in($type) ."' "; $req .= "AND kut_type '" . $this->con->in($type) . "' ";
} else { } else {
$req .= "AND kut_type = '" . $this->con->escape($type) . "' "; $req .= "AND kut_type = '" . $this->con->escape($type) . "' ";
} }
@ -104,7 +103,7 @@ class kutrlLog
public function clear($id) public function clear($id)
{ {
$id = (integer) $id; $id = (int) $id;
$cur = $this->con->openCursor($this->table); $cur = $this->con->openCursor($this->table);
$this->con->writeLock($this->table); $this->con->writeLock($this->table);
@ -123,6 +122,7 @@ class kutrlLog
return true; return true;
} catch (Exception $e) { } catch (Exception $e) {
$this->con->unlock(); $this->con->unlock();
throw $e; throw $e;
} }
@ -131,7 +131,7 @@ class kutrlLog
public function delete($id) public function delete($id)
{ {
$id = (integer) $id; $id = (int) $id;
return $this->con->execute( return $this->con->execute(
'DELETE FROM ' . $this->table . ' ' . 'DELETE FROM ' . $this->table . ' ' .
@ -142,7 +142,7 @@ class kutrlLog
public function counter($id, $do = 'get') public function counter($id, $do = 'get')
{ {
$id = (integer) $id; $id = (int) $id;
$rs = $this->con->select( $rs = $this->con->select(
'SELECT kut_counter ' . 'SELECT kut_counter ' .
@ -154,21 +154,19 @@ class kutrlLog
$counter = $rs->isEmpty() ? 0 : $rs->kut_counter; $counter = $rs->isEmpty() ? 0 : $rs->kut_counter;
if ('get' == $do) { if ('get' == $do) {
return $counter; return $counter;
} elseif ('up' == $do) { } elseif ('up' == $do) {
$counter += 1; $counter += 1;
} elseif ('reset' == $do) { } elseif ('reset' == $do) {
$counter = 0; $counter = 0;
} else { } else {
return 0; return 0;
} }
$cur = $this->con->openCursor($this->table); $cur = $this->con->openCursor($this->table);
$this->con->writeLock($this->table); $this->con->writeLock($this->table);
$cur->kut_counter = (integer) $counter; $cur->kut_counter = (int) $counter;
$cur->update( $cur->update(
"WHERE blog_id='" . $this->blog . "' " . "WHERE blog_id='" . $this->blog . "' " .
"AND kut_id='" . $id . "'" "AND kut_id='" . $id . "'"
@ -188,8 +186,7 @@ class kutrlLog
if (!empty($p['columns']) && is_array($p['columns'])) { if (!empty($p['columns']) && is_array($p['columns'])) {
$content_req .= implode(', ', $p['columns']) . ', '; $content_req .= implode(', ', $p['columns']) . ', ';
} }
$r = $r = 'SELECT S.kut_id, S.kut_type, S.kut_hash, S.kut_url, ' .
'SELECT S.kut_id, S.kut_type, S.kut_hash, S.kut_url, ' .
$content_req . 'S.kut_dt '; $content_req . 'S.kut_dt ';
} }
$r .= 'FROM ' . $this->table . ' S '; $r .= 'FROM ' . $this->table . ' S ';
@ -203,8 +200,7 @@ class kutrlLog
$r .= "AND kut_service='kutrl' "; $r .= "AND kut_service='kutrl' ";
} }
if (isset($p['kut_type'])) { if (isset($p['kut_type'])) {
if (is_array($p['kut_type']) && !empty($p['kut_type'])) if (is_array($p['kut_type']) && !empty($p['kut_type'])) {
{
$r .= 'AND kut_type ' . $this->con->in($p['kut_type']); $r .= 'AND kut_type ' . $this->con->in($p['kut_type']);
} elseif ($p['kut_type'] != '') { } elseif ($p['kut_type'] != '') {
$r .= "AND kut_type = '" . $this->con->escape($p['kut_type']) . "' "; $r .= "AND kut_type = '" . $this->con->escape($p['kut_type']) . "' ";
@ -232,18 +228,15 @@ class kutrlLog
} }
} }
if (!empty($p['kut_year'])) { if (!empty($p['kut_year'])) {
$r .= $r .= 'AND ' . $this->con->dateFormat('kut_dt', '%Y') . ' = ' .
'AND ' . $this->con->dateFormat('kut_dt', '%Y') . ' = ' .
"'" . sprintf('%04d', $p['kut_year']) . "' "; "'" . sprintf('%04d', $p['kut_year']) . "' ";
} }
if (!empty($p['kut_month'])) { if (!empty($p['kut_month'])) {
$r .= $r .= 'AND ' . $this->con->dateFormat('kut_dt', '%m') . ' = ' .
'AND ' . $this->con->dateFormat('kut_dt', '%m') . ' = ' .
"'" . sprintf('%02d', $p['kut_month']) . "' "; "'" . sprintf('%02d', $p['kut_month']) . "' ";
} }
if (!empty($p['kut_day'])) { if (!empty($p['kut_day'])) {
$r .= $r .= 'AND ' . $this->con->dateFormat('kut_dt', '%d') . ' = ' .
'AND ' . $this->con->dateFormat('kut_dt', '%d') . ' = ' .
"'" . sprintf('%02d', $p['kut_day']) . "' "; "'" . sprintf('%02d', $p['kut_day']) . "' ";
} }
if (!empty($p['sql'])) { if (!empty($p['sql'])) {
@ -260,4 +253,4 @@ class kutrlLog
return $this->con->select($r); return $this->con->select($r);
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
class kutrlLinkslist class kutrlLinkslist
{ {
protected $core; protected $core;
@ -51,30 +50,30 @@ class kutrlLinkslist
echo '<p><strong>' . __('No short link') . '</strong></p>'; echo '<p><strong>' . __('No short link') . '</strong></p>';
} }
} else { } else {
$pager = new dcPager($page, $this->rs_count, $nb_per_page, 10); $pager = new dcPager($page, $this->rs_count, $nb_per_page, 10);
$links = []; $links = [];
if (isset($_REQUEST['entries'])) { if (isset($_REQUEST['entries'])) {
foreach ($_REQUEST['entries'] as $v) { foreach ($_REQUEST['entries'] as $v) {
$links[(integer) $v] = true; $links[(int) $v] = true;
} }
} }
$cols = [ $cols = [
'kut_url' => '<th colspan="2" class="first">' . __('Link') . '</th>', 'kut_url' => '<th colspan="2" class="first">' . __('Link') . '</th>',
'kut_hash' => '<th scope="col">' . __('Hash') . '</th>', 'kut_hash' => '<th scope="col">' . __('Hash') . '</th>',
'kut_dt' => '<th scope="col">' . __('Date') . '</th>', 'kut_dt' => '<th scope="col">' . __('Date') . '</th>',
'kut_service' => '<th scope="col">' . __('Service') . '</th>' 'kut_service' => '<th scope="col">' . __('Service') . '</th>'
]; ];
$cols = new ArrayObject($cols); $cols = new ArrayObject($cols);
$this->userColumns('kUtRL', $cols); $this->userColumns('kUtRL', $cols);
$html_block = $html_block = '<div class="table-outer">' .
'<div class="table-outer">' .
'<table>' . '<table>' .
'<caption>' . ($filter ? '<caption>' . (
$filter ?
sprintf(__('List of %s links matching the filter.'), $this->rs_count) : sprintf(__('List of %s links matching the filter.'), $this->rs_count) :
sprintf(__('List of links (%s)'), $this->rs_count) sprintf(__('List of links (%s)'), $this->rs_count)
). '</caption>' . ) . '</caption>' .
'<thead>' . '<thead>' .
'<tr>' . implode(iterator_to_array($cols)) . '</tr>' . '<tr>' . implode(iterator_to_array($cols)) . '</tr>' .
'</thead>' . '</thead>' .
@ -109,7 +108,7 @@ class kutrlLinkslist
$cols = [ $cols = [
'check' => '<td class="nowrap">' . 'check' => '<td class="nowrap">' .
form::checkbox(['entries[]'], $this->rs->kut_id, ['checked' => isset($entries[$this->rs->kut_id])]) . form::checkbox(['entries[]'], $this->rs->kut_id, ['checked' => isset($entries[$this->rs->kut_id])]) .
'</td>', '</td>',
'kut_url' => '<td class="maximal" scope="row">' . 'kut_url' => '<td class="maximal" scope="row">' .
'<a href="' . $this->rs->kut_url . '">' . $this->rs->kut_url . '</a>' . '<a href="' . $this->rs->kut_url . '">' . $this->rs->kut_url . '</a>' .
@ -120,14 +119,14 @@ class kutrlLinkslist
'kut_dt' => '<td class="nowrap count">' . 'kut_dt' => '<td class="nowrap count">' .
dt::dt2str(__('%Y-%m-%d %H:%M'), $this->rs->kut_dt, $this->core->auth->getInfo('user_tz')) . dt::dt2str(__('%Y-%m-%d %H:%M'), $this->rs->kut_dt, $this->core->auth->getInfo('user_tz')) .
'</td>', '</td>',
'kut_service' => '<td class="nowrap">' . 'kut_service' => '<td class="nowrap">' .
$type . $type .
'</td>' '</td>'
]; ];
$cols = new ArrayObject($cols); $cols = new ArrayObject($cols);
$this->userColumns('kUtRL', $cols); $this->userColumns('kUtRL', $cols);
return '<tr class="line">' . implode(iterator_to_array($cols)) . '</tr>' . "\n"; return '<tr class="line">' . implode(iterator_to_array($cols)) . '</tr>' . "\n";
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
# Generic class for shorten link service # Generic class for shorten link service
# A service class must extends this one # A service class must extends this one
class kutrlService class kutrlService
@ -20,7 +19,7 @@ class kutrlService
public $settings; public $settings;
public $log; public $log;
protected $config = array(); protected $config = [];
public function __construct($core) public function __construct($core)
{ {
@ -33,24 +32,24 @@ class kutrlService
$this->init(); $this->init();
// Force setting // Force setting
$allow_external_url = $this->settings->kutrl_allow_external_url; $allow_external_url = $this->settings->kutrl_allow_external_url;
$this->config['$allow_external_url'] = null === $allow_external_url ? $this->config['$allow_external_url'] = null === $allow_external_url ?
true : $allow_external_url; true : $allow_external_url;
$this->config = array_merge( $this->config = array_merge(
[ [
'id' => 'undefined', 'id' => 'undefined',
'name' => 'undefined', 'name' => 'undefined',
'home' => '', 'home' => '',
'allow_external_url' => true, 'allow_external_url' => true,
'allow_custom_hash' => false, 'allow_custom_hash' => false,
'allow_protocols' => ['http://'], 'allow_protocols' => ['http://'],
'url_test' => 'http://dotclear.jcdenis.com/go/kUtRL', 'url_test' => 'http://dotclear.jcdenis.com/go/kUtRL',
'url_api' => '', 'url_api' => '',
'url_base' => '', 'url_base' => '',
'url_min_len' => 0 'url_min_len' => 0
], ],
$this->config $this->config
); );
@ -65,7 +64,7 @@ class kutrlService
# get config value # get config value
public function get($k) public function get($k)
{ {
return isset($this->config[$k]) ? $this->config[$k] : null; return $this->config[$k] ?? null;
} }
# Additionnal actions on child start # Additionnal actions on child start
@ -83,7 +82,7 @@ class kutrlService
# Settings form for admin page # Settings form for admin page
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p class="form-note">' . '<p class="form-note">' .
__('There is nothing to configure for this service.') . __('There is nothing to configure for this service.') .
'</p>'; '</p>';
@ -98,7 +97,7 @@ class kutrlService
# Test if an url is valid # Test if an url is valid
public function isValidUrl($url) public function isValidUrl($url)
{ {
return (boolean) filter_var($url, FILTER_VALIDATE_URL); return (bool) filter_var($url, FILTER_VALIDATE_URL);
} }
# Test if an url contents know prefix # Test if an url contents know prefix
@ -110,18 +109,17 @@ class kutrlService
# Test if an url is long enoutgh # Test if an url is long enoutgh
public function isLongerUrl($url) public function isLongerUrl($url)
{ {
return (strlen($url) >= (integer) $this->url_min_len); return (strlen($url) >= (int) $this->url_min_len);
} }
# Test if an url protocol (eg: http://) is allowed # Test if an url protocol (eg: http://) is allowed
public function isProtocolUrl($url) public function isProtocolUrl($url)
{ {
foreach($this->allow_protocols as $protocol) { foreach ($this->allow_protocols as $protocol) {
if (empty($protocol)) { if (empty($protocol)) {
continue; continue;
} }
if (strpos($url,$protocol) === 0) { if (strpos($url, $protocol) === 0) {
return true; return true;
} }
} }
@ -133,7 +131,7 @@ class kutrlService
public function isBlogUrl($url) public function isBlogUrl($url)
{ {
$base = $this->core->blog->url; $base = $this->core->blog->url;
$url = substr($url, 0, strlen($base)); $url = substr($url, 0, strlen($base));
return $url == $base; return $url == $base;
} }
@ -182,12 +180,12 @@ class kutrlService
# --BEHAVIOR-- kutrlAfterCreateShortUrl # --BEHAVIOR-- kutrlAfterCreateShortUrl
$this->core->callBehavior('kutrlAfterCreateShortUrl', $rs); $this->core->callBehavior('kutrlAfterCreateShortUrl', $rs);
} }
return $rs; return $rs;
} }
# Create a hash for a given url (and its custom hash) # Create a hash for a given url (and its custom hash)
public function createHash($url, $hash = null) public function createHash($url, $hash = null)
{ {
return false; return false;
@ -220,13 +218,13 @@ class kutrlService
# Post request # Post request
public static function post($server, $data, $verbose = true, $get = false, $headers = []) public static function post($server, $data, $verbose = true, $get = false, $headers = [])
{ {
$url = (string) $server; $url = (string) $server;
$client = netHttp::initClient($url, $url); $client = netHttp::initClient($url, $url);
$client->setUserAgent('kUtRL - http://kutrl.fr'); $client->setUserAgent('kUtRL - http://kutrl.fr');
$client->setPersistReferers(false); $client->setPersistReferers(false);
if (is_array($headers) && !empty($headers)) { if (is_array($headers) && !empty($headers)) {
foreach($headers as $header) { foreach ($headers as $header) {
$client->setMoreHeader($header); $client->setMoreHeader($header);
} }
} }
@ -244,4 +242,4 @@ class kutrlService
return true; return true;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
# This file contents class to shorten url pass through wiki # This file contents class to shorten url pass through wiki
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
@ -25,7 +24,7 @@ class kutrlWiki
$s = $core->blog->settings->kUtRL; $s = $core->blog->settings->kUtRL;
# Do nothing on comment preview and post preview # Do nothing on comment preview and post preview
if (!empty($_POST['preview']) if (!empty($_POST['preview'])
|| !empty($GLOBALS['_ctx']) && $GLOBALS['_ctx']->preview || !empty($GLOBALS['_ctx']) && $GLOBALS['_ctx']->preview
|| !$s->kutrl_active || !$s->kutrl_active
) { ) {
@ -34,7 +33,7 @@ class kutrlWiki
if (null === ($kut = kutrl::quickPlace('wiki'))) { if (null === ($kut = kutrl::quickPlace('wiki'))) {
return null; return null;
} }
foreach($kut->allow_protocols as $protocol) { foreach ($kut->allow_protocols as $protocol) {
$wiki2xhtml->registerFunction( $wiki2xhtml->registerFunction(
'url:' . $protocol, 'url:' . $protocol,
['kutrlWiki', 'transform'] ['kutrlWiki', 'transform']
@ -55,25 +54,27 @@ class kutrlWiki
} }
# Test if long url exists # Test if long url exists
$is_new = false; $is_new = false;
$rs = $kut->isKnowUrl($url); $rs = $kut->isKnowUrl($url);
if (!$rs) { if (!$rs) {
$is_new = true; $is_new = true;
$rs = $kut->hash($url); $rs = $kut->hash($url);
} }
if (!$rs) { if (!$rs) {
return []; return [];
} else {
$res = [];
$testurl = strlen($rs->url) > 35 ? substr($rs->url, 0, 35) . '...' : $rs->url;
$res['url'] = $kut->url_base . $rs->hash;
$res['title'] = sprintf(__('%s (Shorten with %s)'), $rs->url, __($kut->name));
if ($testurl == $content) $res['content'] = $res['url'];
# ex: Send new url to messengers
if (!empty($rs)) {
$core->callBehavior('wikiAfterKutrlCreate', $core, $rs, __('New short URL'));
}
return $res;
} }
$res = [];
$testurl = strlen($rs->url) > 35 ? substr($rs->url, 0, 35) . '...' : $rs->url;
$res['url'] = $kut->url_base . $rs->hash;
$res['title'] = sprintf(__('%s (Shorten with %s)'), $rs->url, __($kut->name));
if ($testurl == $content) {
$res['content'] = $res['url'];
}
# ex: Send new url to messengers
if (!empty($rs)) {
$core->callBehavior('wikiAfterKutrlCreate', $core, $rs, __('New short URL'));
}
return $res;
} }
} }

View File

@ -1,30 +1,27 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
# This file takes records from plugin dcMiniUrl
# This file takes records from plugin dcMiniUrl
# and inserts them into plugin kUtRL. # and inserts them into plugin kUtRL.
if (!defined('DC_CONTEXT_ADMIN')){return;} if (!defined('DC_CONTEXT_ADMIN')) {
return;
}
$miniurl_patch = new dcMiniUrl2kUtRL($core); $miniurl_patch = new dcMiniUrl2kUtRL($core);
if ($miniurl_patch->parseRecords()) if ($miniurl_patch->parseRecords()) {
{ try {
try
{
$core->plugins->deactivateModule('dcMiniUrl'); $core->plugins->deactivateModule('dcMiniUrl');
} } catch (Exception $e) {
catch (Exception $e)
{
//$core->error->add($e->getMessage()); //$core->error->add($e->getMessage());
} }
} }
@ -39,40 +36,39 @@ class dcMiniUrl2kUtRL
public function __construct($core) public function __construct($core)
{ {
$this->core = $core; $this->core = $core;
$this->con = $core->con; $this->con = $core->con;
$this->k_tb = $core->prefix.'kutrl'; $this->k_tb = $core->prefix . 'kutrl';
$this->m_tb = $core->prefix.'miniurl'; $this->m_tb = $core->prefix . 'miniurl';
} }
public function parseRecords() public function parseRecords()
{ {
$rs = $this->con->select( $rs = $this->con->select(
'SELECT * FROM '.$this->m_tb.' ' 'SELECT * FROM ' . $this->m_tb . ' '
); );
while ($rs->fetch()) while ($rs->fetch()) {
{ if ($rs->miniurl_type == 'customurl' || $rs->miniurl_type == 'miniurl') {
if ($rs->miniurl_type == 'customurl' || $rs->miniurl_type == 'miniurl') if ($this->exists($rs)) {
{ continue;
if ($this->exists($rs)) continue; }
$this->insertKutrl($rs); $this->insertKutrl($rs);
$this->insertLocal($rs); $this->insertLocal($rs);
} } else {
else
{
$this->insertOther($rs); $this->insertOther($rs);
} }
} }
return true; return true;
} }
private function insertKutrl($rs) private function insertKutrl($rs)
{ {
$cur = $this->common($rs); $cur = $this->common($rs);
$cur->kut_service = 'kutrl'; $cur->kut_service = 'kutrl';
$cur->kut_type = 'local'; $cur->kut_type = 'local';
$cur->kut_counter = 0; $cur->kut_counter = 0;
$cur->kut_password = null; $cur->kut_password = null;
$cur->insert(); $cur->insert();
@ -81,9 +77,9 @@ class dcMiniUrl2kUtRL
private function insertLocal($rs) private function insertLocal($rs)
{ {
$cur = $this->common($rs); $cur = $this->common($rs);
$cur->kut_service = 'local'; $cur->kut_service = 'local';
$cur->kut_type = $rs->miniurl_type == 'customurl' ? $cur->kut_type = $rs->miniurl_type == 'customurl' ?
'localcustom' : 'localnormal'; 'localcustom' : 'localnormal';
$cur->insert(); $cur->insert();
@ -102,14 +98,14 @@ class dcMiniUrl2kUtRL
{ {
$cur = $this->con->openCursor($this->k_tb); $cur = $this->con->openCursor($this->k_tb);
$this->con->writeLock($this->k_tb); $this->con->writeLock($this->k_tb);
$cur->kut_id = $this->nextId(); $cur->kut_id = $this->nextId();
$cur->blog_id = $rs->blog_id; $cur->blog_id = $rs->blog_id;
$cur->kut_service = 'unknow'; $cur->kut_service = 'unknow';
$cur->kut_type = $rs->miniurl_type; $cur->kut_type = $rs->miniurl_type;
$cur->kut_hash = $rs->miniurl_id; $cur->kut_hash = $rs->miniurl_id;
$cur->kut_url = $rs->miniurl_str; $cur->kut_url = $rs->miniurl_str;
$cur->kut_dt = $rs->miniurl_dt; $cur->kut_dt = $rs->miniurl_dt;
$cur->kut_counter = $rs->miniurl_counter; $cur->kut_counter = $rs->miniurl_counter;
$cur->kut_password = $rs->miniurl_password; $cur->kut_password = $rs->miniurl_password;
return $cur; return $cur;
@ -118,18 +114,19 @@ class dcMiniUrl2kUtRL
private function exists($rs) private function exists($rs)
{ {
$chk = $this->con->select( $chk = $this->con->select(
'SELECT kut_hash FROM '.$this->k_tb.' '. 'SELECT kut_hash FROM ' . $this->k_tb . ' ' .
"WHERE blog_id = '".$rs->blog_id."' ". "WHERE blog_id = '" . $rs->blog_id . "' " .
"AND kut_service = 'local' ". "AND kut_service = 'local' " .
"AND kut_hash = '".$rs->miniurl_id."' " "AND kut_hash = '" . $rs->miniurl_id . "' "
); );
return !$chk->isEmpty(); return !$chk->isEmpty();
} }
private function nextId() private function nextId()
{ {
return $this->con->select( return $this->con->select(
'SELECT MAX(kut_id) FROM '.$this->k_tb.' ' 'SELECT MAX(kut_id) FROM ' . $this->k_tb . ' '
)->f(0) + 1; )->f(0) + 1;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -29,8 +28,8 @@ class bilbolinksKutrlService extends kutrlService
if (!empty($base) && substr($base, -1, 1) != '/') { if (!empty($base) && substr($base, -1, 1) != '/') {
$base .= '/'; $base .= '/';
} }
$this->config['url_api'] = $base . 'api.php'; $this->config['url_api'] = $base . 'api.php';
$this->config['url_base'] = $base; $this->config['url_base'] = $base;
$this->config['url_min_len'] = 25; $this->config['url_min_len'] = 25;
} }
@ -48,7 +47,7 @@ class bilbolinksKutrlService extends kutrlService
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p><label class="classic">' . '<p><label class="classic">' .
__('Url of the service:') . '<br />' . __('Url of the service:') . '<br />' .
form::field(['kutrl_srv_bilbolinks_base'], 50, 255, $this->settings->kutrl_srv_bilbolinks_base) . form::field(['kutrl_srv_bilbolinks_base'], 50, 255, $this->settings->kutrl_srv_bilbolinks_base) .
@ -67,7 +66,7 @@ class bilbolinksKutrlService extends kutrlService
} }
$arg = ['longurl' => urlencode($this->url_test)]; $arg = ['longurl' => urlencode($this->url_test)];
if (!self::post($this->url_api, $arg, true,true)) { if (!self::post($this->url_api, $arg, true, true)) {
$this->error->add(__('Service is unavailable.')); $this->error->add(__('Service is unavailable.'));
return false; return false;
@ -90,11 +89,11 @@ class bilbolinksKutrlService extends kutrlService
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', $response); $rs->hash = str_replace($this->url_base, '', $response);
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -18,24 +17,24 @@ if (!defined('DC_RC_PATH')) {
class bitlyKutrlService extends kutrlService class bitlyKutrlService extends kutrlService
{ {
protected $config = [ protected $config = [
'id' => 'bitly', 'id' => 'bitly',
'name' => 'bit.ly', 'name' => 'bit.ly',
'home' => 'https://bit.ly', 'home' => 'https://bit.ly',
'url_api' => 'https://api-ssl.bitly.com/v4/', 'url_api' => 'https://api-ssl.bitly.com/v4/',
'url_base' => 'https://bit.ly/', 'url_base' => 'https://bit.ly/',
'url_min_len' => 25, 'url_min_len' => 25,
'allow_protocols' => ['http://', 'https://'], 'allow_protocols' => ['http://', 'https://'],
]; ];
private $args = [ private $args = [
'apiKey' => '' 'apiKey' => ''
]; ];
protected function init() protected function init()
{ {
$this->args['apiKey'] = $this->settings->kutrl_srv_bitly_apikey; $this->args['apiKey'] = $this->settings->kutrl_srv_bitly_apikey;
} }
public function saveSettings() public function saveSettings()
@ -45,12 +44,12 @@ class bitlyKutrlService extends kutrlService
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p><label class="classic">' . __('API Key:') . '<br />' . '<p><label class="classic">' . __('API Key:') . '<br />' .
form::field(['kutrl_srv_bitly_apikey'], 50, 255, $this->settings->kutrl_srv_bitly_apikey) . form::field(['kutrl_srv_bitly_apikey'], 50, 255, $this->settings->kutrl_srv_bitly_apikey) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . '<p class="form-note">' .
sprintf(__('This is your personnal %s API key. You can find it on your account page.'), $this->config['name']) . sprintf(__('This is your personnal %s API key. You can find it on your account page.'), $this->config['name']) .
'</p>'; '</p>';
} }
@ -84,7 +83,7 @@ class bitlyKutrlService extends kutrlService
$rsp = json_decode($response); $rsp = json_decode($response);
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', (string) $rsp->link); $rs->hash = str_replace($this->url_base, '', (string) $rsp->link);
$rs->url = (string) $rsp->long_url; $rs->url = (string) $rsp->long_url;
$rs->type = $this->id; $rs->type = $this->id;
@ -96,4 +95,4 @@ class bitlyKutrlService extends kutrlService
{ {
return ['Authorization: Bearer ' . $this->args['apiKey'], 'Content-Type: application/json']; return ['Authorization: Bearer ' . $this->args['apiKey'], 'Content-Type: application/json'];
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -29,10 +28,10 @@ class customKutrlService extends kutrlService
$config = []; $config = [];
} }
$this->config['url_api'] = !empty($config['url_api']) ? $config['url_api'] : ''; $this->config['url_api'] = !empty($config['url_api']) ? $config['url_api'] : '';
$this->config['url_base'] = !empty($config['url_base']) ? $config['url_base'] : ''; $this->config['url_base'] = !empty($config['url_base']) ? $config['url_base'] : '';
$this->config['url_param'] = !empty($config['url_param']) ? $config['url_param'] : ''; $this->config['url_param'] = !empty($config['url_param']) ? $config['url_param'] : '';
$this->config['url_encode'] = !empty($config['url_api']); $this->config['url_encode'] = !empty($config['url_api']);
$this->config['url_min_length'] = strlen($this->url_base) + 2; $this->config['url_min_length'] = strlen($this->url_base) + 2;
} }
@ -62,33 +61,32 @@ class customKutrlService extends kutrlService
} }
$config = array_merge($default, $config); $config = array_merge($default, $config);
echo echo
'<p>' . __('You can set a configurable service.') . '<br />' . '<p>' . __('You can set a configurable service.') . '<br />' .
__('It consists on a simple query to an URL with only one param.') . '<br />' . __('It consists on a simple query to an URL with only one param.') . '<br />' .
__('It must respond with a http code 200 on success.') . '<br />' . __('It must respond with a http code 200 on success.') . '<br />' .
__('It must returned the short URL (or only hash) in clear text.') . '</p>' . __('It must returned the short URL (or only hash) in clear text.') . '</p>' .
'<p><label class="classic">' . __('API URL:') . '<br />' . '<p><label class="classic">' . __('API URL:') . '<br />' .
form::field(['kutrl_srv_custom_url_api'], 50, 255, $config['url_api']) . form::field(['kutrl_srv_custom_url_api'], 50, 255, $config['url_api']) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . __('Full path to API of the URL shortener. ex: "http://is.gd/api.php"') . '</p>' . '<p class="form-note">' . __('Full path to API of the URL shortener. ex: "http://is.gd/api.php"') . '</p>' .
'<p><label class="classic">' . __('Short URL domain:') . '<br />' . '<p><label class="classic">' . __('Short URL domain:') . '<br />' .
form::field(['kutrl_srv_custom_url_base'], 50, 255, $config['url_base']) . form::field(['kutrl_srv_custom_url_base'], 50, 255, $config['url_base']) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . __('Common part of the short URL. ex: "http://is.gd/"') . '</p>' . '<p class="form-note">' . __('Common part of the short URL. ex: "http://is.gd/"') . '</p>' .
'<p><label class="classic">' . __('API URL param:') . '<br />' . '<p><label class="classic">' . __('API URL param:') . '<br />' .
form::field(['kutrl_srv_custom_url_param'], 50, 255, $config['url_param']) . form::field(['kutrl_srv_custom_url_param'], 50, 255, $config['url_param']) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . __('Param of the query. ex: "longurl"') . '</p>' . '<p class="form-note">' . __('Param of the query. ex: "longurl"') . '</p>' .
'<p><label class="classic">' . '<p><label class="classic">' .
form::checkbox(['kutrl_srv_custom_url_encode'], '1', $config['url_encode']) . ' ' . form::checkbox(['kutrl_srv_custom_url_encode'], '1', $config['url_encode']) . ' ' .
__('Encode URL') . __('Encode URL') .
'</label></p>'; '</label></p>';
} }
public function testService() public function testService()
{ {
if (empty($this->url_api)) { if (empty($this->url_api)) {
return false; return false;
} }
$url = $this->url_encode ? urlencode($this->url_test) : $this->url_test; $url = $this->url_encode ? urlencode($this->url_test) : $this->url_test;
@ -109,13 +107,14 @@ class customKutrlService extends kutrlService
if (!($response = self::post($this->url_api, $arg, true, true))) { if (!($response = self::post($this->url_api, $arg, true, true))) {
$this->error->add(__('Service is unavailable.')); $this->error->add(__('Service is unavailable.'));
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', $response); $rs->hash = str_replace($this->url_base, '', $response);
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,23 +1,22 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
# nb: "default" ne veut pas dire service par défaut # nb: "default" ne veut pas dire service par défaut
# mais service simple et rapide configuré par des constantes # mais service simple et rapide configuré par des constantes
# cela permet de configurer ces constantes dans le fichier # cela permet de configurer ces constantes dans le fichier
# config de Dotclear pour une plateforme complète. # config de Dotclear pour une plateforme complète.
class defaultKutrlService extends kutrlService class defaultKutrlService extends kutrlService
@ -25,37 +24,37 @@ class defaultKutrlService extends kutrlService
protected function init() protected function init()
{ {
$this->config = [ $this->config = [
'id' => 'default', 'id' => 'default',
'name' => 'Default', 'name' => 'Default',
'home' => '', 'home' => '',
'url_api' => SHORTEN_SERVICE_API, 'url_api' => SHORTEN_SERVICE_API,
'url_base' => SHORTEN_SERVICE_BASE, 'url_base' => SHORTEN_SERVICE_BASE,
'url_min_len' => strlen(SHORTEN_SERVICE_BASE) + 2, 'url_min_len' => strlen(SHORTEN_SERVICE_BASE) + 2,
'url_param' => SHORTEN_SERVICE_PARAM, 'url_param' => SHORTEN_SERVICE_PARAM,
'url_encode' => SHORTEN_SERVICE_ENCODE 'url_encode' => SHORTEN_SERVICE_ENCODE
]; ];
} }
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p class="form-note">' . '<p class="form-note">' .
__('There is nothing to configure for this service.') . __('There is nothing to configure for this service.') .
'</p>' . '</p>' .
'<p>' . __('This service is set to:') . '</p>' . '<p>' . __('This service is set to:') . '</p>' .
'<dl>' . '<dl>' .
'<dt>' . __('Service name:') . '</dt>' . '<dt>' . __('Service name:') . '</dt>' .
'<dd>' . SHORTEN_SERVICE_NAME . '</dd>' . '<dd>' . SHORTEN_SERVICE_NAME . '</dd>' .
'<dt>' . __('Full API URL:') . '</dt>' . '<dt>' . __('Full API URL:') . '</dt>' .
'<dd>' . SHORTEN_SERVICE_API . '</dd>' . '<dd>' . SHORTEN_SERVICE_API . '</dd>' .
'<dt>' . __('Query param:') . '</dt>' . '<dt>' . __('Query param:') . '</dt>' .
'<dd>' . SHORTEN_SERVICE_PARAM . '</dd>' . '<dd>' . SHORTEN_SERVICE_PARAM . '</dd>' .
'<dt>' . __('Short URL domain:') . '</dt>' . '<dt>' . __('Short URL domain:') . '</dt>' .
'<dd>' . SHORTEN_SERVICE_BASE . '</dd>' . '<dd>' . SHORTEN_SERVICE_BASE . '</dd>' .
'<dt>' . __('Encode URL:') . '</dt>' . '<dt>' . __('Encode URL:') . '</dt>' .
'<dd>' . (SHORTEN_SERVICE_ENCODE ? __('yes') : __('no')) . '</dd>' . '<dd>' . (SHORTEN_SERVICE_ENCODE ? __('yes') : __('no')) . '</dd>' .
'</dl>'; '</dl>';
} }
@ -84,11 +83,11 @@ class defaultKutrlService extends kutrlService
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', $response); $rs->hash = str_replace($this->url_base, '', $response);
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,45 +1,45 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
class googlKutrlService extends kutrlService class googlKutrlService extends kutrlService
{ {
public $id = 'googl'; public $id = 'googl';
public $name = 'goo.gl'; public $name = 'goo.gl';
public $home = 'http://goo.gl'; public $home = 'http://goo.gl';
private $url_api = 'https://www.googleapis.com/urlshortener/v1/url'; private $url_api = 'https://www.googleapis.com/urlshortener/v1/url';
private $url_test = 'http://dotclear.jcdenis.com/go/kUtRL'; private $url_test = 'http://dotclear.jcdenis.com/go/kUtRL';
private $args = [ private $args = [
'key' => '' 'key' => ''
]; ];
private $headers = array('Content-Type: application/json'); private $headers = ['Content-Type: application/json'];
protected function init() protected function init()
{ {
$this->url_base = 'http://goo.gl/'; $this->url_base = 'http://goo.gl/';
$this->url_min_length = 20; $this->url_min_length = 20;
} }
public function testService() public function testService()
{ {
$args = $this->args; $args = $this->args;
$args['shortUrl'] = $this->url_base . 'PLovn'; $args['shortUrl'] = $this->url_base . 'PLovn';
if (!($response = self::post($this->url_api, $args, true, true, $this->headers))) { if (!($response = self::post($this->url_api, $args, true, true, $this->headers))) {
$this->error->add(__('Failed to call service.')); $this->error->add(__('Failed to call service.'));
return false; return false;
} }
@ -47,19 +47,22 @@ class googlKutrlService extends kutrlService
if (empty($rsp->status)) { if (empty($rsp->status)) {
$this->error->add(__('An error occured')); $this->error->add(__('An error occured'));
return false; return false;
} }
return true; return true;
} }
public function createHash($url, $hash = null) public function createHash($url, $hash = null)
{ {
$args = $this->args; $args = $this->args;
$args['longUrl'] = $url; $args['longUrl'] = $url;
$args = json_encode($args); $args = json_encode($args);
if (!($response = self::post($this->url_api, $args, true, false, $this->headers))) { if (!($response = self::post($this->url_api, $args, true, false, $this->headers))) {
$this->error->add(__('Failed to call service.')); $this->error->add(__('Failed to call service.'));
return false; return false;
} }
@ -67,14 +70,15 @@ class googlKutrlService extends kutrlService
if (empty($rsp->id)) { if (empty($rsp->id)) {
$this->error->add(__('An error occured')); $this->error->add(__('An error occured'));
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', $rsp->id); $rs->hash = str_replace($this->url_base, '', $rsp->id);
$rs->url = $rsp->longUrl; $rs->url = $rsp->longUrl;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,24 +1,25 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) {
if (!defined('DC_RC_PATH')){return;} return;
}
class isgdKutrlService extends kutrlService class isgdKutrlService extends kutrlService
{ {
protected $config = [ protected $config = [
'id' => 'isgd', 'id' => 'isgd',
'name' => 'is.gd', 'name' => 'is.gd',
'home' => 'http://is.gd/', 'home' => 'http://is.gd/',
'url_api' => 'http://is.gd/api.php', 'url_api' => 'http://is.gd/api.php',
'url_base' => 'http://is.gd/', 'url_base' => 'http://is.gd/',
@ -47,11 +48,11 @@ class isgdKutrlService extends kutrlService
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', $response); $rs->hash = str_replace($this->url_base, '', $response);
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -18,21 +17,20 @@ if (!defined('DC_RC_PATH')) {
class localKutrlService extends kutrlService class localKutrlService extends kutrlService
{ {
protected $config = [ protected $config = [
'id' => 'local', 'id' => 'local',
'name' => 'kUtRL', 'name' => 'kUtRL',
'home' => 'https://github.com/JcDenis/kUtRL', 'home' => 'https://github.com/JcDenis/kUtRL',
'allow_custom_hash' => true 'allow_custom_hash' => true
]; ];
protected function init() protected function init()
{ {
$protocols = (string) $this->settings->kutrl_srv_local_protocols; $protocols = (string) $this->settings->kutrl_srv_local_protocols;
$this->config['allow_protocols'] = empty($protocols) ? [] : explode(',', $protocols); $this->config['allow_protocols'] = empty($protocols) ? [] : explode(',', $protocols);
$this->config['url_base'] = $this->core->blog->url . $this->core->url->getBase('kutrl') . '/'; $this->config['url_base'] = $this->core->blog->url . $this->core->url->getBase('kutrl') . '/';
$this->config['url_min_len'] = strlen($this->url_base) + 2; $this->config['url_min_len'] = strlen($this->url_base) + 2;
} }
public function saveSettings() public function saveSettings()
@ -46,56 +44,56 @@ class localKutrlService extends kutrlService
public function settingsForm() public function settingsForm()
{ {
echo echo
'<div class="two-cols"><div class="col">' . '<div class="two-cols"><div class="col">' .
'<p><strong>' . __('Settings:') . '</strong></p>' . '<p><strong>' . __('Settings:') . '</strong></p>' .
'<p><label class="classic">' . '<p><label class="classic">' .
__('Allowed protocols:') . '<br />' . __('Allowed protocols:') . '<br />' .
form::field(['kutrl_srv_local_protocols'], 50, 255, $this->settings->kutrl_srv_local_protocols) . form::field(['kutrl_srv_local_protocols'], 50, 255, $this->settings->kutrl_srv_local_protocols) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . '<p class="form-note">' .
__('Use comma seperated list like: "http:,https:,ftp:"') . __('Use comma seperated list like: "http:,https:,ftp:"') .
'</p>' . '</p>' .
'<p><label class="classic">' . '<p><label class="classic">' .
form::checkbox(['kutrl_srv_local_public'], '1', $this->settings->kutrl_srv_local_public) . ' ' . form::checkbox(['kutrl_srv_local_public'], '1', $this->settings->kutrl_srv_local_public) . ' ' .
__('Enable public page for visitors to shorten links') . __('Enable public page for visitors to shorten links') .
'</label></p>' . '</label></p>' .
'<p class="area" id="style-area"><label for="_style">' . __('CSS:') . '</label>' . '<p class="area" id="style-area"><label for="_style">' . __('CSS:') . '</label>' .
form::textarea('kutrl_srv_local_css',50,3,html::escapeHTML($this->settings->kutrl_srv_local_css), '', 2) . form::textarea('kutrl_srv_local_css', 50, 3, html::escapeHTML($this->settings->kutrl_srv_local_css), '', 2) .
'</p>' . '</p>' .
'<p class="form-note">' . __('You can add here special cascading style sheet. Body of page has class "dc-kutrl" and widgets have class "shortenkutrlwidget" and "rankkutrlwidget".') . '</p>' . '<p class="form-note">' . __('You can add here special cascading style sheet. Body of page has class "dc-kutrl" and widgets have class "shortenkutrlwidget" and "rankkutrlwidget".') . '</p>' .
'<p><label class="classic">' . '<p><label class="classic">' .
form::checkbox(['kutrl_srv_local_404_active'], '1', $this->settings->kutrl_srv_local_404_active) . ' ' . form::checkbox(['kutrl_srv_local_404_active'], '1', $this->settings->kutrl_srv_local_404_active) . ' ' .
__('Enable special 404 error public page for unknow urls') . __('Enable special 404 error public page for unknow urls') .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . __('If this is not activated, the default 404 page of the theme will be display.') . '</p>' . '<p class="form-note">' . __('If this is not activated, the default 404 page of the theme will be display.') . '</p>' .
'</div><div class="col">' . '</div><div class="col">' .
'<p><strong>' . __('Note:') . '</strong></p>' . '<p><strong>' . __('Note:') . '</strong></p>' .
'<p>' . '<p>' .
__('This service use your own Blog to shorten and serve URL.') . '<br />' . __('This service use your own Blog to shorten and serve URL.') . '<br />' .
sprintf(__('This means that with this service short links start with "%s".'), $this->url_base) . sprintf(__('This means that with this service short links start with "%s".'), $this->url_base) .
'</p>' . '</p>' .
'<p>' . '<p>' .
__("You can use Dotclear's plugin called myUrlHandlers to change short links prefix on your blog."); __("You can use Dotclear's plugin called myUrlHandlers to change short links prefix on your blog.");
if (preg_match('/index\.php/', $this->url_base)) { if (preg_match('/index\.php/', $this->url_base)) {
echo echo
'<p>' . '<p>' .
__("We recommand that you use a rewrite engine in order to remove 'index.php' from your blog's URL.") . __("We recommand that you use a rewrite engine in order to remove 'index.php' from your blog's URL.") .
'<br /><a href="http://fr.dotclear.org/documentation/2.0/usage/blog-parameters">' . '<br /><a href="http://fr.dotclear.org/documentation/2.0/usage/blog-parameters">' .
__("You can find more about this on the Dotclear's documentation.") . __("You can find more about this on the Dotclear's documentation.") .
'</a></p>'; '</a></p>';
} }
echo echo
'</p>' . '</p>' .
'<p>' . __('There are two templates delivered with kUtRL, if you do not use default theme, you may adapt them to yours.') . '<br />' . '<p>' . __('There are two templates delivered with kUtRL, if you do not use default theme, you may adapt them to yours.') . '<br />' .
__('Files are in plugin directory /default-templates, just copy them into your theme and edit them.') . '</p>' . __('Files are in plugin directory /default-templates, just copy them into your theme and edit them.') . '</p>' .
'</div></div><br class="clear"/>'; '</div></div><br class="clear"/>';
} }
@ -104,30 +102,28 @@ class localKutrlService extends kutrlService
{ {
$ap = $this->allow_protocols; $ap = $this->allow_protocols;
if (!empty($ap)) { if (!empty($ap)) {
return true; return true;
} else {
$this->error->add(__('Service is not well configured.'));
return false;
} }
$this->error->add(__('Service is not well configured.'));
return false;
} }
public function createHash($url, $hash = null) public function createHash($url, $hash = null)
{ {
# Create response object # Create response object
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->type = 'local'; $rs->type = 'local';
$rs->url = $url; $rs->url = $url;
# Normal link # Normal link
if ($hash === null) { if ($hash === null) {
$type = 'localnormal'; $type = 'localnormal';
$rs->hash = $this->next($this->last('localnormal')); $rs->hash = $this->next($this->last('localnormal'));
# Mixed custom link # Mixed custom link
} elseif (preg_match('/^([A-Za-z0-9]{2,})\!\!$/', $hash, $m)) { } elseif (preg_match('/^([A-Za-z0-9]{2,})\!\!$/', $hash, $m)) {
$type = 'localmix'; $type = 'localmix';
$rs->hash = $m[1] . $this->next(-1, $m[1]); $rs->hash = $m[1] . $this->next(-1, $m[1]);
# Custom link # Custom link
@ -137,7 +133,7 @@ class localKutrlService extends kutrlService
return false; return false;
} }
$type = 'localcustom'; $type = 'localcustom';
$rs->hash = $hash; $rs->hash = $hash;
# Wrong char in custom hash # Wrong char in custom hash
@ -170,11 +166,12 @@ class localKutrlService extends kutrlService
if ($last_id == -1) { if ($last_id == -1) {
$next_id = 0; $next_id = 0;
} else { } else {
for($x = 1; $x <= strlen($last_id); $x++) { for ($x = 1; $x <= strlen($last_id); $x++) {
$pos = strlen($last_id) - $x; $pos = strlen($last_id) - $x;
if ($last_id[$pos] != 'z') { if ($last_id[$pos] != 'z') {
$next_id = $this->increment($last_id, $pos); $next_id = $this->increment($last_id, $pos);
break; break;
} }
} }
@ -183,7 +180,7 @@ class localKutrlService extends kutrlService
} }
} }
return false === $this->log->select(null,$prefix . $next_id, null, 'local') ? return false === $this->log->select(null, $prefix . $next_id, null, 'local') ?
$next_id : $this->next($next_id, $prefix); $next_id : $this->next($next_id, $prefix);
} }
@ -199,7 +196,7 @@ class localKutrlService extends kutrlService
protected function increment($id, $pos) protected function increment($id, $pos)
{ {
$id = str_split($id); $id = str_split($id);
$char = $id[$pos]; $char = $id[$pos];
if (is_numeric($char)) { if (is_numeric($char)) {
@ -221,7 +218,6 @@ class localKutrlService extends kutrlService
public function getUrl($hash) public function getUrl($hash)
{ {
if (false === ($rs = $this->log->select(null, $hash, null, 'local'))) { if (false === ($rs = $this->log->select(null, $hash, null, 'local'))) {
return false; return false;
} }
if (!$rs->url) { //previously removed url if (!$rs->url) { //previously removed url
@ -236,7 +232,6 @@ class localKutrlService extends kutrlService
public function deleteUrl($url, $delete = false) public function deleteUrl($url, $delete = false)
{ {
if (false === ($rs = $this->log->select($url, null, null, 'local'))) { if (false === ($rs = $this->log->select($url, null, null, 'local'))) {
return false; return false;
} }
if ($delete) { if ($delete) {
@ -247,4 +242,4 @@ class localKutrlService extends kutrlService
return true; return true;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -18,12 +17,12 @@ if (!defined('DC_RC_PATH')) {
class shorttoKutrlService extends kutrlService class shorttoKutrlService extends kutrlService
{ {
protected $config = [ protected $config = [
'id' => 'shortto', 'id' => 'shortto',
'name' => 'short.to', 'name' => 'short.to',
'home' => 'http://short.to', 'home' => 'http://short.to',
'url_api' => 'http://short.to/s.txt', 'url_api' => 'http://short.to/s.txt',
'url_base' => 'http://short.to/', 'url_base' => 'http://short.to/',
'url_min_len' => 25 'url_min_len' => 25
]; ];
@ -32,8 +31,10 @@ class shorttoKutrlService extends kutrlService
$arg = ['url' => urlencode($this->url_test)]; $arg = ['url' => urlencode($this->url_test)];
if (!self::post($this->url_api, $arg, true, true)) { if (!self::post($this->url_api, $arg, true, true)) {
$this->error->add(__('Service is unavailable.')); $this->error->add(__('Service is unavailable.'));
return false; return false;
} }
return true; return true;
} }
@ -43,14 +44,15 @@ class shorttoKutrlService extends kutrlService
if (!($response = self::post($this->url_api, $arg, true, true))) { if (!($response = self::post($this->url_api, $arg, true, true))) {
$this->error->add(__('Service is unavailable.')); $this->error->add(__('Service is unavailable.'));
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = str_replace($this->url_base, '', $response); $rs->hash = str_replace($this->url_base, '', $response);
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,79 +1,80 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) {
if (!defined('DC_RC_PATH')){return;} return;
}
class suprKutrlService extends kutrlService class suprKutrlService extends kutrlService
{ {
protected $config = array( protected $config = [
'id' => 'supr', 'id' => 'supr',
'name' => 'su.pr StumbleUpon', 'name' => 'su.pr StumbleUpon',
'home' => 'http://su.pr', 'home' => 'http://su.pr',
'url_api' => 'http://su.pr/api/', 'url_api' => 'http://su.pr/api/',
'url_base' => 'http://su.pr/', 'url_base' => 'http://su.pr/',
'url_min_len' => 23 'url_min_len' => 23
); ];
private $args = array( private $args = [
'version' => '1.0', 'version' => '1.0',
'format' => 'xml', 'format' => 'xml',
'login' => '', 'login' => '',
'apiKey' => '' 'apiKey' => ''
); ];
protected function init() protected function init()
{ {
$this->args['login'] = $this->settings->kutrl_srv_supr_login; $this->args['login'] = $this->settings->kutrl_srv_supr_login;
$this->args['apiKey'] = $this->settings->kutrl_srv_supr_apikey; $this->args['apiKey'] = $this->settings->kutrl_srv_supr_apikey;
} }
public function saveSettings() public function saveSettings()
{ {
$this->settings->put('kutrl_srv_supr_login',$_POST['kutrl_srv_supr_login']); $this->settings->put('kutrl_srv_supr_login', $_POST['kutrl_srv_supr_login']);
$this->settings->put('kutrl_srv_supr_apikey',$_POST['kutrl_srv_supr_apikey']); $this->settings->put('kutrl_srv_supr_apikey', $_POST['kutrl_srv_supr_apikey']);
} }
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p><label class="classic">'.__('Login:').'<br />'. '<p><label class="classic">' . __('Login:') . '<br />' .
form::field(array('kutrl_srv_supr_login'),50,255,$this->settings->kutrl_srv_supr_login). form::field(['kutrl_srv_supr_login'], 50, 255, $this->settings->kutrl_srv_supr_login) .
'</label></p>'. '</label></p>' .
'<p class="form-note">'. '<p class="form-note">' .
sprintf(__('This is your login to sign up to %s'),$this->config['name']). sprintf(__('This is your login to sign up to %s'), $this->config['name']) .
'</p>'. '</p>' .
'<p><label class="classic">'.__('API Key:').'<br />'. '<p><label class="classic">' . __('API Key:') . '<br />' .
form::field(array('kutrl_srv_supr_apikey'),50,255,$this->settings->kutrl_srv_supr_apikey). form::field(['kutrl_srv_supr_apikey'], 50, 255, $this->settings->kutrl_srv_supr_apikey) .
'</label></p>'. '</label></p>' .
'<p class="form-note">'. '<p class="form-note">' .
sprintf(__('This is your personnal %s API key. You can find it on your account page.'),$this->config['name']). sprintf(__('This is your personnal %s API key. You can find it on your account page.'), $this->config['name']) .
'</p>'; '</p>';
} }
public function testService() public function testService()
{ {
if (empty($this->args['login']) || empty($this->args['apiKey'])) if (empty($this->args['login']) || empty($this->args['apiKey'])) {
{
$this->error->add(__('Service is not well configured.')); $this->error->add(__('Service is not well configured.'));
return false; return false;
} }
$args = $this->args; $args = $this->args;
$arg['longUrl'] = $this->url_test; $arg['longUrl'] = $this->url_test;
if (!($response = self::post($this->url_api.'shorten',$args,true))) if (!($response = self::post($this->url_api . 'shorten', $args, true))) {
{
$this->error->add(__('Failed to call service.')); $this->error->add(__('Failed to call service.'));
return false; return false;
} }
@ -81,22 +82,24 @@ class suprKutrlService extends kutrlService
$status = (string) $rsp->statusCode; $status = (string) $rsp->statusCode;
if ($status != 'OK') { if ($status != 'OK') {
$err_no = (integer) $rsp->errorCode; $err_no = (int) $rsp->errorCode;
$err_msg = (integer) $rsp->errorMessage; $err_msg = (int) $rsp->errorMessage;
$this->error->add(sprintf(__('An error occured with code %s and message "%s"'),$err_no,$err_msg)); $this->error->add(sprintf(__('An error occured with code %s and message "%s"'), $err_no, $err_msg));
return false; return false;
} }
return true; return true;
} }
public function createHash($url,$hash=null) public function createHash($url, $hash = null)
{ {
$args = $this->args; $args = $this->args;
$args['longUrl'] = $url; $args['longUrl'] = $url;
if (!($response = self::post($this->url_api.'shorten',$args,true))) if (!($response = self::post($this->url_api . 'shorten', $args, true))) {
{
$this->error->add(__('Failed to call service.')); $this->error->add(__('Failed to call service.'));
return false; return false;
} }
@ -104,17 +107,18 @@ class suprKutrlService extends kutrlService
$status = (string) $rsp->statusCode; $status = (string) $rsp->statusCode;
if ($status != 'OK') { if ($status != 'OK') {
$err_no = (integer) $rsp->errorCode; $err_no = (int) $rsp->errorCode;
$err_msg = (integer) $rsp->errorMessage; $err_msg = (int) $rsp->errorMessage;
$this->error->add(sprintf(__('An error occured with code %s and message "%s"'),$err_no,$err_msg)); $this->error->add(sprintf(__('An error occured with code %s and message "%s"'), $err_no, $err_msg));
return false; return false;
} }
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = (string) $rsp->results[0]->nodeKeyVal->hash; $rs->hash = (string) $rsp->results[0]->nodeKeyVal->hash;
$rs->url = (string) $rsp->results[0]->nodeKeyVal->nodeKey; $rs->url = (string) $rsp->results[0]->nodeKeyVal->nodeKey;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
} }

View File

@ -1,34 +1,35 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) {
if (!defined('DC_RC_PATH')){return;} return;
}
class trimKutrlService extends kutrlService class trimKutrlService extends kutrlService
{ {
protected $config = array( protected $config = [
'id' => 'trim', 'id' => 'trim',
'name' => 'tr.im', 'name' => 'tr.im',
'home' => 'http://tr.im', 'home' => 'http://tr.im',
'url_api' => 'http://api.tr.im/v1/', 'url_api' => 'http://api.tr.im/v1/',
'url_base' => 'http://tr.im/', 'url_base' => 'http://tr.im/',
'url_min_len' => 25 'url_min_len' => 25
); ];
private $args = array( private $args = [
'username' => '', 'username' => '',
'password' => '' 'password' => ''
); ];
private $api_rate_time = 0; private $api_rate_time = 0;
@ -37,90 +38,90 @@ class trimKutrlService extends kutrlService
$this->args['username'] = $this->settings->kutrl_srv_trim_username; $this->args['username'] = $this->settings->kutrl_srv_trim_username;
$this->args['password'] = $this->settings->kutrl_srv_trim_password; $this->args['password'] = $this->settings->kutrl_srv_trim_password;
$this->api_rate_time = (integer) $this->settings->kutrl_srv_trim_apiratetime; $this->api_rate_time = (int) $this->settings->kutrl_srv_trim_apiratetime;
} }
public function saveSettings() public function saveSettings()
{ {
$this->settings->put('kutrl_srv_trim_username',$_POST['kutrl_srv_trim_username']); $this->settings->put('kutrl_srv_trim_username', $_POST['kutrl_srv_trim_username']);
$this->settings->put('kutrl_srv_trim_password',$_POST['kutrl_srv_trim_password']); $this->settings->put('kutrl_srv_trim_password', $_POST['kutrl_srv_trim_password']);
} }
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p><label class="classic">'.__('Login:').'<br />'. '<p><label class="classic">' . __('Login:') . '<br />' .
form::field(array('kutrl_srv_trim_username'),50,255,$this->settings->kutrl_srv_trim_username). form::field(['kutrl_srv_trim_username'], 50, 255, $this->settings->kutrl_srv_trim_username) .
'</label></p>'. '</label></p>' .
'<p class="form-note">'. '<p class="form-note">' .
__('This is your login to sign up to tr.im.'). __('This is your login to sign up to tr.im.') .
'</p>'. '</p>' .
'<p><label class="classic">'.__('Password:').'<br />'. '<p><label class="classic">' . __('Password:') . '<br />' .
form::field(array('kutrl_srv_trim_password'),50,255,$this->settings->kutrl_srv_trim_password). form::field(['kutrl_srv_trim_password'], 50, 255, $this->settings->kutrl_srv_trim_password) .
'</label></p>'. '</label></p>' .
'<p class="form-note">'. '<p class="form-note">' .
__('This is your password to sign up to tr.im.'). __('This is your password to sign up to tr.im.') .
'</p>'; '</p>';
} }
public function testService() public function testService()
{ {
if (empty($this->args['username']) || empty($this->args['password'])) if (empty($this->args['username']) || empty($this->args['password'])) {
{
$this->error->add(__('Service is not well configured.')); $this->error->add(__('Service is not well configured.'));
return false; return false;
} }
if (time() < $this->api_rate_time + 300) // bloc service within 5min on API rate limit if (time() < $this->api_rate_time + 300) { // bloc service within 5min on API rate limit
{
$this->error->add(__('Prevent service rate limit.')); $this->error->add(__('Prevent service rate limit.'));
return false;
return false;
} }
if (!($rsp = self::post($this->url_api.'verify.xml',$this->args,true,true))) if (!($rsp = self::post($this->url_api . 'verify.xml', $this->args, true, true))) {
{
$this->error->add(__('Service is unavailable.')); $this->error->add(__('Service is unavailable.'));
return false; return false;
} }
$r = simplexml_load_string($rsp); $r = simplexml_load_string($rsp);
if ($r['code'] == 200) if ($r['code'] == 200) {
{
return true; return true;
} }
$this->error->add(__('Authentication to service failed.')); $this->error->add(__('Authentication to service failed.'));
return false; return false;
} }
public function createHash($url,$hash=null) public function createHash($url, $hash = null)
{ {
$arg = $this->args; $arg = $this->args;
$arg['url'] = $url; $arg['url'] = $url;
if (!($rsp = self::post($this->url_api.'trim_url.xml',$arg,true,true))) if (!($rsp = self::post($this->url_api . 'trim_url.xml', $arg, true, true))) {
{
$this->error->add(__('Service is unavailable.')); $this->error->add(__('Service is unavailable.'));
return false; return false;
} }
$r = simplexml_load_string($rsp); $r = simplexml_load_string($rsp);
# API rate limit # API rate limit
if ($r['code'] == 425) if ($r['code'] == 425) {
{ $this->settings->put('kutrl_srv_trim_apiratetime', time());
$this->settings->put('kutrl_srv_trim_apiratetime',time());
$this->error->add(__('Service rate limit exceeded.')); $this->error->add(__('Service rate limit exceeded.'));
return false; return false;
} }
if (isset($r->trimpath)) if (isset($r->trimpath)) {
{ $rs = new ArrayObject();
$rs = new ArrayObject();
$rs->hash = $r->trimpath; $rs->hash = $r->trimpath;
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
return $rs; return $rs;
} }
$this->error->add(__('Unreadable service response.')); $this->error->add(__('Unreadable service response.'));
return false; return false;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_RC_PATH')) { if (!defined('DC_RC_PATH')) {
return null; return null;
} }
@ -40,7 +39,7 @@ class yourlsKutrlService extends kutrlService
$this->config['url_api'] = $base; $this->config['url_api'] = $base;
$this->config['url_base'] = $base; $this->config['url_base'] = $base;
$this->config['url_min_len'] = strlen($base)+3; $this->config['url_min_len'] = strlen($base) + 3;
} }
public function saveSettings() public function saveSettings()
@ -52,25 +51,25 @@ class yourlsKutrlService extends kutrlService
public function settingsForm() public function settingsForm()
{ {
echo echo
'<p><label class="classic">' . '<p><label class="classic">' .
__('Url of the service:') . '<br />' . __('Url of the service:') . '<br />' .
form::field(['kutrl_srv_yourls_base'], 50, 255, $this->settings->kutrl_srv_yourls_base) . form::field(['kutrl_srv_yourls_base'], 50, 255, $this->settings->kutrl_srv_yourls_base) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . '<p class="form-note">' .
__('This is the URL of the YOURLS service you want to use. Ex: "http://www.smaller.org/api.php".') . __('This is the URL of the YOURLS service you want to use. Ex: "http://www.smaller.org/api.php".') .
'</p>' . '</p>' .
'<p><label class="classic">' . __('Login:') . '<br />' . '<p><label class="classic">' . __('Login:') . '<br />' .
form::field(['kutrl_srv_yourls_username'], 50, 255, $this->settings->kutrl_srv_yourls_username) . form::field(['kutrl_srv_yourls_username'], 50, 255, $this->settings->kutrl_srv_yourls_username) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . '<p class="form-note">' .
__('This is your user name to sign up to this YOURLS service.') . __('This is your user name to sign up to this YOURLS service.') .
'</p>' . '</p>' .
'<p><label class="classic">' . __('Password:') . '<br />' . '<p><label class="classic">' . __('Password:') . '<br />' .
form::field(['kutrl_srv_yourls_password'], 50, 255, $this->settings->kutrl_srv_yourls_password) . form::field(['kutrl_srv_yourls_password'], 50, 255, $this->settings->kutrl_srv_yourls_password) .
'</label></p>' . '</label></p>' .
'<p class="form-note">' . '<p class="form-note">' .
__('This is your password to sign up to this YOURLS service.') . __('This is your password to sign up to this YOURLS service.') .
'</p>'; '</p>';
} }
@ -82,7 +81,7 @@ class yourlsKutrlService extends kutrlService
return false; return false;
} }
$args = $this->args; $args = $this->args;
$args['url'] = $this->url_test; $args['url'] = $this->url_test;
if (!($response = self::post($this->url_api, $this->args, true))) { if (!($response = self::post($this->url_api, $this->args, true))) {
@ -93,7 +92,6 @@ class yourlsKutrlService extends kutrlService
$rsp = @simplexml_load_string($response); $rsp = @simplexml_load_string($response);
if ($rsp && $rsp->status == 'success') { if ($rsp && $rsp->status == 'success') {
return true; return true;
} }
$this->error->add(__('Authentication to service failed.')); $this->error->add(__('Authentication to service failed.'));
@ -114,7 +112,7 @@ class yourlsKutrlService extends kutrlService
$rsp = @simplexml_load_string($response); $rsp = @simplexml_load_string($response);
if ($rsp && $rsp->status == 'success') { if ($rsp && $rsp->status == 'success') {
$rs = new ArrayObject(); $rs = new ArrayObject();
$rs->hash = $rsp->url[0]->keyword; $rs->hash = $rsp->url[0]->keyword;
$rs->url = $url; $rs->url = $url;
$rs->type = $this->id; $rs->type = $this->id;
@ -125,4 +123,4 @@ class yourlsKutrlService extends kutrlService
return false; return false;
} }
} }

View File

@ -1,16 +1,15 @@
<?php <?php
/** /**
* @brief kUtRL, a plugin for Dotclear 2 * @brief kUtRL, a plugin for Dotclear 2
* *
* @package Dotclear * @package Dotclear
* @subpackage Plugin * @subpackage Plugin
* *
* @author Jean-Christian Denis and contributors * @author Jean-Christian Denis and contributors
* *
* @copyright Jean-Christian Denis * @copyright Jean-Christian Denis
* @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
*/ */
if (!defined('DC_CONTEXT_ADMIN')) { if (!defined('DC_CONTEXT_ADMIN')) {
return; return;
} }
@ -19,8 +18,8 @@ if (!defined('DC_CONTEXT_ADMIN')) {
dcPage::check('admin'); dcPage::check('admin');
$header = ''; $header = '';
$part = isset($_REQUEST['part']) ? $_REQUEST['part'] : 'links'; $part = $_REQUEST['part'] ?? 'links';
$action = isset($_POST['action']) ? $_POST['action'] : ''; $action = $_POST['action'] ?? '';
# link creation # link creation
if ($part == 'link') { if ($part == 'link') {
@ -31,7 +30,7 @@ if ($part == 'link') {
if (null === $kut) { if (null === $kut) {
throw new Exception('Unknow service'); throw new Exception('Unknow service');
} }
$url = trim($core->con->escape($_POST['str'])); $url = trim($core->con->escape($_POST['str']));
$hash = empty($_POST['custom']) ? null : $_POST['custom']; $hash = empty($_POST['custom']) ? null : $_POST['custom'];
if (empty($url)) { if (empty($url)) {
@ -62,8 +61,8 @@ if ($part == 'link') {
throw new Exception(__('This custom short url is already taken.')); throw new Exception(__('This custom short url is already taken.'));
} }
if (false !== ($rs = $kut->isKnowUrl($url))) { if (false !== ($rs = $kut->isKnowUrl($url))) {
$url = $rs->url; $url = $rs->url;
$new_url = $kut->url_base .$rs->hash; $new_url = $kut->url_base . $rs->hash;
dcPage::addSuccessNotice(sprintf( dcPage::addSuccessNotice(sprintf(
__('Short link for %s is %s'), __('Short link for %s is %s'),
@ -75,9 +74,10 @@ if ($part == 'link') {
if ($kut->error->flag()) { if ($kut->error->flag()) {
throw new Exception($kut->error->toHTML()); throw new Exception($kut->error->toHTML());
} }
throw new Exception(__('Failed to create short link. This could be caused by a service failure.')); throw new Exception(__('Failed to create short link. This could be caused by a service failure.'));
} else { } else {
$url = $rs->url; $url = $rs->url;
$new_url = $kut->url_base . $rs->hash; $new_url = $kut->url_base . $rs->hash;
dcPage::addSuccessNotice(sprintf( dcPage::addSuccessNotice(sprintf(
@ -88,7 +88,7 @@ if ($part == 'link') {
# ex: Send new url to messengers # ex: Send new url to messengers
if (!empty($rs)) { if (!empty($rs)) {
$core->callBehavior('adminAfterKutrlCreate', $core, $rs,__('New short URL')); $core->callBehavior('adminAfterKutrlCreate', $core, $rs, __('New short URL'));
} }
} }
} }
@ -97,15 +97,15 @@ if ($part == 'link') {
} }
} }
# links # links
} else { } else {
$services_combo = []; $services_combo = [];
foreach(kutrl::getServices($core) as $service_id => $service) { foreach (kutrl::getServices($core) as $service_id => $service) {
$o = new $service($core); $o = new $service($core);
$services_combo[__($o->name)] = $o->id; $services_combo[__($o->name)] = $o->id;
} }
$ext_services_combo = array_merge([__('Disabled')=>''], $services_combo); $ext_services_combo = array_merge([__('Disabled') => ''], $services_combo);
$lst_services_combo = array_merge(['-'=>''], $services_combo); $lst_services_combo = array_merge(['-' => ''], $services_combo);
$log = new kutrlLog($core); $log = new kutrlLog($core);
@ -113,26 +113,28 @@ if ($part == 'link') {
$kUtRL_filter->add('part', 'links'); $kUtRL_filter->add('part', 'links');
$kUtRL_filter->add(dcAdminFilters::getPageFilter()); $kUtRL_filter->add(dcAdminFilters::getPageFilter());
$kUtRL_filter->add(dcAdminFilters::getSelectFilter( $kUtRL_filter->add(dcAdminFilters::getSelectFilter(
'urlsrv', __('Service:'), $lst_services_combo, 'kut_type' 'urlsrv',
__('Service:'),
$lst_services_combo,
'kut_type'
)); ));
$params = $kUtRL_filter->params(); $params = $kUtRL_filter->params();
try { try {
$list_all = $log->getLogs($params); $list_all = $log->getLogs($params);
$list_counter = $log->getLogs($params, true)->f(0); $list_counter = $log->getLogs($params, true)->f(0);
$list_current = new kutrlLinksList($core, $list_all, $list_counter); $list_current = new kutrlLinksList($core, $list_all, $list_counter);
} catch (Exception $e) { } catch (Exception $e) {
$core->error->add($e->getMessage()); $core->error->add($e->getMessage());
} }
$header = $header = $kUtRL_filter->js($core->adminurl->get('admin.plugin.kUtRL', ['part' => 'links'])) .
$kUtRL_filter->js($core->adminurl->get('admin.plugin.kUtRL', ['part' => 'links'])) .
dcPage::jsLoad(dcPage::getPF('kUtRL/js/admin.js')); dcPage::jsLoad(dcPage::getPF('kUtRL/js/admin.js'));
if (!empty($_POST['deletelinks'])) { if (!empty($_POST['deletelinks'])) {
try { try {
foreach($_POST['entries'] as $id) { foreach ($_POST['entries'] as $id) {
$rs = $log->getLogs(['kut_id' => $id]); $rs = $log->getLogs(['kut_id' => $id]);
if ($rs->isEmpty()) { if ($rs->isEmpty()) {
continue; continue;
@ -151,23 +153,23 @@ if ($part == 'link') {
$core->adminurl->redirect('admin.plugin.kUtRL', $kUtRL_filter->values()); $core->adminurl->redirect('admin.plugin.kUtRL', $kUtRL_filter->values());
} catch (Exception $e) { } catch (Exception $e) {
$core->error->add($e->getMessage()); $core->error->add($e->getMessage());
} }
} }
} }
# display header # display header
echo echo
'<html><head><title>kUtRL, ' . __('Links shortener') . '</title>' . '<html><head><title>kUtRL, ' . __('Links shortener') . '</title>' .
$header . $header .
'</head><body>'; '</head><body>';
# display link creation # display link creation
if ($part == 'link') { if ($part == 'link') {
echo echo
dcPage::breadcrumb([ dcPage::breadcrumb([
__('Plugins') => '', __('Plugins') => '',
__('Links shortener') => $core->adminurl->get('admin.plugin.kUtRL'), __('Links shortener') => $core->adminurl->get('admin.plugin.kUtRL'),
__('New link') => '' __('New link') => ''
]) . ]) .
dcPage::notices(); dcPage::notices();
@ -185,40 +187,40 @@ if ($part == 'link') {
if ($kut->allow_custom_hash) { if ($kut->allow_custom_hash) {
echo echo
'<p><label for="custom">' . __('Custom short link:') . '</label>' . '<p><label for="custom">' . __('Custom short link:') . '</label>' .
form::field('custom', 50, 32, '') . '</p>' . form::field('custom', 50, 32, '') . '</p>' .
'<p class="form-note">' . __('Only if you want a custom short link.') . '</p>'; '<p class="form-note">' . __('Only if you want a custom short link.') . '</p>';
if ($kut->admin_service == 'local') { if ($kut->admin_service == 'local') {
echo '<p class="form-note">' . echo '<p class="form-note">' .
__('You can use "bob!!" if you want a semi-custom link, it starts with "bob" and "!!" will be replaced by an increment value.') . __('You can use "bob!!" if you want a semi-custom link, it starts with "bob" and "!!" will be replaced by an increment value.') .
'</p>'; '</p>';
} }
} }
echo ' echo '
<p><input type="submit" name="save" value="' . __('Save') . '" />' . <p><input type="submit" name="save" value="' . __('Save') . '" />' .
$core->formNonce() . $core->formNonce() .
form::hidden(['part'], 'link') . ' form::hidden(['part'], 'link') . '
</p></div> </p></div>
</form>'; </form>';
} }
} else { } else {
echo echo
dcPage::breadcrumb([ dcPage::breadcrumb([
__('Plugins') => '', __('Plugins') => '',
__('Links shortener') => '' __('Links shortener') => ''
]) . ]) .
dcPage::notices() . dcPage::notices() .
'<p class="top-add"><a class="button add" href="' . '<p class="top-add"><a class="button add" href="' .
$core->adminurl->get('admin.plugin.kUtRL', ['part' => 'link']) . $core->adminurl->get('admin.plugin.kUtRL', ['part' => 'link']) .
'">' . __('New Link') .'</a></p>'; '">' . __('New Link') . '</a></p>';
$kUtRL_filter->display('admin.plugin.kUtRL', form::hidden('p', 'kUtRL') . form::hidden('part', 'links')); $kUtRL_filter->display('admin.plugin.kUtRL', form::hidden('p', 'kUtRL') . form::hidden('part', 'links'));
$list_current->display( $list_current->display(
$kUtRL_filter->value('page'), $kUtRL_filter->value('page'),
$kUtRL_filter->nb, $kUtRL_filter->nb,
'<form action="' . $core->adminurl->get('admin.plugin.kUtRL') . '" method="post" id="form-entries"> '<form action="' . $core->adminurl->get('admin.plugin.kUtRL') . '" method="post" id="form-entries">
%s %s
@ -229,7 +231,7 @@ if ($part == 'link') {
</div> </div>
<p class="col right"> <p class="col right">
<input id="do-action" type="submit" value="' . __('Delete selected short links') . '" /></p>' . <input id="do-action" type="submit" value="' . __('Delete selected short links') . '" /></p>' .
$core->adminurl->getHiddenFormFields('admin.plugin.kUtRL', array_merge(['deletelinks' => 1], $kUtRL_filter->values(true))) . $core->adminurl->getHiddenFormFields('admin.plugin.kUtRL', array_merge(['deletelinks' => 1], $kUtRL_filter->values(true))) .
$core->formNonce() . ' $core->formNonce() . '
</p> </p>
</div> </div>
@ -241,4 +243,4 @@ if ($part == 'link') {
# display footer # display footer
dcPage::helpBlock('kUtRL'); dcPage::helpBlock('kUtRL');
echo '</body></html>'; echo '</body></html>';

View File

@ -1,16 +1,17 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# * @brief kUtRL, a plugin for Dotclear 2
# This file is part of kUtRL, a plugin for Dotclear 2. *
# * @package Dotclear
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Jean-Christian Denis and contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Christian Denis
# * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------ */
if (!defined('DC_RC_PATH')) {
return;
}
if (!defined('DC_RC_PATH')) { return; } $__resources['help']['kUtRL'] = dirname(__FILE__) . '/help/help.html';
$__resources['help']['kUtRL'] = dirname(__FILE__).'/help/help.html';

View File

@ -1,16 +1,17 @@
<?php <?php
# -- BEGIN LICENSE BLOCK ---------------------------------- /**
# * @brief kUtRL, a plugin for Dotclear 2
# This file is part of kUtRL, a plugin for Dotclear 2. *
# * @package Dotclear
# Copyright (c) 2009-2021 Jean-Christian Denis and contributors * @subpackage Plugin
# *
# Licensed under the GPL version 2.0 license. * @author Jean-Christian Denis and contributors
# A copy of this license is available in LICENSE file or at *
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * @copyright Jean-Christian Denis
# * @copyright GPL-2.0 https://www.gnu.org/licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------ */
if (!defined('DC_RC_PATH')) {
return;
}
if (!defined('DC_RC_PATH')) { return; } $__resources['help']['kUtRL'] = dirname(__FILE__) . '/help/help.html';
$__resources['help']['kUtRL'] = dirname(__FILE__).'/help/help.html';