'.$exclude;
$sql = "SELECT quote_id, quote, author, source
FROM " . $wpdb->prefix . "quotescollection
WHERE visible = 'yes'
".$exclude_condition."
ORDER BY RAND()
LIMIT 1";
$random_quote = $wpdb->get_row($sql, ARRAY_A);
if ( !empty($random_quote) ) {
return $random_quote;
}
else
return 0;
}
function quotescollection_count($condition = "")
{
global $wpdb;
$sql = "SELECT COUNT(*) FROM " . $wpdb->prefix . "quotescollection ".$condition;
$count = $wpdb->get_var($sql);
return $count;
}
function quotescollection_js_head() // this is a PHP function
{
// use JavaScript SACK library for AJAX
wp_print_scripts( array( 'sack' ));
// Define custom JavaScript function
?>
". wptexturize(str_replace(array("\r\n", "\r", "\n"), '', nl2br($random_quote['quote']))) ." ";
if($show_author && $random_quote['author'])
$cite = $random_quote['author'];
if($show_source && $random_quote['source']) {
if($cite) $cite .= ", ";
$cite .= $random_quote['source'];
}
if($cite) $cite = " — {$cite} ";
$display .= $cite."
";
// We don't want to display the 'next quote' link if there is no more than 1 quote
$quotes_count = quotescollection_count("WHERE visible='yes'");
if($ajax_refresh == 1 && $quotes_count > 1) {
$display .= "\n";
}
if ($ajax_refresh == 2 && $quotes_count > 1) {
$display = addslashes($display);
$display .= "".__('Next quote', 'quotes-collection')." »
";
return $display;
}
$display = "{$display}
";
echo $display;
$quotescollection_instances++;
return;
}
function quotescollection_init()
{
if(function_exists('load_plugin_textdomain'))
load_plugin_textdomain('quotes-collection', 'wp-content/plugins/quotes-collection/languages/');
if ( !function_exists('register_sidebar_widget') || !function_exists('register_widget_control') )
return;
function quotescollection_widget($args) {
if($random_quote = quotescollection_get_randomquote()) {
$options = get_option('quotescollection');
$title = isset($options['title'])?apply_filters('the_title', $options['title']):__('Random Quote', 'quotes-collection');
$show_author = isset($options['show_author'])?$options['show_author']:1;
$show_source = isset($options['show_source'])?$options['show_source']:1;
$ajax_refresh = isset($options['ajax_refresh'])?$options['ajax_refresh']:1;
extract($args);
echo $before_widget;
if($title) echo $before_title . $title . $after_title . "\n";
quotescollection_display_randomquote($show_author, $show_source, $ajax_refresh, $random_quote);
echo $after_widget;
}
}
function quotescollection_widget_control()
{
// default values for options
$options = array(
'title' => __('Random Quote', 'quotes-collection'),
'show_author' => 1,
'show_source' => 0,
'ajax_refresh' => 1,
);
if($options_saved = get_option('quotescollection'))
$options = array_merge($options, $options_saved);
// Update options in db when user updates options in the widget page
if($_REQUEST['quotescollection-submit']) {
$options['title']
= strip_tags(stripslashes($_REQUEST['quotescollection-title']));
$options['show_author'] = $_REQUEST['quotescollection-show_author']?1:0;
$options['show_source'] = $_REQUEST['quotescollection-show_source']?1:0;
$options['ajax_refresh'] = $_REQUEST['quotescollection-ajax_refresh']?1:0;
update_option('quotescollection', $options);
}
// Now we define the display of widget options menu
$title = htmlspecialchars($options['title'], ENT_QUOTES);
if($options['show_author'])
$show_author_checked = ' checked="checked"';
if($options['show_source'])
$show_source_checked = ' checked="checked"';
if($options['ajax_refresh'])
$ajax_refresh_checked = ' checked="checked"';
echo "".__('Title', 'quotes-collection').":
";
echo " ".__('Show author?', 'quotes-collection')."
";
echo " ".__('Show source?', 'quotes-collection')."
";
echo " ".__('Ajax refresh feature', 'quotes-collection')."
";
echo " ";
echo "".__('Manage your collection of quotes at', 'quotes-collection')."".__('Manage')."->Quotes Collection
";
}
register_sidebar_widget(array('Random Quote', 'widgets'), 'quotescollection_widget');
register_widget_control('Random Quote', 'quotescollection_widget_control', 250, 230);
}
function quotescollection_admin_menu()
{
global $quotescollection_admin_userlevel;
add_management_page('Quotes Collection', 'Quotes Collection', $quotescollection_admin_userlevel, __FILE__, 'quotescollection_quotes_management');
}
function quotescollection_addquote($quote, $author = "", $source = "", $tags = "", $visible = 'yes')
{
if(!$quote) return __('Nothing added to the database.', 'quotes-collection');
global $wpdb;
$table_name = $wpdb->prefix . "quotescollection";
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
return __('Database table not found', 'quotes-collection');
else //Add the quote data to the database
{
if ( ini_get('magic_quotes_gpc') ) {
$quote = stripslashes($quote);
$author = stripslashes($author);
$source = stripslashes($source);
$tags = stripslashes($tags);
}
$quote = "'".$wpdb->escape($quote)."'";
$author = $author?"'".$wpdb->escape($author)."'":"NULL";
$source = $source?"'".$wpdb->escape($source)."'":"NULL";
$tags = explode(',', $tags);
foreach ($tags as $key => $tag)
$tags[$key] = trim($tag);
$tags = implode(',', $tags);
$tags = $tags?"'".$wpdb->escape($tags)."'":"NULL";
if(!$visible) $visible = "'no'";
else $visible = "'yes'";
$insert = "INSERT INTO " . $table_name .
"(quote, author, source, tags, visible, time_added)" .
"VALUES ({$quote}, {$author}, {$source}, {$tags}, {$visible}, NOW())";
$results = $wpdb->query( $insert );
if(FALSE === $results)
return __('There was an error in the MySQL query', 'quotes-collection');
else
return __('Quote added', 'quotes-collection');
}
}
function quotescollection_editquote($quote_id, $quote, $author = "", $source = "", $tags = "", $visible = 'yes')
{
if(!$quote) return __('Quote not updated.', 'quotes-collection');
if(!$quote_id) return srgq_addquote($quote, $author, $source, $visible);
global $wpdb;
$table_name = $wpdb->prefix . "quotescollection";
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
return __('Database table not found', 'quotes-collection');
else //Update database
{
if ( ini_get('magic_quotes_gpc') ) {
$quote = stripslashes($quote);
$author = stripslashes($author);
$source = stripslashes($source);
$tags = stripslashes($tags);
}
$quote = "'".$wpdb->escape($quote)."'";
$author = $author?"'".$wpdb->escape($author)."'":"NULL";
$source = $source?"'".$wpdb->escape($source)."'":"NULL";
$tags = explode(',', $tags);
foreach ($tags as $key => $tag)
$tags[$key] = trim($tag);
$tags = implode(',', $tags);
$tags = $tags?"'".$wpdb->escape($tags)."'":"NULL";
if(!$visible) $visible = "'no'";
else $visible = "'yes'";
$update = "UPDATE " . $table_name . "
SET quote = {$quote},
author = {$author},
source = {$source},
tags = {$tags},
visible = {$visible},
time_updated = NOW()
WHERE quote_id = $quote_id";
$results = $wpdb->query( $update );
if(FALSE === $results)
return __('There was an error in the MySQL query', 'quotes-collection');
else
return __('Changes saved', 'quotes-collection');
}
}
function quotescollection_deletequote($quote_id)
{
if($quote_id) {
global $wpdb;
$sql = "DELETE from " . $wpdb->prefix ."quotescollection" .
" WHERE quote_id = " . $quote_id;
if(FALSE === $wpdb->query($sql))
return __('There was an error in the MySQL query', 'quotes-collection');
else
return __('Quote deleted', 'quotes-collection');
}
else return __('The quote cannot be deleted', 'quotes-collection');
}
function quotescollection_getquotedata($quote_id)
{
global $wpdb;
$sql = "SELECT quote_id, quote, author, source, tags, visible
FROM " . $wpdb->prefix . "quotescollection
WHERE quote_id = {$quote_id}";
$quote_data = $wpdb->get_row($sql, ARRAY_A);
return $quote_data;
}
function quotescollection_editform($quote_id = 0)
{
$visible_selected = " checked=\"checked\"";
$submit_value = __('Add Quote', 'quotes-collection');
$form_name = "addquote";
$action_url = $_SERVER['PHP_SELF']."?page=quotes-collection/quotes-collection.php#addnew";
if($quote_id) {
$form_name = "editquote";
$quote_data = quotescollection_getquotedata($quote_id);
foreach($quote_data as $key => $value)
$quote_data[$key] = $quote_data[$key];
extract($quote_data);
$quote = htmlspecialchars($quote);
$author = htmlspecialchars($author);
$source = htmlspecialchars($source);
$tags = implode(', ', explode(',', $tags));
$hidden_input = " ";
if($visible == 'no') $visible_selected = "";
$submit_value = __('Save changes', 'quotes-collection');
$back = " ";
$action_url = $_SERVER['PHP_SELF']."?page=quotes-collection/quotes-collection.php";
}
$quote_label = __('The quote', 'quotes-collection');
$author_label = __('Author', 'quotes-collection');
$source_label = __('Source', 'quotes-collection');
$tags_label = __('Tags', 'quotes-collection');
$visible_label = __('Visible?', 'quotes-collection');
$optional_text = __('optional', 'quotes-collection');
$comma_separated_text = __('comma separated', 'quotes-collection');
$display .=<<< EDITFORM
EDITFORM;
return $display;
}
function quotescollection_changevisibility($quote_ids, $visibility = 'yes')
{
if(!$quote_ids)
return __('Nothing done!', 'quotes-collection');
global $wpdb;
$sql = "UPDATE ".$wpdb->prefix."quotescollection
SET visible = '".$visibility."',
time_updated = NOW()
WHERE quote_id IN (".implode(', ', $quote_ids).")";
$wpdb->query($sql);
return sprintf(__("Visibility status of selected quotes set to '%s'", 'quotes-collection'), $visibility);
}
function quotescollection_bulkdelete($quote_ids)
{
if(!$quote_ids)
return __('Nothing done!', 'quotes-collection');
global $wpdb;
$sql = "DELETE FROM ".$wpdb->prefix."quotescollection
WHERE quote_id IN (".implode(', ', $quote_ids).")";
$wpdb->query($sql);
return __('Quote(s) deleted', 'quotes-collection');
}
function quotescollection_quotes_management()
{
global $quotescollection_db_version;
$options = get_option('quotescollection');
if($options['db_version'] != $quotescollection_db_version )
quotescollection_install();
if($_REQUEST['submit'] == __('Add Quote', 'quotes-collection')) {
extract($_REQUEST);
$msg = quotescollection_addquote($quote, $author, $source, $tags, $visible);
}
else if($_REQUEST['submit'] == __('Save changes', 'quotes-collection')) {
extract($_REQUEST);
$msg = quotescollection_editquote($quote_id, $quote, $author, $source, $tags, $visible);
}
else if($_REQUEST['action'] == 'editquote') {
$display .= "\n
".__('Edit quote', 'quotes-collection')." ";
$display .= quotescollection_editform($_REQUEST['id']);
$display .= "";
echo $display;
return;
}
else if($_REQUEST['action'] == 'delquote') {
$msg = quotescollection_deletequote($_REQUEST['id']);
}
else if(isset($_REQUEST['bulkaction'])) {
if($_REQUEST['bulkaction'] == __('Delete', 'quotes-collection'))
$msg = quotescollection_bulkdelete($_REQUEST['bulkcheck']);
if($_REQUEST['bulkaction'] == __('Make visible', 'quotes-collection')) {
$msg = quotescollection_changevisibility($_REQUEST['bulkcheck'], 'yes');
}
if($_REQUEST['bulkaction'] == __('Make invisible', 'quotes-collection')) {
$msg = quotescollection_changevisibility($_REQUEST['bulkcheck'], 'no');
}
}
$display .= "";
if($msg)
$display .= "
";
$display .= "
Quotes Collection ";
// Get all the quotes from the database
global $wpdb;
$sql = "SELECT quote_id, quote, author, source, tags, visible
FROM " . $wpdb->prefix . "quotescollection";
if(isset($_REQUEST['orderby'])) {
$sql .= " ORDER BY " . $_REQUEST['criteria'] . " " . $_REQUEST['order'];
$option_selected[$_REQUEST['criteria']] = " selected=\"selected\"";
$option_selected[$_REQUEST['order']] = " selected=\"selected\"";
}
else {
$sql .= " ORDER BY quote_id ASC";
$option_selected['quote_id'] = " selected=\"selected\"";
$option_selected['ASC'] = " selected=\"selected\"";
}
$quotes = $wpdb->get_results($sql);
foreach($quotes as $quote_data) {
if($alternate) $alternate = "";
else $alternate = " class=\"alternate\"";
$quotes_list .= "
";
$quotes_list .= " quote_id."\" /> ";
$quotes_list .= "" . $quote_data->quote_id . " ";
$quotes_list .= "" . wptexturize(nl2br($quote_data->quote)) ." ";
$quotes_list .= "" . $quote_data->author;
if($quote_data->author && $quote_data->source)
$quotes_list .= " / ";
$quotes_list .= $quote_data->source ." ";
$quotes_list .= "" . implode(', ', explode(',', $quote_data->tags)) . " ";
$quotes_list .= "" . $quote_data->visible ." ";
$quotes_list .= "quote_id."\" class=\"edit\">".__('Edit', 'quotes-collection')."
quote_id."\" onclick=\"return confirm( '".__('Are you sure you want to delete this quote?', 'quotes-collection')."');\" class=\"delete\">".__('Delete', 'quotes-collection')." ";
$quotes_list .= " ";
}
if($quotes_list) {
$display .= "
";
$quotes_count = quotescollection_count();
$display .= sprintf(__ngettext('Currently, you have %d quote.', 'Currently, you have %d quotes.', $quotes_count, 'quotes-collection'), $quotes_count);
// anchor to add new quote
$display .= " (".__('Add new quote', 'quotes-collection')." )";
$display .= "
";
$display .= "
";
$display .= "";
$display .= " ";
$display .= " ";
$display .= " ";
$display .= " ";
$display .= __('Sort by: ', 'quotes-collection');
$display .= "";
$display .= "".__('Quote', 'quotes-collection')." ID ";
$display .= "".__('Quote', 'quotes-collection')." ";
$display .= "".__('Author', 'quotes-collection')." ";
$display .= "".__('Source', 'quotes-collection')." ";
$display .= "".__('Date added', 'quotes-collection')." ";
$display .= "".__('Date updated', 'quotes-collection')." ";
$display .= "".__('Visibility', 'quotes-collection')." ";
$display .= " ";
$display .= "ASC DESC ";
$display .= " ";
$display .= "
";
$display .= " ";
$display .= "";
$display .= "";
$display .= " ";
$display .= " ";
$display .= " ";
$display .= "
";
$display .= " ";
$display .= "
";
}
else
$display .= "
".__('No quotes in the database', 'quotes-collection')."
";
$display .= "
";
$display .= "\n
".__('Add new quote', 'quotes-collection')." ";
$display .= quotescollection_editform();
$display .= "";
echo $display;
}
function quotescollection_admin_head()
{
?>
prefix . "quotescollection";
if(!defined('DB_CHARSET') || !($db_charset = DB_CHARSET))
$db_charset = 'utf8';
$db_charset = "CHARACTER SET ".$db_charset;
if(defined('DB_COLLATE') && $db_collate = DB_COLLATE)
$db_collate = "COLLATE ".$db_collate;
// if table name already exists
if($wpdb->get_var("SHOW TABLES LIKE '$table_name'") == $table_name) {
$wpdb->query("ALTER TABLE `{$table_name}` {$db_charset} {$db_collate}");
$wpdb->query("ALTER TABLE `{$table_name}` MODIFY quote TEXT {$db_charset} {$db_collate}");
$wpdb->query("ALTER TABLE `{$table_name}` MODIFY author VARCHAR(255) {$db_charset} {$db_collate}");
$wpdb->query("ALTER TABLE `{$table_name}` MODIFY source VARCHAR(255) {$db_charset} {$db_collate}");
if(!($wpdb->get_results("SHOW COLUMNS FROM {$table_name} LIKE 'tags'"))) {
$wpdb->query("ALTER TABLE `{$table_name}` ADD `tags` VARCHAR(255) {$db_charset} {$db_collate} AFTER `source`");
}
}
else {
//Creating the table ... fresh!
$sql = "CREATE TABLE " . $table_name . " (
quote_id mediumint(9) NOT NULL AUTO_INCREMENT,
quote TEXT NOT NULL,
author VARCHAR(255),
source VARCHAR(255),
tags VARCHAR(255),
visible enum('yes', 'no') DEFAULT 'yes' NOT NULL,
time_added datetime NOT NULL,
time_updated datetime,
PRIMARY KEY (quote_id)
) {$db_charset} {$db_collate};";
$results = $wpdb->query( $sql );
}
global $quotescollection_db_version;
$options = get_option('quotescollection');
$options['db_version'] = $quotescollection_db_version;
update_option('quotescollection', $options);
}
function quotescollection_displayquote($quote_id = 0)
{
global $wpdb;
$sql = "SELECT quote_id, quote, author, source
FROM " . $wpdb->prefix . "quotescollection
WHERE visible = 'yes' ";
if(!$quote_id) {
$sql .= "ORDER BY RAND()
LIMIT 1";
}
else {
$sql .= "AND quote_id = {$quote_id}";
}
$quote_data = $wpdb->get_row($sql, ARRAY_A);
if ( !empty($quote_data) ) {
$display = "".wptexturize(nl2br($quote_data['quote']))." ";
if($quote_data['author'])
$cite = $quote_data['author'];
if($quote_data['source']) {
if($cite) $cite .= ", ";
$cite .= $quote_data['source'];
}
if($cite) $cite = " — {$cite} ";
$display .= $cite." ";
return $display;
}
else
return "";
}
function quotescollection_displayquotes($source = "")
{
global $wpdb;
$source = html_entity_decode($source);
$sql = "SELECT quote_id, quote, author, source
FROM " . $wpdb->prefix . "quotescollection
WHERE visible = 'yes' ";
if(!$source) {
$sql .= "ORDER BY quote";
}
else if($source == "Anonymous" || $source == "anonymous") {
$sql .= "AND (author IS NULL OR author = '' OR author ='Anonymous')";
}
else {
$sql .= "AND (source = '{$source}' OR author = '{$source}')";
}
$quotes = $wpdb->get_results($sql, ARRAY_A);
if ( !empty($quotes) ) {
foreach($quotes as $quote_data) {
$display .= "".wptexturize(nl2br($quote_data['quote']))." ";
$cite = "";
if($quote_data['author'])
$cite = $quote_data['author'];
if($quote_data['source']) {
if($cite) $cite .= ", ";
$cite .= $quote_data['source'];
}
if($cite) $cite = " — {$cite} ";
$display .= $cite." ";
}
return $display;
}
else
return "";
}
function quotescollection_displayquotes_tags($tags = "")
{
global $wpdb;
$tags = html_entity_decode($tags);
if(!$tags)
return "";
$taglist = explode(',', $tags);
foreach($taglist as $tag) {
$tag = trim($tag);
if($sql_condition) $sql_condition .= " OR ";
$sql_condition .= "tags = '{$tag}' OR tags LIKE '{$tag},%' OR tags LIKE '%,{$tag},%' OR tags LIKE '%,{$tag}'";
}
$sql = "SELECT quote_id, quote, author, source
FROM " . $wpdb->prefix . "quotescollection
WHERE visible = 'yes' AND ({$sql_condition})";
$quotes = $wpdb->get_results($sql, ARRAY_A);
if ( !empty($quotes) ) {
foreach($quotes as $quote_data) {
$display .= "".wptexturize(nl2br($quote_data['quote']))." ";
$cite = "";
if($quote_data['author'])
$cite = $quote_data['author'];
if($quote_data['source']) {
if($cite) $cite .= ", ";
$cite .= $quote_data['source'];
}
if($cite) $cite = " — {$cite} ";
$display .= $cite." ";
}
return $display;
}
else
return "";
}
function quotescollection_inpost( $text ) {
$start = strpos($text,"[quote|id=");
if ($start !== FALSE) {
$text = preg_replace( "/\[quote\|id=(\d+)\]/ie", "quotescollection_displayquote('\\1')", $text );
}
$start = strpos($text,"[quote|random]");
if ($start !== FALSE) {
$text = preg_replace( "/\[quote\|random\]/ie", "quotescollection_displayquote()", $text );
}
$start = strpos($text,"[quote|all]");
if ($start !== FALSE) {
$text = preg_replace( "/\[quote\|all\]/ie", "quotescollection_displayquotes()", $text );
}
$start = strpos($text,"[quote|author=");
if($start !== FALSE) {
$text = preg_replace("/\[quote\|author=(.{1,})?\]/ie", "quotescollection_displayquotes(\"\\1\")", $text);
}
$start = strpos($text,"[quote|source=");
if($start !== FALSE) {
$text = preg_replace("/\[quote\|source=(.{1,})?\]/ie", "quotescollection_displayquotes(\"\\1\")", $text);
}
$start = strpos($text,"[quote|tags=");
if($start !== FALSE) {
$text = preg_replace("/\[quote\|tags=(.{1,})?\]/ie", "quotescollection_displayquotes_tags(\"\\1\")", $text);
} return $text;
}
function quotescollection_css_head()
{
?>