add('name', PLUGIN_MYMOOD_TITLE);
$propbag->add('description', PLUGIN_MYMOOD_DESC);
$propbag->add('requirements', array(
'serendipity' => '0.8',
'smarty' => '2.6.7',
'php' => '4.1.0'
));
$propbag->add('version', '0.11');
$propbag->add('author', 'Brett Profitt');
$propbag->add('stackable', false);
$propbag->add('event_hooks', array(
'entry_display' => true,
'backend_publish' => true,
'backend_save' => true,
'backend_display' => true,
'backend_sidebar_entries' => true,
'backend_sidebar_entries_event_display_mymood' => true,
));
$propbag->add('groups', array('FRONTEND_ENTRY_RELATED', 'BACKEND_EDITOR'));
$propbag->add('configuration', array( 'intro',
'outro',
'place_before',
'location',
'display_format',
));
#we use this to match entries to moods. mood metadata get their own db.
$this->dependencies = array('serendipity_event_entryproperties' => 'keep');
}
function introspect_config_item($name, &$propbag) {
switch ($name) {
case 'intro':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_MYMOOD_INTRO);
$propbag->add('description', PLUGIN_MYMOOD_INTRO_DESC);
$propbag->add('default', PLUGIN_MYMOOD_TODAY_I_FEEL);
break;
case 'outro':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_MYMOOD_OUTRO);
$propbag->add('description', PLUGIN_MYMOOD_OUTRO_DESC);
break;
case 'location':
$select = array ('body' => PLUGIN_MYMOOD_PLACE_FIELD_BODY,
# 'author' => PLUGIN_MYMOOD_PLACE_FIELD_AUTHOR,
'footer' => PLUGIN_MYMOOD_PLACE_FIELD_FOOTER,
'title' => PLUGIN_MYMOOD_PLACE_FIELD_TITLE,
'smarty' => '{$entry.mymood} Smarty Variable');
$propbag->add('type', 'select');
$propbag->add('name', PLUGIN_MYMOOD_PLACE_FIELD);
$propbag->add('description', PLUGIN_MYMOOD_PLACE_FIELD_DESC);
$propbag->add('select_values', $select);
$propbag->add('default', 'body');
break;
case 'place_before':
$propbag->add('type', 'boolean');
$propbag->add('name', PLUGIN_MYMOOD_PLACE_BEFORE);
$propbag->add('description', PLUGIN_MYMOOD_PLACE_BEFORE_DESC);
$propbag->add('default', 'false');
break;
case 'display_format':
$propbag->add('type', 'string');
$propbag->add('name', PLUGIN_MYMOOD_DISPLAY_FORMAT);
$propbag->add('description', PLUGIN_MYMOOD_DISPLAY_FORMAT_DESC);
$propbag->add('default', '{img} {name}');
break;
}
return true;
}
#################################
# general funcitons
function setupDB() {
global $serendipity;
if (serendipity_db_bool($this->get_config('db_built', false))) {
return true;
}
#FIXME: Add hooks for XML / exporting to convert images/text to ascii art/text or text-only.
# That doesn't belong here.
$sql = "CREATE TABLE {$serendipity['dbPrefix']}mymood (
mood_id {AUTOINCREMENT} {PRIMARY},
mood_name varchar(255) NOT NULL default '',
mood_img varchar(255) NOT NULL default '',
mood_ascii varchar(255) NOT NULL default ''
)";
serendipity_db_schema_import($sql);
# Setting up some basic moods...
$moods = array();
$default_moods = explode('|`|', PLUGIN_MYMOOD_LISTOFMOODS);
foreach ($default_moods as $mood_s) {
$info_array = explode('|~|', $mood_s);
$moods[]=array(
'mood_name' => $info_array[0],
'mood_img' => $info_array[1],
'mood_ascii' => $info_array[2],
);
}
#gar! hafta check if there's already one defined...stupid 5000 'Happy's in my db...
#fixme: this may need some sort of case insensitive stuff...
# also will want to add that to the adding part..
foreach ($moods as $mood_array) {
$check_q = "SELECT mood_id FROM {$serendipity['dbPrefix']}mymood WHERE mood_name='{$mood_array['mood_name']}'";
$t=serendipity_db_query($check_q);
if (!empty($t[0])) { continue; }
$insert_q = "INSERT INTO {$serendipity['dbPrefix']}mymood
(mood_name, mood_img, mood_ascii)
VALUES (
'{$mood_array['mood_name']}', '{$mood_array['mood_img']}','{$mood_array['mood_ascii']}')";
serendipity_db_query($insert_q);
}
$this->set_config('db_built', 'true');
}
function resetDB() {
global $serendipity;
serendipity_db_query("DELETE FROM {$serendipity['dbPrefix']}mymood");
$this->set_config('db_built', 'false');
}
function get_moods_list() {
global $serendipity;
$this->setupDB();
$sql = "SELECT *
FROM {$serendipity['dbPrefix']}mymood
ORDER BY mood_name";
$items = serendipity_db_query($sql);
if (!is_array($items)) {
return array();
} else {
return $items;
}
}
function get_entry_moods($e_id) {
global $serendipity;
$this->setupDB();
if (empty($e_id)) {
return array();
}
$q = "SELECT value FROM {$serendipity['dbPrefix']}entryproperties WHERE entryid = '$e_id' AND property = 'mymood'";
$t = serendipity_db_query($q);
if (is_array($t) && !empty($t[0]['value'])) {
return explode(',', $t[0]['value']);
} else {
return array();
}
}
function get_mood_info($m_id) {
$this->setupDB();
global $serendipity;
$q = "SELECT * FROM {$serendipity['dbPrefix']}mymood WHERE mood_id = '$m_id'";
$t = serendipity_db_query($q);
if (is_array($t) && !empty($t[0]['mood_name'])) {
return $t[0];
} else {
return array();
}
}
# second param is to ignore the location field and force
# adding of all 3 fields (used for background stuff)
function format_mood($mood_info, $forced=FALSE) {
$format = $this->get_config('display_format', '{img} {name}');
$img_tag = (!empty($mood_info['mood_img'])) ?
'' :
'';
$ascii = (!empty($mood_info['mood_ascii'])) ? htmlentities($mood_info['mood_ascii']) : '';
$format=str_replace(array('{img}', '{name}', '{ascii}'),
array($img_tag, $mood_info['mood_name'], $ascii),
$format);
# if we are to display this in the title, remove all html tags...
if ($forced!==TRUE and $this->get_config('location', 'body')=='title') {
$format = strip_tags($format);
}
return $format;
}
####################################
# admin functions
function a_add_mood() {
global $serendipity;
$this->setupDB();
$moods = $this->get_moods_list();
foreach($serendipity['POST']['mymood'] AS $m_id => $array) {
if (empty($m_id)) {
if (empty($array['mood_img']) && empty($array['mood_ascii'])) {
continue;
} elseif (empty($array['mood_name'])) {
echo '