Browse Source

System update (winter remix)

markseu 9 years ago
parent
commit
170c077f00
2 changed files with 109 additions and 145 deletions
  1. 108 144
      system/plugins/commandline.php
  2. 1 1
      system/themes/snippets/footer.php

+ 108 - 144
system/plugins/commandline.php

@@ -1,13 +1,13 @@
 <?php
 <?php
-// Copyright (c) 2013-2015 Datenstrom, http://datenstrom.se
+// Copyright (c) 2013-2016 Datenstrom, http://datenstrom.se
 // This file may be used and distributed under the terms of the public license.
 // This file may be used and distributed under the terms of the public license.
 
 
 // Command line plugin
 // Command line plugin
 class YellowCommandline
 class YellowCommandline
 {
 {
-	const Version = "0.6.2";
+	const Version = "0.6.3";
 	var $yellow;					//access to API
 	var $yellow;					//access to API
-	var $content;					//number of content pages
+	var $content;					//number of content files
 	var $media;						//number of media files
 	var $media;						//number of media files
 	var $system;					//number of system files
 	var $system;					//number of system files
 	var $error;						//number of build errors
 	var $error;						//number of build errors
@@ -79,12 +79,6 @@ class YellowCommandline
 			}
 			}
 		}
 		}
 		if($statusCode != 200) echo "ERROR checking updates at $url: $versionLatest[error]\n";
 		if($statusCode != 200) echo "ERROR checking updates at $url: $versionLatest[error]\n";
-		if(!$this->yellow->config->isExisting("sitename"))
-		{
-			$fileNames = $this->yellow->toolbox->getDirectoryEntries(
-				$this->yellow->config->get("configDir"), "/^.*\.ini$/", true, false);
-			foreach($fileNames as $fileName) $statusCode = max($statusCode, $this->updateConfigFile($fileName));
-		}
 		if($updates) echo "Yellow $command: $updates update".($updates==1 ? "":"s")." available at $url\n";
 		if($updates) echo "Yellow $command: $updates update".($updates==1 ? "":"s")." available at $url\n";
 		return $statusCode;
 		return $statusCode;
 	}
 	}
@@ -120,7 +114,7 @@ class YellowCommandline
 		return $statusCode;
 		return $statusCode;
 	}
 	}
 	
 	
-	// Build static directories and files
+	// Build static files and directories
 	function buildStatic($path, $location)
 	function buildStatic($path, $location)
 	{
 	{
 		$this->yellow->toolbox->timerStart($time);
 		$this->yellow->toolbox->timerStart($time);
@@ -130,106 +124,112 @@ class YellowCommandline
 		if(empty($location))
 		if(empty($location))
 		{
 		{
 			$statusCode = $this->cleanStatic($path, $location);
 			$statusCode = $this->cleanStatic($path, $location);
-			foreach($this->getStaticLocations() as $location)
+			foreach($this->getContentLocations() as $location)
 			{
 			{
-				$statusCode = max($statusCode, $this->buildStaticPage($path, $location, true));
+				$statusCode = max($statusCode, $this->buildStaticRequest($path, $location, "content", true));
 			}
 			}
 			foreach($this->locationsArgs as $location)
 			foreach($this->locationsArgs as $location)
 			{
 			{
-				$statusCode = max($statusCode, $this->buildStaticPage($path, $location, true));
+				$statusCode = max($statusCode, $this->buildStaticRequest($path, $location, "content", true));
 			}
 			}
 			foreach($this->locationsArgsPagination as $location)
 			foreach($this->locationsArgsPagination as $location)
 			{
 			{
 				if(substru($location, -1) != ':')
 				if(substru($location, -1) != ':')
 				{
 				{
-					$statusCode = max($statusCode, $this->buildStaticPage($path, $location, false, true));
+					$statusCode = max($statusCode, $this->buildStaticRequest($path, $location, "content", false, true));
 				}
 				}
 				for($pageNumber=2; $pageNumber<=999; ++$pageNumber)
 				for($pageNumber=2; $pageNumber<=999; ++$pageNumber)
 				{
 				{
-					$statusCodeLocation = $this->buildStaticPage($path, $location.$pageNumber, false, true);
+					$statusCodeLocation = $this->buildStaticRequest($path, $location.$pageNumber, "content", false, true);
 					$statusCode = max($statusCode, $statusCodeLocation);
 					$statusCode = max($statusCode, $statusCodeLocation);
-					if($statusCodeLocation == 0) break;
+					if($statusCodeLocation == 100) break;
 				}
 				}
 			}
 			}
-			$statusCode = max($statusCode, $this->buildStaticPage($path, "/error", false, false, true));
-			foreach($this->getStaticFilesMedia($path) as $fileNameSource=>$fileNameDest)
+			foreach($this->getMediaLocations() as $location)
 			{
 			{
-				$statusCode = max($statusCode, $this->buildStaticFile($fileNameSource, $fileNameDest, true));
+				$statusCode = max($statusCode, $this->buildStaticRequest($path, $location, "media"));
 			}
 			}
-			foreach($this->getStaticFilesSystem($path) as $fileNameSource=>$fileNameDest)
+			foreach($this->getSystemLocations() as $location)
 			{
 			{
-				$statusCode = max($statusCode, $this->buildStaticFile($fileNameSource, $fileNameDest, false));
+				$statusCode = max($statusCode, $this->buildStaticRequest($path, $location, "system"));
 			}
 			}
+			$statusCode = max($statusCode, $this->buildStaticRequest($path, "/error", "system", false, false, true));
 		} else {
 		} else {
-			$statusCode = $this->buildStaticPage($path, $location);
+			$statusCode = $this->buildStaticRequest($path, $location, "content");
 		}
 		}
 		$this->yellow->toolbox->timerStop($time);
 		$this->yellow->toolbox->timerStop($time);
 		if(defined("DEBUG") && DEBUG>=1) echo "YellowCommandline::buildStatic time:$time ms\n";
 		if(defined("DEBUG") && DEBUG>=1) echo "YellowCommandline::buildStatic time:$time ms\n";
 		return $statusCode;
 		return $statusCode;
 	}
 	}
 	
 	
-	// Build static page
-	function buildStaticPage($path, $location, $analyse = false, $probe = false, $error = false)
-	{		
-		ob_start();
-		$_SERVER["SERVER_PROTOCOL"] = "HTTP/1.1";
-		$_SERVER["SERVER_NAME"] = $this->yellow->config->get("serverName");
-		$_SERVER["REQUEST_URI"] = $this->yellow->config->get("serverBase").$location;
-		$_SERVER["SCRIPT_NAME"] = $this->yellow->config->get("serverBase")."/yellow.php";
-		$_REQUEST = array();
-		$statusCode = $this->yellow->request();
-		if($statusCode<400 || $error)
+	// Build static request
+	function buildStaticRequest($path, $location, $type, $analyse = false, $probe = false, $error = false)
+	{
+		$this->yellow->page = new YellowPage($this->yellow);
+		if($type=="content" || $type=="system")
 		{
 		{
-			$fileData = ob_get_contents();
-			$modified = strtotime($this->yellow->page->getHeader("Last-Modified"));
-			if($statusCode>=301 && $statusCode<=303)
+			ob_start();
+			$_SERVER["SERVER_PROTOCOL"] = "HTTP/1.1";
+			$_SERVER["SERVER_NAME"] = $this->yellow->config->get("serverName");
+			$_SERVER["REQUEST_URI"] = $this->yellow->config->get("serverBase").$location;
+			$_SERVER["SCRIPT_NAME"] = $this->yellow->config->get("serverBase")."/yellow.php";
+			$_REQUEST = array();
+			$statusCode = $this->yellow->request();
+			if($statusCode<400 || $error)
 			{
 			{
-				$fileData = $this->getStaticRedirect($this->yellow->page->getHeader("Location"));
-				$modified = time();
+				$fileData = ob_get_contents();
+				$modified = strtotime($this->yellow->page->getHeader("Last-Modified"));
+				if($modified == 0) $modified = filemtime($this->yellow->page->fileName);
+				if($statusCode>=301 && $statusCode<=303)
+				{
+					$fileData = $this->getStaticRedirect($this->yellow->page->getHeader("Location"));
+					$modified = time();
+				}
+				$fileName = $this->getStaticFile($path, $location, $statusCode);
+				if(!$this->yellow->toolbox->createFile($fileName, $fileData, true) ||
+				   !$this->yellow->toolbox->modifyFile($fileName, $modified))
+				{
+					$statusCode = 500;
+					$this->yellow->page->statusCode = $statusCode;
+					$this->yellow->page->set("pageError", "Can't write file '$fileName'!");
+				}
 			}
 			}
+			ob_end_clean();
+		} else {
+			$statusCode = 200;
+			$fileNameSource = substru($location, 1);
 			$fileName = $this->getStaticFile($path, $location, $statusCode);
 			$fileName = $this->getStaticFile($path, $location, $statusCode);
-			if(!$this->yellow->toolbox->createFile($fileName, $fileData, true) ||
-			   !$this->yellow->toolbox->modifyFile($fileName, $modified))
+			if(!$this->yellow->toolbox->copyFile($fileNameSource, $fileName, true) ||
+			   !$this->yellow->toolbox->modifyFile($fileName, filemtime($fileNameSource)))
 			{
 			{
 				$statusCode = 500;
 				$statusCode = 500;
 				$this->yellow->page->statusCode = $statusCode;
 				$this->yellow->page->statusCode = $statusCode;
 				$this->yellow->page->set("pageError", "Can't write file '$fileName'!");
 				$this->yellow->page->set("pageError", "Can't write file '$fileName'!");
 			}
 			}
 		}
 		}
-		ob_end_clean();
-		if($statusCode==200 && $analyse) $this->analyseStaticPage($fileData);
+		if($statusCode==200 && $analyse) $this->analyseStaticRequest($fileData);
 		if($statusCode==404 && $error) $statusCode = 200;
 		if($statusCode==404 && $error) $statusCode = 200;
-		if($statusCode==404 && $probe) $statusCode = 0;
-		if($statusCode != 0) ++$this->content;
-		if($statusCode >= 400)
+		if($statusCode==404 && $probe) $statusCode = 100;
+		if($statusCode >= 200)
 		{
 		{
-			++$this->error;
-			echo "ERROR building content location '$location', ".$this->yellow->page->getStatusCode(true)."\n";
+			switch($type)
+			{
+				case "content":	++$this->content; break;
+				case "media":	++$this->media; break;
+				case "system":	++$this->system; break;
+			}
 		}
 		}
-		if(defined("DEBUG") && DEBUG>=3) echo $fileData;
-		if(defined("DEBUG") && DEBUG>=1) echo "YellowCommandline::buildStaticPage status:$statusCode location:$location\n";
-		return $statusCode;
-	}
-	
-	// Build static file
-	function buildStaticFile($fileNameSource, $fileNameDest, $fileTypeMedia)
-	{
-		$statusCode = $this->yellow->toolbox->copyFile($fileNameSource, $fileNameDest, true) &&
-			$this->yellow->toolbox->modifyFile($fileNameDest, filemtime($fileNameSource)) ? 200 : 500;
-		if($fileTypeMedia) { ++$this->media; } else { ++$this->system; }
 		if($statusCode >= 400)
 		if($statusCode >= 400)
 		{
 		{
 			++$this->error;
 			++$this->error;
-			$fileType = $fileTypeMedia ? "media file" : "system file";
-			$fileError = $this->yellow->toolbox->getHttpStatusFormatted($statusCode);
-			echo "ERROR building $fileType, $fileError: Can't write file '$fileNameDest'!\n";
+			echo "ERROR building location '$location', ".$this->yellow->page->getStatusCode(true)."\n";
 		}
 		}
-		if(defined("DEBUG") && DEBUG>=1) echo "YellowCommandline::buildStaticFile status:$statusCode file:$fileNameDest\n";
+		if(defined("DEBUG") && DEBUG>=1) echo "YellowCommandline::buildStaticRequest status:$statusCode location:$location\n";
 		return $statusCode;
 		return $statusCode;
 	}
 	}
 	
 	
-	// Analyse static page, detect locations with arguments
-	function analyseStaticPage($text)
+	// Analyse static request, detect locations with arguments
+	function analyseStaticRequest($text)
 	{
 	{
 		$serverName = $this->yellow->config->get("serverName");
 		$serverName = $this->yellow->config->get("serverName");
 		$serverBase = $this->yellow->config->get("serverBase");
 		$serverBase = $this->yellow->config->get("serverBase");
@@ -252,14 +252,14 @@ class YellowCommandline
 				if(is_null($this->locationsArgs[$location]))
 				if(is_null($this->locationsArgs[$location]))
 				{
 				{
 					$this->locationsArgs[$location] = $location;
 					$this->locationsArgs[$location] = $location;
-					if(defined("DEBUG") && DEBUG>=2) echo "YellowCommandline::analyseStaticPage detected location:$location\n";
+					if(defined("DEBUG") && DEBUG>=2) echo "YellowCommandline::analyseStaticRequest detected location:$location\n";
 				}
 				}
 			} else {
 			} else {
 				$location = rtrim($location, "0..9");
 				$location = rtrim($location, "0..9");
 				if(is_null($this->locationsArgsPagination[$location]))
 				if(is_null($this->locationsArgsPagination[$location]))
 				{
 				{
 					$this->locationsArgsPagination[$location] = $location;
 					$this->locationsArgsPagination[$location] = $location;
-					if(defined("DEBUG") && DEBUG>=2) echo "YellowCommandline::analyseStaticPage detected location:$location\n";
+					if(defined("DEBUG") && DEBUG>=2) echo "YellowCommandline::analyseStaticRequest detected location:$location\n";
 				}
 				}
 			}
 			}
 		}
 		}
@@ -281,7 +281,7 @@ class YellowCommandline
 		return $statusCode;
 		return $statusCode;
 	}
 	}
 	
 	
-	// Clean static directories and files
+	// Clean static files and directories
 	function cleanStatic($path, $location)
 	function cleanStatic($path, $location)
 	{
 	{
 		$statusCode = 200;
 		$statusCode = 200;
@@ -327,43 +327,6 @@ class YellowCommandline
 		return $statusCode;
 		return $statusCode;
 	}
 	}
 	
 	
-	// Update configuration file if necessary
-	function updateConfigFile($fileName)
-	{
-		$statusCode = 200;
-		$fileData = @file($fileName);
-		if($fileData)
-		{
-			foreach($fileData as $line)
-			{
-				if(preg_match("/^\/\/(.*)$/", $line, $matches))
-				{
-					if(!$found) $matches[1] .= " (updated)";
-					$line = "#$matches[1]\n";
-					$found = true;
-				}
-				if(preg_match("/^\s*(.*?)\s*=\s*(.*?)\s*$/", $line, $matches))
-				{
-					$line = ucfirst($matches[1]).": $matches[2]\n";
-				}
-				if(preg_match("/^([^,:]+),([^,]+),([^,]+),([^,]+),([^,\n]+)$/", $line, $matches))
-				{
-					$line = "$matches[1]: $matches[2],$matches[3],$matches[4],active,$matches[5]\n";
-				}
-				$fileDataNew .= $line;
-			}
-		}
-		if($found)
-		{
-			if(!$this->yellow->toolbox->createFile($fileName, $fileDataNew))
-			{
-				$statusCode = 500;
-				echo "ERROR updating configuration: Can't write file '$fileName'!\n";
-			}
-		}
-		return $statusCode;
-	}
-	
 	// Forward plugin command
 	// Forward plugin command
 	function pluginCommand($args)
 	function pluginCommand($args)
 	{
 	{
@@ -409,8 +372,31 @@ class YellowCommandline
 		return $ok;
 		return $ok;
 	}
 	}
 	
 	
-	// Return static locations from file system
-	function getStaticLocations()
+	// Return static file
+	function getStaticFile($path, $location, $statusCode)
+	{
+		if($statusCode < 400)
+		{
+			$fileName = $path.$location;
+			if(!$this->yellow->lookup->isFileLocation($location)) $fileName .= $this->yellow->config->get("staticDefaultFile");
+		} else if($statusCode == 404) {
+			$fileName = $path."/".$this->yellow->config->get("staticErrorFile");
+		}
+		return $fileName;
+	}
+	
+	// Return static redirect
+	function getStaticRedirect($location)
+	{
+		$output = "<!DOCTYPE html><html>\n<head>\n";
+		$output .= "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n";
+		$output .= "<meta http-equiv=\"refresh\" content=\"0;url=".htmlspecialchars($location)."\" />\n";
+		$output .= "</head>\n</html>";
+		return $output;
+	}
+	
+	// Return content locations
+	function getContentLocations()
 	{
 	{
 		$locations = array();
 		$locations = array();
 		$serverScheme = $this->yellow->config->get("serverScheme");
 		$serverScheme = $this->yellow->config->get("serverScheme");
@@ -428,59 +414,37 @@ class YellowCommandline
 		return $locations;
 		return $locations;
 	}
 	}
 	
 	
-	// Return static media files
-	function getStaticFilesMedia($path)
+	// Return media locations
+	function getMediaLocations()
 	{
 	{
-		$files = array();
+		$locations = array();
 		$fileNames = $this->yellow->toolbox->getDirectoryEntriesRecursive(
 		$fileNames = $this->yellow->toolbox->getDirectoryEntriesRecursive(
 			$this->yellow->config->get("mediaDir"), "/.*/", false, false);
 			$this->yellow->config->get("mediaDir"), "/.*/", false, false);
-		foreach($fileNames as $fileName) $files[$fileName] = "$path/$fileName";
-		return $files;
+		foreach($fileNames as $fileName)
+		{
+			array_push($locations, "/".$fileName);
+		}
+		return $locations;
 	}
 	}
-	
-	// Return static system files
-	function getStaticFilesSystem($path)
+
+	// Return system locations
+	function getSystemLocations()
 	{
 	{
-		$files = array();
+		$locations = array();
 		$fileNames = $this->yellow->toolbox->getDirectoryEntries(
 		$fileNames = $this->yellow->toolbox->getDirectoryEntries(
 			$this->yellow->config->get("pluginDir"), "/\.(css|js|jpg|png|txt|woff)/", false, false);
 			$this->yellow->config->get("pluginDir"), "/\.(css|js|jpg|png|txt|woff)/", false, false);
 		foreach($fileNames as $fileName)
 		foreach($fileNames as $fileName)
 		{
 		{
-			$files[$fileName] = $path.$this->yellow->config->get("pluginLocation").basename($fileName);
+			array_push($locations, $this->yellow->config->get("pluginLocation").basename($fileName));
 		}
 		}
 		$fileNames = $this->yellow->toolbox->getDirectoryEntries(
 		$fileNames = $this->yellow->toolbox->getDirectoryEntries(
 			$this->yellow->config->get("themeDir"), "/\.(css|js|jpg|png|txt|woff)/", false, false);
 			$this->yellow->config->get("themeDir"), "/\.(css|js|jpg|png|txt|woff)/", false, false);
 		foreach($fileNames as $fileName)
 		foreach($fileNames as $fileName)
 		{
 		{
-			$files[$fileName] = $path.$this->yellow->config->get("themeLocation").basename($fileName);
-		}
-		$fileNames = array();
-		array_push($fileNames, $this->yellow->config->get("configDir").$this->yellow->config->get("robotsFile"));
-		foreach($fileNames as $fileName) $files[$fileName] = "$path/".basename($fileName);
-		return $files;
-	}
-	
-	// Return static file
-	function getStaticFile($path, $location, $statusCode)
-	{
-		if($statusCode < 400)
-		{
-			$fileName = $path.$location;
-			if(!$this->yellow->lookup->isFileLocation($location)) $fileName .= $this->yellow->config->get("staticDefaultFile");
-		} else if($statusCode == 404) {
-			$fileName = $path."/".$this->yellow->config->get("staticErrorFile");
+			array_push($locations, $this->yellow->config->get("themeLocation").basename($fileName));
 		}
 		}
-		return $fileName;
-	}
-	
-	// Return static redirect
-	function getStaticRedirect($location)
-	{
-		$output = "<!DOCTYPE html><html>\n<head>\n";
-		$output .= "<meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n";
-		$output .= "<meta http-equiv=\"refresh\" content=\"0;url=".htmlspecialchars($location)."\" />\n";
-		$output .= "</head>\n</html>";
-		return $output;
+		array_push($locations, "/".$this->yellow->config->get("robotsFile"));
+		return $locations;
 	}
 	}
 	
 	
 	// Return plugin version
 	// Return plugin version

+ 1 - 1
system/themes/snippets/footer.php

@@ -1,5 +1,5 @@
 <div class="footer">
 <div class="footer">
-<a href="<?php echo $yellow->page->base."/" ?>">&copy; 2015 <?php echo $yellow->page->getHtml("sitename") ?></a>.
+<a href="<?php echo $yellow->page->base."/" ?>">&copy; 2016 <?php echo $yellow->page->getHtml("sitename") ?></a>.
 <a href="<?php echo $yellow->page->get("pageEdit") ?>">Edit</a>.
 <a href="<?php echo $yellow->page->get("pageEdit") ?>">Edit</a>.
 <a href="http://datenstrom.se/yellow">Made with Yellow</a>.
 <a href="http://datenstrom.se/yellow">Made with Yellow</a>.
 </div>
 </div>