------------------------------------------------------------
revno: 873
committer: Roger Martin <[email protected]>
branch nick: aikiframework
timestamp: Mon 2011-07-04 22:29:14 +0200
message:
  bug correction and improvments in widgets
modified:
  src/libs/output.php
  src/libs/widgets.php


--
lp:aikiframework
https://code.launchpad.net/~aikiframework-devel/aikiframework/trunk

Your team Aiki Framework Developers is subscribed to branch lp:aikiframework.
To unsubscribe from this branch go to 
https://code.launchpad.net/~aikiframework-devel/aikiframework/trunk/+edit-subscription
=== modified file 'src/libs/output.php'
--- src/libs/output.php	2011-06-27 20:23:02 +0000
+++ src/libs/output.php	2011-07-04 20:29:14 +0000
@@ -162,7 +162,7 @@
 
 				$header .= sprintf(
                     '<link rel="stylesheet" type="text/css" '.
-                    ' href="%sstyle.php?site=%s&amp;widgets=%s&amp;language=%s" />',
+                    ' href="%sstyle.php?site=%s&widgets=%s&language=%s" />',
                     $config['url'],
                     $site,
                     implode("_", $layout->widgets_css),
@@ -173,9 +173,10 @@
                        'assets/images/favicon.ico" type="image/x-icon" />';
 		}
 
-		if (isset ($layout->head_output))
+		if (isset ($layout->head_output)){
 			$header .= $layout->head_output;
-
+		}	
+		
 		$header .= $this->headers;
 		$header .= "</head>";
 		$header .= "\n<body>\n";
@@ -216,7 +217,7 @@
 		 */
 		$widgetExploded = explode("<!-- The End of a Record -->", $widget);
 		if ( !$columns )
-			$columns = 1; // to avaid %i % 0 error.
+			$columns = 1; // to avoid $i % 0 error.
 
 		$i = 0;
 		foreach ($widgetExploded as $cell)
@@ -288,9 +289,7 @@
 				}
 				else
 				{
-					/**
-					 * @todo why is html being output here???
-					 */
+
 					$full_html_output = file_get_contents($html_cache_file);
 					echo $full_html_output;
 

=== modified file 'src/libs/widgets.php'
--- src/libs/widgets.php	2011-06-26 20:01:19 +0000
+++ src/libs/widgets.php	2011-07-04 20:29:14 +0000
@@ -111,7 +111,7 @@
 		$unique_widget_exists= false;		
 		if ($module_widgets){				
 			foreach($module_widgets as $tested_widget){
-				if ($tested_widget->display_urls != "|*|"){
+				if ($tested_widget->display_urls != "*"){
 					$unique_widget_exists = true;
 					break;
 				}
@@ -120,10 +120,10 @@
 
 		// ..page not found..
 		if ( !$unique_widget_exists ){
-			$this->html_output .= $errors->page_not_found();
+			$this->html_output .= $errors->page_not_found();			
 			return;
 		}
-		
+	
 		// now filter canditate widgets, before create content
 		$widget_group = array();
 		foreach ( $module_widgets as $widget ) {
@@ -307,7 +307,10 @@
 	 *
 	 * @todo needless to say, this has to be refactored or redone. 
      */
-	private function createWidgetContent($widget,  $normal_select=false )
+	
+	
+	
+	private function createWidgetContent($widget, $normal_select=false )
 	{
 		global $aiki, $db, $url, $membership, $nogui, $custom_output, $config;
 
@@ -373,145 +376,104 @@
 				unlink($widget_file);
 		}
 
-		// Kill the query if it is not select.
-		if (preg_match("/TRUNCATE|UPDATE|DELETE(.*)from/i", $widget->normal_select)){
-			$widget->normal_select = "";
-		} else { 
-			$widget->normal_select = strtr( 
-				$widget->normal_select,
-				array ("\n"=> " ", "\r"=>"") );
-		}
-
+	
 		if ($is_inline)
 			$widget->pagetitle = '';
 
 		if ($widget->nogui_widget and isset($nogui))
-			$widget->widget = $widget->nogui_widget;
+			$widget->widget = $widget->nogui_widget;		
 		
-		$widget->widget = $aiki->input->requests($widget->widget);
-
-		$widget->normal_select = $aiki->input->requests($widget->normal_select);
-		$widget->normal_select = $this->parsDBpars($widget->normal_select);
-		$widget->normal_select = str_replace(
-			"[guest_session]", 
-			$membership->guest_session, 
-			$widget->normal_select);
-		$widget->normal_select = str_replace(
-			"[user_session]", 
-			$membership->user_session, 
-			$widget->normal_select);
-
 		/**
 		 * @TODO why is this commented out? if no takers, delete!
 		 */
 		//$widget->widget = htmlspecialchars_decode($widget->widget);
 
+		$widget->widget = $aiki->input->requests($widget->widget);
 		$widget->widget = $aiki->processVars($widget->widget);
 
-		$no_loop_part = 
-			$aiki->get_string_between ($widget->widget, 
-									   '(noloop(', ')noloop)');
-
-		$widget->widget = 
-			str_replace('(noloop('.$no_loop_part.')noloop)', '', 
-						$widget->widget);
-
-		$no_loop_bottom_part = 
-			$aiki->get_string_between ($widget->widget, 
-									  '(noloop_bottom(', ')noloop_bottom)');
+
+        // noloop part are extracted and deleted.
+		$no_loop_part = $aiki->get_string_between (
+			$widget->widget, 
+			'(noloop(', ')noloop)');
+
+		$widget->widget = str_replace(
+			'(noloop('.$no_loop_part.')noloop)', '', 
+			$widget->widget);
+
+		$no_loop_bottom_part = $aiki->get_string_between (
+			$widget->widget, 
+			'(noloop_bottom(', ')noloop_bottom)');
 
 		$widget->widget = str_replace(
 			'(noloop_bottom('.$no_loop_bottom_part.')noloop_bottom)', '', 
 			$widget->widget);
 
-		if (isset($normal_select) and $normal_select)
-			$widget->normal_select = trim($normal_select);
-		else
-			$widget->normal_select = trim($widget->normal_select);
-
-		$widget->normal_select = 
-			str_replace("\'", "'", $widget->normal_select);
-		$widget->normal_select = 
-			str_replace('\"', '"', $widget->normal_select);
-
-		if ($widget->normal_select)
-		{
-			$normal_selects = explode("|OR|", $widget->normal_select);
-			$widget->normal_select = $normal_selects[0];
-
-			$widget->normal_select = 
-				$aiki->url->apply_url_on_query($widget->normal_select);
-
-			$widget->normal_select = 
-				$aiki->processVars ($aiki->languages->L10n(
-										"$widget->normal_select"));
-			
-			$records_num = $this->records_num( $widget->normal_select);  
+		$widget->normal_select = $this->parse_select(
+			$widget->normal_select,
+			$normal_select);
+		
+		
+		if (!$widget->normal_select) {
+			$processed_widget = $this->parse_widget_without_data($widget->widget);
+		} else {				
+			$selects = explode("|OR|", $widget->normal_select);
+            foreach ( $selects as $select ){								
+				$widget->normal_select= $select;
+				
+				$records_num = $this->records_num($widget->normal_select);  				
+				// pagination change normal_select adding limit.
+				$pagination = $this->pagination($widget, $records_num);
+				$widget_select = $db->get_results($widget->normal_select);
+				if ( $widget_select ){
+					break;
+				}	
+			}		
+				
 			if ( $records_num !== false ) {
-				$widget->widget = str_replace(
-					"[records_num]", 
-					$records_num, $widget->widget);
-			} 
-
-			// Default pages links settings. 
-			// pagination change normal_select adding limit.
-			$pagination = $this->pagination($widget,$records_num);			
-			$newwidget = $widget->widget;
-
-			$widget_select = $db->get_results($widget->normal_select);			
-			if (!$widget_select and isset($normal_selects['1'])){
-				$widget_select = $db->get_results($normal_selects['1']);
-			}						
-			$num_results = $db->num_rows;
+				$widget->widget = str_replace("[records_num]", $records_num, $widget->widget);
+				$template = $widget->widget;
+				$num_results = $db->num_rows;
+			} 						
 			
-			if ($widget_select and $num_results and $num_results > 0)
+			if ($widget_select and isset($num_results) and $num_results > 0)
 			{
 				$widgetContents = '';
-				foreach ( $widget_select as $widget_value )
-				{
+				foreach ( $widget_select as $widget_value )	{
 					/**
 					 * @todo put this behind debug time option
 					 */
-					if (!$custom_output)
+					if (!$custom_output) {
 						$widgetContents .= 
 							"\n<!-- The Beginning of a Record -->\n";
-					$widget->widget = $newwidget;
-					$widget->widget = 
-						$aiki->parser->datetime(
-							$widget->widget, $widget_value);
-					$widget->widget = 
-						$aiki->parser->tags($widget->widget, $widget_value);
-					$widget->widget = $this->noaiki($widget->widget);
-					$widget->widget = 
-						$this->parsDBpars($widget->widget, $widget_value);
-					$widget->widget = 
-						$aiki->records->edit_in_place($widget->widget, 
-													  $widget_value);
-					$widget->widget = 
-						$aiki->text->aiki_nl2br($widget->widget);
-					$widget->widget = 
-						$aiki->text->aiki_nl2p($widget->widget);
-
-					$widgetContents .= $widget->widget;
+					}							
+					$widgetContents .=  $this->parse_widget_with_data(
+						$template,
+						$widget_value);
 					if (!$custom_output){
 						$widgetContents .= 
 							"\n<!-- The End of a Record -->\n";
 					}
 				} // end of foreach
 
-				if ($widget->display_in_row_of > 0)
-					$widgetContents = 
-						$aiki->output->displayInTable($widgetContents, 
-							$widget->display_in_row_of);
-
+				// puts records in row
+				if ($widget->display_in_row_of > 0) {
+					$widgetContents = $aiki->output->displayInTable(
+						$widgetContents, 
+						$widget->display_in_row_of);
+				}
+				
+				// more parser..
 				$widgetContents = $this->noaiki($widgetContents);
 				$widgetContents = $aiki->url->apply_url_on_query($widgetContents);
 				$widgetContents = $aiki->security->inlinePermissions($widgetContents);
-
-				$no_loop_part        =  $this->parsDBpars($no_loop_part, $widget_value);
-				$no_loop_bottom_part = 	$this->parsDBpars($no_loop_bottom_part, $widget_value);
-				$widgetContents = $no_loop_part.$widgetContents;
-				$widgetContents = $widgetContents.$no_loop_bottom_part;
+			
+				$widgetContents =
+					$this->parsDBpars($no_loop_part, $widget_value).
+				    $widgetContents.
+					$this->parsDBpars($no_loop_bottom_part, $widget_value);
+				
+				// now widget is complete other parser can aplied.
 				$widgetContents = $aiki->php->parser($widgetContents);
 				$widgetContents = $this->inline_widgets($widgetContents);
 				$widgetContents = $this->inherent_widgets($widgetContents);
@@ -548,29 +510,28 @@
 			} else {
 				$this->kill_widget = $widget->id;
 			}
-		} else {
-			$widget->widget = $this->parsDBpars($widget->widget, '');
-			$widget->widget = $this->noaiki($widget->widget);
-			$widget->widget = $aiki->url->apply_url_on_query(
-								  $widget->widget);
-			$widget->widget = $aiki->security->inlinePermissions(
-								  $widget->widget);
-			$widget->widget = $this->inline_widgets($widget->widget);
-			$widget->widget = $this->inherent_widgets($widget->widget);
-			$widget->widget = $aiki->sql_markup->sql($widget->widget);
-
-			$processed_widget =  $widget->widget;
-		}
-
-		if (!isset($processed_widget))
+		} 
+
+
+		if (!isset($processed_widget)){
 			$processed_widget = '';
-
-		$processed_widget = $this->parsDBpars($processed_widget, '');
-		$processed_widget = $aiki->processVars ($processed_widget);
-		$processed_widget = 
-			$aiki->url->apply_url_on_query($processed_widget);
-		$processed_widget = $aiki->text->aiki_nl2br($processed_widget);
-		$processed_widget = $aiki->text->aiki_nl2p($processed_widget);
+		} else {	
+			$processed_widget = $this->parsDBpars($processed_widget, '');
+			$processed_widget = $aiki->processVars ($processed_widget);
+			$processed_widget = $aiki->url->apply_url_on_query($processed_widget);
+			$processed_widget = $aiki->text->aiki_nl2br($processed_widget);
+			$processed_widget = $aiki->text->aiki_nl2p($processed_widget);
+			
+			$processed_widget = $aiki->processVars ($processed_widget);
+			$processed_widget = $aiki->parser->process($processed_widget);
+			$processed_widget = $aiki->aiki_array->displayArrayEditor($processed_widget);
+			$processed_widget = $aiki->forms->displayForms($processed_widget);
+			$processed_widget = $aiki->input->requests($processed_widget);
+			$processed_widget = $aiki->php->parser($processed_widget);
+			$processed_widget = stripslashes($processed_widget);
+		}
+		
+		
 
 		// Apply (#(header:...
 		$processed_widget= $this->parse_header($processed_widget);
@@ -587,8 +548,7 @@
 		if ($widget->pagetitle)
 		{
 			$widget->pagetitle = $aiki->processVars($widget->pagetitle);
-			$widget->pagetitle = 
-				$aiki->url->apply_url_on_query($widget->pagetitle);
+			$widget->pagetitle = $aiki->url->apply_url_on_query($widget->pagetitle);
 
 			if (!isset($widget_value))
 				$widget_value = '';
@@ -598,14 +558,7 @@
 			$aiki->output->set_title($title);
 		}
 
-		$processed_widget = $aiki->processVars ($processed_widget);
-		$processed_widget = $aiki->parser->process($processed_widget);
-		$processed_widget = 
-			$aiki->aiki_array->displayArrayEditor($processed_widget);
-		$processed_widget = $aiki->forms->displayForms($processed_widget);
-		$processed_widget = $aiki->input->requests($processed_widget);
-		$processed_widget = $aiki->php->parser($processed_widget);
-		$processed_widget = stripslashes($processed_widget);
+		
 
 		if (isset($widgetContents) and 
 			$widgetContents == "\n<!-- The Beginning of a Record -->\n\n<!-- The End of a Record -->\n")
@@ -884,6 +837,33 @@
 		return $text;
 	}
 
+    private function parse_widget_with_data( $template, $values){
+		global $aiki;
+		$template = $aiki->parser->datetime( $template, $values);			
+		$template = $aiki->parser->tags( $template, $values);
+		$template = $this->noaiki($template);
+		$template = $this->parsDBpars($template, $values);
+		$template = $aiki->records->edit_in_place( $template, $values);
+		$template = $aiki->text->aiki_nl2br($template);
+		$template = $aiki->text->aiki_nl2p($template);
+		return $template;
+	}
+
+
+    private function parse_widget_without_data( $template ){
+		global $aiki;
+		$template = $this->parsDBpars($template, '');
+		$template = $this->noaiki($template);
+		$template = $aiki->url->apply_url_on_query($template);
+		$template = $aiki->security->inlinePermissions($template);								  
+		$template = $this->inline_widgets($template);
+		$template = $this->inherent_widgets($template);
+		$template = $aiki->sql_markup->sql($template);
+		return $template;
+    }
+
+
+
 
 	/**
 	 * @param	string	$text			text for processing
@@ -1034,6 +1014,40 @@
 		return $text;		
 	}	
 		
+		
+	private function parse_select( $select, $inline_select) {
+		global $aiki, $url, $membership;
+		
+		if ( $inline_select ) {
+			$select= trim($inline_select);
+		} else {
+			// Kill the query if it is not select.
+			// roger: this filter is not aplied over $inline_select
+			if (preg_match("/TRUNCATE|UPDATE|DELETE(.*)from/i", $select)){
+				return "";
+			} else { 
+				// roger: i don't know why this parse is applie only on normal_select 
+				// and no over inline..Perhaps must remove it.
+				$select = strtr( $select, array ("\n"=> " ", "\r"=>"") ); // delete line-feed
+				$select = $aiki->input->requests($select); // replace GET[] and POST[]
+				$select = $this->parsDBpars($select);
+				$select = strtr( 
+					$select,
+					array ( "[guest_session]"=>	$membership->guest_session, 
+							"[user_session]" =>	$membership->user_session));
+			}
+		}
+		
+		// more parse
+		$select= strtr( trim($select), array ("\'" => "'", '\"'=>'"'));
+		$select = $aiki->url->apply_url_on_query($select);
+		$select = $aiki->languages->L10n( $select);
+		$select = $aiki->processVars ($select);
+			
+		return $select;	
+	}	
+		
+		
     /**
      * Proccesed all (#(header:..)#) in widget content.
      *
@@ -1141,6 +1155,7 @@
 	 *
 	 * @todo fix the spelling of inherent to inherit and keep backwards compat
 	 */
+	 
 	private function inherent_widgets($widget)
 	{
 		global $db;

_______________________________________________
Mailing list: https://launchpad.net/~aikiframework-devel
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~aikiframework-devel
More help   : https://help.launchpad.net/ListHelp

Reply via email to