391 lines
15 KiB
PHP
391 lines
15 KiB
PHP
<?php
|
|
|
|
if (IN_serendipity !== true) {
|
|
die ("Don't hack!");
|
|
}
|
|
|
|
@serendipity_plugin_api::load_language(dirname(__FILE__));
|
|
|
|
class serendipity_event_creativecommons extends serendipity_event
|
|
{
|
|
var $title = PLUGIN_CREATIVECOMMONS_NAME;
|
|
|
|
function introspect(&$propbag)
|
|
{
|
|
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_NAME);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_DESC);
|
|
$propbag->add('stackable', false);
|
|
$propbag->add('author', 'Evan Nemerson');
|
|
$propbag->add('version', '1.6.1');
|
|
$propbag->add('requirements', array(
|
|
'serendipity' => '1.6',
|
|
'smarty' => '2.6.7',
|
|
'php' => '4.1.0'
|
|
));
|
|
$propbag->add('configuration', array('cc_version', 'nc', 'nd', 'txt', 'image_type'));
|
|
$propbag->add('event_hooks',
|
|
array('frontend_display:rss-1.0:per_entry' => true,
|
|
'frontend_display:rss-1.0:once' => true,
|
|
'frontend_display:rss-1.0:namespace' => true,
|
|
'frontend_display:rss-2.0:per_entry' => true,
|
|
'frontend_display:rss-2.0:namespace' => true,
|
|
'frontend_display:html:per_entry' => true,
|
|
'frontend_display:html_layout' => true));
|
|
$propbag->add('groups', array('FRONTEND_EXTERNAL_SERVICES'));
|
|
}
|
|
|
|
function introspect_config_item($name, &$propbag)
|
|
{
|
|
switch($name) {
|
|
/*
|
|
case 'by':
|
|
$propbag->add('type', 'boolean');
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_BY);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_BY_DESC);
|
|
break;
|
|
*/
|
|
case 'cc_version':
|
|
$cc_versions = array(
|
|
'1.0' => '1.0',
|
|
'2.5' => '2.5',
|
|
'3.0' => '3.0',
|
|
'4.0' => '4.0',
|
|
);
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_VERSION);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_VERSION_DESC);
|
|
$propbag->add('select_values', $cc_versions);
|
|
$propbag->add('default', '3.0');
|
|
break;
|
|
|
|
case 'nc':
|
|
$propbag->add('type', 'boolean');
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_NC);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_NC_DESC);
|
|
$propbag->add('default', 'true');
|
|
break;
|
|
|
|
case 'nd':
|
|
$propbag->add('type', 'radio');
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_ND);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_ND_DESC);
|
|
$propbag->add('radio', array(
|
|
'value' => array('yes', 'sa', 'no'),
|
|
'desc' => array(YES, PLUGIN_CREATIVECOMMONS_SA_DESC, NO)
|
|
));
|
|
$propbag->add('radio_per_row', '1');
|
|
$propbag->add('default', 'yes');
|
|
break;
|
|
|
|
case 'image_type':
|
|
$image_types = array(
|
|
'generic' => PLUGIN_CREATIVECOMMONS_IMAGETYPE_GENERIC,
|
|
'small' => PLUGIN_CREATIVECOMMONS_IMAGETYPE_SMALL,
|
|
'big' => PLUGIN_CREATIVECOMMONS_IMAGETYPE_BIG
|
|
);
|
|
$propbag->add('type', 'select');
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_IMAGETYPE);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_IMAGETYPE_DESC);
|
|
$propbag->add('select_values', $image_types);
|
|
$propbag->add('default', 'generic');
|
|
break;
|
|
|
|
case 'txt':
|
|
$propbag->add('type', 'boolean');
|
|
$propbag->add('name', PLUGIN_CREATIVECOMMONS_TXT);
|
|
$propbag->add('description', PLUGIN_CREATIVECOMMONS_TXT_DESC);
|
|
$propbag->add('default', 'true');
|
|
break;
|
|
|
|
default:
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function generate_content(&$title)
|
|
{
|
|
$title = $this->title;
|
|
}
|
|
|
|
function event_hook($event, &$bag, &$eventData, $addData = null)
|
|
{
|
|
global $serendipity;
|
|
|
|
$hooks = &$bag->get('event_hooks');
|
|
|
|
$license_data = $this->get_license_data();
|
|
$license_version = $this->get_config('cc_version', '3.0');
|
|
$license_type = $license_data['type'];
|
|
$license_string = $license_data['string'];
|
|
$rdf = $license_data['rdf'];
|
|
|
|
if ($license_string == '') {
|
|
$license_uri = 'http://web.resource.org/cc/PublicDomain';
|
|
} else {
|
|
$license_uri = 'http://creativecommons.org/licenses/'.$license_string.'/'.$license_version.'/';
|
|
switch ($serendipity['lang']){
|
|
case 'ja':
|
|
$license_uri .= 'deed.ja';
|
|
break;
|
|
case 'de':
|
|
$license_uri .= 'deed.de';
|
|
break;
|
|
}
|
|
}
|
|
|
|
$cc_visibility = 'invisible';
|
|
|
|
if (isset($hooks[$event])) {
|
|
|
|
switch($event) {
|
|
|
|
case 'frontend_display:html_layout':
|
|
$cc_visibility = 'visible';
|
|
case 'frontend_display:html:per_entry':
|
|
if (! isset($eventData['display_dat'])) {
|
|
$eventData['display_dat'] = '';
|
|
}
|
|
$eventData['display_dat'] .= '<div style="text-align: center;">';
|
|
if ($license_string == '') {
|
|
if ($cc_visibility == 'visible') {
|
|
$image_titel = 'No Rights Reserved';
|
|
$eventData['display_dat'] .= '<a href="http://creativecommons.org/licenses/publicdomain">';
|
|
$eventData['display_dat'] .= '<img style="border: 0px" alt="' . $image_titel. '" title="' . $image_titel. '" src="' . serendipity_getTemplateFile('img/norights.png') .'" />';
|
|
$eventData['display_dat'] .= '</a>';
|
|
if (serendipity_db_bool($this->get_config('txt', true))) {
|
|
$eventData['display_dat'] .= '<br />' . str_replace('#license_uri#', $license_uri, PLUGIN_CREATIVECOMMONS_CAP_PD);
|
|
}
|
|
}
|
|
} elseif ($cc_visibility == 'visible') {
|
|
$image_titel = 'Creative Commons License - Some Rights Reserved';
|
|
$eventData['display_dat'] .= '<a href="'.$license_uri.'">';
|
|
$eventData['display_dat'] .= '<img style="border: 0px" alt="' . $image_titel. '" title="' . $image_titel. '" src="' . serendipity_getTemplateFile('img/somerights20.gif') .'" />';
|
|
$eventData['display_dat'] .= '</a>';
|
|
if (serendipity_db_bool($this->get_config('txt', true))) {
|
|
$eventData['display_dat'] .= '<br />' . str_replace('#license_uri#', $license_uri, PLUGIN_CREATIVECOMMONS_CAP);
|
|
}
|
|
}
|
|
|
|
$eventData['display_dat'] .= '<!-- <rdf:RDF xmlns="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Work rdf:about=""><license rdf:resource="'.$license_uri.'"/></Work><License rdf:about="'.$license_uri.'">';
|
|
if (is_array($rdf)) {
|
|
foreach ($rdf as $rdf_t => $rdf_v) {
|
|
$eventData['display_dat'] .= ' <'.$rdf_v.' rdf:resource="http://web.resource.org/cc/'.$rdf_t.'" />';
|
|
}
|
|
}
|
|
|
|
$eventData['display_dat'] .= '</License></rdf:RDF> -->';
|
|
$eventData['display_dat'] .= '</div>';
|
|
break;
|
|
|
|
case 'frontend_display:rss-2.0:per_entry':
|
|
if (! isset($eventData['display_dat'])) {
|
|
$eventData['display_dat'] = '';
|
|
}
|
|
|
|
$eventData['display_dat'] .= '<creativeCommons:license>'.$license_uri.'</creativeCommons:license>';
|
|
break;
|
|
|
|
case 'frontend_display:rss-1.0:per_entry':
|
|
if (! isset($eventData['display_dat'])) {
|
|
$eventData['display_dat'] = '';
|
|
}
|
|
$eventData['display_dat'] .= '<cc:license rdf:resource="'.$license_uri.'" />';
|
|
break;
|
|
|
|
case 'frontend_display:rss-1.0:once':
|
|
if (! isset($eventData['display_dat'])) {
|
|
$eventData['display_dat'] = '';
|
|
}
|
|
$eventData['display_dat'] .= '<cc:License rdf:about="'.$license_uri.'">';
|
|
if (is_array($rdf)) {
|
|
foreach ($rdf as $rdf_t => $rdf_v) {
|
|
$eventData['display_dat'] .= '<cc:'.$rdf_v.' rdf:resource="http://web.resource.org/cc/'.$rdf_t.'" />';
|
|
}
|
|
}
|
|
$eventData['display_dat'] .= '</cc:License>';
|
|
break;
|
|
|
|
case 'frontend_display:rss-2.0:namespace':
|
|
if (! isset($eventData['display_dat'])) {
|
|
$eventData['display_dat'] = '';
|
|
}
|
|
$eventData['display_dat'] .= ' xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" ';
|
|
break;
|
|
|
|
case 'frontend_display:rss-1.0:namespace':
|
|
if (! isset($eventData['display_dat'])) {
|
|
$eventData['display_dat'] = '';
|
|
}
|
|
$eventData['display_dat'] .= ' xmlns:cc="http://web.resource.org/cc/" ';
|
|
break;
|
|
|
|
default:
|
|
return false;
|
|
|
|
}
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function get_license_data()
|
|
{
|
|
$license_type = array();
|
|
$license_version = $this->get_config('cc_version', '3.0');
|
|
|
|
if (($license_version >= 2.5) || serendipity_db_bool($this->get_config('by', true))) {
|
|
$license_type[] = 'by';
|
|
}
|
|
|
|
if (!serendipity_db_bool($this->get_config('nc', true))) {
|
|
$license_type[] = 'nc';
|
|
}
|
|
|
|
if ($this->get_config('nd') == 'no') {
|
|
$license_type[] = 'nd';
|
|
}
|
|
|
|
|
|
if ($this->get_config('nd') == 'sa') {
|
|
$license_type[] = 'sa';
|
|
}
|
|
|
|
$license_string = implode('-', $license_type);
|
|
|
|
switch ($license_string) {
|
|
case 'by':
|
|
// BY only is only valid from version 3.0 on
|
|
$license_version = '3.0';
|
|
$rdf = array(
|
|
'Attribution' => 'requires',
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'by-nd':
|
|
$rdf = array(
|
|
'Attribution' => 'requires',
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'by-nd-nc':
|
|
$rdf = array(
|
|
'Attribution' => 'requires',
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'CommercialUse' => 'prohibits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'by-nc':
|
|
$rdf = array(
|
|
'Attribution' => 'requires',
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'CommercialUse' => 'prohibits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'by-nc-sa':
|
|
$rdf = array(
|
|
'Attribution' => 'requires',
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'ShareAlike' => 'requires',
|
|
'CommercialUse' => 'prohibits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'by-sa':
|
|
$rdf = array(
|
|
'Attribution' => 'requires',
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'ShareAlike' => 'requires',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'nd':
|
|
$rdf = array(
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'nd-nc':
|
|
$rdf = array(
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'CommercialUse' => 'prohibits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'nc':
|
|
$rdf = array(
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'CommercialUse' => 'prohibits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'nc-sa':
|
|
$rdf = array(
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'ShareAlike' => 'requires',
|
|
'CommercialUse' => 'prohibits',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case 'sa':
|
|
$rdf = array(
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits',
|
|
'ShareAlike' => 'requires',
|
|
'Notice' => 'requires'
|
|
);
|
|
break;
|
|
|
|
case '':
|
|
$rdf = array(
|
|
'Reproduction' => 'permits',
|
|
'Distribution' => 'permits',
|
|
'DerivativeWorks' => 'permits'
|
|
);
|
|
break;
|
|
}
|
|
|
|
return array(
|
|
'type' => $license_type,
|
|
'string' => $license_string,
|
|
'rdf' => $rdf
|
|
);
|
|
}
|
|
|
|
}
|
|
|
|
/* vim: set sts=4 ts=4 expandtab : */
|
|
?>
|