2009-06-02 20:12:47 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
class DailyImageWidget {
|
2009-06-04 21:36:51 +00:00
|
|
|
function DailyImageWidget() {
|
|
|
|
$this->default_display_options = array(
|
|
|
|
'title',
|
|
|
|
'image',
|
|
|
|
'styles'
|
2009-06-09 19:55:50 +00:00
|
|
|
);
|
|
|
|
|
2009-06-09 21:45:59 +00:00
|
|
|
$this->_cache_time = 86400;
|
|
|
|
|
2009-06-09 19:55:50 +00:00
|
|
|
$this->data_source = "http://hubblesite.org/gallery/album/daily_image.php";
|
|
|
|
$this->data = false;
|
|
|
|
|
|
|
|
$this->has_simplexml = class_exists('SimpleXMLElement');
|
|
|
|
|
|
|
|
$this->_valid_column_names = array('title', 'caption', 'date', 'image_url', 'gallery_url', 'credits');
|
2009-06-09 21:45:59 +00:00
|
|
|
$this->_valid_options = array(
|
|
|
|
"image" => "Daily Image",
|
|
|
|
"title" => "Image Title",
|
|
|
|
"caption" => "Image Caption",
|
|
|
|
"credits" => "Credits",
|
|
|
|
"styles" => "HubbleSite Styles",
|
|
|
|
);
|
|
|
|
|
|
|
|
wp_register_sidebar_widget("hubblesite-daily-image", "HubbleSite Daily Image", array($this, "render"));
|
|
|
|
register_widget_control("hubblesite-daily-image", array($this, "render_ui"));
|
2009-06-04 21:36:51 +00:00
|
|
|
}
|
|
|
|
|
2009-06-09 19:55:50 +00:00
|
|
|
/**
|
|
|
|
* Get the list of display options from the WordPress options database.
|
|
|
|
*/
|
2009-06-04 21:36:51 +00:00
|
|
|
function get_display_options() {
|
|
|
|
$display_options = get_option('hubblesite-daily-image-options');
|
|
|
|
$this->display_options = array();
|
|
|
|
if (!empty($display_options)) {
|
2009-06-09 21:45:59 +00:00
|
|
|
$this->display_options = array_intersect(explode(",", $display_options), array_keys($this->_valid_options));
|
2009-06-04 21:36:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
if (empty($this->display_options)) {
|
|
|
|
$this->display_options = $this->default_display_options;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $this->display_options;
|
|
|
|
}
|
|
|
|
|
2009-06-09 19:55:50 +00:00
|
|
|
/**
|
|
|
|
* Render the widget.
|
|
|
|
*/
|
2009-06-03 21:29:23 +00:00
|
|
|
function render() {
|
2009-06-04 21:36:51 +00:00
|
|
|
if (!empty($this->data) && is_array($this->data)) {
|
|
|
|
$options = $this->get_display_options();
|
|
|
|
|
|
|
|
echo '<div id="hubblesite-daily-image">';
|
|
|
|
if (in_array("image", $options)) {
|
|
|
|
echo '<a href="' . $this->data['gallery_url'] . '" title="' . $this->data['title'] . '">';
|
|
|
|
echo '<img src="' . $this->data['image_url'] . '" alt="' . $this->data['title'] . '" />';
|
|
|
|
echo '</a>';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (in_array("title", $options)) {
|
|
|
|
echo '<a id="hubblesite-daily-image-title" href="' . $this->data['gallery_url'] . '">';
|
|
|
|
echo $this->data['title'];
|
|
|
|
echo '</a>';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (in_array("caption", $options)) {
|
|
|
|
echo '<div id="hubblesite-daily-image-caption">';
|
|
|
|
echo $this->data['caption'];
|
|
|
|
echo '</div>';
|
|
|
|
}
|
|
|
|
|
|
|
|
if (in_array("credits", $options)) {
|
|
|
|
echo '<div id="hubblesite-daily-image-credits">';
|
|
|
|
echo $this->data['credits'];
|
|
|
|
echo '</div>';
|
|
|
|
}
|
|
|
|
echo '</div>';
|
|
|
|
|
|
|
|
if (in_array("styles", $options)) {
|
|
|
|
echo '<style type="text/css">';
|
|
|
|
echo "div#hubblesite-daily-image { text-align: center }";
|
|
|
|
echo '</style>';
|
|
|
|
}
|
2009-06-03 21:29:23 +00:00
|
|
|
}
|
|
|
|
}
|
2009-06-09 19:55:50 +00:00
|
|
|
|
2009-06-09 21:45:59 +00:00
|
|
|
function render_ui() {
|
|
|
|
echo "<p>Show on Widget:</p>";
|
|
|
|
|
|
|
|
foreach ($this->_valid_options as $option => $label) {
|
|
|
|
echo "<label>";
|
|
|
|
echo "<input type=\"checkbox\" name=\"hubblesite[${option}]\" />";
|
|
|
|
echo $label;
|
|
|
|
echo "</label>";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2009-06-09 19:55:50 +00:00
|
|
|
/**
|
|
|
|
* Parse a string of XML from the HubbleSite Daily Gallery Image feed.
|
|
|
|
*/
|
|
|
|
function parse_xml($xml_text) {
|
|
|
|
if ($this->has_simplexml) {
|
|
|
|
try {
|
|
|
|
$xml = new SimpleXMLElement($xml_text);
|
|
|
|
|
|
|
|
if ($xml !== false) {
|
|
|
|
$data = array();
|
|
|
|
$is_valid = true;
|
|
|
|
foreach ($this->_valid_column_names as $node) {
|
|
|
|
if ($xml->{$node}) {
|
|
|
|
$data[$node] = (string)$xml->{$node};
|
|
|
|
} else {
|
|
|
|
$is_valid = false; break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($is_valid) {
|
|
|
|
$this->data = $data;
|
|
|
|
} else {
|
|
|
|
$this->data = false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} catch (Exception $e) {
|
|
|
|
$this->data = false;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
$parser = xml_parser_create();
|
|
|
|
$this->_character_data = "";
|
|
|
|
$this->_xml_data = array();
|
|
|
|
xml_set_element_handler(
|
|
|
|
$parser,
|
|
|
|
array($this, "_start_element_handler"),
|
|
|
|
array($this, "_end_element_handler")
|
|
|
|
);
|
|
|
|
xml_set_character_data_handler($parser, array($this, "_character_data_handler"));
|
|
|
|
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
|
|
|
|
$this->data = false;
|
|
|
|
if (xml_parse($parser, $xml_text)) {
|
|
|
|
if (count($this->_xml_data) == count($this->_valid_column_names)) {
|
|
|
|
$this->data = $this->_xml_data;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $this->data;
|
|
|
|
}
|
|
|
|
|
|
|
|
function _start_element_handler($parser, $name, $attributes) {
|
|
|
|
$this->_character_data = "";
|
|
|
|
}
|
|
|
|
|
|
|
|
function _end_element_handler($parser, $name) {
|
|
|
|
$name = strtolower($name);
|
|
|
|
if (in_array($name, $this->_valid_column_names)) {
|
|
|
|
$this->_xml_data[$name] = $this->_character_data;
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->_character_data = "";
|
|
|
|
}
|
|
|
|
|
|
|
|
function _character_data_handler($parser, $data) {
|
|
|
|
$this->_character_data .= $data;
|
|
|
|
}
|
2009-06-09 21:45:59 +00:00
|
|
|
|
|
|
|
function _get_cached_data() {
|
|
|
|
$result = get_option('hubblesite-daily-image-cache');
|
|
|
|
|
|
|
|
if (is_string($result)) {
|
|
|
|
if (($data = @unserialize($result)) !== false) {
|
|
|
|
list($timestamp, $cached_data) = $data;
|
|
|
|
|
|
|
|
if (($timestamp + $this->_cache_time) > time()) {
|
2009-06-10 17:32:06 +00:00
|
|
|
$is_valid = true;
|
|
|
|
foreach ($this->_valid_column_names as $field) {
|
|
|
|
if (!isset($cached_data[$field])) { $is_valid = false; break; }
|
|
|
|
}
|
2009-06-09 21:45:59 +00:00
|
|
|
|
2009-06-10 17:32:06 +00:00
|
|
|
return ($is_valid) ? $cached_data : false;
|
2009-06-09 21:45:59 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
2009-06-02 20:12:47 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
?>
|