Friday, November 29, 2013

Reviewer bug in research portal




When admin assign himself as reviewer, view_project.php hanged.
This is due to that
C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\research\projects\view_project.php
line49
   $reviewer = get_reviewer($_SESSION['member_id']);
call get_reviewers function in 
C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\research\_lib\projects\reviewer_tools.inc.php
get_reviewers function is very complicated to make system hanged.
Solution:
1. Reduce research database.
2.  CESEI PHP error log need to be cleaned often
C:\php5.3.1\error.log, around 9GB. Difficult to open and write.
3. Think about new algorithm to write function 
get_reviewers
Use  $start=microtime(true); $end=microtime(true); 
$end-start to get processing time in seconds in get_reviewers function.
or try
echo  date('h:i:s') . "\n";
to see time difference.
Find
  $sql = "SELECT subject_id,study_code,active,reminders FROM subjects WHERE subject_id IN(
               SELECT subject_id FROM review_slot_subjects WHERE review_slot_id
                  IN (SELECT review_slot_id FROM review_slots WHERE project_id=$pid AND review_slot_id
                     IN (SELECT review_slot_id FROM review_slot_reviewers WHERE member_id=$rid))) ORDER BY study_code";
      $result = mysql_query($sql, $db);

take about 2 minutes.
change the statement into two steps:
//step 1
$sql = "SELECT subject_id FROM review_slot_subjects WHERE review_slot_id
                  IN (SELECT review_slot_id FROM review_slots WHERE project_id=$pid AND review_slot_id
                     IN (SELECT review_slot_id FROM review_slot_reviewers WHERE member_id=$rid))";
        $result = mysql_query($sql, $db);
       $subject_id_array=array();
    while($row = mysql_fetch_assoc($result))  $subject_id_array[]=$row['subject_id'];
   //step 2
    $matches = implode(',',$subject_id_array);        
    $sql = "SELECT subject_id,study_code,active,reminders FROM subjects WHERE subject_id IN(
               $matches) ORDER BY study_code";
      $result = mysql_query($sql, $db);


The MySQl execution time is reduced to few seconds.

Thursday, November 28, 2013

Research Portal Improvements





1) Side by side video and questionnaire.  Reviewers through North America definitely want the ability to watch videos and do questionnaires side by side.  Some groups have already started using SurveyMonkey or GoogleDocs to host the surveys so they can watch the videos and do the surveys at the same time: 
Answer: check code:
http://localhost/research/projects/review_survey.php?mid=1&rid=103&sid=74&iid=132
Project: 500 test


2) Import Reviewers.  Currently, reviewers for research project needs to be added one by one.  If a user already has Research Portal membership, they still need to be added from the research membership into the research project.  After working with customers for several years, they would really like the ability to import users via CSV directly into a project.  Note: some reviewers might be reviewers in several projects.  
Answer: This will add burden of the user member database. CSV file is needed in right format. Need to think more.

3) Import tests for subjects and reviewers.  Currently each question needs to be type one by one or cut and past one by one.  It would be a lot better for CESEI admin and for Research Portal customers if we can import tests via CSV in the same way as the education portal.
Answer: This was already  done. Under test schedule, Add New Questions, upload questions tab.


4) Import Custom Study Codes.  Currently, if there are 500 subjects, and if there are unique study code chosen by the Principal Investigator for each subject, then each study code needs to be manually assigned.  Import through CSV would save a lot of time.
Answer: This was already done.  Under upload data, click subject information.



5) Cloning/copying projects. 
Answer: done, still verifying.


Customer Complaints


1.  The most frequently heard customer complaint was the load times in a research project, regardless if videos were involved or not.  We already tried reducing the bit rate and the total size of each video, and although this helps in reducing the time to stream and playback videos, it doesn’t affect the slow load times in other areas of the research portal.

Answer: OK

Wednesday, November 20, 2013

Some bugs when migrating to canhealth for copy research projects





 copy manage_review_assignments.php under research/projects
cop research/_lib/projects/tools.inc.php. rp_manage_review_assignment.php
DELETE FROM cnsh_research_projects.review_slot_reviewers WHERE review_slot_id=0;
DELETE FROM cnsh_research_projects.review_slot_subjects  WHERE review_slot_id=0;
DELETE FROM cnsh_research_projects.subject_assets WHERE asset_id=0 ;
DELETE  FROM  cnsh_research_projects.survey_questions WHERE survey_id=0;
DELETE  FROM cnsh_research_projects.test_questions WHERE test_id=0;

Finally to solve extra subjects under last reviewers using:
DELETE  FROM cnsh_research_projects.review_slot_reviewers;
DELETE FROM cnsh_research_projects.review_slot_reviewers;
DELETE FROM cnsh_research_projects.review_slot_subjects;

http://139.173.32.21:8081/research/projects/view_project.php?pid=12
custom group is not transfer properly.
This is due to that  in table cnsh_research_projects.test_schedule_groups
if  custom_group  =1, group_id should use c_group_id in custom group.
admin/research_projects/copy_rp.php.  line 479 change
             if($key == 'group_id'){
                              $s3[] = "group_id=".$group_match[$row3['group_id']] ;
                continue;
             }

to
             if($key == 'group_id'){
                if($row3['custom_group']==1) $s3[] = "group_id=".$c_group_match[$row3['group_id']] ;
                else
                $s3[] = "group_id=".$group_match[$row3['group_id']] ;
                continue;
             }

http://139.173.32.21:8081/research/projects/upload_subject_data.php,
subject is not attached.
research/projects/upload_subject_asset.php copy from cesei

Tuesday, November 19, 2013

Insert into table values and insert into table set in MySQL




Insert into table values and insert into table set in MySQL are identical.
Example
INSERT INTO table_1 (a, b, c) VALUES (1,2,3)
is the same as
INSERT INTO table_1 SET a=1, b=2, c=3

Monday, November 18, 2013

Recursively backup local computer directories to external drive




Recursively (incremental)  backup local computer directories CAS and real-server to external drive (j)
I used Deltacopy\rsync.exe (download from Internet) to backup files in Windows 7 to external disk J.
type cmd in Windows search box in Start, under Windows prompt
C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   /cygdrive/c/Users/jiansen/desktop/CAS/  /cygdrive/j/jiansen-office/CAS/
C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   /cygdrive/c/Users/jiansen/desktop/real-server/  /cygdrive/j/jiansen-office/real-server/
C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   /cygdrive/c/Users/jiansen/desktop/_swf/  /cygdrive/j/jiansen-office/_swf/ 
C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   "/cygdrive/c/Users/jiansen/Google Drive/"  /cygdrive/j/jiansen-office/GoogleDrive/  
C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   /cygdrive/c/Users/jiansen/desktop/saudi.txt  /cygdrive/j/jiansen-office/saudi.txt 
C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   /cygdrive/c/Users/jiansen/desktop/conftool/  /cygdrive/j/jiansen-office/conftool/  
 C:\Deltacopy\rsync.exe  -v -rlt -z -p --chmod=ugo=rwX --delete   /cygdrive/c/Users/jiansen/desktop/jiansen_transfer/  /cygdrive/j/jiansen-office/jiansen_transfer/  

Thursday, November 14, 2013

PHP, copy directory



The following PHP function copys  is used to copy  entire directories
 * Allows the copying of entire directories.
* @access  public
* @param   string $source        the source directory
* @param   string $dest            the destination directory
* @return  boolean                whether the copy was successful or not

function copys($source,$dest)
{
    if (!is_dir($source)) {
        return false;
    }
    if (!is_dir($dest))    {
        mkdir($dest);
    }
   
    $h=@dir($source);
    while (@($entry=$h->read()) !== false) {
        if (($entry == '.') || ($entry == '..')) {
            continue;
        }

        if (is_dir("$source/$entry") && $dest!=="$source/$entry") {
            copys("$source/$entry", "$dest/$entry");
        } else {
            @copy("$source/$entry", "$dest/$entry");
        }
    }
    $h->close();
    return true;

Wednesday, November 13, 2013

MYSQL: copy row value and modify





For example I have table projects, projects, project_id is primary key, auto increment:
CREATE TABLE  `research_projects_new1`.`projects` (
  `project_id` mediumint(8) unsigned NOT NULL auto_increment,
  `name` varchar(255) NOT NULL default '',
  `owner_id` mediumint(8) unsigned NOT NULL default '0',
  `date_created` datetime NOT NULL default '0000-00-00 00:00:00',
  `date_start` datetime NOT NULL default '0000-00-00 00:00:00',
  `date_end` datetime NOT NULL default '0000-00-00 00:00:00',
  `arms` tinyint(3) unsigned NOT NULL default '0',
  `groups` tinyint(3) unsigned NOT NULL default '0',
  `subjects` smallint(5) unsigned NOT NULL default '0',
  `auto_study_code` tinyint(1) NOT NULL default '1',
  `subject_demographics` text,
  `subject_to_group` enum('ordered','random','manual') NOT NULL default 'ordered',
  `reviewer_to_subject` enum('ordered','random','manual') NOT NULL default 'ordered',
  `reviewer_assignment_rule` enum('subject','arm_group','arm','group') NOT NULL default 'arm_group',
  `subjects_per_review_slot` tinyint(3) unsigned NOT NULL default '0',
  PRIMARY KEY  (`project_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;


Below is PHP code to copy a row value and change the date_created and name column values:
Her we use inset into ...set..
$nl  = "\r\n";
$insert_set    = "INSERT INTO `%1s` SET %2s;".$nl;
$sql_insert = '';
$s1 = '';
$s2 = array();
$sql    = "SELECT * FROM projects WHERE project_id=$project_id";
$result = mysql_query($sql,$db);
if($row = mysql_fetch_assoc($result)) {
   $s1 = 'projects';
   $s2 = array();
   foreach($row as $key=>$value){
      if($key == 'project_id'){
         $s2[] = 'project_id=0';
         continue;
      }
      if($key == 'date_created'){
         $s2[] = "date_created = NOW()";
         continue;
      }
      if($key == 'name'){
         $s2[] = "name ='$project_name'";
         continue;
      }
      $value = addslashes($value);
      $s2[] = "$key='$value'";
   }

   $sql_insert = (vsprintf($insert_values,Array($s1,implode(',',$s2))));
   mysql_query($sql_insert,$db);
   $new_project_id = mysql_insert_id();
}


The MySQL statement is:
INSERT INTO `projects` SET project_id=0,name ='small project COPY',owner_id='37',date_created = NOW(),date_start='2008-07-21 00:00:00',date_end='2008-07-25 00:00:00',arms='1',groups='2',subjects='10',auto_study_code='1',subject_demographics='N;',subject_to_group='manual',reviewer_to_subject='ordered',reviewer_assignment_rule='subject',
subjects_per_review_slot='1'; 

We can also use insert into ...values
$nl  = "\r\n";
$insert_values = "INSERT INTO `%1s` VALUES(%2s);".$nl;

$sql_insert = '';
$s1 = '';
$s2 = array();
//start with the base entry edu_courses
$sql    = "SELECT * FROM projects WHERE project_id=$project_id";
$result = mysql_query($sql,$db);
if($row = mysql_fetch_assoc($result)) {
   $s1 = 'projects';
   $s2 = array();
   foreach($row as $key=>$value){
      if($key == 'project_id'){
         $s2[] = '0';
         continue;
      }
      if($key == 'date_created'){
         $s2[] = "NOW()";
         continue;
      }
      if($key == 'name'){
         $s2[] = "'$project_name'";
         continue;
      }
      $value = addslashes($value);
      $s2[] = "'$value'";
   }
   $sql_insert = (vsprintf($insert_values,Array($s1,implode(',',$s2))));

   mysql_query($sql_insert,$db);
   $new_project_id = mysql_insert_id();
}


The MySQL statement is:
 INSERT INTO `projects` VALUES(0,'small project COPY','37',NOW(),'2008-07-21 00:00:00','2008-07-25 00:00:00','1','2','10','1','N;','manual','ordered','subject','1');

Copy research projects and permission note




Borrow the ideas to copy modules
http://localhost/admin/edu/copy_module/
C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_templates\cesei_nav.tmpl.php
line 84 add:
    <li><a href="/admin/research_projects/copy_research_projects.php">Copy Research Projects</a></li>
create research_projects under admin
create files: copy_research_projects.php, copy_rp_files.php and copy_rp.php
 Permission: (only accessed by admin, project owner and administrator. admin and owner can edit and delete the project. project administrator can only view project if project end date not expired)
http://localhost/research/projects/my_projects.php

Then Reviewer Subject Assignments, assign reviewers a subject code. Reviewers go to following address and enter study code and password
http://localhost/research/projects/take_test.php
cp*
return (hint)
Current system  is modified and  used generic code and same password, without distinguish between reviewers.
This is due to staff member manually input the test from reviewer paper result.
To do test, project end date should not be expired.
member_id in research database reviewers is connected to main database cesei_members
Only cesei member and research member can see the research tab.

Tuesday, November 12, 2013

PHP, dump all the defined classes and methods





PHP function get_declared_classes is used to return an array with the name of the defined classes
To dump all the defined classes,
<?php
print_r(get_declared_classes());
 ?>

or

<?php

  foreach(get_declared_classes() as $class) 
      echo $class.'<br />';

?>

To dump all the defined methods form class Students,
<?php
print_r(get_class_methods());
 ?>

or

<?php

  foreach(get_class_methods() as $method) 
      echo $method.'<br />';

?>

To dump all the defined variables form class Students,
<?php
print_r(get_class_vars());
 ?>

or also print out its value

<?php

  foreach(get_class_vars() as $var=>$value) 
      echo  "{$var}: {$value}.<br />";

?>
 

Add search box for research projects




Add search box from the list:
 http://www.cesei.org/research/projects/new_project.php
http://www.cesei.org/research/projects/manage_reviewers.php

rp_project_properties.tmpl.php
line 35 add
   <div class="row">
    <button  type='button' id="filter3"  onclick="searchstudent2('search3','owner_id')"> Search Project Owner </button>
    <input type="text"     id="search3"  maxlength="80" onkeypress="handleKeyPress(event,this.form)" onkeyup="searchstudent2('search3','owner_id')" >
    </div>

line 152 add:
    <button  type='button' id="filter2"  onclick="searchstudent('search2','admins')"> Search Project Administrators</button>
        <input type="text"     id="search2"  maxlength="80" onkeypress="handleKeyPress(event,this.form)" onkeyup="searchstudent('search2','admins-out')" > 

using searchstudent2 in C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_js\utils.js
(note: possible a bug:  checkValue(document.getElementById(selectout)); checkValue not found)
C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_templates\rp_manage_reviewers.tmpl.php
line 36 add:
          <button  type='button' id="filter2"  onclick="searchstudent('search2','reviewers-out')"> Search Project Administrators</button>
         <input type="text"     id="search2"  maxlength="80" onkeypress="handleKeyPress(event,this.form)" onkeyup="searchstudent('search2','reviewers-out')" > 

test



Friday, November 8, 2013

Bug in cesei mirror site




bug:
http://dev.cesei.org:8080/education/courses/tools/course_properties.php
blank page
 add:
ini_set('display_errors', 1);
error_reporting(E_ALL);

result:
Strict Standards: Only variables should be assigned by reference in C:\LMS\cesei\education\courses\include\vitals.inc.php on line 152
  change
   $myLang =& $languageManager->getMyLanguage();
   to 
    $myLang =$languageManager->getMyLanguage();
Fatal error: Cannot re-assign auto-global variable _FILES in C:\LMS\cesei\education\courses\include\classes\Backup\Backup.class.php on line 218
 change
 function upload($_FILES, $description) {
to
    function upload($file, $description) {
New error

Strict Standards: Non-static method Language::getParentCode() should not be called statically in C:\LMS\cesei\education\courses\include\lib\output.inc.php on line 286

comment out error reporting
// ini_set('display_errors', 1);
//error_reporting(E_ALL);

Wednesday, November 6, 2013

Peer review (16) add email and oline mode cesei_review_new




Add archive_method in table cesei_review_new (for email, member_id=0)
ALTER TABLE `cesei_new1`.`cesei_review_new` ADD `archive_method` mediumint(8) unsigned NOT NULL default '0'; 
ALTER TABLE `cesei_new1`.`cesei_review_new` ADD `member_id` mediumint(8) unsigned NOT NULL default '0';
modify C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\admin\edu\add_review.php
C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_lib\peer_review_tools.inc.php
add hide column for cesei_module_user_reviews_p
ALTER TABLE `cesei_new1`.`cesei_module_user_reviews_p` ADD `hide` mediumint(8) unsigned NOT NULL default '0'; 
or
DROP TABLE IF EXISTS `cesei_new1`.`cesei_module_user_reviews_p`;
CREATE TABLE  `cesei_new1`.`cesei_module_user_reviews_p` (
  `review_id` mediumint(8) unsigned NOT NULL auto_increment,
  `member_id` mediumint(8) unsigned NOT NULL,
  `module_id` mediumint(8) unsigned NOT NULL,
  `revision_cycle` tinyint(3) unsigned NOT NULL default '0',
  `is_complete` tinyint(3) unsigned NOT NULL default '0',
  `date_assigned` date NOT NULL default '0000-00-00',
  `date_complete` date NOT NULL default '0000-00-00',
  `hide` mediumint(8) unsigned NOT NULL default '0',
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

CREATE TABLE  `cesei_new1`.`cesei_module_user_review_data_p` (
  `review_id` mediumint(8) unsigned NOT NULL,
  `outline` text NOT NULL,
  `content` text NOT NULL,
  `evaluation` text NOT NULL,
  `overall` text NOT NULL,
  `rating_outline` tinyint(3) unsigned NOT NULL default '0',
  `rating_content` tinyint(3) unsigned NOT NULL default '0',
  `rating_evaluation` tinyint(3) unsigned NOT NULL default '0',
  `rating_overall` tinyint(3) unsigned NOT NULL default '0',
  `has_simulators` tinyint(3) unsigned NOT NULL default '0',
  `simulators` text NOT NULL,
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

 CREATE TABLE  `cesei_new1`.`cesei_module_user_rebuttal_data_p` (
  `review_id` mediumint(8) unsigned NOT NULL,
  `re_outline` text NOT NULL,
  `re_content` text NOT NULL,
  `re_evaluation` text NOT NULL,
  `re_overall` text NOT NULL,
  `re_simulators` text NOT NULL,
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Rename three table and create new new
DROP TABLE IF EXISTS `cesei_new1`.`cesei_module_user_reviews`;
CREATE TABLE  `cesei_new1`.`cesei_module_user_reviews` (
  `review_id` mediumint(8) unsigned NOT NULL auto_increment,
  `member_id` mediumint(8) unsigned NOT NULL,
  `module_id` mediumint(8) unsigned NOT NULL,
  `revision_cycle` tinyint(3) unsigned NOT NULL default '0',
  `is_complete` tinyint(3) unsigned NOT NULL default '0',
  `date_assigned` date NOT NULL default '0000-00-00',
  `date_complete` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `cesei_new1`.`cesei_module_user_review_data`;
CREATE TABLE  `cesei_new1`.`cesei_module_user_review_data` (
  `review_id` mediumint(8) unsigned NOT NULL,
  `outline` text NOT NULL,
  `content` text NOT NULL,
  `evaluation` text NOT NULL,
  `overall` text NOT NULL,
  `rating_outline` tinyint(3) unsigned NOT NULL default '0',
  `rating_content` tinyint(3) unsigned NOT NULL default '0',
  `rating_evaluation` tinyint(3) unsigned NOT NULL default '0',
  `rating_overall` tinyint(3) unsigned NOT NULL default '0',
  `has_simulators` tinyint(3) unsigned NOT NULL default '0',
  `simulators` text NOT NULL,
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `cesei_new1`.`cesei_module_user_rebuttal_data`;
CREATE TABLE  `cesei_new1`.`cesei_module_user_rebuttal_data` (
  `review_id` mediumint(8) unsigned NOT NULL,
  `re_outline` text NOT NULL,
  `re_content` text NOT NULL,
  `re_evaluation` text NOT NULL,
  `re_overall` text NOT NULL,
  `re_simulators` text NOT NULL,
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;



RENAME TABLE `cesei_new1`.`cesei_module_user_reviews`
 TO `cesei_new1`.`cesei_module_user_reviews0`;
 
 RENAME TABLE `cesei_new1`.`cesei_module_user_review_data
TO `cesei_new1`.`cesei_module_user_review_data0`;
 
 RENAME TABLE `cesei_new1`.`cesei_module_user_rebuttal_data
TO `cesei_new1`.`cesei_module_user_rebuttal_data0`;
 
/education/instructor_resources/module_reviews.php
line 97 change
   $rev_content .= '<div>&rsaquo; <a href="view_reviews.php?module='.
$module['course_id'].'&cycle='.($review_info['revision_cycle']).'">
Read and comment on reviews</a></div>';
 
to
 
   $rev_content .= '<div>&rsaquo; <a href="reply_reviews.php?module='.
$module['course_id'].'&cycle='.($review_info['revision_cycle']).'">
Read and comment on reviews</a></div>'; 
 
 copy reply_reviews.php from peer_review to /education/instructor_resources

Tuesday, November 5, 2013

Peer review (15) instructor read and reply to reviews




copy C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\education\peer_review\reviews.php to instructor_reviews.php and modify.

C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\education\peer_review\index.php
line 47 add:
          <ul><li>
          <a href="instructor_reviews.php">My Modules In Review</a>
             <br />Read  my module reviews.</li>
          <li>
          <a href="module_reviews_reply.php">Read and comment on primary peer reviews</a>
             <br />Read  primary  peer reviews and reply.</li>   
            </ul>   
   

copy  /education/instructor_resources/view_reviews.php to education\peer_review\reply_reviews.php

copy /education/instructor_resources/module_reviews.php  education\peer_review\module_reviews_reply.php
copy old pr_read_reviews.tmpl.php to pr_read_reviews0.tmpl.php for  reply_reviews.php
 update
 http://localhost/admin/edu/pr_manage_new.php
copy /_lib/peer_review_calls/add_reviewers.php to
admin/edu/add_primary_reviewers.php
create new table: cesei_module_user_reviews_p (add hide column later)
CREATE TABLE  `cesei_new1`.`cesei_module_user_reviews_p` (
  `review_id` mediumint(8) unsigned NOT NULL auto_increment,
  `member_id` mediumint(8) unsigned NOT NULL,
  `module_id` mediumint(8) unsigned NOT NULL,
  `revision_cycle` tinyint(3) unsigned NOT NULL default '0',
  `is_complete` tinyint(3) unsigned NOT NULL default '0',
  `date_assigned` date NOT NULL default '0000-00-00',
  `date_complete` date NOT NULL default '0000-00-00',
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


create new table cesei_module_user_review_data_p
CREATE TABLE  `cesei_new1`.`cesei_module_user_review_data_p` (
  `review_id` mediumint(8) unsigned NOT NULL,
  `outline` text NOT NULL,
  `content` text NOT NULL,
  `evaluation` text NOT NULL,
  `overall` text NOT NULL,
  `rating_outline` tinyint(3) unsigned NOT NULL default '0',
  `rating_content` tinyint(3) unsigned NOT NULL default '0',
  `rating_evaluation` tinyint(3) unsigned NOT NULL default '0',
  `rating_overall` tinyint(3) unsigned NOT NULL default '0',
  `has_simulators` tinyint(3) unsigned NOT NULL default '0',
  `simulators` text NOT NULL,
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;


create new table cesei_module_user_rebuttal_data_p
CREATE TABLE  `cesei_new1`.`cesei_module_user_rebuttal_data_p` (
  `review_id` mediumint(8) unsigned NOT NULL,
  `re_outline` text NOT NULL,
  `re_content` text NOT NULL,
  `re_evaluation` text NOT NULL,
  `re_overall` text NOT NULL,
  `re_simulators` text NOT NULL,
  PRIMARY KEY  (`review_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Monday, November 4, 2013

Peer review (14) Add online option besides email for primary reviewer




http://localhost/admin/edu/pr_manage_new.php
add new review from email,  or setup online primary review
Previously instructor can only view and reply in "Review submission" in Instructor resources
Now move this in peer review
 C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_templates\cesei_nav.tmpl.php
line 212 change
 if (isset($_SESSION['review_committee'])){
to
if(($_SESSION['portal_status']['edu'] == STATUS_INSTRUCTOR)||(isset($_SESSION['review_committee']))) {  


C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\education\peer_review\index.php
line 15 change
$access = validate_pr_access(false);
to
$access = validate_pr_access_new(false);

line 53 add
if($access == 'instructor') {
 $page_content  = '<p>Welcome to the CESEI module peer review area.<br />Below you will find the various peer review sections available to you.';
 $page_content  .= '<ol> <li><a href="reviews.php">My Modules In Review</a>
             <br />Read  my module reviews and reply.</li></ol>';
}

C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_lib\peer_review_tools.inc.php
line 80 add
function validate_pr_access_new($guest_ok){
   global $db;
   if(!$_SESSION['member_id']){
      header('Location: /no_access.php');
      exit;
   }
   $sql = "SELECT is_chair FROM cesei_module_review_committee WHERE member_id=".$_SESSION['member_id'];
   $result = mysql_query($sql, $db);
   if($row = mysql_fetch_assoc($result)){
      if($row['is_chair'] == 1){
         return 'chair';
      }else{
         return 'member';
      }
   }
   if(is_admin()){
      return 'admin';
   }
  
   if(($_SESSION['portal_status']['edu'] == STATUS_INSTRUCTOR))  return 'instructor';
   if(!$guest_ok){
      if($_SESSION['review_committee'] == 'guest'){
         header('Location: /education/peer_review/my_reviews.php');
         exit;
      }
   }else{
      if($_SESSION['review_committee'] == 'guest'){
         return 'guest';
      }
   }
   header('Location: /no_access.php');
   exit;
}

peer review (13) Author can see the review





http://localhost/education/peer_review/index.php, line 37 put back:
        <li><a href="reviews.php">Modules In Review</a>
             <br />Listing and access to all current and past reviews</li>

(no, no change) ignore this page
http://localhost/education/peer_review/reviews.php
remove line 25
$sub_level_pages[3]  = Array('url'=>'members.php','title'=>'Committee Members');
line 29 change  (only review_is_done button clicked, the modules will be shown in review, waiting approval and complete)
$modules = get_all_reviewed_modules();
to
$modules_reviewed = get_all_reviewed_modules();
$modules['submitted'] = $modules_reviewed['submitted'];
foreach($modules_reviewed['in_review'] as $module2){
  $sql_2 ="SELECT review_done FROM cesei_review_done WHERE module_id=".$module2['module_id'];
  $result_2 = mysql_query($sql_2, $db);
  $review_done =mysql_result($result_2, 0);

  if($review_done==1) $modules['in_review'][] = $module2;
}
foreach($modules_reviewed['waiting_approval'] as $module2){
  $sql_2 ="SELECT review_done FROM cesei_review_done WHERE module_id=".$module2['module_id'];
  $result_2 = mysql_query($sql_2, $db);
  $review_done =mysql_result($result_2, 0);

  if($review_done==1) $modules['waiting_approval'][] = $module2;
}

foreach($modules_reviewed['complete'] as $module2){
  $sql_2 ="SELECT review_done FROM cesei_review_done WHERE module_id=".$module2['module_id'];
  $result_2 = mysql_query($sql_2, $db);
  $review_done =mysql_result($result_2, 0);

  if($review_done==1) $modules['complete'][] = $module2;
}

pr_all_modules.tmpl.php
remove line 133-176, 193-248 remove  committee reviewer information
remove line 178 and 240
  <div class="module-link">As the module's primary owner, reviewer information is unavailable.</div>
replace all read_reviews.php to read_reviews_author.php  in
pr_all_modules.tmpl.php
Copy /education/peer_review/read_reviews.php to /education/peer_review/read_reviews_author.php
 /education/peer_review/read_reviews_author.php, line 57 change
$savant->display('pr_read_reviews.tmpl.php');
to
$savant->display('pr_read_reviews_author.tmpl.php');
copy pr_read_reviews.tmpl.php to pr_read_reviews_author.tmpl.php
line 29 change
<br /><strong>Primary review results:</strong><br />
to
<br /><h3>Primary review results:</h3><br />
line  98 add:
 <h3> Committee review results </h3>
line 129 change
   <h2 class="flush-bottom">Overall Comments</h2>
to
  <strong><br />Chair or admin comments in final approval:</strong>

line 138 remove
  <h2 class="flush-bottom">Reviews</h2>

Friday, November 1, 2013

Peer review (12) modify my review for new process, add chiar view in admin




http://www.cesei.org/education/peer_review/my_reviews.php
C:\Users\jiansen\Desktop\CAS\jiansen_dir\www_cesei0_mobile\_lib\peer_review_tools.inc.php
line 650 change (under  function get_my_reviewed_modules_new(){ )
                         WHERE MUR.member_id=$_SESSION[member_id] ORDER BY C.title, MR.revision_cycle";
to
                  LEFT JOIN cesei_review_done D ON MUR.module_id=D.module_id
                  WHERE MUR.member_id=$_SESSION[member_id] AND D.review_done=1 ORDER BY C.title, MR.revision_cycle";

http://localhost/admin/edu/pr_manage.php
Separate  Manage Review Process into 
Manage Review Process (old ) and
Manage Review Process (new)
copy /education/peer_review/chair_manage_modules.php to  /admin/edu/pr_manage_chair.php
also modify top menu of:
http://localhost/admin/edu/pr_members.php
http://localhost/admin/edu/pr_manage_new.php
http://localhost/admin/edu/select_committee_members.php

 /admin/edu/pr_members.php
add a search box
 line 60 add:
<script>
function searchreviewers(search, selectout){
   var searchvalue= document.getElementById(search).value;
   var from_s = document.getElementById(selectout);
   for (var i=0;i<from_s.options.length;i++) {
         var st=from_s.options[i].text;
         if(st.search(searchvalue)>-1) {
                 from_s.selectedIndex =i;
      
           }          
  }
  checkValue(document.getElementById(selectout));
}
</script>

line 130 add
        <button  type='button' id="filter2"  onclick="searchreviewers('search2','users')"> Serach Committee Members</button>
        <input type="text"     id="search2"  maxlength="80" onkeypress="handleKeyPress(event,this.form)" onkeyup="searchreviewers('search2','users')" >

http://localhost/admin/edu/pr_manage_new.php

Add "Undo Review is done"
copy admin/edu/submit_reviewDone.php to submit_undoreviewDone.php