Example #1
0
 /**
  * Send the status to authors, with anonymous reviews
  */
 function notifyAction()
 {
     $db = $this->zmax_context->db;
     $paperTbl = new Paper();
     $paperStatusTbl = new PaperStatus();
     // Load the reviews template
     $this->view->setFile("review", "review4author.xml");
     $this->view->setBlock("review", "review_mark", "review_marks");
     $this->view->setBlock("review", "review_answer", "review_answers");
     // Set the subject
     $subject = $this->texts->mail->subj_notification;
     if (isset($_REQUEST['id_paper'])) {
         // Mail for one paper
         $idPaper = $_REQUEST['id_paper'];
         $this->view->setFile("content", "showmessage.xml");
         $this->view->setBlock("content", "WARNING_TEMPLATE", " ");
         $paper = $paperTbl->find($idPaper)->current();
         if (!empty($paper->status)) {
             $paper->putInView($this->view);
             $this->view->reviews = $paper->showReviews($this->view);
             $statusRow = $paperStatusTbl->find($paper->status)->current();
             $mail = new Mail(Mail::SOME_USER, $subject, $this->view->getScriptPaths());
             $mail->setTo($paper->emailContact);
             $mail->setFormat(Mail::FORMAT_HTML);
             $mail->loadTemplate($this->lang, $statusRow->mailTemplate);
             // We know the paper, so we can instantiate the mail entities
             $this->view->setVar("mailTemplate", $mail->getTemplate());
             $this->view->assign("mailTemplate", "mailTemplate");
             $mail->setTemplate($this->view->mailTemplate);
             // Put in the view
             $mail->putInView($this->view);
         } else {
             $this->content = "Cannot send notification without a status<br/>";
         }
         echo $this->view->render("layout");
         return;
     } else {
         // Batch mail. Check that all papers have a status,
         // and that there are no missing reviews
         $this->view->setFile("content", "notify.xml");
         $this->view->setBlock("content", "TEMPLATE", "TEMPLATES");
         $res = $db->query("SELECT count(*) AS count FROM Paper p, PaperStatus s " . " WHERE p.status = s.id AND final_status != 'Y'");
         $p = $res->fetch(Zend_Db::FETCH_OBJ);
         if ($p->count > 0) {
             $this->view->content = "Cannot send notification mails: some papers do not have a status";
             echo $this->view->render("layout");
             exit;
         }
         $qReview = "SELECT count(*) AS count FROM Review WHERE overall IS NULL";
         $res = $db->query($qReview);
         $p = $res->fetch(Zend_Db::FETCH_OBJ);
         if ($p->count > 0) {
             $this->view->content = "Cannot send notification mails: missing reviews";
             echo $this->view->render("layout");
             exit;
         }
         // OK. Now give the list of the templates that will be used
         $i = 0;
         $paperStatusList = $paperStatusTbl->fetchAll("final_status = 'Y'");
         $mail = new Mail(Mail::SOME_USER, "", $this->view->getScriptPaths());
         foreach ($paperStatusList as $paperStatus) {
             $this->view->css_class = Config::CssCLass($i++);
             $paperStatus->putInView($this->view);
             $mail->loadTemplate($this->lang, $paperStatus->mailTemplate);
             $this->view->setVar("template_content-{$paperStatus->id}", $mail->getTemplate());
             $this->view->assign("template_content", "template_content-{$paperStatus->id}");
             $this->view->append("TEMPLATES", "TEMPLATE");
         }
         // Send the notification mails.
         $messages = "";
         if (isset($_REQUEST['confirmed']) or isset($_REQUEST['export'])) {
             PaperRow::$loadAbstracts = false;
             $papers = $paperTbl->fetchAll();
             $mail = new Mail(Mail::SOME_USER, $subject, $this->view->getScriptPaths());
             $mail->setFormat(Mail::FORMAT_HTML);
             $mail->setCopyToChair(true);
             foreach ($papers as $paper) {
                 $statusRow = $paperStatusTbl->find($paper->status)->current();
                 $mail->setTo($paper->emailContact);
                 $mail->loadTemplate($this->lang, $statusRow->mailTemplate);
                 $paper->putInView($mail->getEngine());
                 $mail->getEngine()->reviews = $paper->showReviews($this->view);
                 if (isset($_REQUEST['confirmed'])) {
                     $mail->send();
                 } else {
                     $messages .= $mail->getMessage() . "\n\n";
                 }
             }
         }
     }
     if (isset($_REQUEST['export'])) {
         header("Content-disposition: attachment; filename=notificationMails.txt");
         header("Content-Type: application/force-download");
         header("Content-Transfer-Encoding: text\n");
         header("Content-Length: " . strlen($messages));
         header("Pragma: no-cache");
         header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
         header("Expires: 0");
         echo $messages;
     } else {
         echo $this->view->render("layout");
     }
 }
 /**
  * The default action. It just displays the home page
  */
 function indexAction()
 {
     if (!$this->config->isPhaseOpen(Config::REVIEWING_PHASE)) {
         $this->view->content = $this->texts->reviewer->review_phase_is_closed;
         echo $this->view->render("layout");
         return;
     }
     $nbPapersInGroup = 15;
     // Get the current group
     $currentGroup = $this->getRequest()->getParam("group", "0");
     if ($currentGroup == "0") {
         if (isset($_SESSION['myreview_current_group'])) {
             $currentGroup = $_SESSION['myreview_current_group'];
         } else {
             $currentGroup = 1;
         }
     }
     // Put in the session
     $_SESSION['myreview_current_group'] = $currentGroup;
     $minPaper = ($currentGroup - 1) * $nbPapersInGroup + 1;
     $maxPaper = $minPaper + $nbPapersInGroup;
     $loginSuccessful = $this->getRequest()->getParam("login_successful");
     if (!empty($loginSuccessful)) {
         $this->view->initial_message = $this->zmax_context->texts->welcome_connected_reviewer;
     } else {
         $this->view->initial_message = "";
     }
     $this->view->setFile("content", "index.xml");
     $texts = $this->zmax_context->texts;
     $requiredFileTbl = new RequiredFile();
     /* Select all the papers and list them.
        First extract the 'bloc' describing a line from the template */
     $this->view->setBlock("content", "GROUP", "GROUPS");
     $this->view->setBlock("content", "PAPER", "PAPERS");
     $this->view->setBlock("content", "FORUM_LINK");
     $this->view->setBlock("PAPER", "ALL_REVIEWS", "REVIEWS");
     $this->view->setBlock("PAPER", "MY_REVIEW", "REVIEW");
     $this->view->setBlock("PAPER", "DOWNLOAD", "DOWNLOADS");
     $this->view->setBlock("DOWNLOAD", "DOWNLOAD_LINK", "THE_LINK");
     $this->view->setBlock("PAPER", "review", "show_review");
     $this->view->setBlock("review", "review_mark", "review_marks");
     $this->view->setBlock("review", "review_answer", "review_answers");
     $this->view->setBlock("PAPER", "SECTION", "SECTIONS");
     $this->view->setBlock("PAPER", "ANSWER", "ANSWERS");
     if ($this->config->discussion_mode != Config::GLOBAL_DISCUSSION) {
         $this->view->set_var("FORUM_LINK", "");
     }
     // First, create the groups
     $iPaper = 0;
     $iGroup = 0;
     $begin = 1;
     $qPapers = "SELECT idPaper FROM Review WHERE id_user = '******'";
     $rPapers = $this->zmax_context->db->fetchAll($qPapers);
     $nbPapers = count($rPapers);
     // echo "Nb = $nbPapers<br/>";
     // while ($p =  $rPapers->fetch (Zend_Db::FETCH_OBJ)) {
     foreach ($rPapers as $paper) {
         $iPaper++;
         if ($iPaper % $nbPapersInGroup == 0 or $iPaper == $nbPapers) {
             $iGroup++;
             $end = $iPaper;
             $this->view->group_desc = "({$begin}-{$end})";
             $this->view->id_group = $iGroup;
             if ($iGroup == $currentGroup) {
                 $this->view->current_group = " bgcolor='lightgrey' ";
             } else {
                 $this->view->current_group = "";
             }
             $this->view->append("GROUPS", "GROUP");
             $begin = $end + 1;
         }
     }
     // Loop on the papers assigned to the reviewer
     $reviews = $this->user->findReview();
     $nbPapers = $i = 0;
     foreach ($reviews as $review) {
         $nbPapers++;
         // Take account of groups
         if ($nbPapers < $minPaper or $nbPapers >= $maxPaper) {
             continue;
         }
         $this->view->set_var("css_class", Config::CssCLass($i));
         $paper = $review->findParentPaper();
         // Instantiate entities in the view
         $paper->putInView($this->view);
         // Loop on the files associated to the paper, and propose a download link
         $requiredFiles = $requiredFileTbl->fetchAll();
         $countRequired = 0;
         $this->view->DOWNLOADS = "";
         foreach ($requiredFiles as $requiredFile) {
             $requiredFile->putInView($this->view);
             $countRequired++;
             if (!$paper->fileExists($requiredFile)) {
                 $this->view->THE_LINK = $texts->reviewer->not_yet_uploaded;
             } else {
                 $this->view->assign("THE_LINK", "DOWNLOAD_LINK");
             }
             $this->view->assign("DOWNLOAD_BIS", "DOWNLOAD");
             $this->view->append("DOWNLOADS", "DOWNLOAD_BIS");
         }
         if ($countRequired == 0) {
             $this->view->DOWNLOADS = $texts->reviewer->no_file_to_download;
         }
         if (!$review->overall) {
             $this->view->submit_review = "<font color='red'>" . $texts->reviewer->submit_review . "</font>";
         } else {
             $this->view->submit_review = "<font color='green'>" . $texts->reviewer->update_review . "</font>";
         }
         // If the local discussion mode is enabled AND the reviewer has posted her
         // review: give the ability to look at other reviews
         if ($this->config->discussion_mode != Config::NO_DISCUSSION and $review->overall) {
             $this->view->review_header = $texts->reviewer->all_reviews;
             $this->view->set_var("REVIEW", "");
             $this->view->assign("REVIEWS", "ALL_REVIEWS");
         } else {
             // Show only my review, no forum, no other reviews
             $this->view->show_review = $review->showReview($this->view);
             $this->view->assign("REVIEW", "MY_REVIEW");
             $this->view->review_header = $texts->reviewer->your_review;
             $this->view->REVIEWS = "";
         }
         $this->view->append("PAPERS", "PAPER");
     }
     if ($nbPapers == 0) {
         $this->view->set_var("PAPERS", "No papers");
     }
     echo $this->view->render("layout");
 }
 function attendeesAction()
 {
     $userTbl = new User();
     // Put the session in the view
     $this->session->putInView($this->view);
     // Check whther an export is required
     if (isset($_REQUEST['export_action'])) {
         $exportRequired = true;
         $exportType = $_REQUEST['export_action'];
     } else {
         $exportRequired = false;
     }
     // load the template
     if (!$exportRequired) {
         $this->view->set_file("content", "attendees.xml");
     } else {
         if ($exportType == Config::EXPORT_EXCEL) {
             $this->view->setFile("content", "attendees_xls.xml");
             $mimeType = "text/xls";
             $exportName = "attendees.xls";
         } else {
             // Default: HTML
             $this->view->setFile("content", "attendees_html.xml");
             $mimeType = "text/plain";
             $exportName = "attendees.html";
         }
     }
     /* Select all the users and list them.
        First extract the 'block' describing a line from the template */
     $this->view->set_block("content", "ATTENDEE", "ATTENDEES");
     $this->view->set_block("content", "GROUPS_LINKS", "LINKS");
     if (isset($_REQUEST['remove'])) {
         $idUser = $this->getRequest()->getParam('id_user');
         // instantiate a PaperRow object. Ok, not elegant, but easier
         $user = $userTbl->find($idUser)->current();
         $user->delete();
     }
     if (isset($_REQUEST['confirm_payment'])) {
         $idUser = $this->getRequest()->getParam('id_user');
         // instantiate a PaperRow object. Ok, not elegant, but easier
         $user = $userTbl->find($idUser)->current();
         $user->payment_received = 'Y';
         $user->save();
     }
     $nbAttendees = 0;
     // Initialize the current interval
     if (!isset($_REQUEST['iMin'])) {
         $iMinCur = 1;
         $iMaxCur = self::SIZE_ATTENDEES_GROUP;
     } else {
         $iMinCur = $_REQUEST['iMin'];
         $iMaxCur = $_REQUEST['iMax'];
     }
     // Export? No group.
     if ($exportRequired) {
         $iMinCur = 0;
         $iMaxCur = 999999999;
     }
     // Get all the attendees, ordered by last name
     $userTbl = new User();
     $users = $userTbl->fetchAll(" roles LIKE '%P%'", "last_name");
     $this->view->mailType = Mail::SOME_USER;
     $i = 0;
     foreach ($users as $user) {
         $i++;
         if ($i >= $iMinCur and $i <= $iMaxCur) {
             // Choose the CSS class
             $this->view->css_class = Config::CssCLass($i);
             $user->putInView($this->view);
             $this->view->choices = "";
             // Get the answer to open questions
             $rAnswers = $this->zmax_context->db->query("SELECT * FROM RegAnswer a, RegQuestion q, " . " RegChoice c WHERE a.id_question = q.id and a.id_user='******' " . " AND a.id_answer=c.id_choice AND c.id_question=q.id");
             while ($answer = $rAnswers->fetch(Zend_Db::FETCH_OBJ)) {
                 $this->view->choices .= "{$answer->question_code}: {$answer->choice}; ";
             }
             $this->view->append("ATTENDEES", "ATTENDEE");
         }
     }
     // Export if required
     if ($exportRequired) {
         $this->view->assign("export", "content");
         $this->exportFile($exportName, $mimeType, $this->view->export);
         return;
     }
     // Create the groups
     $nbAttendees = $i;
     $nb_groups = $nbAttendees / self::SIZE_ATTENDEES_GROUP + 1;
     for ($i = 1; $i <= $nb_groups; $i++) {
         $iMin = ($i - 1) * self::SIZE_ATTENDEES_GROUP + 1;
         if ($iMin >= $iMinCur and $iMin <= $iMaxCur) {
             $link = "<font color=red>{$i}</font>";
         } else {
             $link = $i;
         }
         $this->view->set_var("LINK", $link);
         $this->view->set_var("IMIN_VALUE", $iMin);
         $this->view->set_var("IMAX_VALUE", $iMin + self::SIZE_ATTENDEES_GROUP - 1);
         $this->view->append("LINKS", "GROUPS_LINKS");
     }
     $this->view->nb_attendees = $nbAttendees;
     echo $this->view->render("layout");
 }
 /**
  *  List of papers with their reviews
  */
 private function papersReviews($view, $templateName, $html = true, $anonymized = false)
 {
     $db = Zend_Db_Table::getDefaultAdapter();
     $paperTbl = new Paper();
     $paperStatusTbl = new PaperStatus();
     $criteriaTbl = new Criteria();
     $reviewTbl = new Review();
     $reviewMarkTbl = new ReviewMark();
     $registry = Zend_registry::getInstance();
     $config = $registry->get("Config");
     $config->putInView($view);
     // Set the mail types
     $view->someUser = Mail::SOME_USER;
     // Extract the block for each paper
     $view->setBlock($templateName, "PAPER_DETAIL", "PAPERS");
     $view->setBlock($templateName, "REVIEW_CRITERIA", "REVIEW_CRITERIAS");
     $view->setBlock("PAPER_DETAIL", "PAPER_INFO", "PAPER_DATA");
     $view->setBlock("PAPER_DETAIL", "REVIEW_MARK", "REVIEW_MARKS");
     $view->setBlock("PAPER_DETAIL", "REVIEWER", "REVIEWER_INFO");
     // Header of the  table, taken from table Criteria
     $criterias = $criteriaTbl->fetchAll();
     $listCriterias = array();
     foreach ($criterias as $criteria) {
         $criteria->putInView($view);
         $listCriterias[] = $criteria;
         $view->append("REVIEW_CRITERIAS", "REVIEW_CRITERIA");
     }
     // Sort the papers on the average 'overall' field
     $query = "SELECT p.*, round(AVG(overall),4) AS overall " . "FROM Paper p LEFT JOIN Review r ON p.id=r.idPaper " . " WHERE inCurrentSelection='Y' GROUP BY p.id";
     $result = $db->query($query);
     $arrPaper = $rankPaper = array();
     while ($paper = $result->fetch(Zend_Db::FETCH_OBJ)) {
         $arrPaper[$paper->id] = $paper;
         $rankPaper[$paper->id] = $paper->overall;
     }
     // Get the status list
     $statusList = $db->fetchPairs("SELECT * FROM PaperStatus WHERE final_status='Y'");
     // Sort in descending order
     arsort($rankPaper);
     reset($rankPaper);
     // List the papers in order
     $iPaper = 0;
     foreach ($rankPaper as $idPaper => $overall) {
         $paper = $arrPaper[$idPaper];
         // Choose the CSS class
         $view->css_class = Config::CssCLass($iPaper++);
         $view->paper_id = $paper->id;
         $view->paper_title = $paper->title;
         if (!$anonymized) {
             $view->paper_authors = PaperRow::getPaperAuthors($db, $paper);
         } else {
             $view->paper_authors = "[anonymized]";
         }
         $view->paper_email_contact = $paper->emailContact;
         $view->paper_rank = $iPaper;
         $view->paper_overall = $overall;
         $view->form_status = Zmax_View_Phplib::checkboxField("radio", "status[{$paper->id}]", $statusList, $paper->status, array("length" => 2));
         // Now, loop on reviews
         $qRev = "SELECT * FROM Review r, User u " . " WHERE idPaper='{$paper->id}' AND u.id=r.id_user";
         $resRev = $db->query($qRev);
         $countReviews = 0;
         $mail_reviewers = $comma = "";
         while ($review = $resRev->fetch(Zend_Db::FETCH_OBJ)) {
             $countReviews++;
             $mail_reviewers .= $comma . $review->email;
             $comma = ", ";
         }
         $view->paper_nb_reviewers = Max(1, $countReviews);
         //echo "Mail reviewers = $mail_reviewers<br/>";
         $view->paper_email_reviewers = $mail_reviewers;
         $view->append("PAPER_DATA", "PAPER_INFO");
         $resRev = $db->query($qRev);
         $iReview = 0;
         while ($review = $resRev->fetch(Zend_Db::FETCH_OBJ)) {
             $iReview++;
             $view->reviewer_id = $review->id;
             if ($anonymized == false) {
                 $view->reviewer_fname = $review->first_name;
                 $view->reviewer_lname = $review->last_name;
                 $view->external_reviewer_fname = $review->fname_ext_reviewer;
                 $view->external_reviewer_lname = $review->lname_ext_reviewer;
                 $view->review_comments = $review->comments;
             } else {
                 $view->reviewer_fname = $iReview;
                 $view->reviewer_lname = "";
                 $view->external_reviewer_fname = "";
                 $view->external_reviewer_lname = "";
                 $view->review_comments = "";
             }
             $view->reviewer_email = $review->email;
             $view->review_overall = $review->overall;
             $view->review_summary = $review->summary;
             $view->review_details = $review->details;
             if ($review->reviewerExpertise >= 1 and $review->reviewerExpertise <= 3) {
                 $view->reviewer_expertise = Config::$Expertise[$review->reviewerExpertise];
             }
             // Avoid to introduce Latex commands  in Latex files ....
             if (!$html) {
                 $view->review_summary = str_replace("\\", "", $view->review_summary);
                 $view->review_details = str_replace("\\", "", $view->review_details);
                 $view->review_comments = str_replace("\\", "", $view->review_comments);
             }
             $view->assign("REVIEWER_INFO", "REVIEWER");
             reset($listCriterias);
             $view->set_var("REVIEW_MARKS", "");
             foreach ($listCriterias as $criteria) {
                 $reviewMark = $reviewMarkTbl->find($review->idPaper, $review->id_user, $criteria->id)->current();
                 if (!is_object($reviewMark)) {
                     $reviewMark = $reviewMarkTbl->createRow();
                     // for default values
                 }
                 $reviewMark->putInView($view);
                 $view->criteria_label = $criteria->label;
                 $view->append("REVIEW_MARKS", "REVIEW_MARK");
             }
             $view->append("PAPERS", "PAPER_DETAIL");
             // The paper data is shown only once for all the reviews
             $view->set_var("PAPER_DATA", " ");
         }
         // Show the paper even without reviewer
         if ($countReviews == 0) {
             $review = $reviewTbl->createRow();
             $review->putInView($view);
             $view->set_var("REVIEW_MARKS", "");
             foreach ($listCriterias as $id => $label) {
                 $reviewMark = $reviewMarkTbl->createRow();
                 $reviewMark->putInView($view);
                 $view->append("REVIEW_MARKS", "REVIEW_MARK");
             }
             $view->set_var("REVIEWER_INFO", "");
             $view->append("PAPERS", "PAPER_DETAIL");
             $view->set_var("PAPER_DATA", "");
         }
         // Summary for the paper
         if ($html) {
             $statPaper = Paper::getStats($paper->id, $listCriterias);
             $markFieldName = "ReviewMark" . "->mark";
             $overallFieldName = "review_overall";
             $view->set_var("NB_REVIEWERS", 1);
             if ($html) {
                 $view->set_var("PAPER_DATA", "<td>&nbsp;</td><th>Summary</th>");
             }
             $view->set_var("REVIEWER_INFO", " ");
             $view->set_var($overallFieldName, $paper->overall);
             reset($listCriterias);
             $view->set_var("REVIEW_MARKS", "");
             foreach ($listCriterias as $c) {
                 $view->setVar($markFieldName, $statPaper[$c->id]);
                 $view->append("REVIEW_MARKS", "REVIEW_MARK");
             }
             $view->append("PAPERS", "PAPER_DETAIL");
             $view->set_var("PAPER_DATA", "");
         }
     }
 }
 /**
  * Attendee console: shows tha account and the list of submitted papers
  */
 function consoleAction()
 {
     $this->view->setFile("content", "index.xml");
     $this->view->setBlock("content", "PAPER", "PAPERS");
     $this->view->setBlock("PAPER", "UPLOAD", "UPLOADS");
     $this->view->setBlock("PAPER", "UPLOAD_BUTTON");
     $this->view->setBlock("UPLOAD", "DOWNLOAD", "DOWNLOAD_LINK");
     $requiredFileTbl = new RequiredFile();
     // Put user info in the view
     $this->user->putInView($this->view);
     // Loop on the papers of the current user
     $authors = $this->user->findAuthor();
     $i = 0;
     foreach ($authors as $author) {
         $this->view->css_class = Config::CssCLass($i++);
         // Get the paper
         $paper = $author->findParentPaper();
         $author->putInView($this->view);
         $paper->putInView($this->view);
         $this->view->UPLOADS = "";
         // Loop on the required file, and propose an upload link if required
         $requiredFiles = $requiredFileTbl->fetchAll();
         $countRequired = 0;
         $submissionComplete = true;
         $message = "";
         foreach ($requiredFiles as $requiredFile) {
             // Check the file is required in the current phase
             if ($this->config->isPhaseOpen($requiredFile->id_phase)) {
                 $requiredFile->putInView($this->view);
                 $countRequired++;
                 if ($requiredFile->mandatory == 'Y') {
                     $this->view->file_mandatory = '*';
                 } else {
                     $this->view->file_mandatory = '';
                 }
                 if (!$paper->fileExists($requiredFile)) {
                     $this->view->DOWNLOAD_LINK = " ";
                     if ($requiredFile->mandatory == 'Y') {
                         // The submission is not complete!
                         $submissionComplete = false;
                         $this->view->font_color = "red";
                     } else {
                         $this->view->font_color = "green";
                     }
                 } else {
                     $this->view->assign("DOWNLOAD_LINK", "DOWNLOAD");
                     $this->view->font_color = "green";
                 }
                 $this->view->append("UPLOADS", "UPLOAD");
             }
         }
         // Submission no complete? Show it
         if ($submissionComplete) {
             $this->view->icon_name = "ok-icon.png";
         } else {
             $this->view->icon_name = "warning-icon.png";
         }
         $this->view->message = $message;
         // Allright. Nothing to upload? Tell it.
         if ($countRequired == 0) {
             $this->view->UPLOADS = "No file to upload at this moment<br/>";
             $this->view->UPLOAD_BUTTON = " ";
         }
         // Two instantiations to resolve dynamic labels
         $this->view->assign("PAPER2", "PAPER");
         $this->view->append("PAPERS", "PAPER2");
     }
     if ($i == 0) {
         // Don't show the submision block;
         $this->view->PAPERS = $this->texts->author->no_submission_so_far;
     }
     echo $this->view->render("layout");
 }
 /**
  *
  * Manage the list of program committee members
  *
  */
 function usersAction()
 {
     $texts =& $this->zmax_context->texts;
     // Create the infos for the filter list
     if (isset($_POST['filter_roles'])) {
         $filterRoles = array_flip($_POST['filter_roles']);
     } else {
         // Show only reviewers
         $filterRoles = array_flip(array("R"));
     }
     if (isset($_POST['mail_filter'])) {
         $this->view->mail_filter = $_POST['mail_filter'];
         $mailCriteria = " email LIKE '%{$this->view->mail_filter}%' ";
     } else {
         $this->view->mail_filter = "";
         $mailCriteria = " 1 ";
     }
     if (isset($_POST['name_filter'])) {
         $this->view->name_filter = $_POST['name_filter'];
         $nameCriteria = " last_name LIKE '%{$this->view->name_filter}%' ";
     } else {
         $this->view->name_filter = "";
         $nameCriteria = " 1 ";
     }
     $this->view->filter_roles_list = Zmax_View_Phplib::checkboxField("checkbox", "filter_roles[]", Config::$Roles, $filterRoles, array());
     $filterRolesList = "";
     $connector = "";
     foreach (array_flip($filterRoles) as $role) {
         $filterRolesList .= " {$connector} roles LIKE '%{$role}%' ";
         $connector = " OR ";
     }
     $user = new User();
     $request = $this->getRequest();
     $email = $request->getParam('email');
     // Check whether an export is required
     if (isset($_REQUEST['export_action'])) {
         $exportRequired = true;
         $exportType = $_REQUEST['export_action'];
     } else {
         $exportRequired = false;
     }
     // load the template
     if (!$exportRequired) {
         $this->view->setFile("content", "users.xml");
         $this->view->setBlock("content", "post_message", " ");
     } else {
         if ($exportType == Config::EXPORT_EXCEL) {
             $this->view->setFile("content", "members_xls.xml");
             $mimeType = "text/xls";
             $exportName = "members.xls";
         } else {
             // Default: HTML
             $this->view->setFile("content", "members_html.xml");
             $mimeType = "text/plain";
             $exportName = "members.html";
         }
     }
     // After submission, insert
     if (isset($_REQUEST['id_user'])) {
         $idUser = $request->getParam("id_user");
         if (!isset($_POST['form_mode'])) {
             // The user exists. It must be modified or removed
             $instr = $request->getParam("instr");
             $userRow = $user->find($idUser)->current();
             if ($instr == "modify") {
                 // Just show the form with default values
                 $this->view->pcmember_message = "Modify user infos";
                 $this->view->form_action = $texts->form->update;
                 $this->view->form_mode = "update";
                 $userRow->putInView($this->view);
             } else {
                 if ($instr == "remove") {
                     $this->view->pcmember_message = "User {$email} has been removed";
                     $this->view->form_action = $texts->form->insert;
                     $this->view->form_mode = "insert";
                     $userRow->delete();
                     // Create a new user for insertion
                     $userRow = $user->createRow();
                     $userRow->roles = User::REVIEWER_ROLE;
                     $userRow->putInView($this->view);
                 }
             }
         } else {
             // Data comes from the form
             $form_mode = $request->getParam("form_mode");
             if ($form_mode == "insert") {
                 $userRow = $user->createRow();
             } else {
                 $userRow = $user->find($idUser)->current();
             }
             $this->view->form_action = $texts->form->update;
             $userRow->email = $_POST['email'];
             $userRow->first_name = $_POST['first_name'];
             $userRow->last_name = $_POST['last_name'];
             if (isset($_POST['topics'])) {
                 $userRow->setTopicsFromArray($_POST['topics']);
             }
             if (isset($_POST['roles'])) {
                 $userRow->setRolesFromArray($_POST['roles']);
             }
             $messages = $userRow->checkValues($this->zmax_context->texts, array("affiliation", "address", "city", "zip_code"));
             // Any error ?
             if (count($messages) > 0) {
                 $this->view->setFile("error", "error.xml");
                 $this->view->setBlock("error", "ERROR", "ERRORS");
                 foreach ($messages as $message) {
                     $this->view->message = $message;
                     $this->view->append("ERRORS", "ERROR");
                 }
                 $this->view->assign("pcmember_message", "ERRORS");
                 $this->view->form_mode = $form_mode;
             } else {
                 /* Everything is OK. Save and display the form with the user */
                 $userRow->save();
                 $this->view->assign("pcmember_message", "post_message");
             }
             // Always put the current data in the view
             $userRow->putInView($this->view);
         }
     } else {
         /* Display the form with an empty user*/
         $this->view->pcmember_message = "";
         $this->view->form_action = $texts->form->insert;
         $this->view->form_mode = "insert";
         $userRow = $user->createRow();
         $userRow->roles = User::REVIEWER_ROLE;
         $userRow->putInView($this->view);
     }
     // We are ready to instantiate the form
     $this->view->form_reviewer = $userRow->form($this->view, "form_reviewer.xml");
     $this->view->someUser = Mail::SOME_USER;
     /* Select all the members and list them.
     		 First extract the 'block' describing a line from the template */
     $this->view->setBlock("content", "MEMBER", "MEMBERS");
     $pcmembers = $user->fetchAll("{$mailCriteria} AND {$nameCriteria} AND ({$filterRolesList})", 'last_name');
     $i = 0;
     foreach ($pcmembers as $member) {
         $member->putInView($this->view);
         // Choose the CSS class
         $this->view->css_class = Config::CssCLass($i++);
         $this->view->append("MEMBERS", "MEMBER");
     }
     if ($exportRequired) {
         $this->view->assign("export", "content");
         $this->exportFile($exportName, $mimeType, $this->view->export);
         return;
     }
     // Show the view
     echo $this->view->render("layout");
 }
Example #7
0
 public function showReview($view, $html = false, $revName = "review")
 {
     $db = Zend_Db_Table::getDefaultAdapter();
     // Initialize the review content
     $view->review_marks = "";
     $view->review_answers = "";
     // Put the data in the view
     $this->putInView($view, $html);
     // Default selection of the reviewer expertise
     $selectedName = "selected" . $this->reviewerExpertise;
     $view->setVar($selectedName, "selected");
     // Get the reviewer
     $reviewer = $this->findParentUser();
     $reviewer->putInView($view, $html);
     // Get the paper
     $paper = $this->findParentPaper();
     $paper->putInView($view, $html);
     // Show the marks
     $j = 0;
     foreach ($this->_marks as $mark) {
         // Choose the CSS class
         $view->css_class = Config::CssCLass($j++);
         $mark->putInView($view);
         $criteria = $mark->findParentCriteria();
         $criteria->putInView($view, $html);
         // Create the list of marks (for forms)
         $view->list_marks = Zmax_View_Phplib::selectField("marks[{$criteria->id}]", Config::$Scale, $mark->mark);
         $view->append($revName . "_marks", $revName . "_mark");
     }
     // Put the answers to questions
     foreach ($this->_answers as $answer) {
         // Choose the CSS class
         $view->css_class = Config::CssCLass($j++);
         // Instantiate the answer
         $answer->putInView($view, $html);
         // Get and instantiate the question
         $question = $answer->findParentReviewQuestion();
         $question->putInView($view);
         // get and instantiate the choice
         $choiceList = $db->fetchPairs("SELECT * FROM RQChoice WHERE id_question={$answer->id_question}");
         $choice = $answer->findParentRQChoice();
         if (is_object($choice)) {
             $choice->putInView($view);
         }
         $view->list_choices = Zmax_View_Phplib::checkboxField("radio", "answers[{$answer->id_question}]", $choiceList, $answer->id_answer, array());
         $view->append($revName . "_answers", $revName . "_answer");
     }
     // Instantiate twice to resolve translations
     $view->assign("result1", $revName);
     $view->assign("result2", "result1");
     return $view->result2;
 }