示例#1
0
 function testScreenPreview()
 {
     require_code('validation');
     require_lang('validation');
     global $DONE_HEADER, $RECORD_TEMPLATES_USED, $RECORDED_TEMPLATES_USED;
     $RECORD_TEMPLATES_USED = true;
     $only_do_these = array();
     $lists = find_all_previews__by_template();
     foreach ($lists as $template => $list) {
         $temp_name = basename($template, '.tpl');
         if (count($only_do_these) != 0) {
             if (!in_array($temp_name, $only_do_these)) {
                 continue;
             }
         }
         if ($temp_name == 'tempcode_test') {
             continue;
         }
         if (is_plain_text_template($temp_name)) {
             continue;
         }
         $hook = $list[0];
         $function = $list[1];
         if (is_file(get_file_base() . '/_tests/screens_tested/' . $function)) {
             continue;
         }
         // To make easier to debug through
         if (function_exists('set_time_limit')) {
             @set_time_limit(0);
         }
         $DONE_HEADER = false;
         $RECORDED_TEMPLATES_USED = array();
         $out = render_screen_preview($template, $hook, $function);
         $flag = false;
         foreach ($lists as $template_2 => $list_2) {
             $temp_name_2 = basename($template_2, '.tpl');
             if (count($only_do_these) != 0) {
                 if (!in_array($temp_name_2, $only_do_these)) {
                     continue;
                 }
             }
             if ($temp_name_2 == 'tempcode_test') {
                 continue;
             }
             if (is_plain_text_template($temp_name_2)) {
                 continue;
             }
             if ($list_2[1] == $function) {
                 if ($temp_name_2 == 'FORM_STANDARD_END' || $temp_name_2 == 'MENU_LINK_PROPERTIES') {
                     continue;
                 }
                 $this->assertTrue(in_array($temp_name_2, $RECORDED_TEMPLATES_USED), $template_2 . ' not used in preview as claimed in ' . $hook . '/' . $function);
                 if (!in_array($temp_name_2, $RECORDED_TEMPLATES_USED)) {
                     $flag = true;
                 }
             }
         }
         if (!is_object($out)) {
             fatal_exit('Claimed screen for ' . $template . ' is not defined');
         }
         $_out = $out->evaluate();
         $result = check_xhtml($_out, false, false, false, true, true, false, false);
         if (!is_null($result) && count($result['errors']) == 0) {
             $result = NULL;
         }
         $this->assertTrue(is_null($result), $hook . '/' . $temp_name);
         if (!is_null($result)) {
             require_code('view_modes');
             display_validation_results($_out, $result, false, false);
         } else {
             if (!$flag) {
                 fclose(fopen(get_file_base() . '/_tests/screens_tested/' . $function, 'wb'));
                 sync_file(get_file_base() . '/_tests/screens_tested/' . $function);
                 fix_permissions(get_file_base() . '/_tests/screens_tested/' . $function);
             }
         }
     }
 }
示例#2
0
/**
 * Shows the preview of a screen
 *
 * @param  ID_TEXT		The template to be previewed
 * @param  ?ID_TEXT		The hook the preview is in (NULL: search)
 * @param  ID_TEXT		The name of the screen preview
 * @return tempcode		The previewed screen
 */
function render_screen_preview($template, $hook, $function)
{
    if (is_null($hook)) {
        $hooks = find_all_hooks('systems', 'addon_registry');
        foreach (array_keys($hooks) as $hook) {
            require_code('hooks/systems/addon_registry/' . $hook);
            $ob = object_factory('Hook_addon_registry_' . $hook);
            if (method_exists($ob, 'tpl_previews')) {
                $previews = $ob->tpl_previews();
                foreach ($previews as $_function) {
                    if ($function == 'tpl_preview__' . $_function) {
                        break 2;
                    }
                }
            }
        }
    }
    require_code('hooks/systems/addon_registry/' . $hook);
    $ob = object_factory('Hook_addon_registry_' . $hook);
    // Load all ini/js/css
    $files = $ob->get_file_list();
    foreach ($files as $file) {
        if (substr($file, -4) == '.ini' && substr($file, 0, 8) == 'lang/EN/') {
            require_lang(basename($file, '.ini'));
        }
        if (substr($file, -4) == '.css' && strpos($file, '/') === false) {
            require_css(basename($file, '.css'));
        }
        if (substr($file, -4) == '.tpl' && strpos($file, '/') === false && substr($file, 0, 11) == 'JAVASCRIPT_' && $file != 'JAVASCRIPT_NEED.tpl' && $file != 'JAVASCRIPT_NEED_INLINE.tpl') {
            require_javascript(strtolower(basename($file, '.tpl')));
        }
    }
    $temp_name = substr($template, 0, -4);
    if (is_full_screen_template($temp_name)) {
        $complete_html = true;
    } else {
        $complete_html = false;
    }
    if (is_plain_text_template($temp_name)) {
        @header('Content-type: text/plain');
        $text = true;
    } else {
        $text = false;
    }
    // Render preview
    $previews = call_user_func(array($ob, $function));
    if ($text) {
        $previews[0] = do_template('WITH_WHITESPACE', array('CONTENT' => $previews[0]));
    }
    $tmp = substr($function, 13);
    if ($complete_html && get_page_name() == 'admin_themes') {
        exit($previews[0]->evaluate());
    }
    return $previews[0];
}