/** * Read a Marker File Template from FileSystem or from Persistent (Memory) Cache if exists * !!! This is intended for very special usage ... !!! This is used automatically by the render_file_template() and used in combination with render_mixed_template() may produce the same results ... it make non-sense using it with render_template() as this should be used for internal (php) templates as all external templates should be loaded with render_file_template() * * @access private * @internal * * @param STRING $y_file_path :: The relative path to the file markers template * * @return STRING :: The template string * */ public static function read_template_file($y_file_path) { //-- $use_pcache = false; if ((string) SMART_FRAMEWORK_DEBUG_MODE != 'yes') { if (defined('SMART_SOFTWARE_MKTPL_PCACHETIME')) { if (is_int(SMART_SOFTWARE_MKTPL_PCACHETIME)) { if ((int) SMART_SOFTWARE_MKTPL_PCACHETIME >= 0 and (int) SMART_SOFTWARE_MKTPL_PCACHETIME <= 31622400) { // 0 unlimited ; 1 sec .. 366 days $use_pcache = true; } //end if } //end if } //end if } //end if if ($use_pcache === true and SmartPersistentCache::isActive() and SmartPersistentCache::isMemoryBased()) { $the_cache_key = 'tpl__' . Smart::safe_pathname((string) Smart::base_name((string) $y_file_path)) . '__' . sha1((string) $y_file_path); } else { $the_cache_key = ''; } //end if else //-- $tpl = ''; //-- if ((string) $the_cache_key != '') { if (SmartPersistentCache::keyExists('smart-markers-templating', (string) $the_cache_key)) { $tpl = (string) SmartPersistentCache::getKey('smart-markers-templating', (string) $the_cache_key); if ((string) $tpl != '') { //Smart::log_notice('TPL found in cache: '.$y_file_path); return (string) $tpl; // return from persistent cache } //end if } //end if } //end if //-- $tpl = (string) SmartFileSystem::staticread((string) $y_file_path); if ((string) $the_cache_key != '') { if ((string) $tpl != '') { SmartPersistentCache::setKey('smart-markers-templating', (string) $the_cache_key . '__path', (string) $y_file_path, (int) SMART_SOFTWARE_MKTPL_PCACHETIME); // set to persistent cache SmartPersistentCache::setKey('smart-markers-templating', (string) $the_cache_key, (string) $tpl, (int) SMART_SOFTWARE_MKTPL_PCACHETIME); // set to persistent cache } //end if } //end if //-- return (string) $tpl; // return from fs read //-- }
public static function test_redisserver() { global $configs; //-- if (SMART_FRAMEWORK_TESTUNIT_ALLOW_REDIS_TESTS !== true) { return SmartComponents::operation_notice('Test Unit for Redis Server is DISABLED ...'); } //end if //-- //-- if (SmartPersistentCache::isActive()) { //-- $redis_big_content = self::pack_test_archive(); // CREATE THE Test Archive (time not counted) //-- $redis_test_key = 'redis-test-key_' . Smart::uuid_10_num() . '-' . Smart::uuid_36() . '-' . Smart::uuid_45(); $redis_test_value = array('unicode-test' => '"Unicode78źź:ăĂîÎâÂșȘțȚşŞţŢグッド', 'big-key-test' => (string) $redis_big_content, 'random-key' => Smart::uuid_10_str() . '.' . Smart::random_number(1000, 9999)); $redis_test_checkum = sha1(implode("\n", (array) $redis_test_value)); $redis_test_arch_content = SmartUtils::cache_variable_archive($redis_test_value); $redis_test_arch_checksum = sha1($redis_test_arch_content); //-- $tests = array(); $tests[] = '##### Redis / TESTS (Persistent Cache) with a Variable Key-Size of ' . SmartUtils::pretty_print_bytes(strlen($redis_test_arch_content), 2) . ' : #####'; //-- $err = ''; //-- if ((string) $err == '') { $tests[] = 'Building a Test Archive file for Redis Tests (time not counted)'; // archive was previous created, only test here if ((string) $redis_big_content == '') { $err = 'Failed to build the Test Archive file for the Redis Test (see the error log for more details) ...'; } //end if } //end if //-- $time = microtime(true); $tests[] = '++ START Counter ...'; //-- if ((string) $err == '') { $tests[] = 'Building the Cache Archive'; if ((string) $redis_test_arch_content == '') { $err = 'Failed to build the Cache Variable(s) Archive file for the Redis Test (see the error log for more details) ...'; } //end if } //end if //-- if ((string) $err == '') { $tests[] = 'Set a short Redis Key (auto-expire in 3 seconds)'; $redis_set_key = SmartPersistentCache::setKey('redis-server-tests', $redis_test_key, (string) $redis_test_value['unicode-test'], 3); if ($redis_set_key !== true) { $err = 'Redis SetKey (short) returned a non-true result: ' . "\n" . $redis_test_key; } //end if if ((string) $err == '') { $tests[] = 'Wait 5 seconds for Redis Key to expire, then check again if exists (time not counted)'; sleep(5); // wait the Redis Key to Expire $time = (double) $time + 5; // ignore those 5 seconds (waiting time) to fix counter $tests[] = '-- FIX Counter (substract the 5 seconds, waiting time) ...'; if (SmartPersistentCache::keyExists('redis-server-tests', $redis_test_key)) { $err = 'Redis (short) Key does still exists (but should be expired after 5 seconds) and is not: ' . "\n" . $redis_test_key; } //end if } //end if } //end if //-- if ((string) $err == '') { $tests[] = 'Set a long Redis Key (will not expire)'; $redis_set_key = SmartPersistentCache::setKey('redis-server-tests', $redis_test_key, $redis_test_arch_content); if ($redis_set_key !== true) { $err = 'Redis SetKey (long) returned a non-true result: ' . "\n" . $redis_test_key; } //end if } //end if //-- if ((string) $err == '') { $tests[] = 'Check if Redis Key exists (after set)'; if (!SmartPersistentCache::keyExists('redis-server-tests', $redis_test_key)) { $err = 'Redis Key does not exists: ' . "\n" . $redis_test_key; } //end if } //end if //-- if ((string) $err == '') { $tests[] = 'Get Redis Key'; $redis_cached_value = SmartUtils::cache_variable_unarchive(SmartPersistentCache::getKey('redis-server-tests', $redis_test_key)); if (Smart::array_size($redis_cached_value) > 0) { $tests[] = 'Check if Redis Key is valid (array-keys)'; if ((string) $redis_cached_value['unicode-test'] != '' and (string) $redis_cached_value['big-key-test'] != '') { $tests[] = 'Check if Redis Key is valid (checksum)'; if ((string) sha1(implode("\n", (array) $redis_cached_value)) == (string) $redis_test_checkum) { if ($redis_test_value === $redis_cached_value) { $tests[] = 'Unset Redis Key'; $redis_unset_key = SmartPersistentCache::unsetKey('redis-server-tests', $redis_test_key); if ($redis_unset_key === true) { $tests[] = 'Check if Redis Key exists (after unset)'; if (SmartPersistentCache::keyExists('redis-server-tests', $redis_test_key)) { $err = 'Redis Key does exists (after unset) and should not: ' . "\n" . $redis_test_key; } else { // OK } //end if } else { $err = 'Redis UnSetKey returned a non-true result: ' . "\n" . $redis_test_key; } //end if else } else { $err = 'Redis Cached Value is broken: comparing stored value with original value failed on key: ' . "\n" . $redis_test_key; } //end if else } else { $err = 'Redis Cached Value is broken: checksum failed on key: ' . "\n" . $redis_test_key; } //end if else } else { $err = 'Redis Cached Value is broken: array-key is missing after Cache-Variable-Unarchive on key: ' . "\n" . $redis_test_key; } //end if } else { $err = 'Redis Cached Value is broken: non-array value was returned after Cache-Variable-Unarchive on key: ' . "\n" . $redis_test_key; } //end if } //end if //-- $title = 'SmartFramework Redis Server Tests: DONE ...'; //-- $time = 'TOTAL TIME (Except building the test archive) was: ' . (microtime(true) - $time); // substract the 3 seconds waiting time for Redis Key to expire //-- $end_tests = '##### END TESTS ... ' . $time . ' sec. #####'; //-- if ((string) $err == '') { $img_sign = 'lib/core/img/sign_info.png'; $img_check = 'lib/core/img/q_completed.png'; $text_main = Smart::escape_js('<span style="color:#83B953;">Good ... Perfect :: グッド ... パーフェクト</span>'); $text_info = Smart::escape_js('<h2><span style="color:#83B953;">All</span> the SmartFramework Redis Server Operations <span style="color:#83B953;">Tests PASSED on PHP</span><hr></h2><span style="font-size:14px;">' . Smart::nl_2_br(Smart::escape_html(implode("\n" . '* ', $tests) . "\n" . $end_tests)) . '</span>'); } else { $img_sign = 'lib/core/img/sign_error.png'; $img_check = 'lib/core/img/q_warning.png'; $text_main = Smart::escape_js('<span style="color:#FF5500;">An ERROR occured ... :: エラーが発生しました ...</span>'); $text_info = Smart::escape_js('<h2><span style="color:#FF5500;">A test FAILED</span> when testing Redis Server Operations.<span style="color:#FF5500;"><hr>FAILED Test Details</span>:</h2><br><span style="font-size:14px;"><pre>' . Smart::escape_html($err) . '</pre></span>'); } //end if else //-- } else { //-- $title = 'SmartFramework Redis Server Tests - Redis Server was NOT SET ...'; //-- $img_sign = 'lib/core/img/sign_info.png'; $img_check = 'lib/core/img/q_warning.png'; $text_main = Smart::escape_js('<span style="color:#778899;">No Redis Server Tests performed ...</span>'); $text_info = '<h2>The current configuration have not set the Redis Server ...</h2>'; //-- } //end if //-- //-- $html = <<<HTML <h1>{$title}</h1> <script type="text/javascript"> \tSmartJS_BrowserUtils.alert_Dialog( \t\t'<img src="{$img_sign}" align="right"><h1>{$text_main}</h1><hr><span style="color:#333333;"><img src="{$img_check}" align="right">{$text_info}<br>', \t\t'', \t\t'Redis Server Test Suite for SmartFramework: PHP', \t\t'725', \t\t'480' \t); </script> HTML; //-- //-- return $html; //-- }
public function Run() { //-- require_once 'lib/core/lib_smart_test_suite.php'; // test suite //-- //-- SmartSession::start(); // start the session //-- //-- if (SmartPersistentCache::isActive()) { SmartPersistentCache::getKey('test-unit', 'version'); // just test if redis re-uses the connection ... } //end if //-- //-- $op = $this->RequestVarGet('op', 'testunit.main', 'string'); //-- switch ((string) $op) { case 'testunit.phpinfo': //-- $this->PageViewSetCfg('rawpage', true); ob_start(); phpinfo(); $main = ob_get_contents(); ob_end_clean(); break; case 'testunit.captcha': //-- $this->PageViewSetCfg('rawpage', 'yes'); // should work both: true or 'yes' $this->PageViewSetCfg('rawmime', 'image/png'); $this->PageViewSetCfg('rawdisp', 'inline'); $main = SmartTestSuite::test_captcha('png'); //-- break; case 'testunit.post-form-by-ajax': //-- sleep(1); $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::post__answer__by__ajax($this->RequestVarGet('tab'), $this->RequestVarGet('frm')); //-- break; case 'testunit.strings-test': //-- sleep(1); $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_strings(); //-- break; case 'testunit.crypto-test': //-- sleep(1); $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_crypto(); //-- break; case 'testunit.filesys-test': //-- sleep(1); $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_fs(); //-- break; case 'testunit.pgsql-server-test': //-- sleep(1); $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_pgsqlserver(); //-- break; case 'testunit.redis-server-test': //-- sleep(1); $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_redisserver(); //-- break; case 'testunit.json-sqlite3-smartgrid': //-- $this->PageViewSetCfg('rawpage', true); //-- $ofs = $this->RequestVarGet('ofs', 0, 'integer+'); $sortby = $this->RequestVarGet('sortby', 'id', 'string'); $sortdir = $this->RequestVarGet('sortdir', 'ASC', 'string'); $sorttype = $this->RequestVarGet('sorttype', 'text', 'string'); $src = $this->RequestVarGet('src', '', 'string'); // filter var //-- $main = SmartTestSuite::test_sqlite3_json_smartgrid($ofs, $sortby, $sortdir, $sorttype, $src); //-- break; case 'testunit.html-editor': //-- $this->PageViewSetCfg('template-file', 'template-modal.htm'); $main = SmartComponents::js_init_away_page(); $main .= SmartComponents::js_init_html_area(); $main .= SmartComponents::js_draw_html_area('test_html_area', 'test_html_area', '', '920px', '500px'); $main .= '<button class="ux-button" onClick="alert($(\'#test_html_area\').val());">Get HTML Source</button>'; //-- break; case 'testunit.code-editor': //-- $this->PageViewSetCfg('template-file', 'template-modal.htm'); $main = SmartComponents::js_init_away_page('The changes will be lost !'); $main .= SmartComponents::js_init_editarea(); $main .= SmartComponents::js_draw_editarea('test_code_editor', 'test_code_editor', '', 'html', true, '920px', '450px'); //-- break; case 'testunit.load-url-or-file': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::load__url__or__file('http://www.unix-world.org'); //-- break; case 'testunit.barcodes-qrcode': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode2d_qrcode(); //-- break; case 'testunit.barcodes-semcode': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode2d_datamatrix(); //-- break; case 'testunit.barcodes-pdf417': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode2d_pdf417(); //-- break; case 'testunit.barcodes-code128': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode1d_128B(); //-- break; case 'testunit.barcodes-code93': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode1d_93(); //-- break; case 'testunit.barcodes-code39': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode1d_39(); //-- break; case 'testunit.barcodes-rm4kix': //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_barcode1d_kix(); //-- break; case 'testunit.charts-biz': //-- $this->PageViewSetCfg('rawpage', true); $this->PageViewSetCfg('expires', 120); // cache expire test //-- $chart = new SmartImgBizCharts('matrix', 'Marketing Chart', array('Chart 1' => array('red label' => array('x' => Smart::random_number(5, 7), 'y' => Smart::random_number(100, 120), 'z' => Smart::random_number(45, 75), 'color' => '#FF3300'), 'blue' => array('x' => Smart::random_number(100, 115), 'y' => Smart::random_number(200, 210), 'z' => Smart::random_number(20, 50), 'color' => '#003399'), 'green' => array('x' => Smart::random_number(150, 175), 'y' => Smart::random_number(250, 270), 'z' => Smart::random_number(2, 8), 'color' => '#33CC33', 'labelcolor' => '#11AA11'), 'yellow' => array('x' => Smart::random_number(400, 420), 'y' => Smart::random_number(70, 90), 'z' => Smart::random_number(50, 90), 'color' => '#FFCC00'), 'default' => array('x' => Smart::random_number(300, 325), 'y' => Smart::random_number(300, 320)))), 'png'); $chart->width = 500; $chart->height = 500; $chart->axis_x_label = 'Relative Market Share'; $chart->axis_y_label = 'Market Growth Rate'; //-- $this->PageViewSetCfg('rawmime', $chart->mime_header()); $this->PageViewSetCfg('rawdisp', $chart->disposition_header()); $main = $chart->generate(); //-- break; case 'testunit.charts-gfx': //-- $this->PageViewSetCfg('rawpage', true); //-- $showgraph2 = Smart::random_number(0, 1); $showgraphdepths = Smart::random_number(0, 1); $showtype = Smart::random_number(1, 6); switch ((string) $showtype) { case 1: $mode = 'vbars'; break; case 2: $mode = 'hbars'; break; case 3: $mode = 'dots'; break; case 4: $mode = 'lines'; break; case 5: $mode = 'pie'; break; case 6: default: $mode = 'donut'; } //end if //-- $chart = new SmartImgGfxCharts($mode, "Type [" . $mode . "]", array(array('x' => "white", 'y' => Smart::random_number(10, 90), 'z' => Smart::random_number(10, 90), 'w' => 10, 'v' => '#ECECEC'), array('x' => "red", 'y' => 22.45, 'z' => Smart::random_number(10, 90), 'w' => 25, 'v' => '#FF3300'), array('x' => "blue", 'y' => Smart::random_number(10, 90), 'z' => Smart::random_number(10, 90), 'w' => 7, 'v' => '#003399'), array('x' => "yellow", 'y' => Smart::random_number(10, 90), 'z' => Smart::random_number(10, 90), 'w' => 17, 'v' => '#FFCC00'), array('x' => "green", 'y' => Smart::random_number(10, 90), 'z' => Smart::random_number(10, 90), 'w' => 31, 'v' => '#33CC33'), array('x' => "black", 'y' => Smart::random_number(10, 90), 'z' => Smart::random_number(10, 90), 'w' => 17, 'v' => '#333333')), 'png', $showgraph2, $showgraphdepths); $chart->axis_x = 'X-Axis'; $chart->axis_y = 'Y-Axis'; //-- $this->PageViewSetCfg('rawmime', $chart->mime_header()); $this->PageViewSetCfg('rawdisp', $chart->disposition_header()); $main = $chart->generate(); //-- break; case 'testunit.ods': //-- $this->PageViewSetCfg('rawpage', true); $oo = new SmartExportToOpenOffice(); $this->PageViewSetCfg('rawmime', $oo->ODS_Mime_Header()); $this->PageViewSetCfg('rawdisp', $oo->ODS_Disposition_Header('myfile.ods', 'attachment')); $main = $oo->ODS_SpreadSheet('A Table', array('<column 1>', 'column " 2', 'column & 3'), array('data 1.1', 'data 1.2', 1.3, 'data 2.1', 'data 2.2', 2.31), array('', '', 'decimal4')); //-- break; case 'testunit.json-test': //-- $mixed_data = ['Unicode Text' => '"Unicode78źź:ăĂîÎâÂșȘțȚşŞţŢグッド\'#@<tag>!$%^&*()-_=+' . "\r\n\t" . '</tag>', 'Numbers' => 1234567890.99, 'Boolean TRUE:' => true, 'Boolean FALSE:' => false]; //-- $main = '<h1> Json Test</h1>'; $main .= '<pre style="background:#ECECEC; border:1px solid #CCCCCC; line-height:32px; padding:8px;">'; $main .= '<b>Default (Unicode Unescaped) Json:</b>' . "\n" . Smart::json_encode($mixed_data) . "\n"; $main .= '<hr>'; $main .= '<b>Default (Unicode Unescaped) Json / Pretty Print:</b>' . "\n" . Smart::json_encode($mixed_data, true) . "\n"; $main .= '<hr>'; $main .= '<b>Unicode Escaped Json:</b>' . "\n" . Smart::json_encode($mixed_data, false, false) . "\n"; $main .= '<hr>'; $main .= '<b>Unicode Escaped Json / Pretty Print:</b>' . "\n" . Smart::json_encode($mixed_data, true, false) . "\n"; $main .= '</pre>'; //-- break; case 'testunit.interractions': //-- $this->PageViewSetCfg('template-file', 'template-modal.htm'); $main = SmartTestSuite::test_interractions($this->RequestVarGet('mode')); //-- break; case 'testunit.autocomplete': //-- $src = $this->RequestVarGet('src', '', 'string'); //-- $this->PageViewSetCfg('rawpage', true); $main = SmartTestSuite::test_sqlite3_json_autocomplete($src); //-- break; case 'testunit.main': //-- $is_modal = false; if ($this->IfRequestModalPopup() or $this->IfRequestPrintable()) { $is_modal = true; $this->PageViewSetCfg('template-file', 'template-modal.htm'); } //end if //-- $main = SmartTestSuite::main_screen($this->RequestVarGet('tab'), $this->RequestVarGet('frm'), $this->RequestVarGet('testformdata')); //-- if (!$is_modal) { SmartTestSuite::test_load_libs(); // just for testing all libs if ($this->IfDebug()) { $this->SetDebugData('TestUnit.Main', 'Loading all staticload libs at once for test purposes ...'); } //end if } //end if //-- break; default: //-- $this->PageViewSetCfg('error', 'Invalid TestUnit Operation ! ...'); return 400; //-- } //end switch //-- //-- $this->PageViewSetVars(array('title' => 'Test Suite', 'main' => $main)); //-- }
/** * Set a Page into the (Persistent) Cache. * * @param STRING $storage_namespace :: the cache storage namespace, used to group keys * @param STRING $unique_key :: the unique cache key * @param MIXED $content :: the cache content as a STRING or an ARRAY with Page Value(s) / Page Setting(s) * @param INTEGER $expiration :: The page cache expiration in seconds ; 0 will not expire * * @return BOOL :: TRUE if the PersistentCache is active and value was set ; FALSE in the rest of the cases */ public final function PageSetInCache($storage_namespace, $unique_key, $content, $expiration) { //-- if (empty($content)) { return false; } //end if //-- if (!SmartPersistentCache::isActive()) { return false; } //end if //-- $cache = SmartUtils::cache_variable_archive($content); // mixed (number / string / array) if ((string) $cache == '') { return false; } //end if //-- return SmartPersistentCache::setKey((string) $storage_namespace, (string) $unique_key, (string) $cache, (int) $expiration); //-- }
private static function setInPersistentCache($the_cache_key, $y_data_arr) { //-- if (SmartPersistentCache::isActive() and SmartPersistentCache::isMemoryBased()) { if (Smart::array_size($y_data_arr) > 0) { SmartPersistentCache::setKey('smart-regional-texts', (string) $the_cache_key, (string) Smart::seryalize((array) $y_data_arr)); } //end if } //end if //-- }