From 8eed44df1b74298bef43378fa7bc2f7e452641a3 Mon Sep 17 00:00:00 2001 From: David Lippman Date: Mon, 29 Apr 2013 14:59:52 -0700 Subject: [PATCH] Add ancestor tracking to course and assessment copies Move template course / self-enroll course designation to course settings and database instead of config.php --- admin/actions.php | 30 +++++++++++++++++++++++------ admin/forms.php | 16 ++++++++++++++-- course/copyitems.php | 12 +++++++++--- course/copyoneitem.php | 10 ++++++++-- course/gbtable2.php | 12 +++++++++++- dbsetup.php | 16 ++++++++++++++++ forms.php | 22 +++++++++++---------- includes/copyiteminc.php | 26 +++++++++++++++++++++++-- upgrade.php | 41 +++++++++++++++++++++++++++++++++++++++- 9 files changed, 158 insertions(+), 27 deletions(-) diff --git a/admin/actions.php b/admin/actions.php index e30a55ad36..161e736cce 100644 --- a/admin/actions.php +++ b/admin/actions.php @@ -211,18 +211,28 @@ $avail = 3 - $_POST['stuavail'] - $_POST['teachavail']; + $istemplate = 0; + if ($myrights==100) { + if (isset($_POST['istemplate'])) { + $istemplate += 1; + } + if (isset($_POST['isselfenroll'])) { + $istemplate += 4; + } + } + $_POST['ltisecret'] = trim($_POST['ltisecret']); if ($_GET['action']=='modify') { $query = "UPDATE imas_courses SET name='{$_POST['coursename']}',enrollkey='{$_POST['ekey']}',hideicons='$hideicons',available='$avail',lockaid='{$_POST['lockaid']}',picicons='$picicons',chatset=$chatset,showlatepass=$showlatepass,"; - $query .= "allowunenroll='$unenroll',copyrights='$copyrights',msgset='$msgset',toolset='$toolset',topbar='$topbar',cploc='$cploc',theme='$theme',ltisecret='{$_POST['ltisecret']}' WHERE id='{$_GET['id']}'"; + $query .= "allowunenroll='$unenroll',copyrights='$copyrights',msgset='$msgset',toolset='$toolset',topbar='$topbar',cploc='$cploc',theme='$theme',ltisecret='{$_POST['ltisecret']}',istemplate=$istemplate WHERE id='{$_GET['id']}'"; if ($myrights<75) { $query .= " AND ownerid='$userid'";} mysql_query($query) or die("Query failed : " . mysql_error()); } else { $blockcnt = 1; $itemorder = addslashes(serialize(array())); - $query = "INSERT INTO imas_courses (name,ownerid,enrollkey,hideicons,picicons,allowunenroll,copyrights,msgset,toolset,chatset,showlatepass,itemorder,topbar,cploc,available,theme,ltisecret,blockcnt) VALUES "; - $query .= "('{$_POST['coursename']}','$userid','{$_POST['ekey']}','$hideicons','$picicons','$unenroll','$copyrights','$msgset',$toolset,$chatset,$showlatepass,'$itemorder','$topbar','$cploc','$avail','$theme','{$_POST['ltisecret']}','$blockcnt');"; + $query = "INSERT INTO imas_courses (name,ownerid,enrollkey,hideicons,picicons,allowunenroll,copyrights,msgset,toolset,chatset,showlatepass,itemorder,topbar,cploc,available,istemplate,theme,ltisecret,blockcnt) VALUES "; + $query .= "('{$_POST['coursename']}','$userid','{$_POST['ekey']}','$hideicons','$picicons','$unenroll','$copyrights','$msgset',$toolset,$chatset,$showlatepass,'$itemorder','$topbar','$cploc','$avail',$istemplate,'$theme','{$_POST['ltisecret']}','$blockcnt');"; mysql_query($query) or die("Query failed : " . mysql_error()); $cid = mysql_insert_id(); //if ($myrights==40) { @@ -257,15 +267,23 @@ $gbcats[$frid] = mysql_insert_id(); } $copystickyposts = true; - $query = "SELECT itemorder FROM imas_courses WHERE id='{$_POST['usetemplate']}'"; + $query = "SELECT itemorder,ancestors FROM imas_courses WHERE id='{$_POST['usetemplate']}'"; $result = mysql_query($query) or die("Query failed : $query" . mysql_error()); - $items = unserialize(mysql_result($result,0,0)); + $r = mysql_fetch_row($result); + $items = unserialize($r[0]); + $ancestors = $r[1]; + if ($ancestors=='') { + $ancestors = intval($_POST['usetemplate']); + } else { + $ancestors = intval($_POST['usetemplate']).','.$ancestors; + } + $ancestors = addslashes($ancestors); $newitems = array(); require("../includes/copyiteminc.php"); copyallsub($items,'0',$newitems,$gbcats); doaftercopy($_POST['usetemplate']); $itemorder = addslashes(serialize($newitems)); - $query = "UPDATE imas_courses SET itemorder='$itemorder',blockcnt='$blockcnt' WHERE id='$cid'"; + $query = "UPDATE imas_courses SET itemorder='$itemorder',blockcnt='$blockcnt',ancestors='$ancestors' WHERE id='$cid'"; mysql_query($query) or die("Query failed : " . mysql_error()); copyrubrics(); } diff --git a/admin/forms.php b/admin/forms.php index ff7024c3fa..853a183826 100644 --- a/admin/forms.php +++ b/admin/forms.php @@ -129,6 +129,7 @@ $ltisecret = $line['ltisecret']; $chatset = $line['chatset']; $showlatepass = $line['showlatepass']; + $istemplate = $line['istemplate']; } else { $courseid = "Not yet set"; $name = "Enter course name here"; @@ -151,7 +152,7 @@ $theme = isset($CFG['CPS']['theme'])?$CFG['CPS']['theme'][0]:$defaultcoursetheme; $chatset = isset($CFG['CPS']['chatset'])?$CFG['CPS']['chatset'][0]:0; $showlatepass = isset($CFG['CPS']['showlatepass'])?$CFG['CPS']['showlatepass'][0]:0; - + $istemplate = 0; $avail = 0; $lockaid = 0; $ltisecret = ""; @@ -418,12 +419,23 @@ } echo '
'; } + if ($myrights==100) { + echo 'Mark course as template?'; + echo ' Mark as global template course
'; + echo ' Mark as self-enroll course'; + echo '

'; + } if (isset($CFG['CPS']['templateoncreate']) && $_GET['action']=='addcourse' ) { echo 'Use content from a template course:'; echo '
\n"; } if (!$emailconfirmation) { - if (isset($CFG['GEN']['selfenrolluser'])) { + $query = "SELECT id,name FROM imas_courses WHERE (istemplate&4)=4 AND available<4 ORDER BY name"; + $result = mysql_query($query) or die("Query failed : " . mysql_error()); + $doselfenroll = false; + if (mysql_num_rows($result)>0) {//if (isset($CFG['GEN']['selfenrolluser'])) { + $doselfenroll = true; echo '

Select the course you\'d like to enroll in

'; echo '


'; echo '
'; - if (isset($CFG['GEN']['selfenrolluser'])) { + if ($doselfenroll) { echo ''; } } @@ -205,13 +206,14 @@ case "enroll": echo '

Enroll in a Course

'; echo "
"; - if (isset($CFG['GEN']['selfenrolluser'])) { + $query = "SELECT id,name FROM imas_courses WHERE (istemplate&4)=4 AND available<4 ORDER BY name"; + $result = mysql_query($query) or die("Query failed : " . mysql_error()); + $doselfenroll = false; + if (mysql_num_rows($result)>0) {//if (isset($CFG['GEN']['selfenrolluser'])) { + $doselfenroll = true; echo '

Select the course you\'d like to enroll in

'; echo '


'; echo '
'; - if (isset($CFG['GEN']['selfenrolluser'])) { + if ($doselfenroll) { echo ''; } echo '

'; diff --git a/includes/copyiteminc.php b/includes/copyiteminc.php index 8388fc6607..f26ddd6c3c 100644 --- a/includes/copyiteminc.php +++ b/includes/copyiteminc.php @@ -143,22 +143,44 @@ function copyitem($itemid,$gbcats,$sethidden=false) { //$query = "INSERT INTO imas_assessments (courseid,name,summary,intro,startdate,enddate,timelimit,displaymethod,defpoints,defattempts,deffeedback,defpenalty,shuffle) "; //$query .= "SELECT '$cid',name,summary,intro,startdate,enddate,timelimit,displaymethod,defpoints,defattempts,deffeedback,defpenalty,shuffle FROM imas_assessments WHERE id='$typeid'"; //mysql_query($query) or die("Query failed : $query" . mysql_error()); - $query = "SELECT name,summary,intro,startdate,enddate,reviewdate,timelimit,minscore,displaymethod,defpoints,defattempts,deffeedback,defpenalty,shuffle,gbcategory,password,cntingb,showcat,showhints,showtips,allowlate,exceptionpenalty,noprint,avail,groupmax,endmsg,deffeedbacktext,eqnhelper,caltag,calrtag,msgtoinstr,istutorial,viddata,reqscore,reqscoreaid FROM imas_assessments WHERE id='$typeid'"; + $query = "SELECT name,summary,intro,startdate,enddate,reviewdate,timelimit,minscore,displaymethod,defpoints,defattempts,deffeedback,defpenalty,shuffle,gbcategory,password,cntingb,showcat,showhints,showtips,allowlate,exceptionpenalty,noprint,avail,groupmax,endmsg,deffeedbacktext,eqnhelper,caltag,calrtag,msgtoinstr,istutorial,viddata,reqscore,reqscoreaid,ancestors FROM imas_assessments WHERE id='$typeid'"; $result = mysql_query($query) or die("Query failed :$query " . mysql_error()); - $row = mysql_fetch_row($result); + $row = mysql_fetch_assoc($result); + if ($sethidden) {$row['avail'] = 0;} + if (isset($gbcats[$row['gbcategory']])) { + $row['gbcategory'] = $gbcats[$row['gbcategory']]; + } else { + $row['gbcategory'] = 0; + } + if ($row['ancestors']=='') { + $row['ancestors'] = $typeid; + } else { + $row['ancestors'] = $typeid.','.$row['ancestors']; + } + $reqscoreaid = $row['reqscoreaid']; + unset($row['reqscoreaid']); + $row['name'] .= stripslashes($_POST['append']); + + $fields = implode(",",array_keys($row)); + $vals = "'".implode("','",addslashes_deep(array_values($row)))."'"; + + $query = "INSERT INTO imas_assessments (courseid,$fields) VALUES ('$cid',$vals)"; + /*$row = mysql_fetch_row($result); if ($sethidden) {$row[23] = 0;} if (isset($gbcats[$row[14]])) { $row[14] = $gbcats[$row[14]]; } else if ($_POST['ctc']!=$cid) { $row[14] = 0; } + $reqscoreaid = array_pop($row); $row[0] .= stripslashes($_POST['append']); $row = "'".implode("','",addslashes_deep($row))."'"; $query = "INSERT INTO imas_assessments (courseid,name,summary,intro,startdate,enddate,reviewdate,timelimit,minscore,displaymethod,defpoints,defattempts,deffeedback,defpenalty,shuffle,gbcategory,password,cntingb,showcat,showhints,showtips,allowlate,exceptionpenalty,noprint,avail,groupmax,endmsg,deffeedbacktext,eqnhelper,caltag,calrtag,msgtoinstr,istutorial,viddata,reqscore) "; $query .= "VALUES ('$cid',$row)"; + */ mysql_query($query) or die("Query failed : $query" . mysql_error()); $newtypeid = mysql_insert_id(); if ($reqscoreaid>0) { diff --git a/upgrade.php b/upgrade.php index 90517d5c63..5bef4e5325 100644 --- a/upgrade.php +++ b/upgrade.php @@ -1,7 +1,7 @@ "; } + if ($last < 70) { + $query = 'ALTER TABLE `imas_assessments` ADD `ancestors` TEXT NOT NULL DEFAULT \'\''; + $res = mysql_query($query); + if ($res===false) { + echo "

Query failed: ($query) : ".mysql_error()."

"; + } + $query = 'ALTER TABLE `imas_courses` ADD `ancestors` TEXT NOT NULL DEFAULT \'\''; + $res = mysql_query($query); + if ($res===false) { + echo "

Query failed: ($query) : ".mysql_error()."

"; + } + echo "Added ancestor tracking, assessments and courses
"; + $query = 'CREATE TABLE `imas_content_track` ( + `id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , + `userid` INT(10) UNSIGNED NOT NULL, + `courseid` INT(10) UNSIGNED NOT NULL, + `type` VARCHAR(254) UNSIGNED NOT NULL, + `typeid` INT(10) UNSIGNED NOT NULL, + `viewtime` INT(10) UNSIGNED NOT NULL, + INDEX ( `courseid`) , INDEX( `userid`) + ) ENGINE = InnoDB'; + $res = mysql_query($query); + echo "Added imas_content_track table.
"; + + $query = 'ALTER TABLE `imas_courses` ADD `istemplate` TINYINT(1) NOT NULL DEFAULT \'0\''; + $res = mysql_query($query); + if ($res===false) { + echo "

Query failed: ($query) : ".mysql_error()."

"; + } + //1: global template. 2: group template. 4: self-enroll course + if (isset($templateuser)) { + $query = "UPDATE imas_courses SET istemplate=(istemplate | 1) WHERE id IN (SELECT courseid FROM imas_teachers WHERE userid=$templateuser)"; + $res = mysql_query($query); + } + if (isset($CFG['GEN']['selfenrolluser'])) { + $query = "UPDATE imas_courses SET istemplate=(istemplate | 4) WHERE id IN (SELECT courseid FROM imas_teachers WHERE userid={$CFG['GEN']['selfenrolluser']})"; + $res = mysql_query($query); + } + } /*$handle = fopen("upgradecounter.txt",'w'); if ($handle===false) { echo '

Error: unable open upgradecounter.txt for writing

';