* Link: http://www.codeanimu.net * License: GPLv2 * Description: Shimmie updater! */ class Update extends SimpleExtension { public function onInitExt(Event $event) { global $config; $config->set_default_string("update_url", "http://nodeload.github.com/shish/shimmie2/zipball/master"); //best to avoid using https $config->set_default_string("commit_hash", ""); } public function onSetupBuilding($event) { global $config; //Would prefer to use the admin panel for this. //But since the admin panel is optional...kind of stuck to using this. $sb = new SetupBlock("Update"); $sb->position = 75; $sb->add_label("Current Commit: ".$config->get_string('commit_hash')); $sb->add_text_option("update_url", "
Update URL: "); $sb->add_label("
Update"); $event->panel->add_block($sb); } public function onPageRequest(Event $event) { global $config, $user; if($event->page_matches("update") && $user->is_admin()) { $ok = $this->update_shimmie(); } } private function update_shimmie() { global $config, $page; //This is a REALLY ugly function. (Damn my limited PHP knowledge >_<) $html = ""; $url = $config->get_string("update_url"); $mfile = "master.zip"; if(glob("*-shimmie2*")){ //#3 $dir = glob("*-shimmie2*"); preg_match('@^([a-zA-Z0-9]+\-[0-9a-z]+\-)([^/]+)@i', $dir[0], $matches); if(!empty($matches[2])){ $html .= "commit: ".$matches[2]; $commit = $matches[2]; mkdir("./backup"); $html .= "
backup folder created!"; $d_dir = "data/cache"; //This should empty the /data/cache/ folder. if (is_dir($d_dir)) { $objects = scandir($d_dir); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($d_dir."/".$object) == "dir") rmdir($d_dir."/".$object); else unlink($d_dir."/".$object); } } reset($objects); $html .= "
data folder emptied!"; } copy ("./config.php", "./backup/config.php");//Although this stays the same, will keep backup just incase. //FIXME: Somehow get rid of this massive rename list. rename ("./core", "./backup/core"); rename ("./".$matches[0]."/core", "./core"); rename ("./lib", "./backup/lib"); rename ("./".$matches[0]."/lib", "./lib"); rename ("./themes", "./backup/themes"); rename ("./".$matches[0]."/themes", "./themes"); rename ("./.htaccess", "./backup/.htaccess"); rename ("./".$matches[0]."/.htaccess", "./.htaccess"); rename ("./doxygen.conf", "./backup/doxygen.conf"); rename ("./".$matches[0]."/doxygen.conf", "./doxygen.conf"); rename ("./index.php", "./backup/index.php"); rename ("./".$matches[0]."/index.php", "./index.php"); rename ("./install.php", "./backup/install.php"); rename ("./".$matches[0]."/install.php", "./install.php"); rename ("./ext", "./backup/ext"); rename ("./".$matches[0]."/ext", "./ext"); rename ("./contrib", "./backup/contrib"); rename ("./".$matches[0]."/contrib", "./contrib"); $html .= "
old shimmie setup has been moved to /backup/ (excluding images/thumbs)!"; if (is_dir($matches[0])) { $objects = scandir($matches[0]); foreach ($objects as $object) { if ($object != "." && $object != "..") { if (filetype($matches[0]."/".$object) == "dir") rmdir($matches[0]."/".$object); else unlink($matches[0]."/".$object); } } reset($objects); rmdir($matches[0]); $html .= "
".$matches[0]." deleted!"; } $html .= "
shimmie updated (although you may have gotten errors, it should have worked!"; $html .= "
due to the way shimmie loads extensions, all optional extensions have been disabled"; $config->set_string("commit_hash", $commit); $html .= "
new commit_hash has been set!"; }else{ $html .= "Error! Folder does not exist!?"; //Although this should be impossible, shall have it anyway. } }elseif (file_exists($mfile)){ //#2 $zip = new ZipArchive; if ($zip->open($mfile) === TRUE) { $zip->extractTo('./'); $zip->close(); $html .= "extracted!"; $html .= "
refresh the page to continue!"; unlink($mfile); //Deletes master.zip } else { $html .= "failed!"; } }else{ //#1 //Taken from the upload ext. if($config->get_string("transload_engine") == "curl" && function_exists("curl_init")) { $ch = curl_init($url); $fp = fopen($mfile, "w"); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_REFERER, $url); curl_setopt($ch, CURLOPT_USERAGENT, "Shimmie-".VERSION); curl_exec($ch); curl_close($ch); fclose($fp); if(file_exists($mfile)){ $html .= "downloaded!"; $html .= "
refresh the page to continue!"; }else{ $html .= "download failed!"; $html .= "
refresh to try again!"; $html .= "
if you keep having this problem, you may have a problem with your transload engine!"; } }elseif($config->get_string("transload_engine") == "wget") { //this doesn't work? $s_url = escapeshellarg($url); system("wget $s_url --output-document=$mfile"); if(file_exists($mfile)){ $html .= "downloaded!"; $html .= "
refresh the page to continue!"; }else{ $html .= "download failed!"; $html .= "
refresh to try again!"; $html .= "
if you keep having this problem, you may have a problem with your transload engine!"; } }elseif($config->get_string("transload_engine") == "fopen") { $fp = @fopen($url, "r"); if(!$fp) { return false; } $data = ""; $length = 0; while(!feof($fp) && $length <= $config->get_int('upload_size')) { $data .= fread($fp, 8192); $length = strlen($data); } fclose($fp); $fp = fopen($mfile, "w"); fwrite($fp, $data); fclose($fp); if(file_exists($mfile)){ $html .= "downloaded!"; $html .= "
refresh the page to continue!"; }else{ $html .= "download failed!"; $html .= "
refresh to try again!"; $html .= "
if you keep having this problem, you may have a problem with your transload engine!"; } }elseif($config->get_string("transload_engine") == "none"){ $html .= "no transload engine set!"; } } $page->add_block(new Block("Update", $html)); } } ?>