| \n"
. "\t\t\t".$clang->gT("Data Consistency Check")." ".$clang->gT("If errors are showing up you might have to execute this script repeatedly.")."\n" . "\t\t | \n"
. "\t|
| "
. " \n"; // Check conditions // $query = "SELECT {$dbprefix}questions.sid, {$dbprefix}conditions.* " // ."FROM {$dbprefix}conditions, {$dbprefix}questions " // ."WHERE {$dbprefix}conditions.qid={$dbprefix}questions.qid " // ."ORDER BY qid, cqid, cfieldname, value"; $query = "SELECT * FROM {$dbprefix}conditions ORDER BY cid"; $result = db_execute_assoc($query) or safe_die("Couldn't get list of conditions from database $query ".$connect->ErrorMsg()); while ($row=$result->FetchRow()) { $qquery="SELECT qid FROM {$dbprefix}questions WHERE qid='{$row['qid']}'"; $qresult=$connect->Execute($qquery) or safe_die ("Couldn't check questions table for qids $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) {$cdelete[]=array("cid"=>$row['cid'], "reason"=>"No matching qid");} $qquery = "SELECT qid FROM {$dbprefix}questions WHERE qid='{$row['cqid']}'"; $qresult=$connect->Execute($qquery) or safe_die ("Couldn't check questions table for qids $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) {$cdelete[]=array("cid"=>$row['cid'], "reason"=>$clang->gT("No matching Cqid"));} if ($row['cfieldname']) //Only do this if there actually is a "cfieldname" { list ($surveyid, $gid, $rest) = explode("X", $row['cfieldname']); $qquery = "SELECT gid FROM {$dbprefix}groups WHERE gid=$gid"; $qresult = $connect->Execute($qquery) or safe_die ("Couldn't check conditional group matches $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if ($qcount < 1) {$cdelete[]=array("cid"=>$row['cid'], "reason"=>$clang->gT("No matching CFIELDNAME Group!")." ($gid) ({$row['cfieldname']})");} } elseif (!$row['cfieldname']) { $cdelete[]=array("cid"=>$row['cid'], "reason"=>$clang->gT("No \"CFIELDNAME\" field set!")." ({$row['cfieldname']})"); } } if (isset($cdelete) && $cdelete) { $integritycheck .= "".$clang->gT("The following conditions should be deleted").": \n"; foreach ($cdelete as $cd) { $integritycheck .= "CID: {$cd['cid']} ".$clang->gT("because")." {$cd['reason']} \n"; } $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All conditions meet consistency standards")." \n"; } // Check question_attributes to delete $query = "SELECT * FROM {$dbprefix}question_attributes ORDER BY qid"; $result = db_execute_assoc($query) or safe_die($connect->ErrorMsg()); while($row = $result->FetchRow()) { $aquery = "SELECT * FROM {$dbprefix}questions WHERE qid = {$row['qid']}"; $aresult = $connect->Execute($aquery) or safe_die($connect->ErrorMsg()); $qacount = $aresult->RecordCount(); if (!$qacount) { $qadelete[]=array("qaid"=>$row['qaid'], "attribute"=>$row['attribute'], "reason"=>$clang->gT("No matching qid")); } } // while if (isset($qadelete) && $qadelete) { $integritycheck .= "".$clang->gT("The following question attributes should be deleted").": \n"; foreach ($qadelete as $qad) {$integritycheck .= "QAID `{$qad['qaid']}` ATTRIBUTE `{$qad['attribute']}` ".$clang->gT("because")." `{$qad['reason']}` \n";} $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All question_attributes meet consistency standards")." \n"; } // Check assessments $query = "SELECT * FROM {$dbprefix}assessments WHERE scope='T' ORDER BY sid"; $result = db_execute_assoc($query) or safe_die ("Couldn't get list of assessments $query ".$connect->ErrorMsg()); while($row = $result->FetchRow()) { $aquery = "SELECT * FROM {$dbprefix}surveys WHERE sid = {$row['sid']}"; $aresult = db_execute_assoc($aquery) or safe_die("Oh dear - died in assessments surveys:".$aquery ." ".$connect->ErrorMsg()); $acount = $aresult->RecordCount(); if (!$acount) { $assdelete[]=array("id"=>$row['id'], "assessment"=>$row['name'], "reason"=>$clang->gT("No matching survey")); } } // while $query = "SELECT * FROM {$dbprefix}assessments WHERE scope='G' ORDER BY gid"; $result = db_execute_assoc($query) or safe_die ("Couldn't get list of assessments $query ".$connect->ErrorMsg()); while($row = $result->FetchRow()) { $aquery = "SELECT * FROM {$dbprefix}groups WHERE gid = {$row['gid']}"; $aresult = $connect->Execute($aquery) or safe_die("Oh dear - died:".$aquery ." ".$connect->ErrorMsg()); $acount = $aresult->RecordCount(); if (!$acount) { $asgdelete[]=array("id"=>$row['id'], "assessment"=>$row['name'], "reason"=>$clang->gT("No matching group")); } } if (isset($assdelete) && $assdelete) { $integritycheck .= "".$clang->gT("The following assessments should be deleted").": \n"; foreach ($assdelete as $ass) {$integritycheck .= "ID `{$ass['id']}` ASSESSMENT `{$ass['assessment']}` ".$clang->gT("because")." `{$ass['reason']}` \n";} $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All Survey (Total) assessments meet consistency standards")." \n"; } if (isset($asgdelete) && $asgdelete) { $integritycheck .= "".$clang->gT("The following assessments should be deleted").": \n"; foreach ($asgdelete as $asg) {$integritycheck .= "ID `{$asg['id']}` ASSESSMENT `{$asg['assessment']}` ".$clang->gT("because")." `{$asg['reason']}` \n";} $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All Group assessments meet consistency standards")." \n"; } // Check answers $query = "SELECT * FROM {$dbprefix}answers ORDER BY qid"; $result = db_execute_assoc($query) or safe_die ("Couldn't get list of answers from database $query ".$connect->ErrorMsg()); while ($row=$result->FetchRow()) { //$integritycheck .= "Checking answer {$row['code']} to qid {$row['qid']} \n"; $qquery="SELECT qid FROM {$dbprefix}questions WHERE qid='{$row['qid']}'"; $qresult=$connect->Execute($qquery) or safe_die ("Couldn't check questions table for qids from answers $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) { $adelete[]=array("qid"=>$row['qid'], "code"=>$row['code'], "reason"=>$clang->gT("No matching question")); } //$integritycheck .= " \n"; } if (isset($adelete) && $adelete) { $integritycheck .= "".$clang->gT("The following answers should be deleted").": \n"; foreach ($adelete as $ad) {$integritycheck .= "QID `{$ad['qid']}` CODE `{$ad['code']}` ".$clang->gT("because")." `{$ad['reason']}` \n";} $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All answers meet consistency standards")." \n"; } // Check surveys $query = "SELECT * FROM {$dbprefix}surveys ORDER BY sid"; $result = db_execute_assoc($query) or safe_die ("Couldn't get list of answers from database $query ".$connect->ErrorMsg()); while ($row=$result->FetchRow()) { $qquery="SELECT surveyls_survey_id FROM {$dbprefix}surveys_languagesettings WHERE surveyls_survey_id='{$row['sid']}'"; $qresult=$connect->Execute($qquery) or safe_die ("Couldn't check languagesettings table for sids from surveys $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) { $sdelete[]=array("sid"=>$row['sid'], "reason"=>$clang->gT("Language specific settings missing")); } } if (isset($sdelete) && $sdelete) { $integritycheck .= "".$clang->gT("The following surveys should be deleted").": \n"; foreach ($sdelete as $sd) {$integritycheck .= "SID `{$sd['sid']}` ".$clang->gT("because")." `{$sd['reason']}` \n";} $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All survey settings meet consistency standards")." \n"; } //check questions $query = "SELECT * FROM {$dbprefix}questions ORDER BY sid, gid, qid"; $result = db_execute_assoc($query) or safe_die ("Couldn't get list of questions from database $query ".$connect->ErrorMsg()); while ($row=$result->FetchRow()) { //Make sure group exists $qquery="SELECT * FROM {$dbprefix}groups WHERE gid={$row['gid']}"; $qresult=$connect->Execute($qquery) or safe_die ("Couldn't check groups table for gids from questions $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) {$qdelete[]=array("qid"=>$row['qid'], "reason"=>$clang->gT("No matching Group")." ({$row['gid']})");} //Make sure survey exists $qquery="SELECT * FROM {$dbprefix}surveys WHERE sid={$row['sid']}"; $qresult=$connect->Execute($qquery) or safe_die ("Couldn't check surveys table for sids from questions $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) { if (!isset($qdelete) || !in_array($row['qid'], $qdelete)) {$qdelete[]=array("qid"=>$row['qid'], "reason"=>$clang->gT("No matching Survey!")." ({$row['sid']})");} } } if (isset($qdelete) && $qdelete) { $integritycheck .= "".$clang->gT("The following questions should be deleted").": \n"; foreach ($qdelete as $qd) {$integritycheck .= "QID `{$qd['qid']}` ".$clang->gT("because")." `{$qd['reason']}` \n";} $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All questions meet consistency standards")." \n"; } //check groups $query = "SELECT * FROM {$dbprefix}groups ORDER BY sid, gid"; $result=db_execute_assoc($query) or safe_die ("Couldn't get list of groups for checking $query ".$connect->ErrorMsg()); while ($row=$result->FetchRow()) { //make sure survey exists $qquery = "SELECT * FROM {$dbprefix}groups WHERE sid={$row['sid']}"; $qresult=$connect->Execute($qquery) or safe_die("Couldn't check surveys table for gids from groups $qquery ".$connect->ErrorMsg()); $qcount=$qresult->RecordCount(); if (!$qcount) {$gdelete[]=array($row['gid']);} } if (isset($gdelete) && $gdelete) { $integritycheck .= "".$clang->gT("The following groups should be deleted").": \n"; $integritycheck .= implode(", ", $gdelete); $integritycheck .= " \n"; } else { $integritycheck .= "".$clang->gT("All groups meet consistency standards")." \n"; } //NOW CHECK FOR STRAY SURVEY RESPONSE TABLES AND TOKENS TABLES if (!isset($cdelete) && !isset($adelete) && !isset($qdelete) && !isset($gdelete) && !isset($asgdelete) && !isset($sdelete) && !isset($assdelete) && !isset($qadelete)) { $integritycheck .= " ".$clang->gT("No database action required"); } else { $integritycheck .= " ".$clang->gT("Should we proceed with the delete?")." \n"; $integritycheck .= "\n"; } $integritycheck .= " \n" ." | |
| \n"
. "\t\t\t".$clang->gT("Data Consistency Check")." ".$clang->gT("If errors are showing up you might have to execute this script repeatedly.")."\n" . "\t\t | \n"
. "\t|
| ";
$cdelete=returnglobal('cdelete');
$adelete=returnglobal('adelete');
$qdelete=returnglobal('qdelete');
$gdelete=returnglobal('gdelete');
$assdelete=returnglobal('assdelete');
$asgdelete=returnglobal('asgdelete');
$qadelete=returnglobal('qadelete');
$sdelete=returnglobal('sdelete');
if (isset($sdelete)) {
$integritycheck .= $clang->gT("Deleting Surveys").": \n"; $sql = "DELETE FROM {$dbprefix}surveys WHERE sid=$ass"; $result = $connect->Execute($sql) or safe_die ("Couldn't delete ($sql) ".$connect->ErrorMsg()); } } if (isset($assdelete)) { $integritycheck .= $clang->gT( "Deleting Assessments").": \n"; $sql = "DELETE FROM {$dbprefix}assessments WHERE id=$ass"; $result = $connect->Execute($sql) or safe_die ("Couldn't delete ($sql) ".$connect->ErrorMsg()); } } if (isset($asgdelete)) { $integritycheck .= $clang->gT("Deleting Assessments").": \n"; $sql = "DELETE FROM {$dbprefix}assessments WHERE id=$asg"; $result = $connect->Execute($sql) or safe_die ("Couldn't delete ($sql) ".$connect->ErrorMsg()); } } if (isset($qadelete)) { $integritycheck .= $clang->gT("Deleting Question_Attributes").": \n"; $sql = "DELETE FROM {$dbprefix}question_attributes WHERE qaid=$qad"; $result = $connect->Execute($sql) or safe_die ("Couldn't delete ($sql) ".$connect->ErrorMsg()); } } if (isset($cdelete)) { $integritycheck .= $clang->gT("Deleting Conditions").": \n"; foreach ($cdelete as $cd) { $integritycheck .= $clang->gT("Deleting cid").":".$cd." \n"; $sql = "DELETE FROM {$dbprefix}conditions WHERE cid=$cd"; $result=$connect->Execute($sql) or safe_die ("Couldn't Delete ($sql) ".$connect->ErrorMsg()); } $integritycheck .= " \n"; } if (isset($adelete)) { $integritycheck .= $clang->gT("Deleting Answers").": \n"; foreach ($adelete as $ad) { list($ad1, $ad2)=explode("|", $ad); $integritycheck .= $clang->gT("Deleting answer with qid").":".$ad1." and code: ".$ad2." \n"; $sql = "DELETE FROM {$dbprefix}answers WHERE qid=$ad1 AND code='$ad2'"; $result=$connect->Execute($sql) or safe_die ("Couldn't Delete ($sql) ".$connect->ErrorMsg()); } $integritycheck .= " \n"; } if (isset($qdelete)) { $integritycheck .= $clang->gT("Deleting Questions").": \n"; foreach ($qdelete as $qd) { $integritycheck .= $clang->gT("Deleting qid").":".$qd." \n"; $sql = "DELETE FROM {$dbprefix}questions WHERE qid=$qd"; $result=$connect->Execute($sql) or safe_die ("Couldn't Delete ($sql) ".$connect->ErrorMsg()); } $integritycheck .= " \n"; } if (isset($gdelete)) { $integritycheck .= $clang->gT("Deleting Groups").": \n"; foreach ($gdelete as $gd) { $integritycheck .= $clang->gT("Deleting group id").":".$gd." \n"; $sql = "DELETE FROM {$dbprefix}groups WHERE gid=$gd"; $result=$connect->Execute($sql) or safe_die ("Couldn't Delete ($sql) ".$connect->ErrorMsg()); } $integritycheck .= " \n"; } $integritycheck .= $clang->gT("Check database again?")." \n" ."".$clang->gT("Check Again")." \n" ." | |