function testRepeatConsistency() { global $NON_CACHEABLE_SYMBOLS, $EXTRA_SYMBOLS, $DOCUMENT_HELP, $HTTP_STATUS_CODE, $PREPROCESSABLE_SYMBOLS, $SHIFT_VARIABLES, $CYCLES, $TEMPCODE_SETGET, $LOADED_TPL_CACHE, $META_DATA; $NON_CACHEABLE_SYMBOLS = array('CSS_TEMPCODE' => 1, 'JS_TEMPCODE' => 1); global $HAS_KEEP_IN_URL; $_GET['wide'] = '1'; $HAS_KEEP_IN_URL = NULL; $lists = find_all_previews__by_screen(); foreach ($lists as $function => $tpls) { $template = $tpls[0]; $hook = NULL; if (is_file(get_file_base() . '/_tests/screens_tested/consistency__' . $function)) { continue; } // To make easier to debug through if (function_exists('set_time_limit')) { @set_time_limit(0); } init__lorem(); $META_DATA = array(); $SHIFT_VARIABLES = array(); $CYCLES = array(); $TEMPCODE_SETGET = array(); $LOADED_TPL_CACHE = array(); $out1 = render_screen_preview($template, $hook, $function); $_out1 = $out1->evaluate(); init__lorem(); $META_DATA = array(); $SHIFT_VARIABLES = array(); $CYCLES = array(); $TEMPCODE_SETGET = array(); $LOADED_TPL_CACHE = array(); $out2 = render_screen_preview($template, $hook, $function); $_out2 = $out2->evaluate(); $different = $_out1 != $_out2; $this->assertFalse($different, 'Screen preview not same each time, ' . $function); if (!$different) { fclose(fopen(get_file_base() . '/_tests/screens_tested/consistency__' . $function, 'wb')); sync_file(get_file_base() . '/_tests/screens_tested/consistency__' . $function); fix_permissions(get_file_base() . '/_tests/screens_tested/consistency__' . $function); } else { $myfile = fopen(get_file_base() . '/_tests/screens_tested/v1__', 'wb'); fwrite($myfile, $_out1); fclose($myfile); sync_file(get_file_base() . '/_tests/screens_tested/v1__'); fix_permissions(get_file_base() . '/_tests/screens_tested/v1__'); $myfile = fopen(get_file_base() . '/_tests/screens_tested/v2__', 'wb'); fwrite($myfile, $_out2); fclose($myfile); sync_file(get_file_base() . '/_tests/screens_tested/v2__'); fix_permissions(get_file_base() . '/_tests/screens_tested/v2__'); require_code('diff'); var_dump(diff_simple_2($_out1, $_out2)); exit('Error!'); } unset($out1); unset($out2); } }
/** * The UI for editing a CEDI page. * * @return tempcode The UI. */ function edit_page() { $title = get_page_title('CEDI_EDIT_PAGE'); $__id = get_param('id', '', true); if ($__id == '' || strpos($__id, '/') !== false) { $_id = get_param_cedi_chain('id'); $id = intval($_id[0]); } else { $id = intval($__id); } check_edit_permission('cat_low', NULL, array('seedy_page', $id)); if (!has_category_access(get_member(), 'seedy_page', strval($id))) { access_denied('CATEGORY_ACCESS'); } $pages = $GLOBALS['SITE_DB']->query_select('seedy_pages', array('*'), array('id' => $id), '', 1); if (!array_key_exists(0, $pages)) { warn_exit(do_lang_tempcode('MISSING_RESOURCE')); } $page = $pages[0]; $page_title = get_translated_text($page['title']); $description = get_translated_text($page['description']); $_description = get_translated_tempcode($page['description']); $redir_url = get_param('redirect', NULL); if (is_null($redir_url)) { $_redir_url = build_url(array('page' => 'cedi', 'type' => 'misc', 'id' => get_param('id', false, true) == strval(db_get_first_id()) ? NULL : get_param('id', false, true)), get_module_zone('cedi')); $redir_url = $_redir_url->evaluate(); } $edit_url = build_url(array('page' => '_SELF', 'redirect' => $redir_url, 'id' => get_param('id', false, true), 'type' => '_edit_page'), '_SELF'); list($fields, $fields2, $hidden) = $this->get_page_fields($page_title, $page['notes'], $page['hide_posts'], $id); require_code('seo2'); $fields2->attach(seo_get_fields('seedy_page', strval($id))); if (addon_installed('awards')) { // Awards? require_code('awards'); $fields2->attach(get_award_fields('seedy_page', strval($id))); } if (has_delete_permission('cat_low', get_member(), NULL, NULL, array('seedy_page', $id)) && $id != db_get_first_id()) { $fields2->attach(do_template('FORM_SCREEN_FIELD_SPACER', array('TITLE' => do_lang_tempcode('ACTIONS')))); $fields2->attach(form_input_tick(do_lang_tempcode('DELETE'), do_lang_tempcode('DESCRIPTION_DELETE'), 'delete', false)); } $restore_from = get_param_integer('restore_from', -1); if ($restore_from != -1) { $description = $GLOBALS['SITE_DB']->query_value('translate_history', 'text_original', array('id' => $restore_from, 'lang_id' => $page['description'])); // Double selection to stop hacking $_description = NULL; } $posting_form = get_posting_form(do_lang('SAVE'), $description, $edit_url, new ocp_tempcode(), $fields, do_lang_tempcode('PAGE_TEXT'), '', $fields2, $_description, NULL, NULL, false); // Revision history $revision_history = new ocp_tempcode(); $revisions = $GLOBALS['SITE_DB']->query_select('translate_history', array('*'), array('lang_id' => $page['description']), 'ORDER BY action_time DESC'); $last_description = $description; foreach ($revisions as $revision) { $time = $revision['action_time']; $date = get_timezoned_date($time); $editor = $GLOBALS['FORUM_DRIVER']->get_username($revision['action_member']); $restore_url = build_url(array('page' => '_SELF', 'type' => 'edit_page', 'id' => get_param('id', false, true), 'restore_from' => $revision['id']), '_SELF'); $size = strlen($revision['text_original']); require_code('diff'); if (function_exists('diff_simple_2')) { $rendered_diff = diff_simple_2($revision['text_original'], $last_description); $last_description = $revision['text_original']; $revision_history->attach(do_template('REVISION_HISTORY_LINE', array('_GUID' => 'a46de8a930ecfb814695a50b1c4931ac', 'RENDERED_DIFF' => $rendered_diff, 'EDITOR' => $editor, 'DATE' => $date, 'DATE_RAW' => strval($time), 'RESTORE_URL' => $restore_url, 'URL' => '', 'SIZE' => clean_file_size($size)))); } } if (!$revision_history->is_empty() && $restore_from == -1) { $revision_history = do_template('REVISION_HISTORY_WRAP', array('_GUID' => '1fc38d9d7ec57af110759352446e533d', 'CONTENT' => $revision_history)); } elseif (!$revision_history->is_empty()) { $revision_history = do_template('REVISION_RESTORE'); } list($warning_details, $ping_url) = handle_conflict_resolution(); $tree = cedi_breadcrumbs(get_param('id', false, true), NULL, true, true); breadcrumb_add_segment($tree, do_lang_tempcode('CEDI_EDIT_PAGE')); breadcrumb_set_parents(array(array('_SELF:_SELF:edit_page', do_lang_tempcode('CHOOSE')))); return do_template('POSTING_SCREEN', array('_GUID' => 'de53b8902ab1431e0d2d676f7d5471d3', 'PING_URL' => $ping_url, 'WARNING_DETAILS' => $warning_details, 'REVISION_HISTORY' => $revision_history, 'POSTING_FORM' => $posting_form, 'HIDDEN' => $hidden, 'TITLE' => $title, 'TEXT' => paragraph(do_lang_tempcode('CEDI_EDIT_PAGE_TEXT')))); }
function testTempcode() { $nonempty = paragraph('ignore'); $tpl = do_template('tempcode_test', array('EMPTY1' => '', 'EMPTY2' => new ocp_tempcode(), 'NONEMPTY' => $nonempty, 'PASSED' => 'This is a passed parameter', 'SIMPLE_ARRAY' => array('1', '2', '3'), 'ARRAY' => array(array('a' => 'A1', 'b' => 'B1', 'c' => 'C1'), array('a' => 'A2', 'b' => 'B2', 'c' => 'C2'), array('a' => 'A3', 'b' => 'B3', 'c' => 'C3'), array('a' => 'A4', 'b' => 'B4', 'c' => 'C4')))); $got = $tpl->evaluate(); $expected = '<h1>Tempcode tests</h1> <h2>Escaping</h2> <p> \\\'Hello\\\' </p> <p> \\"Hello\\" </p> <p> Hello World </p> <p> Hello\\n World </p> <p> \\[html] </p> <p> foo%3Dbar </p> <!-- <p> <strong>Test<\\/strong></strong> </p> --> <h2>Environmental variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>$MOBILE</td> <td>0</td> </tr> <tr> <td>$OCF</td> <td>1</td> </tr> </tbody></table> <h2>Computational variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>$CYCLE,my_cycle,1,2</td> <td>1</td> </tr> <tr> <td>$CYCLE,my_cycle,1,2</td> <td>2</td> </tr> <tr> <td>$CYCLE,my_cycle,1,2</td> <td>1</td> </tr> <tr> <td>$FROM_TIMESTAMP,Y-m-d,33424322</td> <td>1971-01-22</td> </tr> <tr> <td>$IS_NON_EMPTY,</td> <td>0</td> </tr> <tr> <td>$IS_NON_EMPTY,a</td> <td>1</td> </tr> <tr> <td>$IS_EMPTY,</td> <td>1</td> </tr> <tr> <td>$IS_EMPTY,a</td> <td>0</td> </tr> <tr> <td>$NEGATE,3</td> <td>-3</td> </tr> <tr> <td>$OBFUSCATE,chris@ocportal.com (check HTML source to see if it is obfuscated)</td> <td>chris@ocportal.com</td> </tr> <tr> <td>$FIX_ID,3+2</td> <td>3_plus_2</td> </tr> <tr> <td>$SHIFT_DECODE,foobar</td> <td></td> </tr> </tbody></table> <h2>Array variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>+COUNT,SIMPLE_ARRAY</td> <td>3</td> </tr> <tr> <td>+IMPLODE, ,SIMPLE_ARRAY</td> <td>1 2 3</td> </tr> <tr> <td>+OF,SIMPLE_ARRAY,1</td> <td>2</td> </tr> </tbody></table> <h2>String variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>$WCASE,I am a Mushroom</td> <td>I Am A Mushroom</td> </tr> <tr> <td>$LCASE,I am a Mushroom</td> <td>i am a mushroom</td> </tr> <tr> <td>$UCASE,I am a Mushroom</td> <td>I AM A MUSHROOM</td> </tr> <tr> <td>$REPLACE,a,b,apple</td> <td>bpple</td> </tr> <tr> <td>$AT,apple,3</td> <td>l</td> </tr> <tr> <td>$SUBSTR,apple,1,2</td> <td>pp</td> </tr> <tr> <td>$LENGTH,apple</td> <td>5</td> </tr> <tr> <td>$WORDWRAP,i love to eat cheese,5</td> <td>i<br />love<br />to<br />eat<br />cheese</td> </tr> <tr> <td>$TRUNCATE_LEFT,i love to eat cheese,5</td> <td>i…</td> </tr> <tr> <td>$TRUNCATE_RIGHT,i love to eat cheese,5</td> <td>…t cheese</td> </tr> <tr> <td>$TRUNCATE_SPREAD,i love to eat cheese,5</td> <td>i…se</td> </tr> <tr> <td>$ESCAPE,Bill & Julie,ENTITY_ESCAPED</td> <td>Bill & Julie</td> </tr> </tbody></table> <h2>Arithmetical variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>$MULT,2,3</td> <td>6</td> </tr> <tr> <td>$ROUND,3.23,1</td> <td>3.2</td> </tr> <tr> <td>$MAX,3,2</td> <td>3</td> </tr> <tr> <td>$MIN,3,2</td> <td>2</td> </tr> <tr> <td>$MOD,-2</td> <td>2</td> </tr> <tr> <td>$MOD,2</td> <td>2</td> </tr> <tr> <td>$REM,3,2</td> <td>1</td> </tr> <tr> <td>$DIV,3,2</td> <td>1</td> </tr> <tr> <td>$SUBTRACT,3,2</td> <td>1</td> </tr> <tr> <td>$ADD,3,2</td> <td>5</td> </tr> </tbody></table> <h2>Logical variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>$NOT,1</td> <td>0</td> </tr> <tr> <td>$OR,1,0</td> <td>1</td> </tr> <tr> <td>$OR,0,0</td> <td>0</td> </tr> <tr> <td>$AND,1,0</td> <td>0</td> </tr> <tr> <td>$AND,1,1</td> <td>1</td> </tr> <tr> <td>$EQ,3,3</td> <td>1</td> </tr> <tr> <td>$EQ,3,2</td> <td>0</td> </tr> <tr> <td>$NEQ,3,3</td> <td>0</td> </tr> <tr> <td>$NEQ,3,2</td> <td>1</td> </tr> <tr> <td>$LT,1,2</td> <td>1</td> </tr> <tr> <td>$LT,2,1</td> <td>0</td> </tr> <tr> <td>$GT,1,2</td> <td>0</td> </tr> <tr> <td>$GT,2,1</td> <td>1</td> </tr> </tbody></table> <h2>Variable variables</h2> <table summary="Table with headers in left column and values or settings in right column"><tbody> <tr> <td>$ISSET,test</td> <td>0</td> </tr> <tr> <td>$INIT,test,2</td> <td></td> </tr> <tr> <td>$GET,test</td> <td>2</td> </tr> <tr> <td>$INIT,test,3</td> <td></td> </tr> <tr> <td>$GET,test</td> <td>2</td> </tr> <tr> <td>$SET,test,3</td> <td></td> </tr> <tr> <td>$GET,test</td> <td>3</td> </tr> <tr> <td>$INC,test</td> <td></td> </tr> <tr> <td>$GET,test</td> <td>4</td> </tr> <tr> <td>$DEC,test</td> <td></td> </tr> <tr> <td>$GET,test</td> <td>3</td> </tr> <tr> <td>$ISSET,test</td> <td>1</td> </tr> </tbody></table> <p> Putting #anchor onto URL should cause jump to here.<a name="anchor" id="anchor"></a> </p> <h2>Directives</h2> <p> IF_PASSED true positive (good) </p> <p> IF_PASSED true negative (good) </p> <p> IF_EMPTY true positive (string) (good) </p> <p> IF_EMPTY false negative (tempcode) (good) </p> <p> NOT Adjacent to own codenamed template (but adjacent/under something) </p> bar <p> IF true positive (good) </p> {$BASE_URL} <p> Should see this text 3 times. </p> <p> Should see this text 3 times. </p> <p> Should see this text 3 times. </p> <table><tbody> <tr> <td> </td> <td> </td> </tr><tr> <td> </td> <td> </td> </tr> </tbody></table>'; $ok = preg_replace('#\\s#', '', $got) == preg_replace('#\\s#', '', $expected); $this->assertTrue($ok); if (!$ok) { require_code('diff'); echo diff_simple_2($got, $expected, true); } }
if ($theme_new != $theme_old) { $manual_changes['css_diff'][basename($override_file, 'editfrom')] = diff_simple_2($theme_old, $theme_new, true); } } } } if (substr($file, -4) == '.php') { $matches = array(); if (preg_match('#\\n(\\t*)function install(\\_ocf)?\\([^\\n]*\\)\\n\\1\\{\\n(.*)\\n\\1\\}#sU', $old, $matches) != 0) { $old_install_code = $matches[3]; $new_install_code = ''; if (preg_match('#\\n(\\t*)function install(\\_ocf)?\\([^\\n]*\\)\\n\\1\\{\\n(.*)\\n\\1\\}#sU', $new, $matches) != 0) { $new_install_code = $matches[3]; } if ($new_install_code != $old_install_code) { $manual_changes['install_diff'][$file] = diff_simple_2($old_install_code, $new_install_code, true); } } } } } } else { if (!should_ignore_file($file, IGNORE_CUSTOM_DIR_CONTENTS | IGNORE_HIDDEN_FILES | IGNORE_THEMES | IGNORE_CUSTOM_ZONES | IGNORE_REVISION_FILES | IGNORE_EDITFROM_FILES)) { $manual_changes['maybe_delete'][$file] = NULL; } } } echo ' <h2>Advice</h2> '; foreach (array('maybe_delete' => 'The following files might need deleting', 'css_diff' => 'The following CSS/tpl changes have happened (diff; may need applying to overridden templates)', 'install_diff' => 'The following install code changes have happened (diff) – isolate to <kbd>data_custom/execute_temp.php</kbd> to make an adhoc upgrader') as $d => $message) {