Robert Marshall 9 vuotta sitten
vanhempi
commit
76dac28682

+ 10 - 0
Controller/Desktop.php

@@ -0,0 +1,10 @@
+<?php
+class Desktop {
+	public function Index($params){
+		return new View("Desktop/index.view");
+	}
+	
+	public function Wake($params){
+		return $output=shell_exec("wakeonlan c8:60:00:16:a8:39");
+	}
+}

+ 19 - 0
Controller/Navigation/DesktopNav.php

@@ -0,0 +1,19 @@
+<?php
+class DesktopNav implements INavigationController{
+	private $_uri;
+	
+	public function __construct() {
+		if (Session::IsUserLoggedIn())
+			$this->_uri=new URI("Desktop","/desktop","/images/desktop.svg");
+		else
+			$this->_uri=null;
+	}
+	
+	public function GetItems() {
+		
+	}
+
+	public function GetURI() {
+		return $this->_uri;
+	}
+}

+ 1 - 0
DB Scripts/4/insert_permissions_data.sql

@@ -0,0 +1 @@
+INSERT INTO permissions (permission_value,permission_default_grant) VALUES ('desktop/index',1);

+ 2 - 0
DB Scripts/5/insert_permissions_data.sql

@@ -0,0 +1,2 @@
+INSERT INTO permissions (permission_value,permission_default_grant) VALUES ('member/logout',1);
+INSERT INTO permissions (permission_value, permission_default_grant) VALUES ('desktop/wake', 1);

+ 2 - 3
Model/BlogPost.php

@@ -60,10 +60,9 @@ class BlogPost extends DBObject {
 		$previewLength=ApplicationSettings::GetSetting("blog", "preview_length");
 		$content=$this->PostContent;
 		if ($previewLength<strlen($content)){
-			$pTagPos=strpos($content,"\n",$previewLength);
-			$content=substr($content, 0, $pTagPos);
+			$newlinePos=strpos($content,"\n",$previewLength);
+			$content=substr($content, 0, $newlinePos);
 		}
-		$content=Utils::CloseOpenTags($content);
 		return $content;
 	}
 	

+ 10 - 1
Model/PostFormatter.php

@@ -3,6 +3,8 @@ define("TAG_PROCESSOR_PATH","Model/TagProcessors/");
 include(TAG_PROCESSOR_PATH."ITagProcessor.php");
 
 class PostFormatter{
+	public static $TAG_MATCH_REGEX='@\[([a-z]*) ?(.*?)(\](.*?)\[)?/\1?\]@ms';
+	
 	private static $_content=array();
 	private static $_randomIndexModifier="";
 	
@@ -51,7 +53,7 @@ class PostFormatter{
 	}
 	
 	private static function GetProcessedString($string){
-		return preg_replace_callback('@\[([a-z]*) ?(.*?)(\](.*?)\[)?/\1?\]@ms',"self::ProcessTag", $string);
+		return preg_replace_callback(self::$TAG_MATCH_REGEX,"self::ProcessTag", $string);
 	}
 	
 	private static function PopulateString($matches){
@@ -93,4 +95,11 @@ class PostFormatter{
 		$returnStr=self::ProcessPopulateString($returnStr);
 		return $returnStr;
 	}
+	
+	public static function CloseOpenTag($str){
+		$matches=array();
+		preg_match_all('@.*\[([a-z]*) ?.*?\]@ms', $str, $matches);
+		$closeTag='[/'.$matches[1][0].']';
+		return $str.PHP_EOL.'...'.PHP_EOL.$closeTag;
+	}
 }

+ 9 - 2
Model/TagProcessors/code.php

@@ -4,17 +4,24 @@ namespace Tags;
 include('lib/geshi/geshi.php');
 
 class code implements ITagProcessor {
+	private static $LANGUAGE_ALIASES=array(
+		"c#"=>"csharp",
+		"html"=>"html5"
+	);
+	
 	public static function Process($args, $content) {
 		if (!isset($args['lang']))
 			return $content;
 		
-		if ($args['lang']=="c#")
-			$args['lang']="csharp";
+		if (isset(self::$LANGUAGE_ALIASES[$args['lang']]))
+			$args['lang']=self::$LANGUAGE_ALIASES[$args['lang']];
 		
 		if (!isset($args['lineStyle']))
 			$args['lineStyle']=GESHI_FANCY_LINE_NUMBERS;
 		else
 			$args['lineStyle']=(int)$args['lineStyle'];
+		
+		$content=str_replace("\t", "    ", $content);
 				
 		$geshi=new \GeSHi(trim($content),$args['lang']);
 		$geshi->enable_line_numbers($args['lineStyle']);

+ 1 - 1
View/Blog/index.view

@@ -1,6 +1,6 @@
 @Title{Blog}@
 @CSS{
-	@import "/css/blog.css";
+	<?= file_get_contents("css/blog.css") ?>
 }@
 @ButtonsLeft{
 	<?php if ($page>1){?>

+ 1 - 1
View/Blog/view.view

@@ -1,6 +1,6 @@
 @Title{Blog}@
 @CSS{
-	@import "/css/blog.css";
+	<?= file_get_contents("css/blog.css") ?>
 }@
 @Body{
 	<?=PostFormatter::FormatToHTML($content)?>

+ 33 - 0
View/Desktop/index.view

@@ -0,0 +1,33 @@
+@Title{Desktop}@
+@JavaScript{
+	function formSuccess(data){
+		$("#wakeSuccess").html(data);
+		$("#wakeSuccess").show();
+	}
+}@
+@Body{
+<div class="row col-lg-2">
+	<div class="col">
+		<h2>Wake Desktop</h2>
+		<form ajaxForm action="/desktop/wake" method="post" style="text-align: center" onsuccess="formSuccess" onerror="asdasd">
+			<button type="submit" name="wake" title="Send wake command">
+				<img src="/images/power.svg" width="128" alt="Wake" />
+			</button>
+			<div id="wakeSuccess" style="display:none"></div>
+		</form>
+	</div>
+	<div class="col">
+		<h2>Browse Files</h2>
+	</div>
+</div>
+<div class="row col-lg-2">
+	<div class="col">
+		<h2>Desktop Hardware Monitor</h2>
+		<div id="sensors"><img src="/loading.gif" /></div>
+	</div>
+	<div class="col">
+		<h2>Screenshot</h2>
+		<img id="screenshot" src="/loading.gif" />
+	</div>
+</div>
+}@

+ 3 - 1
View/Home/index.view

@@ -1,5 +1,7 @@
 @Title{Home}@
 @CSS{
+	<?= file_get_contents("css/blog.css") ?>
+	
 	h3 a {
 		color:inherit;
 	}
@@ -11,7 +13,7 @@
 <hr />
 <h2>Latest Blog Post</h2>
 <h3><a href="/blog/view/<?=$post->PostUrl?>"><?=$post->PostTitle?></a></h3>
-<?=PostFormatter::FormatToHTML($post->GetPostPreview())?>
+<?=PostFormatter::FormatToHTML(PostFormatter::CloseOpenTag($post->GetPostPreview()))?>
 <small>Posted on <?=date("l \\t\h\\e jS \of F Y",strtotime($post->PostTimestamp))?></small>
 <p><a href="/blog/view/<?=$post->PostUrl?>">Read more...</a></p>
 }@

+ 38 - 48
View/Member/login.view

@@ -1,11 +1,5 @@
 @Title{Member Area}@
-@CSS{
-	.form{
-		float:left;
-		width:50%;
-		box-sizing:border-box;
-	}
-	
+@CSS{	
 	.form:not(:last-child){
 		padding-right:5px
 	}
@@ -22,12 +16,6 @@
 		width:100%;
 	}
 }@
-@CSSSmall{
-	.form{
-		width:100%;
-		padding:0 !important;
-	}
-}@
 @Body{
 <?php
 	if (!isset($loginEmail))
@@ -35,44 +23,46 @@
 	if (!isset($registerEmail))
 		$registerEmail="";
 ?>
-<div class="form">
-	<h2>Log In</h2>
-	<?= Utils::TableMaker(
-		array(
+<div class="row col-lg-2">
+	<div class="col form">
+		<h2>Log In</h2>
+		<?= Utils::TableMaker(
 			array(
-				"display"=>"Email",
-				"name"=>"email",
-				"type"=>"email",
-				"value"=>$loginEmail
+				array(
+					"display"=>"Email",
+					"name"=>"email",
+					"type"=>"email",
+					"value"=>$loginEmail
+				),
+				array(
+					"display"=>"Password",
+					"name"=>"password",
+					"type"=>"password"
+				)
 			),
+			'<img src="/images/member.svg" alt="Log In" title="Log In" />',
+			"/member/login"
+		); ?>
+	</div>
+	<div class="col form">
+		<h2>Register</h2>
+		<?= Utils::TableMaker(
 			array(
-				"display"=>"Password",
-				"name"=>"password",
-				"type"=>"password"
-			)
-		),
-		'<img src="/images/member.svg" alt="Log In" title="Log In" />',
-		"/member/login"
-	); ?>
-</div>
-<div class="form">
-	<h2>Register</h2>
-	<?= Utils::TableMaker(
-		array(
-			array(
-				"display"=>"Email",
-				"name"=>"email",
-				"type"=>"email",
-				"value"=>$registerEmail
+				array(
+					"display"=>"Email",
+					"name"=>"email",
+					"type"=>"email",
+					"value"=>$registerEmail
+				),
+				array(
+					"display"=>"Password",
+					"name"=>"password",
+					"type"=>"password"
+				)
 			),
-			array(
-				"display"=>"Password",
-				"name"=>"password",
-				"type"=>"password"
-			)
-		),
-		'<img src="/images/register.svg" alt="Register" title="Register" />',
-		"/member/register"
-	); ?>
+			'<img src="/images/register.svg" alt="Register" title="Register" />',
+			"/member/register"
+		); ?>
+	</div>
 </div>
 }@

+ 2 - 1
css/blog.css

@@ -1,5 +1,6 @@
 .code{
-	border:2px solid #bdbdbd;
+	border:1px solid #bdbdbd;
+	border-radius:4px;
 	padding:5px;
 	margin:0;
 	overflow:auto;

+ 25 - 0
css/style-med.css

@@ -20,4 +20,29 @@
 #buttons button{
 	width:60px;
 	height:60px;
+}
+
+.row>.col {
+	width:100%;
+	float:left;
+}
+
+.row.col-lg-1>.col, .row.col-lg-2>.col, .row.col-lg-3>.col, .row.col-lg-4>.col{
+	width: 100%;
+}
+
+.row.col-md-1>.col{
+	width:100%;
+}
+
+.row.col-md-2>.col{
+	width:50%;
+}
+
+.row.col-md-3>.col{
+	width:33.3333%;
+}
+
+.row.col-md-4>.col{
+	width:25%;
 }

+ 25 - 0
css/style-small.css

@@ -30,4 +30,29 @@ dl{
 
 .header span:not(:first-child):before{
 	content:none;
+}
+
+.row>.col {
+	width:100%;
+	float:left;
+}
+
+.row.col-md-1>.col, .row.col-md-2>.col, .row.col-md-3>.col, .row.col-md-4>.col{
+	width: 100%;
+}
+
+.row.col-sm-1>.col{
+	width:100%;
+}
+
+.row.col-sm-2>.col{
+	width:50%;
+}
+
+.row.col-sm-3>.col{
+	width:33.3333%;
+}
+
+.row.col-sm-4>.col{
+	width:25%;
 }

+ 26 - 0
css/style.css

@@ -308,4 +308,30 @@ td, th{
 .errors ul{
 	margin: 0;
 	list-style: square;
+}
+
+.row{
+	width:100%;
+	clear:both;
+}
+
+.row>.col {
+	width:100%;
+	float:left;
+}
+
+.row.col-lg-1>.col{
+	width:100%;
+}
+
+.row.col-lg-2>.col{
+	width:50%;
+}
+
+.row.col-lg-3>.col{
+	width:33.3333%;
+}
+
+.row.col-lg-4>.col{
+	width:25%;
 }

+ 11 - 0
images/desktop.svg

@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<path fill="none" d="M0,0h24v24H0V0z"/>
+<path fill="#546E7A" d="M23,4v12c0,1.1-0.9,2-2,2h-7v2h2v2H8v-2h2v-2H3c-1.1,0-2-0.9-2-2V4c0-1.1,0.9-2,2-2h18C22.1,2,23,2.9,23,4z"
+	/>
+<rect x="3" y="4" fill="#B3E5FC" width="18" height="12"/>
+<rect x="10" y="17.98" fill="#455A64" width="4" height="2.02"/>
+</svg>

+ 10 - 0
images/power.svg

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 width="24px" height="24px" viewBox="0 0 24 24" enable-background="new 0 0 24 24" xml:space="preserve">
+<path fill="none" d="M0,0h24v24H0V0z"/>
+<rect x="11" y="2" fill="#64B5F6" width="2" height="10"/>
+<path fill="#42A5F5" d="M16.561,4.44l-1.451,1.45C16.84,6.94,18,8.83,18,11c0,3.311-2.689,6-6,6c-3.31,0-6-2.689-6-6
+	c0-2.17,1.16-4.06,2.88-5.12L7.44,4.44C5.36,5.88,4,8.28,4,11c0,4.42,3.58,8,8,8s8-3.58,8-8C20,8.28,18.641,5.88,16.561,4.44z"/>
+</svg>

+ 18 - 0
javascript.js

@@ -66,6 +66,24 @@ $(function(){
 		$("#menu").hide("slide", {direction: "left", easing:'easeInCirc'});
 		$("body>.backdrop").fadeOut();
 	});
+	
+	$("form[ajaxForm]").submit(function(e){
+		e.preventDefault();
+		form=$(this);
+		$.ajax({
+			url:form.attr("action"),
+			success:function(data){
+				var successFunction=form.attr("onsuccess");
+				if (successFunction!==undefined && window[successFunction]!==undefined)
+				window[successFunction](data);
+			},
+			error:function(){
+				var errorFunction=form.attr("onerror");
+				if (errorFunction!==undefined && window[errorFunction]!==undefined)
+					window[errorFunction]();
+			},
+		});
+	});
 });
 
 

+ 3 - 3
lib/geshi/geshi.php

@@ -3652,12 +3652,12 @@ class GeSHi {
         // Replace <|UR1| with <a href= for urls also
         if (isset($this->link_styles[GESHI_LINK])) {
             if ($this->use_classes) {
-                $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+                $stuff_to_parse = str_replace('<|UR1|', '<a target="_blank"' . $this->link_target . ' href=', $stuff_to_parse);
             } else {
-                $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse);
+                $stuff_to_parse = str_replace('<|UR1|', '<a target="_blank"' . $this->link_target . ' style="' . $this->link_styles[GESHI_LINK] . '" href=', $stuff_to_parse);
             }
         } else {
-            $stuff_to_parse = str_replace('<|UR1|', '<a' . $this->link_target . ' href=', $stuff_to_parse);
+            $stuff_to_parse = str_replace('<|UR1|', '<a target="_blank"' . $this->link_target . ' href=', $stuff_to_parse);
         }
 
         //

+ 1 - 1
lib/geshi/geshi/html5.php

@@ -165,7 +165,7 @@ $language_data = array (
             )
         ),
     'URLS' => array(
-        2 => 'http://december.com/html/4/element/{FNAMEL}.html',
+		2 => 'http://www.w3schools.com/tags/tag_{FNAMEL}.asp',
         3 => ''
         ),
     'OOLANG' => false,

+ 1 - 1
settings.ini

@@ -11,7 +11,7 @@ database=robware-test
 
 [navigation]
 mode=include
-pages=HomeNav,BlogNav,ProjectsNav,GalleryNav,MemberNav
+pages=HomeNav,BlogNav,ProjectsNav,GalleryNav,DesktopNav,MemberNav
 
 [blog]
 posts_per_page=10

+ 9 - 4
template.php

@@ -20,21 +20,23 @@ function FormatURI(URI $uri, $base=""){
 		</title>
 		<meta charset="UTF-8">
 		<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0"/>
-		<link href="/css/style.css" rel="stylesheet" type="text/css" />
-		<link href="/css/style-med.css" rel="stylesheet" media="(max-width:1023px)" type="text/css" />
-		<link href="/css/style-small.css" rel="stylesheet" media="(max-width:680px)" type="text/css" />
 		<style type="text/css">
+			<?= file_get_contents("css/style.css")?>
 			{@CSS}
 		</style>
 		<style media="(max-width:1023px)">
+			<?= file_get_contents("css/style-med.css")?>
 			{@CSSMed}
 		</style>
 		<style media="(max-width:680px)">
+			<?= file_get_contents("css/style-small.css")?>
 			{@CSSSmall}
 		</style>
 		<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
 		<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.11.2/jquery-ui.min.js"></script>
-		<script src="/javascript.js"></script>
+		<script>
+			<?= file_get_contents("javascript.js"); ?>
+		</script>
 		<script type="text/javascript">
 			{@JavaScript}
 		</script>
@@ -67,6 +69,9 @@ function FormatURI(URI $uri, $base=""){
 						$__controllers=Navigation::Get();
 						foreach ($__controllers as $controller){
 							$cURI=$controller->GetURI();
+							if ($cURI==null)
+								continue;
+							
 							echo '<dt';
 							if ($cURI->GetLinkLocation()=='/'.$uriParts[0])
 								echo ' class="active"';