2013-08-12 09:49:28 +02:00
< ? php #
2011-12-13 12:29:05 +01:00
if ( IN_serendipity !== true ) {
die ( " Don't hack! " );
}
// Probe for a language include with constants. Still include defines later on, if some constants were missing
$probelang = dirname ( __FILE__ ) . '/' . $serendipity [ 'charset' ] . 'lang_' . $serendipity [ 'lang' ] . '.inc.php' ;
if ( file_exists ( $probelang )) {
include $probelang ;
}
include_once dirname ( __FILE__ ) . '/lang_en.inc.php' ;
2012-04-21 11:40:37 +02:00
/**
* Serendipity Flattr Plugin
*/
2011-12-13 12:29:05 +01:00
class serendipity_event_flattr extends serendipity_event {
2012-04-21 11:40:37 +02:00
/**
* @ var string
*/
2011-12-13 12:29:05 +01:00
var $title = PLUGIN_FLATTR_NAME ;
2012-04-21 11:40:37 +02:00
/**
* @ param string $str
* @ return string
*/
2011-12-13 12:29:05 +01:00
function _addslashes ( $str ) {
$str = str_replace ( array ( " \r " , " \n " ), array ( ' ' , ' ' ), $str );
return addslashes ( $str );
2012-04-21 11:40:37 +02:00
}
2011-12-13 12:29:05 +01:00
2012-04-21 11:40:37 +02:00
/**
* @ param serendipity_property_bag $propbag
*/
2011-12-13 12:29:05 +01:00
function introspect ( & $propbag ) {
$events = array (
'backend_display' => true ,
'frontend_display' => true ,
'backend_publish' => true ,
2012-04-21 11:40:37 +02:00
'backend_save' => true ,
'frontend_header' => true ,
2012-08-02 23:02:44 +02:00
'frontend_display:rss-2.0:per_entry' => true ,
'frontend_display:rss-2.0:namespace' => true ,
'frontend_display:rss-1.0:per_entry' => true ,
'frontend_display:rss-1.0:namespace' => true ,
'frontend_display:atom-1.0:per_entry' => true ,
2011-12-13 12:29:05 +01:00
);
$propbag -> add ( 'name' , PLUGIN_FLATTR_NAME );
$propbag -> add ( 'description' , PLUGIN_FLATTR_DESC );
$propbag -> add ( 'stackable' , false );
$propbag -> add ( 'event_hooks' , $events );
$propbag -> add ( 'configuration' , array (
'userid' ,
'placement' ,
'flattr_btn' ,
'flattr_cat' ,
2012-04-21 11:40:37 +02:00
'flattr_lng' ,
'flattr_pop' ,
2012-08-02 23:02:44 +02:00
'add_to_feed' ,
2011-12-13 12:29:05 +01:00
));
2012-04-21 11:40:37 +02:00
$propbag -> add ( 'author' , 'Garvin Hicking, Joachim Breitner' , 'Matthias Gutjahr' );
2018-04-05 14:17:19 +02:00
$propbag -> add ( 'version' , '1.14' );
2011-12-13 12:29:05 +01:00
$propbag -> add ( 'requirements' , array (
'serendipity' => '0.7' ,
'smarty' => '2.6.7' ,
'php' => '4.1.0'
));
$this -> flattr_cats = array (
'text' => 'text' ,
'images' => 'images' ,
'video' => 'video' ,
'audio' => 'audio' ,
'software' => 'software' ,
'rest' => 'rest'
);
$this -> flattr_langs = array (
'sq_AL' => 'Albanian' ,
'ar_DZ' => 'Arabic' ,
'be_BY' => 'Belarusian' ,
'bg_BG' => 'Bulgarian' ,
'ca_ES' => 'Catalan' ,
'zh_CN' => 'Chinese' ,
'hr_HR' => 'Croatian' ,
'cs_CZ' => 'Czech' ,
'da_DK' => 'Danish' ,
'nl_NL' => 'Dutch' ,
'en_GB' => 'English' ,
'et_EE' => 'Estonian' ,
'fi_FI' => 'Finnish' ,
'fr_FR' => 'French' ,
'de_DE' => 'German' ,
'el_GR' => 'Greek' ,
'iw_IL' => 'Hebrew' ,
'hi_IN' => 'Hindi' ,
'hu_HU' => 'Hungarian' ,
'is_IS' => 'Icelandic' ,
'in_ID' => 'Indonesian' ,
'ga_IE' => 'Irish' ,
'it_IT' => 'Italian' ,
'ja_JP' => 'Japanese' ,
'ko_KR' => 'Korean' ,
'lv_LV' => 'Latvian' ,
'lt_LT' => 'Lithuanian' ,
'mk_MK' => 'Macedonian' ,
'ms_MY' => 'Malay' ,
'mt_MT' => 'Maltese' ,
'no_NO' => 'Norwegian' ,
'pl_PL' => 'Polish' ,
'pt_PT' => 'Portuguese' ,
'ro_RO' => 'Romanian' ,
'ru_RU' => 'Russian' ,
'sr_RS' => 'Serbian' ,
'sk_SK' => 'Slovak' ,
'sl_SI' => 'Slovenian' ,
'es_ES' => 'Spanish' ,
'sv_SE' => 'Swedish' ,
'th_TH' => 'Thai' ,
'tr_TR' => 'Turkish' ,
'uk_UA' => 'Ukrainian' ,
'vi_VN' => 'Vietnamese' ,
);
$this -> flattr_langs_alias = array (
'en' => 'en_GB' ,
'de' => 'de_DE' ,
'es' => 'es_ES' ,
'fr' => 'fr_FR' ,
'fi' => 'fi_FI' ,
'cs' => 'cs_CZ' ,
'cz' => 'cs_CZ' ,
'nl' => 'nl_NL' ,
'is' => 'is_IS' ,
'tr' => 'tr_TR' ,
'se' => 'sv_SE' ,
'pt' => 'pt_PT' ,
'pt_PT' => 'pt_PT' ,
'bg' => 'bg_BG' ,
'hu' => 'hu_HU' ,
'no' => 'no_NO' ,
'pl' => 'pl_PL' ,
'ro' => 'ro_RO' ,
'it' => 'it_IT' ,
'ru' => 'ru_RU' ,
'tw' => 'zh_CN' ,
'tn' => 'zh_CN' ,
'zh' => 'zh_CN' ,
'cn' => 'zh_CN' ,
'ja' => 'ja_JP' ,
'ko' => 'ko_KR' ,
'sa' => 'ar_DZ'
);
$this -> flattr_attrs = array (
'flattr_active' => PLUGIN_FLATTR_ACTIVE ,
'flattr_dsc' => PLUGIN_FLATTR_DSC ,
'flattr_cat' => PLUGIN_FLATTR_CATS ,
'flattr_lng' => PLUGIN_FLATTR_LANG ,
'flattr_tag' => PLUGIN_FLATTR_TAG
);
$propbag -> add ( 'groups' , array ( 'FRONTEND_FEATURES' ));
2018-04-05 14:17:19 +02:00
$propbag -> add ( 'legal' , array (
'services' => array (
'flattr' => array (
'url' => 'https://www.flattr.com' ,
'desc' => 'Transmits user metadata (IP) to flattr for embedded widgets'
),
),
'frontend' => array (
'To display a flattr badge and the ability to sponsor sites, a widget is embedded from a foreign server, which transmits the user metadata (IP, browser, referrer).' ,
),
'cookies' => array (
),
'stores_user_input' => false ,
'stores_ip' => false ,
'uses_ip' => false ,
'transmits_user_input' => true
));
2011-12-13 12:29:05 +01:00
}
2012-04-21 11:40:37 +02:00
/**
* @ param string $name
* @ param serendipity_property_bag $propbag
* @ return bool
*/
function introspect_config_item ( $name , & $propbag ) {
2011-12-13 12:29:05 +01:00
global $serendipity ;
switch ( $name ) {
case 'userid' :
$propbag -> add ( 'type' , 'string' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_USER );
$propbag -> add ( 'description' , '' );
$propbag -> add ( 'default' , '' );
break ;
case 'flattr_btn' :
$propbag -> add ( 'type' , 'string' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_BUTTON );
$propbag -> add ( 'description' , PLUGIN_FLATTR_BUTTON_DESC );
$propbag -> add ( 'default' , 'compact' );
break ;
case 'placement' :
$positions = array (
'add_footer' => PLUGIN_FLATTR_PLACEMENT_FOOTER ,
'body' => ENTRY_BODY ,
'extended' => EXTENDED_BODY ,
'flattr' => PLUGIN_FLATTR_PLACEMENT_SMARTY ,
);
$propbag -> add ( 'type' , 'select' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_PLACEMENT );
$propbag -> add ( 'description' , '' );
$propbag -> add ( 'select_values' , $positions );
$propbag -> add ( 'default' , 'add_footer' );
break ;
case 'flattr_cat' :
$propbag -> add ( 'type' , 'select' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_CATS );
$propbag -> add ( 'description' , '' );
$propbag -> add ( 'select_values' , $this -> flattr_cats );
$propbag -> add ( 'default' , 'text' );
break ;
case 'flattr_lng' :
$propbag -> add ( 'type' , 'select' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_LANG );
$propbag -> add ( 'description' , '' );
$propbag -> add ( 'select_values' , $this -> flattr_langs );
$propbag -> add ( 'default' , $this -> flatter_langs_alias [ $serendipity [ 'lang' ]]);
break ;
2012-04-21 11:40:37 +02:00
case 'flattr_pop' :
$propbag -> add ( 'type' , 'boolean' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_POPOUT );
$propbag -> add ( 'description' , '' );
$propbag -> add ( 'default' , false );
break ;
2012-08-02 23:02:44 +02:00
case 'add_to_feed' :
$propbag -> add ( 'type' , 'boolean' );
$propbag -> add ( 'name' , PLUGIN_FLATTR_ADD_TO_FEED );
$propbag -> add ( 'description' , '' );
$propbag -> add ( 'default' , false );
break ;
2011-12-13 12:29:05 +01:00
}
return true ;
}
2012-04-21 11:40:37 +02:00
/**
* @ param string $event
* @ param serendipity_property_bag $bag
* @ param mixed $eventData
* @ param mixed $addData
* @ return bool
*/
2012-10-18 10:01:35 +02:00
function event_hook ( $event , & $bag , & $eventData , $addData = null ) {
2011-12-13 12:29:05 +01:00
global $serendipity ;
2012-04-21 11:40:37 +02:00
2011-12-13 12:29:05 +01:00
switch ( $event ) {
case 'backend_publish' :
case 'backend_save' :
serendipity_db_query ( " DELETE FROM { $serendipity [ 'dbPrefix' ] } entryproperties WHERE entryid = ' " . $eventData [ 'id' ] . " ' AND property LIKE 'ep_flattr%' " );
foreach ( $this -> flattr_attrs AS $attr => $attr_desc ) {
serendipity_db_query ( " INSERT INTO { $serendipity [ 'dbPrefix' ] } entryproperties (entryid, value, property) VALUES (' " . $eventData [ 'id' ] . " ', ' " . serendipity_db_escape_string ( $serendipity [ 'POST' ][ 'properties' ][ 'ep_' . $attr ]) . " ', 'ep_ " . $attr . " ') " );
}
return true ;
break ;
case 'backend_display' :
?>
< fieldset style = " margin: 5px " >
< legend >< ? php echo PLUGIN_FLATTR_NAME ; ?> </legend>
< ? php
foreach ( $this -> flattr_attrs AS $attr => $attr_desc ) {
if ( isset ( $serendipity [ 'POST' ][ 'properties' ][ 'ep_' . $attr ])) {
$val = $serendipity [ 'POST' ][ 'properties' ][ 'ep_' . $attr ];
} elseif ( isset ( $eventData [ 'id' ])) {
$val = $eventData [ 'properties' ][ 'ep_' . $attr ];
} else {
$val = '' ;
}
echo '<label for="serendipity[properties][ep_' . $attr . ']" title="' . PLUGIN_FLATTR_NAME . ' " >
' . $attr_desc . ' :</ label >< br /> ' ;
if ( $attr == 'flattr_active' || $attr == 'flattr_lng' || $attr == 'flattr_cat' ) {
echo '<select name="serendipity[properties][ep_' . $attr . ']" id="properties_' . $attr . '" class="input_select">' ;
if ( $attr == 'flattr_lng' ) {
$opt = $this -> flattr_langs ;
echo '<option value=""></option>' . " \n " ;
} elseif ( $attr == 'flattr_cat' ) {
$opt = $this -> flattr_cats ;
echo '<option value=""></option>' . " \n " ;
} elseif ( $attr == 'flattr_active' ) {
$opt = array ( '1' => YES , '-1' => NO );
}
foreach ( $opt AS $key => $kval ) {
2014-11-25 01:15:57 +01:00
echo '<option value="' . $key . '" ' . (( string ) $val == ( string ) $key ? 'selected="selected"' : '' ) . '>' . ( function_exists ( 'serendipity_specialchars' ) ? serendipity_specialchars ( $kval ) : htmlspecialchars ( $kval , ENT_COMPAT , LANG_CHARSET )) . '</option>' . " \n " ;
2011-12-13 12:29:05 +01:00
}
echo '</select>' ;
} else {
2014-11-25 01:15:57 +01:00
echo '<input type="text" name="serendipity[properties][ep_' . $attr . ']" id="properties_' . $attr . '" class="input_textbox" value="' . ( function_exists ( 'serendipity_specialchars' ) ? serendipity_specialchars ( $val ) : htmlspecialchars ( $val , ENT_COMPAT , LANG_CHARSET )) . '" style="width: 100%" />' . " \n " ;
2011-12-13 12:29:05 +01:00
}
echo '<br />' ;
}
?>
</ fieldset >
< ? php
return true ;
break ;
2012-04-21 11:40:37 +02:00
case 'frontend_header' :
$flattr_uid = substr ( $this -> _addslashes ( $this -> get_config ( 'userid' )), 0 , 500 );
$flattr_btn = $this -> _addslashes ( $this -> get_config ( 'flattr_btn' ));
$flattr_lng = substr ( $this -> get_config ( 'flattr_lng' ), 0 , 255 );
$flattr_cat = substr ( $this -> get_config ( 'flattr_cat' ), 0 , 255 );
?>
< script type = " text/javascript " >
/* <![CDATA[ */
( function () {
var s = document . createElement ( 'script' );
var t = document . getElementsByTagName ( 'script' )[ 0 ];
s . type = 'text/javascript' ;
s . async = true ;
2014-05-22 11:26:44 +02:00
s . src = 'https://api.flattr.com/js/0.6/load.js?mode=auto' ;
2012-04-21 11:40:37 +02:00
s . src += '&popout=<?php echo (int)$this->get_config(' flattr_pop '); ?>' ;
s . src += '&uid=<?php echo $flattr_uid; ?>' ;
s . src += '&language=<?php echo $flattr_lng; ?>' ;
s . src += '&category=<?php echo $flattr_cat; ?>' ;
< ? php if ( in_array ( $flattr_btn , array ( 'default' , 'compact' ))) : ?>
s . src += '&button=<?php echo $flattr_btn; ?>' ;
< ? php endif ; ?>
t . parentNode . insertBefore ( s , t );
})();
/* ]]> */
</ script >
< ? php
break ;
2011-12-13 12:29:05 +01:00
case 'frontend_display' :
if ( empty ( $eventData [ 'properties' ])) {
$eventData [ 'properties' ] =& serendipity_fetchEntryProperties ( $eventData [ 'id' ]);
}
if ( $eventData [ 'properties' ][ 'ep_flattr_active' ] == '-1' ) {
return true ;
}
if ( empty ( $eventData [ 'body' ]) && empty ( $eventData [ 'extended' ])) {
return true ;
}
$flattr_uid = $this -> _addslashes ( $this -> get_config ( 'userid' ));
$flattr_tle = $this -> _addslashes ( $eventData [ 'title' ]);
2012-04-21 11:40:37 +02:00
$flattr_pop = ( int ) $this -> get_config ( 'flattr_pop' );
2011-12-13 12:29:05 +01:00
$flattr_dsc = $this -> _addslashes ( $eventData [ 'properties' ][ 'ep_flattr_dsc' ]);
$flattr_cat = $this -> _addslashes ( $eventData [ 'properties' ][ 'ep_flattr_cat' ]);
$flattr_lng = $this -> _addslashes ( $eventData [ 'properties' ][ 'ep_flattr_lng' ]);
$flattr_tag = $this -> _addslashes ( $eventData [ 'properties' ][ 'ep_flattr_tag' ]);
if ( empty ( $flattr_dsc )) {
$flattr_dsc = $this -> _addslashes ( $eventData [ 'body' ]);
}
$flattr_dsc = strip_tags ( $flattr_dsc );
if ( empty ( $flattr_cat )) {
$flattr_cat = $this -> get_config ( 'flattr_cat' );
}
if ( empty ( $flattr_lng )) {
$flattr_lng = $this -> get_config ( 'flattr_lng' );
}
if ( empty ( $flattr_tag ) && class_exists ( 'serendipity_event_freetag' )) {
$_tags = serendipity_event_freetag :: getTagsForEntries ( array ( $eventData [ 'id' ]));
$tags = ( is_array ( $_tags ) ? array_pop ( $_tags ) : array ());
$flattr_tag = implode ( ',' , $tags );
}
$flattr_url = $this -> _addslashes ( serendipity_archiveURL ( $eventData [ 'id' ], $eventData [ 'title' ], 'baseURL' , true , array ( 'timestamp' => $eventData [ 'timestamp' ])));
$flattr_btn = $this -> _addslashes ( $this -> get_config ( 'flattr_btn' ));
$flattr_uid = substr ( $flattr_uid , 0 , 500 );
$flattr_tle = substr ( $flattr_tle , 0 , 500 );
$flattr_dsc = substr ( $flattr_dsc , 0 , 1000 );
$flattr_cat = substr ( $flattr_cat , 0 , 255 );
$flattr_lng = substr ( $flattr_lng , 0 , 255 );
$flattr_tag = substr ( $flattr_tag , 0 , 255 );
$flattr_url = substr ( $flattr_url , 0 , 2048 );
$flattr_btn = substr ( $flattr_btn , 0 , 255 );
if ( $flattr_btn != 'default' && $flattr_btn != 'compact' ) {
$flattr = " <a href= \" https://flattr.com/submit/auto? " .
" user_id= " . urlencode ( $flattr_uid ) . " & " .
" url= " . urlencode ( $flattr_url ) . " & " .
" title= " . urlencode ( $flattr_tle ) . " & " .
" description= " . urlencode ( $flattr_dsc ) . " & " .
" category= " . urlencode ( $flattr_cat ) . " & " .
2012-04-21 11:40:37 +02:00
" popout= " . urlencode ( $flattr_pop ) . " & " .
2011-12-13 12:29:05 +01:00
" language= " . urlencode ( $flattr_lng ) .
" \" > " . $flattr_btn . " </a> " ;
} else {
2014-12-27 09:32:21 +01:00
$flattr_tle2 = stripslashes ( $flattr_tle2 );
$flattr_tle2 = ( function_exists ( 'serendipity_specialchars' ) ? serendipity_specialchars ( $flattr_tle2 ) : htmlspecialchars ( $flattr_tle2 , ENT_COMPAT , LANG_CHARSET ));
2011-12-13 12:29:05 +01:00
$flattr = "
2012-04-21 11:40:37 +02:00
< a class = 'FlattrButton' style = 'display:none;'
2014-12-27 09:32:21 +01:00
title = \ " " . $flattr_tle2 . " \"
2012-04-21 11:40:37 +02:00
data - flattr - uid = '" . $flattr_uid . "'
data - flattr - tags = '" . $flattr_tag . "'
data - flattr - category = '" . $flattr_cat . "'
data - flattr - language = '" . $flattr_lng . "'
href = '" . $flattr_url . "' >
2014-12-27 09:32:21 +01:00
" . stripslashes( $flattr_dsc ) . "
2012-04-21 11:40:37 +02:00
</ a >
2011-12-13 12:29:05 +01:00
" ;
}
$field = $this -> get_config ( 'placement' );
if ( $addData [ 'from' ] == 'functions_entries:updertEntry' ) {
} elseif ( $addData [ 'from' ] == 'functions_entries:printEntries_rss' ) {
$entryText =& $this -> getFieldReference ( $field , $eventData );
2014-11-25 01:15:57 +01:00
$entryText .= ( function_exists ( 'serendipity_specialchars' ) ? serendipity_specialchars ( $flattr ) : htmlspecialchars ( $flattr , ENT_COMPAT , LANG_CHARSET ));
2011-12-13 12:29:05 +01:00
} else {
$entryText =& $this -> getFieldReference ( $field , $eventData );
$entryText .= $flattr ;
}
if ( $field == 'extended' ) {
$eventData [ 'is_extended' ] = true ;
}
break ;
2012-08-02 23:02:44 +02:00
case 'frontend_display:rss-1.0:namespace' :
case 'frontend_display:rss-2.0:namespace' :
if ( $this -> get_config ( 'add_to_feed' )) {
$eventData [ 'display_dat' ] .= '
xmlns : atom = " http://www.w3.org/2005/Atom " ' ;
}
return true ;
break ;
case 'frontend_display:rss-1.0:per_entry' :
case 'frontend_display:rss-2.0:per_entry' :
if ( $this -> get_config ( 'add_to_feed' )) {
$flattr_uid = $this -> _addslashes ( $this -> get_config ( 'userid' ));
$flattr_uid = substr ( $flattr_uid , 0 , 500 );
$flattr_url = $this -> _addslashes ( serendipity_archiveURL ( $eventData [ 'id' ], $eventData [ 'title' ], 'baseURL' , true , array ( 'timestamp' => $eventData [ 'timestamp' ])));
$flattr_url = substr ( $flattr_url , 0 , 2048 );
$eventData [ 'display_dat' ] .= '
< atom : link rel = " payment " href = " https://flattr.com/submit/auto?url=' . urlencode( $flattr_url ) . '&user_id=' . $flattr_uid . ' " type = " text/html " /> ' ;
}
return true ;
break ;
case 'frontend_display:atom-1.0:per_entry' :
if ( $this -> get_config ( 'add_to_feed' )) {
$flattr_uid = $this -> _addslashes ( $this -> get_config ( 'userid' ));
$flattr_uid = substr ( $flattr_uid , 0 , 500 );
$flattr_url = $this -> _addslashes ( serendipity_archiveURL ( $eventData [ 'id' ], $eventData [ 'title' ], 'baseURL' , true , array ( 'timestamp' => $eventData [ 'timestamp' ])));
$flattr_url = substr ( $flattr_url , 0 , 2048 );
$eventData [ 'display_dat' ] .= '
< link rel = " payment " href = " https://flattr.com/submit/auto?url=' . $flattr_url . '&user_id=' . $flattr_uid . ' " type = " text/html " /> ' ;
}
return true ;
break ;
}
2011-12-13 12:29:05 +01:00
}
2012-04-21 11:40:37 +02:00
}