diff --git a/theme/afterburner/db/upgrade.php b/theme/afterburner/db/upgrade.php
new file mode 100644
index 00000000000..350feec4d02
--- /dev/null
+++ b/theme/afterburner/db/upgrade.php
@@ -0,0 +1,66 @@
+.
+
+/**
+ * Afterburner upgrades.
+ *
+ * @package theme
+ * @subpackage afterburner
+ * @copyright 2013 Petr Skoda {@link http://skodak.org}
+ * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
+ */
+
+function xmldb_theme_afterburner_upgrade($oldversion) {
+ global $CFG, $DB, $OUTPUT;
+
+ $dbman = $DB->get_manager();
+
+ if ($oldversion < 2013041200) {
+ // Migrate logo URL.
+ $logo = get_config('theme_afterburner', 'logo');
+ if ($logo === '') {
+ // No logo means nothing to do.
+
+ } else if ($logo = clean_param($logo, PARAM_URL)) {
+ require_once("$CFG->libdir/filelib.php");
+ if ($content = download_file_content($logo)) {
+ $filename = preg_replace('/^.*\//', '', $logo);
+ if (!$filename = clean_param($filename, PARAM_FILE)) {
+ // Some name is better than no name...
+ $filename = 'logo.jpg';
+ }
+ $fs = get_file_storage();
+ $record = array(
+ 'contextid' => context_system::instance()->id, 'component' => 'theme_afterburner',
+ 'filearea' => 'logo', 'itemid'=>0, 'filepath'=>'/', 'filename'=>$filename);
+ $fs->create_file_from_string($record, $content);
+ set_config('logo', '/'.$filename, 'theme_afterburner');
+ unset($content);
+
+ } else {
+ unset_config('theme_afterburner', 'logo');
+ }
+ } else {
+ // Prompt for new logo, the old setting was invalid.
+ unset_config('theme_afterburner', 'logo');
+ }
+
+ upgrade_plugin_savepoint(true, 2013041200, 'theme', 'afterburner');
+ }
+
+
+ return true;
+}
diff --git a/theme/afterburner/lang/en/theme_afterburner.php b/theme/afterburner/lang/en/theme_afterburner.php
index fb5736e89f0..1f140a32277 100644
--- a/theme/afterburner/lang/en/theme_afterburner.php
+++ b/theme/afterburner/lang/en/theme_afterburner.php
@@ -27,7 +27,7 @@ $string['pluginname'] = 'Afterburner';
$string['region-side-post'] = 'Right';
$string['region-side-pre'] = 'Left';
$string['logo'] = 'Logo';
-$string['logodesc'] = 'Please add the URL to your new logo only if you want to replace the default logo for this theme.
For your information, the default logo is a JPG image 320px (wide) by 75px (high)';
+$string['logodesc'] = 'Please add your custom logo if you want to replace the default logo for this theme.
For your information, the default logo is a JPG image 320px (wide) by 75px (high)';
$string['footnote'] = 'Footnote';
$string['footnotedesc'] = 'Whatever you add to this textarea will be displayed in the footer of every page.';
$string['customcss'] = 'Custom CSS';
diff --git a/theme/afterburner/lib.php b/theme/afterburner/lib.php
index 11a4ec45755..ba1f38d7182 100644
--- a/theme/afterburner/lib.php
+++ b/theme/afterburner/lib.php
@@ -3,11 +3,7 @@
function afterburner_process_css($css, $theme) {
// Set the background image for the logo
- if (!empty($theme->settings->logo)) {
- $logo = $theme->settings->logo;
- } else {
- $logo = null;
- }
+ $logo = $theme->setting_file_url('logo', 'logo');
$css = afterburner_set_logo($css, $logo);
// Set custom CSS
@@ -44,4 +40,13 @@ function afterburner_set_customcss($css, $customcss) {
$css = str_replace($tag, $replacement, $css);
return $css;
-}
\ No newline at end of file
+}
+
+function theme_afterburner_pluginfile($course, $cm, $context, $filearea, $args, $forcedownload, array $options = array()) {
+ if ($context->contextlevel == CONTEXT_SYSTEM and $filearea === 'logo') {
+ $theme = theme_config::load('afterburner');
+ return $theme->setting_file_serve('logo', $args, $forcedownload, $options);
+ } else {
+ send_file_not_found();
+ }
+}
diff --git a/theme/afterburner/settings.php b/theme/afterburner/settings.php
index c68a59985be..21722d7151c 100644
--- a/theme/afterburner/settings.php
+++ b/theme/afterburner/settings.php
@@ -8,8 +8,8 @@ if ($ADMIN->fulltree) {
$name = 'theme_afterburner/logo';
$title = get_string('logo','theme_afterburner');
$description = get_string('logodesc', 'theme_afterburner');
- $default = '';
- $setting = new admin_setting_configtext($name, $title, $description, $default, PARAM_URL);
+ $setting = new admin_setting_configstoredfile($name, $title, $description, 'logo');
+ $setting->set_updatedcallback('theme_reset_all_caches');
$settings->add($setting);
// Foot note setting
diff --git a/theme/afterburner/version.php b/theme/afterburner/version.php
index 741e6d2f950..4ec225c138f 100644
--- a/theme/afterburner/version.php
+++ b/theme/afterburner/version.php
@@ -25,6 +25,6 @@
defined('MOODLE_INTERNAL') || die;
-$plugin->version = 2012112900; // The current module version (Date: YYYYMMDDXX)
-$plugin->requires = 2012112900; // Requires this Moodle version
+$plugin->version = 2013041200; // The current module version (Date: YYYYMMDDXX)
+$plugin->requires = 2013041100; // Requires this Moodle version
$plugin->component = 'theme_afterburner'; // Full name of the plugin (used for diagnostics)