"ER Books Available",
"page callback" => "tbc_external_review_all",
"access arguments" => array("access tbc_external_review"),
"type" => MENU_CALLBACK
);
$items["tbc_external_review/reviewer_profile"] = array(
"title" => "TBC External Reviewer Profile",
"page callback" => "tbc_external_review_profile_all",
"access arguments" => array("access tbc_external_review"),
"type" => MENU_CALLBACK
);
$items["tbc_external_review/view_reviewers"] = array(
"title" => "ER List Reviewers",
"page callback" => "tbc_external_review_view_all",
"access arguments" => array("administer tbc_external_review"),
"type" => MENU_NORMAL_ITEM
);
$items["tbc_external_review/reviewer_selections"] = array(
"title" => "TBC External Reviewer Selections",
"page callback" => "tbc_external_review_reviewer_selections_all",
"access arguments" => array("administer tbc_external_review"),
"type" => MENU_CALLBACK
);
$items["tbc_external_review/selected_books"] = array(
"title" => "Books for External Review",
"page callback" => "tbc_external_review_selected_books_all",
"access arguments" => array("download tbc_external_review"),
"type" => MENU_NORMAL_ITEM
);
$items["tbc_external_review/comments"] = array(
"title" => "External Review Comments",
"page callback" => "tbc_external_review_comments_all",
"access arguments" => array("download tbc_external_review"),
"type" => MENU_NORMAL_ITEM
);
$items["tbc_external_review/manage_comments"] = array(
"title" => "ER Manage Comments",
"page callback" => "tbc_external_review_manage_comments_all",
"access arguments" => array("administer tbc_external_review"),
"type" => MENU_NORMAL_ITEM
);
$items["tbc_external_review/status"] = array(
"title" => "ER View Status",
"page callback" => "tbc_external_review_status_all",
"access arguments" => array("administer tbc_external_review"),
"type" => MENU_NORMAL_ITEM
);
$items["tbc_external_review/ajax"] = array(
"page callback" => "tbc_external_review_ajax",
"access arguments" => array("download tbc_external_review"),
"type" => MENU_CALLBACK
);
return $items;
}
function tbc_external_review_perm() {
return array(
"access tbc_external_review", "administer tbc_external_review",
"download tbc_external_review"
);
}
/*
book selection form
{external_review_details} database required.
fields: preference_id, uid, status
status = 1 for selected.
*/
function tbc_external_review_form($form_state) {
global $user;
$form = array();
/* create multiple checkboxes from database */
$result = remaining_books();
$num_rows = mysql_num_rows($result);
if($num_rows > 0) {
while($row = db_fetch_object($result)) {
$form[$row->id] = array(
"#type" => "checkbox",
"#title" => t("{$row->book} by {$row->author} ( ed: {$row->edition}, pub: {$row->year})"),
);
}
$form["submit"] = array(
"#type" => "submit",
"#value" => "Submit",
);
} else {
drupal_set_message("All the available books have been selected. Please wait for more updates. ", "status");
}
return $form;
}
function tbc_external_review_form_validate($form, &$form_state) {
$result = remaining_books();
$count = 0;
$selections = array();
while($row = db_fetch_object($result)) {
if($form_state["values"][$row->id] == 1) {
$count++;
array_push($selections, $row->id);
}
}
$remaining = remaining_books_count();
if($count > $remaining) {
form_set_error("", "You can select a maximum of {$remaining} books.");
} else {
$form_state["values"]["selections"] = $selections;
}
}
function tbc_external_review_form_submit($form, &$form_state) {
global $user;
$selections = $form_state["values"]["selections"];
foreach($selections as $selection) {
$query = "update {external_review_details} set uid = {$user->uid}, status = 1 where preference_id = {$selection}";
db_query($query);
}
drupal_set_message("Your selections have been updated sucessfully. ", "status");
}
function tbc_external_review_all() {
global $user;
$page_content = "";
$remaining = remaining_books_count();
if($remaining > 0) {
$page_content = "You have {$remaining} selections remaining:";
$page_content .= drupal_get_form("tbc_external_review_form");
} else {
$page_content = "Thanks for your selections.";
}
return $page_content;
}
/* helper functions */
function remaining_books_count() {
global $user;
/*finding how many books the user can select */
$query = "select count(*) from {external_review_details} where uid = {$user->uid}";
$result = db_query($query);
$row = db_fetch_array($result);
$remaining = 6 - $row["count(*)"];
return $remaining;
}
function remaining_books() {
$query = "select * from {textbook_companion_preference} where id in (select preference_id from {external_review_details} where status = 0)";
$result = db_query($query);
return $result;
}
/*
external reviewer profile form,
save the data in {external_review_profile}
*/
function tbc_external_review_profile_form() {
global $user;
$form = array();
/* populating the form with previous entry details if exists */
$query = "select * from {external_review_profile} where uid = %d";
$result = db_query($query, $user->uid);
$row = db_fetch_array($result);
$form["first_name"] = array(
"#type" => "textfield",
"#title" => t("First Name"),
"#required" => True,
"#default_value" => $row["first_name"],
);
$form["last_name"] = array(
"#type" => "textfield",
"#title" => t("Last Name"),
"#required" => True,
"#default_value" => $row["last_name"],
);
$form["designation"] = array(
"#type" => "textfield",
"#title" => t("Designation"),
"#required" => True,
"#default_value" => $row["designation"],
);
$form["university"] = array(
"#type" => "textfield",
"#title" => t("University/Institute"),
"#required" => True,
"#default_value" => $row["university"],
);
$form["phone"] = array(
"#type" => "textfield",
"#title" => t("Phone Number"),
"#required" => True,
"#default_value" => $row["phone"],
);
$form["email"] = array(
"#type" => "textfield",
"#title" => t("Email"),
"#required" => True,
"#default_value" => $row["email"],
);
$form["alt_email"] = array(
"#type" => "textfield",
"#title" => t("Alternate Email"),
"#default_value" => $row["alt_email"],
);
$form["address"] = array(
"#type" => "textarea",
"#title" => t("Postal Address"),
"#required" => True,
"#default_value" => $row["address"],
);
$form["description"] = array(
"#type" => "textarea",
"#title" => t("Description:
(Research interest / Level of expertise in Scilab / Teaching Expertise )
"),
"#required" => True,
"#default_value" => $row["description"],
);
$form["submit"] =array(
"#type" => "submit",
"#value" => "Update Profile",
);
return $form;
}
function tbc_external_review_profile_form_validate($form, &$form_state) {
/* validating phone */
if(!preg_match("/^[0-9]+$/", $form_state["values"]["phone"])) {
form_set_error("phone", "Please enter a valid Phone Number, only (0-9) allowed.");
}
/*validating email */
if(!valid_email_address($form_state["values"]["email"])) {
form_set_error("email", "Please enter a valid Email address");
}
if($form_state["values"]["alt_email"] && !valid_email_address($form_state["values"]["alt_email"])) {
form_set_error("alt_email", "Please enter a valid Alternate Email address" );
}
/* validating address */
if(strlen($form_state["values"]["address"]) < 20) {
form_set_error("address", "Please enter a proper Postal Address.");
}
/* validating description */
if(strlen($form_state["values"]["description"]) < 25) {
form_set_error("description", "Please enter a longer description.");
}
}
function tbc_external_review_profile_form_submit($form, &$form_state) {
global $user;
/* setting $val as the new values array */
$val = array();
$val = $form_state["values"];
/* checking whether the user already has an entry */
$query = "select uid from {external_review_profile} where uid = %d";
$result = db_query($query, $user->uid);
$has_entry = mysql_num_rows($result);
if($has_entry) {
/* update the existing entry */
$query = "update {external_review_profile}
set
first_name = '%s', last_name = '%s', designation = '%s',
university = '%s', phone = '%s', email = '%s', alt_email = '%s',
address = '%s', description = '%s'
where uid = %d
";
$result = db_query(
$query, $val["first_name"], $val["last_name"], $val["designation"], $val["university"],
$val["phone"], $val["email"], $val["alt_email"], $val["address"], $val["description"],
$user->uid
);
} else {
/* create a new entry */
$query = "insert into {external_review_profile}
(uid, first_name, last_name, designation, university, phone, email, alt_email, address, description)
values
(%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')
";
$result = db_query(
$query, $user->uid, $val["first_name"], $val["last_name"], $val["designation"], $val["university"],
$val["phone"], $val["email"], $val["alt_email"], $val["address"], $val["description"]
);
}
if($result) {
drupal_set_message("Profile updated successfully. Thank you.", "status");
} else {
drupal_set_message("Database updation failed. Please contact support.", "error");
}
drupal_goto('tbc_external_review');
}
function tbc_external_review_profile_all() {
$page_content = "";
$page_content .= drupal_get_form("tbc_external_review_profile_form");
return $page_content;
}
function tbc_external_review_view_all() {
$page_content = "";
$query = "select * from {external_review_profile}";
$result = db_query($query);
$page_content .= "
";
while($row = db_fetch_object($result)) {
$page_content .= "";
$page_content .= l("{$row->first_name} {$row->last_name}", "tbc_external_review/reviewer_selections/{$row->uid}");
$page_content .= " ";
}
$page_content .= " ";
return $page_content;
}
function tbc_external_review_reviewer_selections_all($uid=0) {
$page_content = "";
$query = "SELECT * FROM {external_review_profile} WHERE uid = %d";
$result = db_query($query, $uid);
$row = db_fetch_object($result);
$page_content .= "Books selected by {$row->first_name} {$row->last_name} ";
$query = "
SELECT * FROM {textbook_companion_preference} WHERE id IN
(SELECT preference_id FROM {external_review_details} WHERE uid = %d)
";
$result = db_query($query, $uid);
$page_content .= "";
while($row = db_fetch_object($result)) {
$page_content .= "";
$page_content .= t("{$row->book} by {$row->author} ( ed: {$row->edition}, pub: {$row->year})");
$page_content .= " ";
}
$page_content .= " ";
return $page_content;
}
function tbc_external_review_selected_books_all() {
global $user;
$page_content = "";
$page_content .= "- Please click the books to download them.";
$query = "
SELECT * FROM {textbook_companion_preference} WHERE id IN
(SELECT preference_id FROM {external_review_details} WHERE uid = %d)
";
$result = db_query($query, $user->uid);
$page_content .= "";
while($row = db_fetch_object($result)) {
$page_content .= "";
$page_content .= l(t("{$row->book} by {$row->author} ( ed: {$row->edition}, pub: {$row->year})"), "full_download_external/book/{$row->id}");
$page_content .= " ";
}
$page_content .= " ";
return $page_content;
}
function tbc_external_review_comments_all() {
global $user;
$page_content = "";
$page_content = "* Use this form to notify only examples that have errors.";
$page_content .= drupal_get_form("tbc_external_review_comment_form");
return $page_content;
}
function tbc_external_review_comment_form($form_state) {
$form = array();
global $user;
global $base_url;
$form["wrapper"] = array(
"#type" => "fieldset",
"#title" => t("
Reviewer comments
"),
"#prefix" => "",
);
$form["wrapper"]["book"] = array(
"#type" => "select",
"#title" => t("Please select the book."),
"#options" => _get_books($user->uid),
);
$form["wrapper"]["chapter"] = array(
"#type" => "select",
"#title" => t("Please select the chapter"),
);
$form["wrapper"]["example"] = array(
"#type" => "select",
"#title" => t("Please select the example"),
);
$form["wrapper"]["error"] = array(
"#type" => "fieldset",
"#title" => "Types of errors found",
"#prefix" => "",
);
$form["wrapper"]["error"]["ncf"] = array(
"#type" => "radios",
"#title" => t("Naming convention followed? (Checklist point 1, 2 and 4)"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["eit"] = array(
"#type" => "radios",
"#title" => t("Error in textbook mentioned as comment?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["axl"] = array(
"#type" => "radios",
"#title" => t("Axes labeled ?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["sua"] = array(
"#type" => "radios",
"#title" => t("Symbols used are appropiate?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["sfu"] = array(
"#type" => "radios",
"#title" => t("Scilab functions used?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["sum"] = array(
"#type" => "radios",
"#title" => t("Solved using Matlab in textbook?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["aci"] = array(
"#type" => "radios",
"#title" => t("Appropriate comments included as mentioned in checklist point 7 ?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["auu"] = array(
"#type" => "radios",
"#title" => t("Appropriate units used as given in the textbook?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["teo"] = array(
"#type" => "radios",
"#title" => t("Typographical errors in output and/or comments?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["amt"] = array(
"#type" => "radios",
"#title" => t("Answers matching with the textbook?"),
"#options" => array(
t("Yes"),
t("No"),
),
);
$form["wrapper"]["error"]["comment"] = array(
"#type" => "textarea",
"#title" => t("Other commment ? (if any)"),
);
$form["wrapper"]["submit"] = array(
"#type" => "submit",
"#value" => "Submit Comment"
);
return $form;
}
function tbc_external_review_comment_form_validate($form, &$form_state) {
// for future use
}
function tbc_external_review_comment_form_submit($form, &$form_state) {
global $user;
$v = $form_state["values"];
$query = "insert into {external_review_comments}
(uid, preference_id, chapter_id, example_id, ncf, eit, axl, sua, sfu, sum, aci, auu, teo, amt, comment)
values
(%d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, %d, '%s')
";
$result = db_query(
$query, $user->uid, $v["book"], $v["chapter"], $v["example"],
$v["ncf"], $v["eit"], $v["axl"], $v["sua"], $v["sfu"], $v["sum"],
$v["aci"], $v["auu"], $v["teo"], $v["amt"], $v["comment"]
);
drupal_set_message(t("Comment submited successfully"), "status");
}
/* Ajax Calls */
function tbc_external_review_ajax($item, $key) {
function _bool($var) {
if($var == 1) {
return "No";
}
return "Yes";
}
$data = "";
if($item == "book" && $key) {
$query = "select * from {textbook_companion_chapter} where preference_id = %d order by number";
$result = db_query($query, $key);
$data .= "Please select the chapter. ";
while($row = db_fetch_object($result)) {
$data .= "{$row->number} {$row->name} ";
}
} else if($item == "chapter" && $key) {
$query = "select * from {textbook_companion_example} where chapter_id = %d order by number";
$result = db_query($query, $key);
$data .= "Please select the example. ";
while($row = db_fetch_object($result)) {
$data .= "{$row->number} {$row->caption} ";
}
} else if($item = "comment" && $key) {
$query = "
SELECT * FROM {external_review_comments} WHERE id = %d
";
$result = db_query($query, $key);
$row = db_fetch_object($result);
$data .= "Type of Error Status ";
$data .= "Naming convention followed? " . _bool($row->ncf) . " ";
$data .= "Problem statement included in code? " . _bool($row->eit) . " ";
$data .= "Axes labeled ? " . _bool($row->axl) . " ";
$data .= "Symbols used are appropiate? " . _bool($row->sua) . " ";
$data .= "Scilab functions used? " . _bool($row->sfu) . " ";
$data .= "Solved using Matlab in textbook? " . _bool($row->sum) . " ";
$data .= "Appropriate comments included as mentioned in checklist point 7 ? " . _bool($row->aci) . " ";
$data .= "Appropriate units used as given in the textbook? " . _bool($row->auu) . " ";
$data .= "Typographical errors in output and/or comments? " . _bool($row->teo) . " ";
$data .= "Answers matching with the textbook? " . _bool($row->amt) . " ";
$data .= "Any Other Comment ? " . $row->comment . " ";
$data .= "
";
}
echo $data;
exit();
}
/* Comment form helper functions */
function _get_books($uid) {
$query = "select * from {textbook_companion_preference} where id in
(select preference_id from {external_review_details} where uid = %d)
";
$result = db_query($query, $uid);
$books = array();
$books[0] = "Please select a book";
while($row = db_fetch_object($result)) {
$books[$row->id] = $row->book;
}
return $books;
}
function tbc_external_review_status_all() {
$page_content = "";
$query = "
SELECT * from textbook_companion_preference tcp INNER JOIN external_review_details erd
ON (tcp.id = erd.preference_id AND erd.status=1) INNER JOIN users ON (erd.uid = users.uid)
ORDER BY users.name
";
$result = db_query($query);
$headers = array(
"Book",
"Author",
"User",
);
$rows = array();
while($row = db_fetch_object($result)) {
$item = array(
"{$row->book}",
"{$row->author}",
"{$row->name}",
);
array_push($rows, $item);
}
$page_content .= "Selected Books ";
$page_content .= theme("table", $headers, $rows);
$query = "
SELECT * from textbook_companion_preference tcp INNER JOIN external_review_details erd
ON (tcp.id = erd.preference_id AND erd.status=0) INNER JOIN users ON (erd.uid = users.uid)
";
$result = db_query($query);
$headers = array(
"Book",
"Author",
);
$rows = array();
while($row = db_fetch_object($result)) {
$item = array(
"{$row->book}",
"{$row->author}",
);
array_push($rows, $item);
}
$page_content .= "Books Not Selected ";
$page_content .= theme("table", $headers, $rows);
return $page_content;
}
function tbc_external_review_manage_comments_all($preference_id=0) {
global $base_url;
$page_content = "";
if($preference_id) {
global $user;
/* displaying comments of a particular user */
$query = "
SELECT erc.*, cha.number AS chapter, exa.number AS example FROM external_review_comments erc
LEFT JOIN textbook_companion_chapter cha ON cha.id = erc.chapter_id
LEFT JOIN textbook_companion_example exa ON exa.id = erc.example_id
WHERE erc.preference_id = %d
ORDER BY erc.time DESC
";
$result = db_query($query, $preference_id);
$headers = array(
"Chapter", "Example",
"Time", "Action"
);
$rows = array();
while($row = db_fetch_object($result)) {
$options = array(
/* # linking in drupal l() */
"fragment" => " ",
"external" => TRUE,
"attributes" => array(
"class" => "view-comment",
"data-comment" => "{$row->id}",
)
);
$item = array(
"{$row->chapter}",
"{$row->example}",
"{$row->time}",
l("View", "", $options),
);
array_push($rows, $item);
}
$page_content .= theme("table", $headers, $rows);
$page_content .= " ";
} else {
/* displaying the list of users */
$query = "
SELECT DISTINCT erc.preference_id, pre.book, pre.author, usr_con.name AS contributor, usr_ext.name AS reviewer
FROM external_review_comments erc
LEFT JOIN textbook_companion_preference pre ON erc.preference_id = pre.id
LEFT JOIN textbook_companion_proposal pro ON pre.proposal_id = pro.id
LEFT JOIN users usr_con ON usr_con.uid = pro.uid
LEFT JOIN users usr_ext ON usr_ext.uid = erc.uid
ORDER BY pre.book
";
$result = db_query($query);
$headers = array(
"Book", "Author",
"Contributor", "Reviewer",
"Action",
);
$rows = array();
while($row = db_fetch_object($result)) {
$item = array(
"{$row->book}",
"{$row->author}",
"{$row->contributor}",
"{$row->reviewer}",
l("View", "tbc_external_review/manage_comments/" . $row->preference_id),
);
array_push($rows, $item);
}
$page_content .= theme("table", $headers, $rows);
}
return $page_content;
}
function tbc_external_review_init() {
drupal_add_css(drupal_get_path("module", "tbc_external_review") . "/css/tbc_external_review.css");
drupal_add_js(drupal_get_path("module", "tbc_external_review") . "/js/jquery.lightbox_me.js");
drupal_add_js(drupal_get_path("module", "tbc_external_review") . "/js/tbc_external_review.js");
}
?>