X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=RooJsonOutputTrait.php;h=c307d27dd21ebbf6e68c896ac7f910a2dd9eef0f;hp=9bb3fca3aeb9bca05b4181a638f65e8ce2ea53fc;hb=8cd2a9237c684aa16bc21e3ac6d3793c49c65400;hpb=7ef2351564dc379e8f0ff7954dcf841fef366bb7 diff --git a/RooJsonOutputTrait.php b/RooJsonOutputTrait.php index 9bb3fca3..c307d27d 100644 --- a/RooJsonOutputTrait.php +++ b/RooJsonOutputTrait.php @@ -2,4 +2,209 @@ trait Pman_Core_RooJsonOutputTrait { + function jok($str) + { + if ($this->transObj ) { + $this->transObj->query( connection_aborted() ? 'ROLLBACK' : 'COMMIT'); + } + + $cli = HTML_FlexyFramework::get()->cli; + + if ($cli) { + echo "OK: " .$str . "\n"; + exit; + } + require_once 'Services/JSON.php'; + $json = new Services_JSON(); + + $retHTML = isset($_SERVER['CONTENT_TYPE']) && + preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE']); + + if ($retHTML){ + if (isset($_REQUEST['returnHTML']) && $_REQUEST['returnHTML'] == 'NO') { + $retHTML = false; + } + } else { + $retHTML = isset($_REQUEST['returnHTML']) && $_REQUEST['returnHTML'] !='NO'; + } + + if ($retHTML) { + header('Content-type: text/html'); + echo ""; + // encode html characters so they can be read.. + echo str_replace(array('<','>'), array('\u003c','\u003e'), + $json->encodeUnsafe(array('success'=> true, 'data' => $str))); + echo ""; + exit; + } + + + echo $json->encode(array('success'=> true, 'data' => $str)); + + exit; + } + + + function jerr($str, $errors=array(), $content_type = false) + { + if ($this->transObj) { + $this->transObj->query('ROLLBACK'); + } + + return $this->jerror('ERROR', $str,$errors,$content_type); + } + + function jerror($type, $str, $errors=array(), $content_type = false) // standard error reporting.. + { + if ($type !== false) { + $this->addEvent($type, false, $str); + } + + $cli = HTML_FlexyFramework::get()->cli; + if ($cli) { + echo "ERROR: " .$str . "\n"; + exit; + } + + + if ($content_type == 'text/plain') { + header('Content-Disposition: attachment; filename="error.txt"'); + header('Content-type: '. $content_type); + echo "ERROR: " .$str . "\n"; + exit; + } + + require_once 'Services/JSON.php'; + $json = new Services_JSON(); + + $retHTML = isset($_SERVER['CONTENT_TYPE']) && + preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE']); + + if ($retHTML){ + if (isset($_REQUEST['returnHTML']) && $_REQUEST['returnHTML'] == 'NO') { + $retHTML = false; + } + } else { + $retHTML = isset($_REQUEST['returnHTML']) && $_REQUEST['returnHTML'] !='NO'; + } + + if ($retHTML) { + header('Content-type: text/html'); + echo ""; + echo $json->encodeUnsafe(array( + 'success'=> false, + 'errorMsg' => $str, + 'message' => $str, // compate with exeption / loadexception. + + 'errors' => $errors ? $errors : true, // used by forms to flag errors. + 'authFailure' => !empty($errors['authFailure']), + )); + echo ""; + exit; + } + + if (isset($_REQUEST['_debug'])) { + echo '
'.htmlspecialchars(print_r(array(
+                'success'=> false, 
+                'data'=> array(), 
+                'errorMsg' => $str,
+                'message' => $str, // compate with exeption / loadexception.
+                'errors' => $errors ? $errors : true, // used by forms to flag errors.
+                'authFailure' => !empty($errors['authFailure']),
+            ),true));
+            exit;
+                
+        }
+        
+        echo $json->encode(array(
+            'success'=> false, 
+            'data'=> array(), 
+            'errorMsg' => $str,
+            'message' => $str, // compate with exeption / loadexception.
+            'errors' => $errors ? $errors : true, // used by forms to flag errors.
+            'authFailure' => !empty($errors['authFailure']),
+        ));
+        
+        exit;
+        
+    }
+    
+    function jdata($ar,$total=false, $extra=array(), $cachekey = false)
+    {
+        // should do mobile checking???
+        if ($total == false) {
+            $total = count($ar);
+        }
+        $extra=  $extra ? $extra : array();
+        require_once 'Services/JSON.php';
+        $json = new Services_JSON();
+        
+        $retHTML = isset($_SERVER['CONTENT_TYPE']) && 
+                preg_match('#multipart/form-data#i', $_SERVER['CONTENT_TYPE']);
+        
+        if ($retHTML){
+            if (isset($_REQUEST['returnHTML']) && $_REQUEST['returnHTML'] == 'NO') {
+                $retHTML = false;
+            }
+        } else {
+            $retHTML = isset($_REQUEST['returnHTML']) && $_REQUEST['returnHTML'] !='NO';
+        }
+        
+        if ($retHTML) {
+            
+            header('Content-type: text/html');
+            echo "";
+            // encode html characters so they can be read..
+            echo  str_replace(array('<','>'), array('\u003c','\u003e'),
+                        $json->encodeUnsafe(array('success' =>  true, 'total'=> $total, 'data' => $ar) + $extra));
+            echo "";
+            exit;
+        }
+        
+        
+        // see if trimming will help...
+        if (!empty($_REQUEST['_pman_short'])) {
+            $nar = array();
+            
+            foreach($ar as $as) {
+                $add = array();
+                foreach($as as $k=>$v) {
+                    if (is_string($v) && !strlen(trim($v))) {
+                        continue;
+                    }
+                    $add[$k] = $v;
+                }
+                $nar[] = $add;
+            }
+            $ar = $nar;
+              
+        }
+        
+      
+        $ret =  $json->encode(array('success' =>  true, 'total'=> $total, 'data' => $ar) + $extra);  
+        
+        if (!empty($cachekey)) {
+            
+            $fn = ini_get('session.save_path') . '/json-cache'.date('/Y/m/d').'.'. $cachekey . '.cache.json';
+            if (!file_exists(dirname($fn))) {
+                mkdir(dirname($fn), 0777,true);
+            }
+            file_put_contents($fn, $ret);
+        }
+        echo $ret;
+        exit;
+    }
+    
+    /** a daily cache **/
+    function jdataCache($cachekey)
+    {
+        $fn = ini_get('session.save_path') . '/json-cache'.date('/Y/m/d').'.'. $cachekey . '.cache.json';
+        if (file_exists($fn)) {
+            header('Content-type: application/json');
+            echo file_get_contents($fn);
+            exit;
+        }
+        return false;
+        
+    }
 }
\ No newline at end of file