Update of /cvsroot/php-blog/additional_plugins/serendipity_event_freetag
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3749
Added Files:
serendipity_event_freetag.php serendipity_plugin_freetag.php
Log Message:
Added free tag plugins
--- NEW FILE: serendipity_plugin_freetag.php ---
<?php # $Id: serendipity_plugin_freetag.php,v 1.1 2004/12/13 12:51:20 garvinhicking Exp $
switch ($serendipity['lang']) {
case 'de':
@define('PLUGIN_FREETAG_NAME', 'Getaggte Artikel');
@define('PLUGIN_FREETAG_BLAHBLAH', 'Zeigt alle vorhandenen Tags');
break;
case 'en':
default:
@define('PLUGIN_FREETAG_NAME', 'Show tagged entries');
@define('PLUGIN_FREETAG_BLAHBLAH', 'Shows a list of existing tags for entries');
break;
}
class serendipity_plugin_freetag extends serendipity_plugin
{
var $title = PLUGIN_FREETAG_NAME;
function introspect(&$propbag)
{
global $serendipity;
$this->title = $this->get_config('title', $this->title);
$propbag->add('name', PLUGIN_FREETAG_NAME);
$propbag->add('description', PLUGIN_FREETAG_BLAHBLAH);
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking');
$propbag->add('version', '1.0');
$this->dependencies = array('serendipity_event_freetag' => 'keep');
}
function generate_content(&$title)
{
global $serendipity;
$title = $this->get_config('title', $this->title);
$query = "SELECT DISTINCT value FROM {$serendipity['dbPrefix']}entryproperties WHERE property = 'ep_freetag_name'";
$rows = serendipity_db_query($query);
if (!is_array($rows)) {
continue;
}
$alltags = array();
$taglist = array();
foreach($rows AS $idx => $val) {
$tags = explode(',', $val['value']);
foreach($tags as $tag) {
$tag = trim($tag);
if (!empty($tag)) {
if (isset($alltags[$tag])) {
$alltags[$tag]++;
} else {
$alltags[$tag] = 1;
$taglist[] = $tag;
}
}
}
}
natcasesort($taglist);
$taglink = $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/freetag/';
$rsslink = $serendipity['serendipityHTTPPath'] . 'rss.php?serendipity[tag]=';
$xmlImg = serendipity_getTemplateFile('img/xml.gif');
foreach($taglist AS $tag) {
echo '<a href="' . $rsslink . urlencode($tag) . '" title="' . htmlspecialchars($tag) . '"><img alt="xml" src="' . $xmlImg . '" style="vertical-align: bottom; display: inline; border: 0px" /></a> ';
echo '<a href="' . $taglink . urlencode($tag) . '" title="' . htmlspecialchars($tag) . '">' . htmlspecialchars($tag) . '</a><br />';
}
}
}
/* vim: set sts=4 ts=4 expandtab : */
?>
--- NEW FILE: serendipity_event_freetag.php ---
<?php # $Id: serendipity_event_freetag.php,v 1.1 2004/12/13 12:51:20 garvinhicking Exp $
switch ($serendipity['lang']) {
case 'de':
@define('PLUGIN_EVENT_FREETAG_TITLE', 'Freie Artikel-Tags');
@define('PLUGIN_EVENT_FREETAG_DESC', 'Erlaubt das freie tagging von Artikeln');
@define('PLUGIN_EVENT_FREETAG_ENTERDESC', 'Bitte alle zutreffenden Tags angeben. Mehrere zutreffende Tags mit Komma (,) trennen');
@define('PLUGIN_EVENT_FREETAG_LIST', 'Tags für diesen Artikel: %s');
@define('PLUGIN_EVENT_FREETAG_USING', 'Artikel mit Tag %s');
break;
case 'en':
default:
@define('PLUGIN_EVENT_FREETAG_TITLE', 'Tagging of entries');
@define('PLUGIN_EVENT_FREETAG_DESC', 'Allows freestyle tagging of entries');
@define('PLUGIN_EVENT_FREETAG_ENTERDESC', 'Enter any tags that apply. Seperate multiple tags with a comma (,)');
@define('PLUGIN_EVENT_FREETAG_LIST', 'Defined tags for this entry: %s');
@define('PLUGIN_EVENT_FREETAG_USING', 'Entries tagged as %s');
break;
}
class serendipity_event_freetag extends serendipity_event
{
var $tags = array();
var $title = PLUGIN_EVENT_FREETAG_TITLE;
function introspect(&$propbag)
{
global $serendipity;
$propbag->add('name', PLUGIN_EVENT_FREETAG_TITLE);
$propbag->add('description', PLUGIN_EVENT_FREETAG_DESC);
$propbag->add('stackable', false);
$propbag->add('author', 'Garvin Hicking');
$propbag->add('version', '1.0');
$propbag->add('event_hooks', array(
'frontend_fetchentries' => true,
'frontend_fetchentry' => true,
'entry_display' => true,
'backend_publish' => true,
'backend_save' => true,
'backend_display' => true,
'frontend_entryproperties' => true,
'backend_sidebar_entries' => true,
'external_plugin' => true,
'css' => true
));
$this->supported_properties = array('freetag_name');
}
function generate_content(&$title) {
$title = $this->title;
}
function getTags($tag) {
global $serendipity;
$links = array();
$tags = explode(',', $tag);
$taglink = $serendipity['baseURL'] . ($serendipity['rewrite'] == 'none' ? $serendipity['indexFile'] . '?/' : '') . 'plugin/freetag/';
foreach($tags as $tag) {
$tag = trim($tag);
if (empty($tag)) {
continue;
}
$links[] = '<a href="' . $taglink . urlencode($tag) . '" title="' . htmlspecialchars($tag) . '">' . htmlspecialchars($tag) . '</a>';
}
return implode(', ', $links);
}
function event_hook($event, &$bag, &$eventData, $addData = null) {
global $serendipity;
$hooks = &$bag->get('event_hooks');
if (isset($hooks[$event])) {
switch($event) {
case 'external_plugin':
$uri_parts = explode('?', str_replace('&', '&', $eventData));
$parts = explode('/', $uri_parts[0]);
$plugincode = $parts[0];
$param = urldecode($parts[1]);
$serendipity['head_subtitle'] = sprintf(PLUGIN_EVENT_FREETAG_USING, htmlspecialchars($param));
/* Attempt to locate hidden variables within the URI */
foreach ($serendipity['uriArguments'] as $k => $v){
if ($v{0} == 'P') { /* Page */
$page = substr($v, 1);
if (is_numeric($page)) {
$serendipity['GET']['page'] = $page;
unset($serendipity['uriArguments'][$k]);
}
}
}
switch($plugincode) {
case 'freetag':
$this->tags['show'] = serendipity_db_escape_string($param);
include_once(S9Y_INCLUDE_PATH . 'include/genpage.inc.php');
serendipity_gzCompression();
$serendipity['smarty']->display(serendipity_getTemplateFile($serendipity['smarty_file'], 'serendipityPath'));
break;
}
break;
case 'backend_publish':
case 'backend_save':
if (!isset($serendipity['POST']['properties']) || !is_array($serendipity['POST']['properties']) || !isset($eventData['id'])) {
return true;
}
if (substr($serendipity['POST']['properties']['freetag_name'], 0, 1) != ',') {
$serendipity['POST']['properties']['freetag_name'] = ',' . $serendipity['POST']['properties']['freetag_name'];
}
if (substr($serendipity['POST']['properties']['freetag_name'], -1, 1) != ',') {
$serendipity['POST']['properties']['freetag_name'] .= ',';
}
// Get existing data
$property = serendipity_fetchEntryProperties($eventData['id']);
foreach($this->supported_properties AS $prop_key) {
$prop_val = (isset($serendipity['POST']['properties'][$prop_key]) ? $serendipity['POST']['properties'][$prop_key] : null);
$prop_key = 'ep_' . $prop_key;
if (!isset($property[$prop_key]) && !empty($prop_val)) {
$q = "INSERT INTO {$serendipity['dbPrefix']}entryproperties (entryid, property, value) VALUES (" . (int)$eventData['id'] . ", '" . serendipity_db_escape_string($prop_key) . "', '" . serendipity_db_escape_string($prop_val) . "')";
} elseif ($property[$propkey] != $prop_val && !empty($prop_val)) {
$q = "UPDATE {$serendipity['dbPrefix']}entryproperties SET value = '" . serendipity_db_escape_string($prop_val) . "' WHERE entryid = " . (int)$eventData['id'] . " AND property = '" . serendipity_db_escape_string($prop_key) . "'";
} else {
$q = "DELETE FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid = " . (int)$eventData['id'] . " AND property = '" . serendipity_db_escape_string($prop_key) . "'";
}
serendipity_db_query($q);
}
return true;
break;
case 'backend_display':
if (isset($eventData['properties']['ep_freetag_name'])) {
$freetag_name = $eventData['properties']['ep_freetag_name'];
} elseif (isset($serendipity['POST']['properties']['freetag_name'])) {
$freetag_name = $serendipity['POST']['properties']['freetag_name'];
} else {
$freetag_name = '';
}
if ($freetag_name{0} == ',') {
$freetag_name = substr($freetag_name, 1);
}
if (substr($freetag_name, -1, 1) == ',') {
$freetag_name = substr($freetag_name, 0, -1);
}
?>
<fieldset style="margin: 5px">
<legend><?php echo PLUGIN_EVENT_FREETAG_TITLE; ?></legend>
<label for="serendipity[properties][freetag_name]" title="<?php echo PLUGIN_EVENT_FREETAG_TITLE; ?>"><?php echo PLUGIN_EVENT_FREETAG_ENTERDESC; ?>:</label> <input type="text" name="serendipity[properties][freetag_name]" id="properties_freetag_name" value="<?php echo htmlspecialchars($freetag_name); ?>" />
</fieldset>
<?php
return true;
break;
case 'frontend_entryproperties':
if (class_exists('serendipity_event_entryproperties')) {
// Fetching of properties is already done there, so this is just for poor users who don't have the entryproperties plugin enabled
return true;
}
$q = "SELECT entryid, property, value FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid IN (" . implode(', ', array_keys($addData)) . ") AND property LIKE '%freetag_%'";
$properties = serendipity_db_query($q);
if (!is_array($properties)) {
return true;
}
foreach($properties AS $idx => $row) {
$eventData[$addData[$row['entryid']]]['properties'][$row['property']] = $row['value'];
}
return true;
break;
case 'frontend_fetchentries':
case 'frontend_fetchentry':
if (!empty($this->tags['show'])) {
$showtag = $this->tags['show'];
} else if (!empty($serendipity['GET']['tag'])) {
$showtag = serendipity_db_escape_string(urldecode($serendipity['GET']['tag']));
}
if (!empty($showtag)) {
$cond = "freetag_name.value LIKE '%," . $showtag . ",%'";
if (empty($eventData['and'])) {
$eventData['and'] = " WHERE $cond";
} else {
$eventData['and'] .= " AND $cond ";
}
}
$cond = "freetag_name.value AS freetag_name,\n";
if (empty($eventData['addkey'])) {
$eventData['addkey'] = $cond;
} else {
$eventData['addkey'] .= $cond;
}
$cond = "LEFT OUTER JOIN {$serendipity['dbPrefix']}entryproperties freetag_name
ON (e.id = freetag_name.entryid AND freetag_name.property = 'ep_freetag_name')";
if (empty($eventData['joins'])) {
$eventData['joins'] = $cond;
} else {
$eventData['joins'] .= $cond;
}
return true;
break;
case 'css':
if (strpos($eventData, '.serendipity_freeTag')) {
// class exists in CSS, so a user has customized it and we don't need default
return true;
}
?>
.serendipity_freeTag {
margin-left: auto;
margin-right: 0px;
text-align: right;
font-size: 7pt;
display: block;
margin-top: 5px;
margin-bottom: 0px;
}
.serendipity_freeTag a {
font-size: 7pt;
text-decoration: none;
}
.serendipity_freeTag a:hover {
color: green;
}
<?php
return true;
break;
case 'entry_display':
if ($bag->get('scrambles_true_content') && is_array($addData) && isset($addData['no_scramble'])) {
return true;
}
$msg = '<div class="serendipity_freeTag">' . PLUGIN_EVENT_FREETAG_LIST . '</div>';
if ($addData['extended'] || $addData['preview']) {
$eventData[0]['exflag'] = 1;
$eventData[0]['extended'] .= sprintf($msg, $this->getTags($eventData[0]['properties']['ep_freetag_name']));
} else {
$elements = count($eventData);
// Walk entry array and insert karma voting line.
for ($i = 0; $i < $elements; $i++) {
if (empty($eventData[$i]['properties']['ep_freetag_name'])) {
continue;
}
if (!isset($eventData[$i]['add_footer'])) {
$eventData[$i]['add_footer'] = '';
}
$eventData[$i]['add_footer'] .= sprintf($msg, $this->getTags($eventData[$i]['properties']['ep_freetag_name']));
}
}
default:
return false;
break;
}
} else {
return false;
}
}
}
/* vim: set sts=4 ts=4 expandtab : */
?>
|