------------------------------------------------------------
revno: 1140
committer: Roger Martin <[email protected]>
branch nick: aikiframework
timestamp: Tue 2012-03-13 23:46:15 +0100
message:
implemented blueprint Using in-widget (sql()sql), need a way to define 'no
results returned'
modified:
libs/SqlMarkup.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 'libs/SqlMarkup.php'
--- libs/SqlMarkup.php 2012-03-02 21:15:25 +0000
+++ libs/SqlMarkup.php 2012-03-13 22:46:15 +0000
@@ -41,9 +41,14 @@
*
* @todo need a serious security review
*/
- public function sql($text) {
- return preg_replace_callback( // i love this function :-o
- '/\(sql\((.*)\)sql\)/Us', array($this,"sql_query"), $text);
+ public function sql($text) {
+ $pattern = '/\(sql\((.*)\)sql\)/s';
+
+ // in each step replace the outer (sql(..)sql)
+ while ( preg_match( $pattern, $text) ){
+ $text= preg_replace_callback($pattern, array($this,"sql_query"), $text);
+ }
+ return $text;
}
/**
@@ -55,69 +60,62 @@
public function sql_query($matchRaw) {
global $aiki, $db;
- $match = $aiki->url->apply_url_on_query($matchRaw[1]);
-
- $html_output = '';
- $count_sql = preg_match_all('/\((.*)| (?R)\)/s', $match, $matches);
-
- $match = '';
-
- foreach ( $matches[1] as $sql ) {
-
- $sql_html = explode("||", trim($sql));
-
- $sql_html[1] = str_replace($sql_html[0]."||", '', $sql);
-
- $sql_query = $sql_html[0];
-
+
+ if ( is_array($matchRaw) ){
+ // called by preg_replace_callback
+ $check = $aiki->url->apply_url_on_query($matchRaw[1]);
+ } else {
+ $check= $matchRaw;
+ }
+
+ if ( !preg_match_all('/\((((?>[^()]+)|(?R))*)\)/', $check, $matches) ){
+ return $check;
+ }
+
+
+ $output="";
+ $if_no_results=false;
+ foreach ( $matches[1] as $match ){
+ if ( substr_count($match,"||")==0 ){
+ continue;
+ } else {
+ list($sql_query,$sql_html) = explode("||", $match, 2);
+ }
+
+ if ( strtoupper(trim($sql_query))=="IF_NO_RESULTS"){
+ if ( $if_no_results ){
+ $output .= $sql_html;
+ }
+ continue;
+ }
+
if ($sql_query) {
$sql_query = str_replace("\'", "'", $sql_query);
$sql_query = str_replace('\"', '"', $sql_query);
$db->last_error= false;
- $results = $db->get_results($sql_query);
+
+ $results = $db->get_results($sql_query, ARRAY_A);
if ( $db->last_error ){
return t("Error in SQL").
(is_debug_on() ? " ". $db->last_error : "" );
}
-
+
if ($results) {
+ $if_no_results=false;
foreach ( $results as $result ) {
- $html = trim($sql_html[1]);
- if (!preg_match('/\(select(.*)/', $html)) {
- $html = substr($html,0,-1);
- }
- //ez_SQL return array or Object not assoc
- $result = get_object_vars($result);
+ $html = trim($sql_html);
foreach ($result as $k => $v) {
$html = str_replace("[-[".$k."]-]", $v, $html);
}
- /* just in case
- $result = $aiki->AikiArray->object2array($result);
- $result_key = @array_flip($result);
-
- foreach ( $result as $field ) {
- if (isset($result_key[$field])) {
- $html = str_replace("[-[".$result_key[$field].
- "]-]", $field, $html);
- }
- }
- */
- $match .= $html;
-
- /**
- * @todo investigate why these are hidden, kill or keep
- */
- //$match = str_replace("\r", ' ', $match);
- //$match = str_replace("\n", ' ', $match);
- $match = preg_replace("/\)\s\s+\(/", '(', $match);
-
- $match .= $this->sql_query($html);
+ $output .= $html;
} // loop over results
- } // if results
- } // if query
- } // loop over matches
- return $match;
+ } else {
+ $if_no_results=true;
+ }// if results
+ } // if query
+ } // loop
+ return $output;
} // end of function
} // end of class
_______________________________________________
Mailing list: https://launchpad.net/~aikiframework-devel
Post to : [email protected]
Unsubscribe : https://launchpad.net/~aikiframework-devel
More help : https://help.launchpad.net/ListHelp