コード例 #1
0
ファイル: core.php プロジェクト: robv/wp-lifestream
    function options_page()
    {
        global $wpdb, $userdata;
        $wpdb->show_errors();
        $this->install();
        get_currentuserinfo();
        $date_format = sprintf('%s @ %s', $this->get_option('day_format'), $this->get_option('hour_format'));
        $basename = basename(LIFESTREAM_PLUGIN_FILE);
        $errors = array();
        $message = null;
        switch ($_GET['page']) {
            case 'lifestream-maintenance.php':
                if (@$_POST['resetcron']) {
                    $this->reschedule_cron();
                    $message = $this->__('Cron timers have been reset.');
                } elseif (@$_POST['restore']) {
                    $this->restore_options();
                    $message = $this->__('Default options have been restored.');
                } elseif (@$_POST['restoredb']) {
                    $this->restore_database();
                    $message = $this->__('Default database has been restored.');
                } elseif (@$_POST['fixposts']) {
                    $new_posts = $this->upgrade_posts_to_events();
                    $message = $this->__('There were %d new posts which had to be created.', $new_posts);
                } elseif (@$_POST['cleanupposts']) {
                    $affected = $this->safe_query($wpdb->prepare("DELETE FROM `" . $wpdb->prefix . "posts` WHERE `post_type` = 'lsevent' AND `ID` NOT IN (SELECT `post_id` FROM `" . $wpdb->prefix . "lifestream_event_group` WHERE `post_id` != 0)"));
                    $message = $this->__('There were %d unused posts which have been removed.', $affected);
                } elseif (@$_POST['recreatepage']) {
                    $this->create_page_template();
                    $message = $this->__('A new page was created for Lifestream, with the ID of %s.', $this->get_option('page_id'));
                }
                break;
            case 'lifestream-events.php':
                switch (isset($_REQUEST['op']) ? strtolower($_REQUEST['op']) : null) {
                    case 'delete':
                        if (!($ids = $_REQUEST['id'])) {
                            break;
                        }
                        if (!is_array($ids)) {
                            $ids = array($ids);
                        }
                        foreach ($ids as $id) {
                            $result =& $wpdb->get_results($wpdb->prepare("SELECT `id`, `feed_id`, `timestamp`, `owner_id` FROM `" . $wpdb->prefix . "lifestream_event` WHERE `id` = %d", $id));
                            if (!$result) {
                                $errors[] = $this->__('The selected feed was not found.');
                            } elseif (!current_user_can('manage_options') && $result[0]->owner_id != $userdata->ID) {
                                $errors[] = $this->__('You do not have permission to do that.');
                            } else {
                                $result =& $result[0];
                                $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_event` SET `visible` = 0 WHERE `id` = %d", $result->id));
                                $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_event_group` SET `visible` = 0 WHERE `event_id` = %d", $result->id));
                                // Now we have to update the batch if it exists.
                                $group =& $wpdb->get_results($wpdb->prepare("SELECT `id` FROM `" . $wpdb->prefix . "lifestream_event_group` WHERE `event_id` IS NULL AND DATE(FROM_UNIXTIME(`timestamp`)) = DATE(FROM_UNIXTIME(%d)) AND `feed_id` = %d LIMIT 0, 1", $result->timestamp, $result->feed_id));
                                if (count($group) == 1) {
                                    $group =& $group[0];
                                    $results =& $wpdb->get_results($wpdb->prepare("SELECT `data`, `link` FROM `" . $wpdb->prefix . "lifestream_event` WHERE `feed_id` = %d AND `visible` = 1 AND DATE(FROM_UNIXTIME(`timestamp`)) = DATE(FROM_UNIXTIME(%d))", $result->feed_id, $result->timestamp));
                                    if (count($results)) {
                                        $events = array();
                                        foreach ($results as &$result) {
                                            $result->data = unserialize($result->data);
                                            $result->data['link'] = $result->link;
                                            $events[] = $result->data;
                                        }
                                        $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_event_group` SET `data` = %s, `total` = %d, `updated` = 1 WHERE `id` = %d", $wpdb->escape(serialize($events)), count($events), $group->id));
                                    } else {
                                        $this->safe_query($wpdb->prepare("DELETE FROM `" . $wpdb->prefix . "posts` WHERE `post_type` = 'lsevent' AND `ID` = %d", $group->post_id));
                                        $wpdb->query($wpdb->prepare("DELETE FROM `" . $wpdb->prefix . "lifestream_event_group` WHERE `id` = %d", $group->id));
                                    }
                                } else {
                                    $this->safe_query($wpdb->prepare("DELETE FROM `" . $wpdb->prefix . "posts` WHERE `post_type` = 'lsevent' AND `ID` = %d", $result->post_id));
                                    $wpdb->query($wpdb->prepare("DELETE FROM `" . $wpdb->prefix . "lifestream_event_group` WHERE `event_id` = %d", $result->id));
                                }
                            }
                            $message = $this->__('The selected events were hidden.');
                        }
                        break;
                }
                break;
            case 'lifestream-settings.php':
                if (!empty($_POST['save'])) {
                    foreach (array_keys($this->_options) as $value) {
                        $this->update_option($value, isset($_POST['lifestream_' . $value]) ? stripslashes($_POST['lifestream_' . $value]) : '0');
                    }
                    // We need to make sure the cron runs now
                    $this->reschedule_cron();
                }
                break;
            default:
                $feedmsgs = array();
                switch (isset($_REQUEST['op']) ? strtolower($_REQUEST['op']) : null) {
                    case 'refreshall':
                        $results = $this->update_all($userdata->ID);
                        foreach ($results as $id => $result) {
                            if (is_int($result)) {
                                $feedmsgs[$id] = $result;
                            } else {
                                $errors[] = $this->__('There was an error refreshing the selected feed: ID %s', $id);
                            }
                        }
                        $message = $this->__('All of your feeds have been refreshed.');
                        break;
                    case 'refresh':
                        if (!$_REQUEST['id']) {
                            break;
                        }
                        foreach ($_REQUEST['id'] as $id) {
                            $result =& $wpdb->get_results($wpdb->prepare("SELECT * FROM `" . $wpdb->prefix . "lifestream_feeds` WHERE `id` = %d LIMIT 0, 1", $id));
                            if (!$result) {
                                $errors[] = $this->__('The selected feed was not found.');
                            } elseif (!current_user_can('manage_options') && $result[0]->owner_id != $userdata->ID) {
                                $errors[] = $this->__('You do not have permission to do that.');
                            } else {
                                $instance = Lifestream_Feed::construct_from_query_result($this, $result[0]);
                                $msg_arr = $instance->refresh();
                                if ($msg_arr[0] !== false) {
                                    $message = $this->__('The selected feeds and their events have been refreshed.');
                                    $feedmsgs[$instance->id] = $msg_arr[1];
                                } else {
                                    $errors[] = $this->__('There was an error refreshing the selected feed: ID %s', $instance->id);
                                }
                            }
                        }
                        break;
                    case 'pause':
                        if (!$_REQUEST['id']) {
                            break;
                        }
                        $ids = array();
                        foreach ($_REQUEST['id'] as $id) {
                            $ids[] = (int) $id;
                        }
                        if (!empty($ids)) {
                            if (current_user_can('manage_options')) {
                                $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_feeds` SET `active` = 0 WHERE `id` IN ('%s')", implode("','", $ids)));
                            } else {
                                $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_feeds` SET `active` = 1 WHERE `id` IN ('%s') AND `owner_id` = %s", implode("','", $ids), $userdata->ID));
                            }
                            $message = $this->__('The selected feeds have been paused, and events will not be refreshed.');
                        }
                        break;
                    case 'unpause':
                        if (!$_REQUEST['id']) {
                            break;
                        }
                        $ids = array();
                        foreach ($_REQUEST['id'] as $id) {
                            $ids[] = (int) $id;
                        }
                        if (!empty($ids)) {
                            if (current_user_can('manage_options')) {
                                $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_feeds` SET `active` = 1 WHERE `id` IN ('%s')", implode("','", $ids)));
                            } else {
                                $wpdb->query($wpdb->prepare("UPDATE `" . $wpdb->prefix . "lifestream_feeds` SET `active` = 0 WHERE `id` IN ('%s') AND `owner_id` = %s", implode("','", $ids), $userdata->ID));
                            }
                            $message = $this->__('The selected feeds have been unpaused, and events will now be refreshed.');
                        }
                        break;
                    case 'delete':
                        if (!$_REQUEST['id']) {
                            break;
                        }
                        foreach ($_REQUEST['id'] as $id) {
                            $result =& $wpdb->get_results($wpdb->prepare("SELECT * FROM `" . $wpdb->prefix . "lifestream_feeds` WHERE `id` = %d LIMIT 0, 1", $id));
                            if (!$result) {
                                $errors[] = $this->__('The selected feed was not found.');
                            } elseif (!current_user_can('manage_options') && $result[0]->owner_id != $userdata->ID) {
                                $errors[] = $this->__('You do not have permission to do that.');
                            } else {
                                $instance = Lifestream_Feed::construct_from_query_result($this, $result[0]);
                                $instance->delete();
                                $message = $this->__('The selected feeds and all related events has been removed.');
                            }
                        }
                        break;
                    case 'edit':
                        $result =& $wpdb->get_results($wpdb->prepare("SELECT * FROM `" . $wpdb->prefix . "lifestream_feeds` WHERE `id` = %d LIMIT 0, 1", $_GET['id']));
                        if (!$result) {
                            $errors[] = $this->__('The selected feed was not found.');
                        } elseif (!current_user_can('manage_options') && $result[0]->owner_id != $userdata->ID) {
                            $errors[] = $this->__('You do not have permission to do that.');
                        } else {
                            $instance = Lifestream_Feed::construct_from_query_result($this, $result[0]);
                            $options = $instance->get_options();
                            if (@$_POST['save']) {
                                $values = array();
                                foreach ($options as $option => $option_meta) {
                                    if ($option_meta[1] && !$_POST[$option]) {
                                        $errors[] = $option_meta[0] . ' is required.';
                                    } else {
                                        $values[$option] = stripslashes($_POST[$option]);
                                    }
                                }
                                if ($instance->get_constant('MUST_GROUP')) {
                                    $values['grouped'] = 1;
                                } elseif ($instance->get_constant('CAN_GROUP')) {
                                    $values['grouped'] = @$_POST['grouped'];
                                }
                                if ($instance->get_constant('HAS_EXCERPTS')) {
                                    $values['excerpt'] = $_POST['excerpt'];
                                }
                                $values['feed_label'] = $_POST['feed_label'];
                                $values['icon_url'] = $_POST['icon_type'] == 3 ? $_POST['icon_url'] : '';
                                $values['auto_icon'] = $_POST['icon_type'] == 2;
                                if ($_POST['owner'] != $instance->owner_id && current_user_can('manage_options') && $_POST['owner']) {
                                    $usero = new WP_User($_POST['owner']);
                                    $owner = $usero->data;
                                    $instance->owner_id = $_POST['owner'];
                                    $instance->owner = $owner->display_name;
                                }
                                if (!count($errors)) {
                                    $instance->options = $values;
                                    $instance->save();
                                    unset($_POST);
                                }
                            } elseif (@$_POST['truncate']) {
                                $instance->truncate();
                                $instance->refresh();
                            }
                        }
                        break;
                    case 'add':
                        if ($_POST) {
                            $class_name = $this->get_feed($_GET['feed']);
                            if (!$class_name) {
                                break;
                            }
                            $feed = new $class_name($this);
                            $values = array();
                            $options = $feed->get_options();
                            foreach ($options as $option => $option_meta) {
                                if ($option_meta[1] && !$_POST[$option]) {
                                    $errors[] = $option_meta[0] . ' is required.';
                                } else {
                                    $values[$option] = stripslashes($_POST[$option]);
                                }
                            }
                            if ($feed->get_constant('MUST_GROUP')) {
                                $values['grouped'] = 1;
                            } elseif ($feed->get_constant('CAN_GROUP')) {
                                $values['grouped'] = @$_POST['grouped'];
                            }
                            if ($feed->get_constant('HAS_EXCERPTS')) {
                                $values['excerpt'] = $_POST['excerpt'];
                            }
                            $values['feed_label'] = $_POST['feed_label'];
                            $values['icon_url'] = $_POST['icon_type'] == 3 ? $_POST['icon_url'] : '';
                            $values['auto_icon'] = $_POST['icon_type'] == 2;
                            if (current_user_can('manage_options') && $_POST['owner']) {
                                $feed->owner_id = $_POST['owner'];
                                $usero = new WP_User($feed->owner_id);
                                $owner = $usero->data;
                                $feed->owner = $owner->display_name;
                            } else {
                                $feed->owner_id = $userdata->ID;
                                $feed->owner = $userdata->display_name;
                            }
                            $feed->options = $values;
                            if (!count($errors)) {
                                if (!($error = $feed->test())) {
                                    $result = $feed->save();
                                    if ($result !== false) {
                                        unset($_POST);
                                        unset($_REQUEST['op']);
                                        $msg_arr = $feed->refresh(null, true);
                                        if ($msg_arr[0] !== false) {
                                            $message = $this->__('A new %s feed was added to your Lifestream.', $feed->get_constant('NAME'));
                                            $feedmsgs[$feed->id] = $msg_arr[1];
                                        }
                                    }
                                } else {
                                    $errors[] = $error;
                                }
                            }
                        }
                        break;
                }
                break;
        }
        $lifestream =& $this;
        ob_start();
        ?>
		<style type="text/css">
		.feedlist { margin: 0; padding: 0; }
		.feedlist li { list-style: none; display: inline; }
		.feedlist li a { float: left; display: block; padding: 2px 2px 2px 20px; min-height: 16px; background-repeat: no-repeat; background-position: left center; margin: 1px; width: 150px; text-decoration: none; }
		.feedlist li a:hover { background-color: #e9e9e9; }
		.success { color: #397D33; background-color: #D1FBCA; }
		.error { border-color: #E25F53; color: #E25F53; }
		td.icon { padding: 7px 0 9px 10px; }
		</style>
		<br />
		<?php 
        if (count($errors)) {
            ?>
		<div id="message" class="error"><p><strong><?php 
            $this->_e('There were errors with your request:');
            ?>
</strong></p><ul>
			<?php 
            foreach ($errors as $error) {
                ?>
				<li><?php 
                echo nl2br(Lifestream_Feed::parse_urls(htmlspecialchars($error)));
                ?>
</li>
			<?php 
            }
            ?>
		</ul></div>
		<?php 
        } elseif ($message) {
            ?>
		<div id="message" class="updated fade"><p><strong><?php 
            echo $message;
            ?>
</strong></p></div>
		<?php 
        }
        ?>
		<div class="wrap">
			<?php 
        switch ($_GET['page']) {
            case 'lifestream-errors.php':
                $page = !empty($_GET['paged']) ? $_GET['paged'] : 1;
                switch (isset($_REQUEST['op']) ? strtolower($_REQUEST['op']) : null) {
                    case 'clear':
                        $wpdb->query("DELETE FROM `" . $wpdb->prefix . "lifestream_error_log`");
                        break;
                }
                $start = ($page - 1) * LIFESTREAM_ERRORS_PER_PAGE;
                $end = $page * LIFESTREAM_ERRORS_PER_PAGE;
                $wpdb->query("UPDATE `" . $wpdb->prefix . "lifestream_error_log` SET has_viewed = 1");
                $results =& $wpdb->get_results("SELECT COUNT(*) as `count` FROM `" . $wpdb->prefix . "lifestream_error_log`");
                $number_of_pages = ceil($results[0]->count / LIFESTREAM_EVENTS_PER_PAGE);
                $results =& $wpdb->get_results($wpdb->prepare("SELECT t1.*, t2.`feed`, t2.`options` FROM `" . $wpdb->prefix . "lifestream_error_log` as t1 LEFT JOIN `" . $wpdb->prefix . "lifestream_feeds` as t2 ON t1.`feed_id` = t2.`id` ORDER BY t1.`timestamp` DESC LIMIT %d, %d", $start, $end));
                include LIFESTREAM_PATH . '/pages/errors.inc.php';
                break;
            case 'lifestream-maintenance.php':
                include LIFESTREAM_PATH . '/pages/maintenance.inc.php';
                break;
            case 'lifestream-changelog.php':
                include LIFESTREAM_PATH . '/pages/changelog.inc.php';
                break;
            case 'lifestream-forums.php':
                include LIFESTREAM_PATH . '/pages/forums.inc.php';
                break;
            case 'lifestream-settings.php':
                $lifestream_digest_intervals = array('weekly' => $this->__('Weekly'), 'daily' => $this->__('Daily'), 'hourly' => $this->__('Hourly'));
                include LIFESTREAM_PATH . '/pages/settings.inc.php';
                break;
            case 'lifestream-events.php':
                $page = !empty($_GET['paged']) ? $_GET['paged'] : 1;
                $start = ($page - 1) * LIFESTREAM_EVENTS_PER_PAGE;
                $end = $page * LIFESTREAM_EVENTS_PER_PAGE;
                if (!current_user_can('manage_options')) {
                    $rows =& $wpdb->get_row($wpdb->prepare("SELECT COUNT(*) as `count` FROM `" . $wpdb->prefix . "lifestream_event` WHERE `owner_id` = %d", $userdata->ID));
                    $number_of_pages = ceil($rows->count / LIFESTREAM_EVENTS_PER_PAGE);
                    $rows =& $wpdb->get_results($wpdb->prepare("SELECT t1.*, t2.`feed`, t2.`options` FROM `" . $wpdb->prefix . "lifestream_event` as t1 JOIN `" . $wpdb->prefix . "lifestream_feeds` as t2 ON t1.`feed_id` = t2.`id` WHERE t1.`owner_id` = %d ORDER BY t1.`timestamp` DESC LIMIT %d, %d", $userdata->ID, $start, $end));
                } else {
                    $rows =& $wpdb->get_row("SELECT COUNT(*) as `count` FROM `" . $wpdb->prefix . "lifestream_event`");
                    $number_of_pages = ceil($rows->count / LIFESTREAM_EVENTS_PER_PAGE);
                    $rows =& $wpdb->get_results($wpdb->prepare("SELECT t1.*, t2.`feed`, t2.`options` FROM `" . $wpdb->prefix . "lifestream_event` as t1 JOIN `" . $wpdb->prefix . "lifestream_feeds` as t2 ON t1.`feed_id` = t2.`id` ORDER BY t1.`timestamp` DESC LIMIT %d, %d", $start, $end));
                }
                $results = array();
                foreach ($rows as $result) {
                    $results[] = new Lifestream_Event($lifestream, $result);
                }
                unset($rows);
                include LIFESTREAM_PATH . '/pages/events.inc.php';
                break;
            default:
                switch (isset($_REQUEST['op']) ? strtolower($_REQUEST['op']) : null) {
                    case 'edit':
                        include LIFESTREAM_PATH . '/pages/edit-feed.inc.php';
                        break;
                    case 'add':
                        $identifier = $_GET['feed'];
                        $class_name = $this->get_feed($identifier);
                        if (!$class_name) {
                            break;
                        }
                        $feed = new $class_name($this);
                        $options = $feed->get_options();
                        include LIFESTREAM_PATH . '/pages/add-feed.inc.php';
                        break;
                    default:
                        $page = !empty($_GET['paged']) ? $_GET['paged'] : 1;
                        $start = ($page - 1) * LIFESTREAM_FEEDS_PER_PAGE;
                        $end = $page * LIFESTREAM_FEEDS_PER_PAGE;
                        if (!current_user_can('manage_options')) {
                            $rows =& $wpdb->get_row($wpdb->prepare("SELECT COUNT(*) as `count` FROM `" . $wpdb->prefix . "lifestream_feeds` WHERE `owner_id` = %d", $userdata->ID));
                            $number_of_pages = ceil($rows->count / LIFESTREAM_FEEDS_PER_PAGE);
                            $rows =& $wpdb->get_results($wpdb->prepare("SELECT t1.*, (SELECT COUNT(1) FROM `" . $wpdb->prefix . "lifestream_event` WHERE `feed_id` = t1.`id`) as `events` FROM `" . $wpdb->prefix . "lifestream_feeds` as t1 WHERE t1.`owner_id` = %d ORDER BY `id` LIMIT %d, %d", $userdata->ID, $start, $end));
                        } else {
                            $rows =& $wpdb->get_row("SELECT COUNT(*) as `count` FROM `" . $wpdb->prefix . "lifestream_feeds`");
                            $number_of_pages = ceil($rows->count / LIFESTREAM_FEEDS_PER_PAGE);
                            $rows =& $wpdb->get_results($wpdb->prepare("SELECT t1.*, (SELECT COUNT(1) FROM `" . $wpdb->prefix . "lifestream_event` WHERE `feed_id` = t1.`id`) as `events` FROM `" . $wpdb->prefix . "lifestream_feeds` as t1 ORDER BY `id` LIMIT %d, %d", $start, $end));
                        }
                        $results = array();
                        foreach ($rows as $result) {
                            $results[] = Lifestream_Feed::construct_from_query_result($this, $result);
                        }
                        if ($results !== false) {
                            include LIFESTREAM_PATH . '/pages/feeds.inc.php';
                        }
                        break;
                }
                break;
        }
        ?>
		</div>
		<?php 
        ob_end_flush();
    }
コード例 #2
0
            echo $lifestream->get_icon_media_url($result->feed . '.png');
            ?>
"/></td>
							<td><?php 
        } else {
            ?>
<td colspan="2"><?php 
        }
        if ($result->has_viewed) {
            ?>
<strong><?php 
            echo Lifestream_Feed::parse_urls(htmlspecialchars($result->message));
            ?>
</strong><?php 
        } else {
            echo Lifestream_Feed::parse_urls(htmlspecialchars($result->message));
        }
        ?>
					</td>
					<td><?php 
        echo date($date_format, $result->timestamp);
        ?>
</td>
				</tr>
			<?php 
    }
    ?>
		</tbody>
	</table>
	<div class="tablenav">
		<?php