static function init($context = false, $get_method = 'basic') { global $gp_filesystem; if ($gp_filesystem !== false) { return true; } if ($get_method == 'list') { $method = gp_filesystem_base::get_filesystem_method_list($context); } else { $method = gp_filesystem_base::get_filesystem_method($context); } return gp_filesystem_base::set_method($method); }
/** * Determine how we'll be writing the new code to the server (ftp or direct) * */ function DetectFileSystem() { global $dataDir, $gp_filesystem; //already determined if (isset($_POST['filesystem_method']) && gp_filesystem_base::set_method($_POST['filesystem_method'])) { return $_POST['filesystem_method']; } $this->curr_step = 1; //make sure we don't attempt anything beyond step 1 $context[$dataDir] = 'file'; // Need to be able to write to the dataDir $context[$dataDir . '/include'] = 'file'; // Need to be able to rename or delete the include directory $context[$dataDir . '/themes'] = 'dir'; // These may have user content in them and should not be completely replaced $context[$dataDir . '/addons'] = 'dir'; gp_filesystem_base::init($context, 'list'); if (!$gp_filesystem) { return false; } return $gp_filesystem->method; }
function Update() { global $langmessage, $gp_filesystem, $gpversion; if (!isset($this->update_data['packages']['core'])) { echo $langmessage['OOPS']; return false; } $core_package =& $this->update_data['packages']['core']; if (!isset($_POST['step'])) { $curr_step = 1; } else { $curr_step = (int) $_POST['step']; } //already up to date? if ($curr_step < 4 && version_compare($gpversion, $core_package['version'], '>=')) { message($langmessage['UP_TO_DATE']); return false; } //filesystem $filesystem_method = false; if (isset($_POST['filesystem_method']) && gp_filesystem_base::set_method($_POST['filesystem_method'])) { $filesystem_method = $_POST['filesystem_method']; } else { $curr_step = 1; $this->DetectFileSystem(); if (!$gp_filesystem) { message('Update Aborted: Could not establish a file writing method compatible with your server.'); return false; } $filesystem_method = $gp_filesystem->method; } $this->steps[1] = $langmessage['step:prepare']; $this->steps[2] = $langmessage['step:download']; $this->steps[3] = $langmessage['step:unpack']; $this->steps[4] = $langmessage['step:clean']; echo '<div>' . $langmessage['update_steps'] . '</div>'; echo '<ol class="steps">'; $curr_step_label = ''; foreach ($this->steps as $temp_step => $message) { if ($curr_step == $temp_step) { echo '<li class="current">' . $message . '</li>'; $curr_step_label = $message; } elseif ($temp_step < $curr_step) { echo '<li class="done">' . $message . '</li>'; } else { echo '<li>' . $message . '</li>'; } } echo '</ol>'; echo '<h3>' . $curr_step_label . '</h3>'; echo '<form method="post" action="?cmd=update">'; if ($filesystem_method) { echo '<input type="hidden" name="filesystem_method" value="' . htmlspecialchars($filesystem_method) . '" />'; } $done = false; $passed = false; switch ($curr_step) { case 4: $done = $this->CleanUp($core_package); break; case 3: echo '<ul>'; $passed = $this->UnpackAndReplace($core_package); $this->OldFolders(); echo '</ul>'; break; case 2: echo '<ul class="progress">'; $passed = $this->DownloadSource($core_package); echo '</ul>'; break; case 1: $passed = $this->GetServerInfo($core_package); break; } if ($gp_filesystem) { $gp_filesystem->destruct(); } $this->SaveData(); //save any changes made by the steps if (!$done) { if ($passed) { echo '<input type="hidden" name="step" value="' . min(count($this->steps), $curr_step + 1) . '"/>'; echo '<input type="submit" class="submit" name="" value="' . htmlspecialchars($langmessage['next_step']) . '" />'; } elseif ($curr_step < 3) { echo '<input type="hidden" name="step" value="' . min(count($this->steps), $curr_step) . '"/>'; echo '<input type="submit" class="submit" name="" value="' . htmlspecialchars($langmessage['continue']) . '" />'; } else { echo '<input type="hidden" name="failed_install" value="failed_install"/>'; echo '<input type="hidden" name="step" value="4"/>'; echo '<input type="submit" class="submit" name="" value="' . htmlspecialchars($langmessage['step:clean']) . '..." />'; } } echo '</form>'; //echo showArray($this->update_data); //echo showArray($core_package); return true; }