You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

276 lines
10 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
function wikiplugin_htmlfeedlink_info()
{
return [
'name' => tra('HTML Feed Link'),
'documentation' => 'PluginHtmlFeedlink',
'description' => tra('Receive and display content from another site sent using PluginHTMLFeed'),
'prefs' => [ 'feature_wiki', 'wikiplugin_htmlfeedlink', 'feature_htmlfeed' ],
'body' => tra('Initial Value'),
'iconname' => 'link',
'filter' => 'rawhtml_unsafe',
'tags' => [ 'basic' ],
'introduced' => 9,
'params' => [
'feed' => [
'required' => false,
'name' => tra('Feed Location'),
'description' => tra(''),
'since' => '9.0',
],
'name' => [
'required' => false,
'name' => tra('Content Name'),
'description' => tra(''),
'since' => '9.0',
],
'style' => [
'required' => false,
'name' => tra('Content Style'),
'since' => '9.0',
'options' => [
['text' => tra('None'), 'value' => ''],
['text' => tra('Highlight'), 'value' => 'highlight'],
['text' => tra('Asterisk'), 'value' => 'asterisk'],
],
],
'type' => [
'required' => false,
'name' => tra('HTML Feed Link Type'),
'since' => '9.0',
'default' => 'replace',
'options' => [
['text' => tra('Replace'), 'value' => 'replace'],
['text' => tra('Backlink'), 'value' => 'backlink'],
['text' => tra('Popup'), 'value' => 'popup'],
['text' => tra('Hover'), 'value' => 'hover'],
],
],
'moderate' => [
'required' => false,
'name' => tra('Moderated?'),
'since' => '9.0',
'default' => 'n',
'options' => [
['text' => '', 'value' => ''],
['text' => tra('Yes'), 'value' => 'y'],
['text' => tra('No'), 'value' => 'n']
],
],
'date' => [
'required' => false,
'name' => tra('Date'),
'description' => tr('Date of last accepted HTML item, not used if not moderated'),
'since' => '9.0',
'default' => '',
],
],
];
}
function wikiplugin_htmlfeedlink($data, $params)
{
global $page, $caching;
$headerlib = TikiLib::lib('header');
$tikilib = TikiLib::lib('tiki');
static $htmlFeedLinkI = 0;
++$htmlFeedLinkI;
$params = array_merge(
[
"feed" => "",
"name" => "",
"type" => "replace",
"moderate" => "y",
"style" => "",
"date" => ""
],
$params
);
extract($params, EXTR_SKIP);
if (empty($feed)) {
return $data;
}
if (isset($caching)) {
return $data; //caching is running, if no return, causes recursive parsing
}
$htmlFeed = new Feed_Html_Receive($feed);
$headerlib->add_jq_onready(
"if (!$.fn.htmlFeedPopup) {
$.fn.htmlFeedPopup = function(s) {
$(this).each(function() {
$(this)
.css('cursor', 'pointer')
.hover(function(){
$(this).css('background-color', 'yellow');
},function(){
$(this).css('background-color', '');
})
.click(function() {
$('<div>' +
s.description +
'</div>')
.dialog({
title: s.name
});
});
});
return this;
};
}
$(document)
.off('plugin_htmlfeedlink_ready')
.on('plugin_htmlfeedlink_ready', function(e) {
var name = $(e.container).find('#param_name input:first');
name.hide();
var nameSelect = $('<select>')
.insertAfter(name)
.change(function() {
name.val($(this).val()).change();
});
var items = " . json_encode($htmlFeed->listItemNames()) . ";
for(var i = 0; i < items.length; i++) {
$('<option />')
.val(items[i])
.text(items[i])
.appendTo(nameSelect);
}
nameSelect.val(name.val()).change();
});
$('.revision').click(function() {
$.getJSON('tiki-html_feed.php', {
feed: $(this).data('feed'),
name: $(this).data('name')
}, function(link) {
$('<div />')
.html(link.description)
.dialog({
title: link.name,
buttons: [{
text: 'Accept Update',
click: function () {
$('#form$htmlFeedLinkI [name=\'content\']').val('~np~' + link.description + '~/np~')
$('#form$htmlFeedLinkI').submit();
}
}]
});
});
});"
);
$item = $htmlFeed->getItem($name);
$same = $date == $item->date;
if (! empty($item->name)) {
$name = $item->name;
$date = $item->date;
switch ($type) {
case "":
case "replace":
$data = "~np~" . $item->data . "~/np~";
//moderate isn't yet working
if ($moderate == 'y') {
if ($same == false) {
$data .= "~np~<img
src='img/icons/flag_blue.png'
class='revision'
title='Revision Available, click to see'
style='cursor: pointer;'
data-feed='" . urlencode($feed) . "'
data-name='" . urlencode($name) . "'
/>
<form id='form$htmlFeedLinkI' method='post' action='tiki-wikiplugin_edit.php' style='display: none;'>
<input type='hidden' name='page' value='$page'/>
<input type='hidden' name='index' value='$htmlFeedLinkI'/>
<input type='hidden' name='type' value='htmlfeedlink'/>
<input type='hidden' name='params[name]' value='" . htmlspecialchars($name) . "'/>
<input type='hidden' name='params[feed]' value='" . htmlspecialchars($feed) . "'/>
<input type='hidden' name='params[type]' value='" . htmlspecialchars($type) . "'/>
<input type='hidden' name='params[style]' value='" . htmlspecialchars($style) . "'/>
<input type='hidden' name='params[date]' value='" . htmlspecialchars($date) . "'/>
<input type='hidden' name='content' value='" . htmlspecialchars($data) . "'/>
</form>
~/np~";
} else {
$data = "~np~" . $item->description . "~/np~";
}
} else {
$data = $item->description;
}
break;
case "backlink":
$data = "<a href='$item->url'>" . $data . "</a>";
break;
case "popup":
$headerlib->add_jq_onready(
"$('#backlink')
.htmlFeedPopup(" . $link . ");"
);
break;
case "hover":
break;
}
$link = json_encode($link);
}
$result = "<span id='htmlFeedLink' title='$name'>" . $data . "</span>";
switch ($style) {
case "highlight":
$headerlib->add_jq_onready(
"$('#htmlFeedLink$htmlFeedLinkI')
.css('border', '1px solid red');"
);
break;
case "asterisk":
$result = "<sup>*</sup>" . $result;
break;
}
$archives = "";
foreach ($htmlFeed->getItemFromDates($item->name) as $archive) {
$archives .= "<a href='tiki-html_feed.php?feed=" . $feed .
"&name=" . urlencode($archive->name) .
"&date=" . urlencode($archive->date) . "'>" . htmlspecialchars($archive->name) . " " . htmlspecialchars($archive->date) . "</a><br />";
}
if (strlen($archives) > 0) {
$result .= "~np~<img src='img/icons/disk_multiple.png' id='viewArchives$htmlFeedLinkI' title='View Archives' name='" . htmlspecialchars($archive->name) . "' style='cursor: pointer;' />
<div id='archives$htmlFeedLinkI' style='display: none;' >" . $archives . "</div>~/np~";
$headerlib->add_jq_onready(
<<<JQ
$('#viewArchives$htmlFeedLinkI').click(function() {
$('#archives$htmlFeedLinkI')
.dialog({title: "Revisions for " + $(this).attr('name')})
.find('a').click(function() {
$.getJSON($(this).attr('href'), function(item) {
$('<div>')
.html(item.description)
.dialog();
});
return false;
});
});
JQ
);
}
return $result;
}