"Books for External Review",
"page callback" => "tbc_external_review_all",
"access arguments" => array("access tbc_external_review"),
"type" => MENU_CALLBACK
);
$items["tbc_external_review/reviewer_profile"] = array(
"title" => "External Reviewer Profile",
"page callback" => "tbc_external_review_profile_all",
"access arguments" => array("access tbc_external_review"),
"type" => MENU_CALLBACK
);
return $items;
}
function tbc_external_review_perm() {
return array("access 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;
}
?>