| <?php | |
| /******************************************************************************* | |
| * Copyright (c) 2015, 2016 Eclipse Foundation and others. | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * which accompanies this distribution, and is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * | |
| * Contributors: | |
| * Eric Poirier (Eclipse Foundation) - initial API and implementation | |
| * Christopher Guindon (Eclipse Foundation) | |
| *******************************************************************************/ | |
| require_once("webmaster.class.php"); | |
| class Mirrors extends Webmaster{ | |
| private $mirrors = NULL; | |
| function __construct(App $App) { | |
| parent::__construct($App); | |
| if ($this->getFormName() === 'webmaster-mirror-update') { | |
| if ($this->getState() === 'update_mirrors') { | |
| $this->_updateMirrors(); | |
| } | |
| } | |
| } | |
| /** | |
| * This function returns the mirrors for approval | |
| * | |
| * @return array | |
| * */ | |
| public function getMirrors($status = '') { | |
| if (is_null($this->mirrors)) { | |
| $this->_fetchMirrors(); | |
| } | |
| if (!empty($status) && !empty($this->mirrors[$status])) { | |
| return $this->mirrors[$status]; | |
| } | |
| return $this->mirrors; | |
| } | |
| /** | |
| * This function returns an array of Mirror statuses | |
| * | |
| * @return array | |
| * */ | |
| public function getMirrorStatuses() { | |
| return array( | |
| 'approve', | |
| 'active', | |
| 'dropped', | |
| ); | |
| } | |
| /** | |
| * This function fetches the mirrors depending on the status | |
| * @param $status - string | |
| * @return array | |
| * */ | |
| private function _fetchMirrors() { | |
| $sql = "SELECT | |
| m.mirror_id, | |
| m.organization, | |
| m.is_internal, | |
| m.create_status, | |
| mp.protocol, | |
| mp.base_path | |
| FROM mirrors as m | |
| LEFT JOIN mirror_protocols as mp | |
| ON m.mirror_id = mp.mirror_id"; | |
| $sql .= ' WHERE m.create_status IN ("approve", "active", "dropped") | |
| ORDER BY FIELD(m.create_status, "approve", "active", "dropped") ASC'; | |
| $result = $this->App->eclipse_sql($sql); | |
| $mirrors = array(); | |
| while ($row = mysql_fetch_array($result)) { | |
| $row['is_internal'] = 'No'; | |
| if ($row['is_internal'] === "1") { | |
| $row['is_internal'] = 'yes'; | |
| } | |
| $row['row_context'] = "default"; | |
| switch ($row['create_status']) { | |
| case 'active': | |
| $row['row_context'] = "success"; | |
| break; | |
| case 'approve': | |
| $row['row_context'] = "warning"; | |
| break; | |
| case 'dropped': | |
| $row['row_context'] = "danger"; | |
| break; | |
| } | |
| $mirrors[$row['create_status']][] = $row; | |
| } | |
| $this->mirrors = $mirrors; | |
| return $mirrors; | |
| } | |
| /** | |
| * This function updates the status of selected mirrors | |
| * */ | |
| private function _updateMirrors() { | |
| $mirror_status = filter_var($this->App->getHTTPParameter('status', 'POST'), FILTER_SANITIZE_STRING); | |
| if (in_array($mirror_status, $this->getMirrorStatuses())) { | |
| $mirrors = $this->getMirrors($mirror_status); | |
| $ids = array(); | |
| foreach ($mirrors as $mirror) { | |
| $status = filter_var($this->App->getHTTPParameter('status_update_' . $mirror['mirror_id'], 'POST'), FILTER_SANITIZE_STRING); | |
| if ($status != $mirror['create_status']) { | |
| $ids[] = array( | |
| 'mirror_id' => $mirror['mirror_id'], | |
| 'create_status' => $status | |
| ); | |
| } | |
| } | |
| if (!empty($ids[0]['mirror_id']) && !empty($ids[0]['create_status'])) { | |
| $sql = "UPDATE mirrors SET create_status = CASE "; | |
| $in = array(); | |
| foreach ($ids as $id) { | |
| $create_status = $this->App->returnQuotedString($this->App->sqlSanitize($id['create_status'])); | |
| $mirror_id = $this->App->returnQuotedString($this->App->sqlSanitize($id['mirror_id'])); | |
| $sql .= " WHEN mirror_id = " . $mirror_id . " THEN " . $create_status; | |
| $in[] = $mirror_id; | |
| } | |
| $in = implode(', ', $in); | |
| $sql .= " END WHERE mirror_id in (" . $in . ")"; | |
| $result = $this->App->eclipse_sql($sql); | |
| $this->_fetchMirrors(); | |
| $this->App->setSystemMessage('mirror_updated', 'You have successfully updated ' . count($ids) .' mirror(s).', 'success'); | |
| } | |
| else { | |
| $this->App->setSystemMessage('mirror_updated', "The mirrors could not be updated.(#webmaster-mirrors-001)", 'danger'); | |
| } | |
| } | |
| else { | |
| $this->App->setSystemMessage('mirror_updated', "The mirror status is not valid.(#webmaster-mirrors-002)", 'danger'); | |
| } | |
| } | |
| } |