/** * public * main process to generate report and store result in 3 arrays */ public function generateRpt() { $checksDAO = new ChecksDAO(); // generate section details foreach ($this->errors as $error) { $row = $checksDAO->getCheckByID($error["check_id"]); if ($row["confidence"] == KNOWN) { // no decision to make on known problems $this->nr_known_problems++; $this->group_known_problems[] = $this->generate_problem_section($error["check_id"], $error["line_number"], $error["col_number"], $error["html_code"], $error["image"], $error["image_alt"], $error["css_code"], _AC($row["err"]), _AC($row["how_to_repair"]), '', IS_ERROR); } else { if ($row["confidence"] == LIKELY) { if ($this->user_link_id == '') { $this->group_likely_problems_no_decision[] = $this->generate_problem_section($error["check_id"], $error["line_number"], $error["col_number"], $error["html_code"], $error["image"], $error["image_alt"], $error["css_code"], _AC($row["err"]), _AC($row["how_to_repair"]), '', IS_WARNING); $this->nr_likely_problems++; } else { $this->generate_cell_with_decision($row, $error["line_number"], $error["col_number"], $error["html_code"], $error['image'], $error["image_alt"], IS_WARNING); } } else { if ($row["confidence"] == POTENTIAL) { if ($this->user_link_id == '') { $this->group_potential_problems_no_decision[] = $this->generate_problem_section($error["check_id"], $error["line_number"], $error["col_number"], $error["html_code"], $error["image"], $error["image_alt"], $error["css_code"], _AC($row["err"]), _AC($row["how_to_repair"]), '', IS_INFO); $this->nr_potential_problems++; } else { $this->generate_cell_with_decision($row, $error["line_number"], $error["col_number"], $error["html_code"], $error['image'], $error["image_alt"], IS_INFO); } } } } } $this->group_likely_problems['no_decision'] = $this->group_likely_problems_no_decision; $this->group_likely_problems['with_decision'] = $this->group_likely_problems_with_decision; $this->group_potential_problems['no_decision'] = $this->group_potential_problems_no_decision; $this->group_potential_problems['with_decision'] = $this->group_potential_problems_with_decision; return array($this->group_known_problems, $this->group_likely_problems, $this->group_potential_problems); }
/** * public * main process to generate report in html format */ public function generateRpt() { global $msg; // user_link_id must be given to show decision section if ((!isset($this->user_link_id) || $this->user_link_id == '') && $this->allow_set_decision == 'true') { $msg->addError('NONE_USER_LINK'); return false; } // initialize each section $this->rpt_errors = "<ul>\n"; $this->rpt_likely_problems = "<ul>\n"; $this->rpt_potential_problems = "<ul>\n"; $checksDAO = new ChecksDAO(); // generate section details foreach ($this->errors as $error) { $row = $checksDAO->getCheckByID($error["check_id"]); if ($row["confidence"] == KNOWN) { // no decision to make on known problems $this->num_of_errors++; $this->rpt_errors .= $this->generate_problem_section($error["check_id"], $error["line_number"], $error["col_number"], $error["html_code"], $error["image"], $error["image_alt"], $error["css_code"], _AC($row["err"]), _AC($row["how_to_repair"]), '', IS_ERROR); } else { if ($row["confidence"] == LIKELY) { $this->num_of_likely_problems++; if ($this->allow_set_decision == 'false' && !($this->from_referer == 'true' && $this->user_link_id > 0)) { $this->rpt_likely_problems .= $this->generate_problem_section($error["check_id"], $error["line_number"], $error["col_number"], $error["html_code"], $error["image"], $error["image_alt"], $error["css_code"], _AC($row["err"]), _AC($row["how_to_repair"]), '', IS_WARNING); $this->num_of_likely_problems_fail++; } else { $this->generate_cell_with_decision($row, $error["line_number"], $error["col_number"], $error["html_code"], $error['image'], $error["image_alt"], IS_WARNING); } } else { if ($row["confidence"] == POTENTIAL) { $this->num_of_potential_problems++; if ($this->allow_set_decision == 'false' && !($this->from_referer == 'true' && $this->user_link_id > 0)) { $this->rpt_potential_problems .= $this->generate_problem_section($error["check_id"], $error["line_number"], $error["col_number"], $error["html_code"], $error["image"], $error["image_alt"], $error["css_code"], _AC($row["err"]), _AC($row["how_to_repair"]), '', IS_INFO); $this->num_of_potential_problems_fail++; } else { $this->generate_cell_with_decision($row, $error["line_number"], $error["col_number"], $error["html_code"], $error['image'], $error["image_alt"], IS_INFO); } } } } } if ($this->allow_set_decision == 'true' || $this->allow_set_decision == 'false' && $this->from_referer == 'true' && $this->user_link_id > 0) { $this->rpt_likely_problems .= $this->rpt_likely_decision_not_made . $this->rpt_likely_decision_made; $this->rpt_potential_problems .= $this->rpt_potential_decision_not_made . $this->rpt_potential_decision_made; } $this->rpt_errors .= "</ul>"; $this->rpt_likely_problems .= "</ul>"; $this->rpt_potential_problems .= "</ul>"; if ($this->show_source == 'true') { $this->generateSourceRpt(); } }
} else { if (isset($_POST['remove_next'])) { if (is_array($_POST['del_next_checks_id'])) { foreach ($_POST['del_next_checks_id'] as $del_check_id) { $testPassDAO->Delete($check_id, $del_check_id); } } } } } } // end of handle submit // initialize page $checksDAO = new ChecksDAO(); if (isset($check_id)) { $check_row = $checksDAO->getCheckByID($check_id); if (!$check_row) { // invalid check id $msg->addError('INVALID_CHECK_ID'); require AC_INCLUDE_PATH . 'header.inc.php'; $msg->printAll(); require AC_INCLUDE_PATH . 'footer.inc.php'; exit; } // get author name $usersDAO = new UsersDAO(); $user_name = $usersDAO->getUserName($check_row['user_id']); if ($user_name != '') { $savant->assign('author', $user_name); } $check_pass_example_rows = $checkExamplesDAO->getByCheckIDAndType($check_id, AC_CHECK_EXAMPLE_PASS);
/** * check if the inner text is in one of the search string defined in checks.search_str * return true if in, otherwise, return false */ public static function isTextInSearchString($text, $check_id, $e) { $text = strtolower(trim($text)); $checksDAO = new ChecksDAO(); $row = $checksDAO->getCheckByID($check_id); $search_strings = explode(',', strtolower(_AC($row['search_str']))); if (!is_array($search_strings)) { return true; } else { return BasicChecks::inSearchString($text, $search_strings); } }
/* Inclusive Design Institute */ /* */ /* This program is free software. You can redistribute it and/or */ /* modify it under the terms of the GNU General Public License */ /* as published by the Free Software Foundation. */ /************************************************************************/ // $Id$ define('AC_INCLUDE_PATH', '../include/'); include AC_INCLUDE_PATH . 'vitals.inc.php'; include_once AC_INCLUDE_PATH . 'classes/DAO/ChecksDAO.class.php'; $checksDAO = new ChecksDAO(); if (isset($_POST['submit_no'])) { $msg->addFeedback('CANCELLED'); header('Location: index.php'); exit; } else { if (isset($_POST['submit_yes'])) { $checksDAO->Delete($_REQUEST['id']); $msg->addFeedback('ACTION_COMPLETED_SUCCESSFULLY'); header('Location: index.php'); exit; } } require AC_INCLUDE_PATH . 'header.inc.php'; unset($hidden_vars); $row = $checksDAO->getCheckByID($_REQUEST['id']); $name_html = '<ul><li>' . _AC($row['name']) . '</li></ul>'; $hidden_vars['id'] = $_REQUEST['id']; $msg->addConfirm(array('DELETE_CHECK', $name_html), $hidden_vars); $msg->printConfirm(); require AC_INCLUDE_PATH . 'footer.inc.php';
/** * private * check given html dom node for given check_id, save result into $this->result * parameters: * $e: simple html dom node * $check_id: check id * * return "success" or "fail" */ private function check($e, $check_id) { global $msg, $base_href, $tag_size; // don't check the lines before $line_offset if ($e->linenumber <= $this->line_offset) { return; } if ($e->linenumber == 1 && $this->col_offset > 0) { $col_number = $e->colnumber - $this->col_offset; } else { $col_number = $e->colnumber; } $line_number = $e->linenumber - $this->line_offset; $result = $this->get_check_result($line_number, $col_number, $check_id); // has not been checked if (!$result) { $check_result = eval($this->check_func_array[$check_id]); //CSS code variable $css_code = BasicChecks::getCssOutput(); $checksDAO = new ChecksDAO(); $row = $checksDAO->getCheckByID($check_id); if (is_null($check_result)) { // when $check_result is not true/false, must be something wrong with the check function. // show warning message and skip this check $msg->addError(array('CHECK_FUNC', $row['html_tag'] . ': ' . _AC($row['name']))); // skip this check $check_result = true; } if ($check_result === true) { $result = SUCCESS_RESULT; //MB // number of success checks if (isset($this->num_success[$check_id])) { $this->num_success[$check_id]++; } else { $this->num_success[$check_id] = 1; } } else { $result = FAIL_RESULT; } if ($result == FAIL_RESULT) { $preview_html = $e->outertext; if (strlen($preview_html) > DISPLAY_PREVIEW_HTML_LENGTH) { $html_code = substr($preview_html, 0, DISPLAY_PREVIEW_HTML_LENGTH) . " ..."; } else { $html_code = $preview_html; } // find out preview images for validation on <img> if (strtolower(trim($row['html_tag'])) == 'img') { $image = BasicChecks::getFile($e->attr['src'], $base_href, $this->uri); // The lines below to check the existence of the image slows down the validation process. // So commented out. //$handle = @fopen($image, 'r'); //if (!$handle) $image = ''; //else @fclose($handle); // find out image alt text for preview image if (!isset($e->attr['alt'])) { $image_alt = '_NOT_DEFINED'; } else { if ($e->attr['alt'] == '') { $image_alt = '_EMPTY'; } else { $image_alt = $e->attr['alt']; } } } // If its a duplicate ID, switch the line number from the element line (body) // to the line where the duplicate ID appears. global $has_duplicate_attribute; if (is_array($has_duplicate_attribute)) { $line_number = $has_duplicate_attribute[0]; $html_code .= "(" . $has_duplicate_attribute[1] . ")"; } $this->save_result($line_number, $col_number, $html_code, $check_id, $result, $image, $image_alt, $css_code); } } return $result; }
/** * private * main process to generate report in html format */ private function generateRESTRpt() { $num_of_errors = 0; $num_of_likely_problems = 0; $num_of_potential_problems = 0; $checksDAO = new ChecksDAO(); $userDecisionsDAO = new UserDecisionsDAO(); // generate section details foreach ($this->errors as $error) { // generate each error result $result_type = ''; $repair = ''; $decision = ''; $decision_questions = ''; $decision_made = ''; $row_check = $checksDAO->getCheckByID($error["check_id"]); if ($row_check["confidence"] == KNOWN) { // only known errors have <repair> $num_of_errors++; $result_type = _AC('error'); $repair = str_replace('{REPAIR}', htmlentities(_AC($row_check["how_to_repair"])), $this->rest_repair); } else { // generate user's decision. only likely and potential problems have decisions to make $row_userDecision = $userDecisionsDAO->getByUserLinkIDAndLineNumAndColNumAndCheckID($this->userLinkID, $error["line_number"], $error["col_number"], $error['check_id']); if ($row_userDecision['decision'] == AC_DECISION_PASS || $row_userDecision['decision'] == AC_DECISION_FAIL) { if ($row_userDecision['decision'] == AC_DECISION_PASS) { $decision_text = _AC('pass'); } if ($row_userDecision['decision'] == AC_DECISION_FAIL) { $decision_text = _AC('fail'); } $decision_made = str_replace(array('{DECISIONMADE}', '{DECISIONMADEDATE}'), array(htmlentities($decision_text), $row_userDecision['last_update']), $this->rest_decision_made); } if ($row_check["confidence"] == LIKELY) { $result_type = _AC('likely_problem'); if (!$row_userDecision || $row_userDecision['decision'] == AC_DECISION_FAIL) { $num_of_likely_problems++; } } if ($row_check["confidence"] == POTENTIAL) { $result_type = _AC('potential_problem'); if (!$row_userDecision || $row_userDecision['decision'] == AC_DECISION_FAIL) { $num_of_potential_problems++; } } $decision_questions = str_replace(array('{SEQUENCEID}', '{DECISIONPASS}', '{DECISIONFAIL}'), array($error['line_number'] . '_' . $error['col_number'] . '_' . $error['check_id'], htmlentities(_AC($row_check['decision_pass'])), htmlentities(_AC($row_check['decision_fail']))), $this->rest_decision_questions); $decision = $decision_questions . $decision_made; // end of generating user's decision } $result .= str_replace(array('{RESULTTYPE}', '{LINENUM}', '{COLUMNNUM}', '{BASE_HREF}', '{CHECK_ID}', '{TITLE}', '{ERRORMSG}', '{ERRORSOURCECODE}', '{REPAIR}', '{DECISION}'), array($result_type, $error["line_number"], $error["col_number"], htmlentities(AC_BASE_HREF), $error['check_id'], htmlentities(_AC("suggest_improvements")), htmlentities(_AC($row_check['err'])), htmlentities($error["html_code"], ENT_QUOTES, "UTF-8"), $repair, $decision), $this->rest_result); } // retrieve session id $userLinksDAO = new UserLinksDAO(); $row = $userLinksDAO->getByUserLinkID($this->userLinkID); $sessionID = $row['last_sessionID']; // generate guidelines $guidelinesDAO = new GuidelinesDAO(); foreach ($this->guidelineArray as $gid) { $row_guideline = $guidelinesDAO->getGuidelineByIDs($gid); $guidelines .= str_replace('{GUIDELINE}', htmlentities($row_guideline[0]['title']), $this->rest_guideline); } // find out result status: pass, fail, conditional pass if ($num_of_errors > 0) { $status = _AC('fail'); } else { if ($num_of_likely_problems + $num_of_potential_problems > 0) { $status = _AC('conditional_pass'); } else { $status = _AC('pass'); } } // generate final output $this->output = str_replace(array('{STATUS}', '{SESSIONID}', '{NUMOFERRORS}', '{NUMOFLIKELYPROBLEMS}', '{NUMOFPOTENTIALPROBLEMS}', '{GUIDELINES}', '{RESULTS}'), array($status, $sessionID, $num_of_errors, $num_of_likely_problems, $num_of_potential_problems, $guidelines, $result), $this->rest_main); }