true, 'frontend_display' => true, 'backend_publish' => true, 'backend_save' => true, 'frontend_header' => true, '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, ); $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', 'flattr_lng', 'flattr_pop', 'add_to_feed', )); $propbag->add('author', 'Garvin Hicking, Joachim Breitner', 'Matthias Gutjahr'); $propbag->add('version', '1.14.1'); $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')); $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 )); } /** * @param string $name * @param serendipity_property_bag $propbag * @return bool */ function introspect_config_item($name, &$propbag) { 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; case 'flattr_pop': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_FLATTR_POPOUT); $propbag->add('description', ''); $propbag->add('default', false); break; case 'add_to_feed': $propbag->add('type', 'boolean'); $propbag->add('name', PLUGIN_FLATTR_ADD_TO_FEED); $propbag->add('description', ''); $propbag->add('default', false); break; } return true; } /** * @param string $event * @param serendipity_property_bag $bag * @param mixed $eventData * @param mixed $addData * @return bool */ function event_hook($event, &$bag, &$eventData, $addData = null) { global $serendipity; 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': ?>
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 '
'; if ($attr == 'flattr_active' || $attr == 'flattr_lng' || $attr == 'flattr_cat') { echo ''; } else { echo '' . "\n"; } echo '
'; } ?>
_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); ?> _addslashes($this->get_config('userid')); $flattr_tle = $this->_addslashes($eventData['title']); $flattr_pop = (int) $this->get_config('flattr_pop'); $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 = "" . $flattr_btn . ""; } else { $flattr_tle2 = stripslashes($flattr_tle2); $flattr_tle2 = (function_exists('serendipity_specialchars') ? serendipity_specialchars($flattr_tle2) : htmlspecialchars($flattr_tle2, ENT_COMPAT, LANG_CHARSET)); $flattr = " "; } $field = $this->get_config('placement'); if ($addData['from'] == 'functions_entries:updertEntry') { } elseif ($addData['from'] == 'functions_entries:printEntries_rss') { $entryText =& $this->getFieldReference($field, $eventData); $entryText .= (function_exists('serendipity_specialchars') ? serendipity_specialchars($flattr) : htmlspecialchars($flattr, ENT_COMPAT, LANG_CHARSET)); } else { $entryText =& $this->getFieldReference($field, $eventData); $entryText .= $flattr; } if ($field == 'extended') { $eventData['is_extended'] = true; } break; 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'] .= ' '; } 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'] .= ' '; } return true; break; } } }