ASong2U_Web/wp-content/plugins/jw-player-plugin-for-wordpress/admin/AdminContext.php

242 lines
9.0 KiB
PHP
Raw Normal View History

<?php
if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); }
include_once("AdminState.php");
include_once("WizardState.php");
include_once("FlashVarState.php");
include_once("PlayerState.php");
include_once("BasicState.php");
include_once("AdvancedState.php");
include_once("LTASState.php");
include_once("PluginState.php");
/**
* @file AdminContext class file. Manages wizard state.
*/
class AdminContext {
/**
* Constructor
*/
public function AdminContext() {}
/**
* Given the current wizard state, determines the next state.
*/
public function processState() {
$state = isset($_POST[LONGTAIL_KEY . "state"]) ? $_POST[LONGTAIL_KEY . "state"] : null;
if (isset($_POST["breadcrumb"]) && !empty($_POST["breadcrumb"])) {
$state = $_POST["breadcrumb"];
}
switch ($state) {
case BasicState::getID() :
$state = new BasicState($_POST[LONGTAIL_KEY . "config"]);
break;
case AdvancedState::getID() :
$state = new AdvancedState($_POST[LONGTAIL_KEY . "config"]);
break;
case LTASState::getID() :
$state = new LTASState($_POST[LONGTAIL_KEY . "config"]);
break;
case PluginState::getID() :
$state = new PluginState($_POST[LONGTAIL_KEY . "config"]);
break;
default :
$state = new PlayerState(isset($_POST[LONGTAIL_KEY . "config"]) ? $_POST[LONGTAIL_KEY . "config"] : "");
break;
}
$this->processPost($state);
}
/**
* Processes the POST data from the previous state.
* @param AdminState $st The next state to be populated with the POST data
* from the previous state.
*/
private function processPost($st) {
$state = $st;
if (isset($_POST["Next"])) {
if ($_POST["Next"] == "Delete") {
LongTailFramework::setConfig($_POST[LONGTAIL_KEY . "config"]);
LongTailFramework::deleteConfig();
$configs = LongTailFramework::getConfigs();
if ($configs && count($configs) >= 2 && $_POST[LONGTAIL_KEY . "config"] == get_option($_POST[LONGTAIL_KEY . "default"])) {
update_option(LONGTAIL_KEY . "default", $configs[1]);
} else if (!$configs || count($configs) == 1) {
update_option(LONGTAIL_KEY . "default", "Out-of-the-Box");
}
$state = new PlayerState($_POST[LONGTAIL_KEY . "config"]);
$del_player = $_POST[LONGTAIL_KEY . "config"];
$this->feedback_message("The '$del_player' Player was successfully deleted.");
$state->render();
} else {
if ($_POST["Next"] == "Create Custom Player") {
$_POST[LONGTAIL_KEY . "new_player"] = "Custom Player";
}
$state->getNextState()->render();
}
} else if (isset($_POST["Previous"])) {
$state->getPreviousState()->render();
} else if (isset($_POST["Cancel"])) {
$state->getCancelState()->render();
} else if (isset($_POST["Save"])) {
$config = $_POST[LONGTAIL_KEY . "config"];
LongTailFramework::setConfig($config);
$save_values = $this->processSubmit();
$success = LongTailFramework::saveConfig($this->convertToXML($save_values), esc_html($_POST[LONGTAIL_KEY . "new_player"]));
$configs = LongTailFramework::getConfigs();
if ($configs && count($configs) == 2) {
update_option(LONGTAIL_KEY . "default", $_POST[LONGTAIL_KEY . "config"] ? $_POST[LONGTAIL_KEY . "config"] : $_POST[LONGTAIL_KEY . "new_player"]);
update_option(LONGTAIL_KEY . "ootb", false);
}
$save_player = $_POST[LONGTAIL_KEY . "new_player"] ? $_POST[LONGTAIL_KEY . "new_player"] : $config;
if ($success) {
$this->feedback_message("The '$save_player' Player was successfully saved.");
} else {
$this->error_message("The '$save_player' failed to save. Please make sure the " . LongTailFramework::getConfigPath() . " exists and is writable. " . JW_FILE_PERMISSIONS);
}
$state->getSaveState()->render();
} else {
if (isset($_POST[LONGTAIL_KEY . "default"])) {
update_option(LONGTAIL_KEY . "default", $_POST[LONGTAIL_KEY . "default"]);
}
if (isset($_POST[LONGTAIL_KEY . "show_archive"])) {
update_option(LONGTAIL_KEY . "show_archive", true);
} else if (!empty($_POST)) {
update_option(LONGTAIL_KEY . "show_archive", false);
}
LongTailFramework::setConfig(isset($_POST[LONGTAIL_KEY . "config"]) ? $_POST[LONGTAIL_KEY . "config"] : "");
$state->render();
}
}
/**
* Processes the final submission of the wizard to be saved as a player
* configuration.
* @return Array The array of configuration options to be saved.
*/
private function processSubmit() {
$data = LongTailFramework::getConfigValues();
$plugins = array();
$additional_plugins = "";
foreach ($_POST as $name => $value) {
if (strstr($name, LONGTAIL_KEY . "player_")) {
$val = esc_html($value);
$new_val = $val;
$new_name = str_replace(LONGTAIL_KEY . "player_", "", $name);
if ($new_name == "skin") {
if ($new_val != "[Default]") {
$skins = LongTailFramework::getSkins();
$skin_new = LongTailFramework::getSkinPath() . "$val/$val." . $skins[$val];
if (file_exists($skin_new)) {
$new_val = LongTailFramework::getSkinURL() . "$val/$val." . $skins[$val];
} else {
$new_val = LongTailFramework::getSkinURL() . "$val." . $skins[$val];
}
$data[$new_name] = $new_val;
} else {
unset($data[$new_name]);
}
} else if ($new_name == "playlist_position") {
$data[str_replace("_", ".", $new_name)] = $new_val;
} else if ($new_name == "flashvars") {
$this->parseFlashvarString($new_val, $data);
} else if ($new_name == "plugins") {
$additional_plugins = $new_val;
} else if (!empty($new_val)) {
$data[$new_name] = $new_val;
} else {
unset($data[$new_name]);
}
} else if(strstr($name, LONGTAIL_KEY . "plugin_") && strstr($name, "_enable")) {
$plugins[str_replace("_enable", "", str_replace(LONGTAIL_KEY . "plugin_", "", $name))] = esc_html($value);
//Process the plugin flashvars.
} else if(strstr($name, LONGTAIL_KEY . "plugin_") && !empty($value)) {
$plugin_key = preg_replace("/_/", ".", str_replace(LONGTAIL_KEY . "plugin_", "", $name), 1);
$found = false;
foreach(array_keys($plugins) as $repo) {
$key = explode(".", $plugin_key);
if (strstr($repo, $key[0]) && $plugins[$repo]) {
$data[$plugin_key] = esc_html($value);
$found = true;
break;
}
}
if (!$found) {
unset($data[$plugin_key]);
}
}
}
$active_plugins = array();
//Build final list of plugins to be used for this Player.
foreach($plugins as $name => $enabled) {
if ($enabled) {
$active_plugins[] = $name;
}
}
$plugin_string = implode(",", $active_plugins);
$plugin_string = empty($plugin_string) ? $additional_plugins : $plugin_string . "," . $additional_plugins;
if (!empty($plugins)) {
$data["plugins"] = $plugin_string;
}
if (!isset($data["plugins"]) || $data["plugins"] == "" || empty($data["plugins"])) {
unset($data["plugins"]);
}
return $data;
}
private function parseFlashvarString($fv_str, &$data) {
$additional = array();
$regex = "~^([a-zA-Z0-9._]+)=(.+)~m";
preg_match_all($regex, $fv_str, $matches);
for ($i = 0; $i < count($matches[0]); $i++) {
$additional[trim($matches[1][$i])] = trim($matches[2][$i]);
}
$data["Additional"] = $additional;
}
/**
* Converts a one dimensional array into an XML string representation.
* @param Array $target The one dimensional array to be converted to an XML
* string.
* @return An xml string representation of $target.
*/
private function convertToXML($target) {
$output = "";
foreach($target as $name => $value) {
if ($name == "Additional") {
foreach ($value as $add_name => $add_value) {
$output .= "<" . $add_name . " type='Additional'>" . $add_value . "</" . $add_name . ">\n";
}
} else {
$output .= "<" . $name . ">" . $value . "</" . $name . ">\n";
}
}
return $output;
}
/**
* Displays a feedback message to the user.
* @param String $message The message to be displayed.
* @param int $timeout The duration the message should stay on screen.
*/
private function feedback_message ($message, $timeout = 0) { ?>
<div class="fade updated" id="message" onclick="this.parentNode.removeChild (this)">
<p><strong><?php echo $message ?></strong></p>
</div> <?php
}
/**
* Displays an error message to the user.
* @param String $message The message to be displayed.
*/
private function error_message ($message) { ?>
<div class="error fade" id="message">
<p><strong><?php echo $message ?></strong></p>
</div> <?php
}
}
?>