From 9f1f14fbf1c50179ff0f4f2aa0975616ed4044e6 Mon Sep 17 00:00:00 2001
From: root
Date: Thu, 10 Apr 2014 10:33:04 +0530
Subject: major changes done, updating to github
---
.gitignore | 41 +
cheque_contact.inc | 1 +
code.inc | 4 +-
code_approval.inc | 6 +-
dependency.inc | 4 +-
download.inc | 27 +-
editcode.inc | 4 +-
full_download.inc | 13 +
general.inc | 4 +-
js/textbook_companion.js | 18 +
latex.inc | 14 +
latex/Initial_body | 1 +
manage_proposal.inc | 19 +-
pdf/generate_pdf.inc | 16 +-
pdf/images/fossee.png | Bin 13587 -> 12198 bytes
pdf/images/sign.png | Bin
pdf/list_all_certificates.inc | 54 +-
search.inc | 63 +-
search.inc.bak-23Oct2013 | 249 ++++
textbook_companion.module | 50 +-
textbook_companion.module.backup-feb-3-2014 | 1785 +++++++++++++++++++++++++++
textbook_companion.module.bak-23Oct2013 | 1785 +++++++++++++++++++++++++++
22 files changed, 4121 insertions(+), 37 deletions(-)
create mode 100644 .gitignore
mode change 100644 => 100755 pdf/images/sign.png
create mode 100755 search.inc.bak-23Oct2013
create mode 100755 textbook_companion.module.backup-feb-3-2014
create mode 100755 textbook_companion.module.bak-23Oct2013
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..b6788e8
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,41 @@
+# Ignore configuration files that may contain sensitive information.
+sites/*/*settings*.php
+
+# Ignore paths that contain generated content.
+cache/
+files/
+sites/*/files
+sites/*/private
+
+# Ignore default text files
+robots.txt
+/CHANGELOG.txt
+/COPYRIGHT.txt
+/INSTALL*.txt
+/LICENSE.txt
+/MAINTAINERS.txt
+/UPGRADE.txt
+/README.txt
+sites/all/README.txt
+sites/all/modules/README.txt
+sites/all/themes/README.txt
+
+# Ignore everything but the "sites" folder ( for non core developer )
+.htaccess
+web.config
+authorize.php
+cron.php
+index.php
+install.php
+update.php
+xmlrpc.php
+/includes
+/misc
+/modules
+/profiles
+/scripts
+/themes
+
+# Ignore vim temp. files
+*.swo
+*.swp
diff --git a/cheque_contact.inc b/cheque_contact.inc
index 8f882f3..335ee42 100755
--- a/cheque_contact.inc
+++ b/cheque_contact.inc
@@ -971,6 +971,7 @@ function contact_details($form_state)
'#title' => t('Email'),
'#size' => 48,
'#value' => $user->mail,
+ '#disabled' => TRUE,
);
$form['candidate_detail']['mobileno1'] = array(
'#type' => 'textfield',
diff --git a/code.inc b/code.inc
index 249dff8..cdc0f6a 100755
--- a/code.inc
+++ b/code.inc
@@ -18,7 +18,7 @@ function upload_examples_form($form_state)
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
@@ -379,7 +379,7 @@ function upload_examples_form_submit($form, &$form_state) {
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
diff --git a/code_approval.inc b/code_approval.inc
index 341a34d..571eb7b 100755
--- a/code_approval.inc
+++ b/code_approval.inc
@@ -557,7 +557,11 @@ Reason for dis-approval:
/* email */
$email_subject = t('Your uploaded examples including the book proposal have been deleted');
- $email_body = t('Your all the uploaded examples including the book have been deleted permanently.');
+ $email_body = t('Your all the uploaded examples including the book have been deleted permanently.
+
+Reason for deletion:
+
+' . $form_state['values']['run']['message']);
} else {
drupal_set_message(t('Error Dis-Approving and Deleting Entire Book.'), 'error');
diff --git a/dependency.inc b/dependency.inc
index 2ecf500..96607f0 100755
--- a/dependency.inc
+++ b/dependency.inc
@@ -13,7 +13,7 @@ function upload_dependency_form($form_state)
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
@@ -152,7 +152,7 @@ function upload_dependency_form_submit($form, &$form_state) {
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
diff --git a/download.inc b/download.inc
index da597d2..68d7d68 100755
--- a/download.inc
+++ b/download.inc
@@ -24,6 +24,7 @@ function textbook_companion_download_dependency_file()
header('Content-Type: ' . $dependency_file_data->filemime);
header('Content-disposition: attachment; filename="' . $dependency_file_data->filename . '"');
header('Content-Length: ' . filesize($root_path . $dependency_file_data->filepath));
+ var_dump($root_path . $dependency_file_data->filepath); die;
readfile($root_path . $dependency_file_data->filepath);
}
@@ -174,11 +175,27 @@ function textbook_companion_download_book()
if ($zip_file_count > 0)
{
/* download zip file */
- header('Content-Type: application/zip');
- header('Content-disposition: attachment; filename="' . $book_data->book . '.zip"');
- header('Content-Length: ' . filesize($zip_filename));
- readfile($zip_filename);
- unlink($zip_filename);
+ global $user;
+ if($user->uid){
+ header('Content-Type: application/zip');
+ header('Content-disposition: attachment; filename="' . $book_data->book . '.zip"');
+ header('Content-Length: ' . filesize($zip_filename));
+ ob_clean();
+ readfile($zip_filename);
+ unlink($zip_filename);
+ }else{
+ header('Content-Type: application/zip');
+ header('Content-disposition: attachment; filename="' . $book_data->book . '.zip"');
+ header('Content-Length: ' . filesize($zip_filename));
+ header("Content-Transfer-Encoding: binary");
+ header('Expires: 0');
+ header('Pragma: no-cache');
+ ob_end_flush();
+ ob_clean();
+ flush();
+ readfile($zip_filename);
+ unlink($zip_filename);
+ }
} else {
drupal_set_message("There are no examples in this book to download", 'error');
drupal_goto('textbook_run');
diff --git a/editcode.inc b/editcode.inc
index fe7603c..7a0add6 100755
--- a/editcode.inc
+++ b/editcode.inc
@@ -920,7 +920,7 @@ function edit_chapter_title_form($form_state)
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('textbook_companion/code');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
@@ -1024,7 +1024,7 @@ function edit_chapter_title_form_submit($form, &$form_state)
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('textbook_companion/code');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
diff --git a/full_download.inc b/full_download.inc
index 8c06c24..a269bd8 100755
--- a/full_download.inc
+++ b/full_download.inc
@@ -69,6 +69,13 @@ function textbook_companion_download_full_chapter()
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename="CH' . $chapter_data->number . '.zip"');
header('Content-Length: ' . filesize($zip_filename));
+ header("Content-Transfer-Encoding: binary");
+ header('Expires: 0');
+ header('Pragma: no-cache');
+ ob_end_flush();
+ ob_clean();
+ flush();
+
readfile($zip_filename);
unlink($zip_filename);
} else {
@@ -149,6 +156,12 @@ function textbook_companion_download_full_book()
header('Content-Type: application/zip');
header('Content-disposition: attachment; filename="' . $book_data->book . '.zip"');
header('Content-Length: ' . filesize($zip_filename));
+ //header("Content-Transfer-Encoding: binary");
+ //header('Expires: 0');
+ //header('Pragma: no-cache');
+ //ob_end_flush();
+ ob_clean();
+ //flush();
readfile($zip_filename);
unlink($zip_filename);
} else {
diff --git a/general.inc b/general.inc
index dc63819..d986555 100755
--- a/general.inc
+++ b/general.inc
@@ -13,7 +13,7 @@ function list_chapters()
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
@@ -90,7 +90,7 @@ function list_examples()
drupal_set_message("Please submit a " . l('proposal', 'proposal') . ".", 'error');
drupal_goto('');
}
- if ($proposal_data->proposal_status != 1)
+ if ($proposal_data->proposal_status != 1 && $proposal_data->proposal_status != 4)
{
switch ($proposal_data->proposal_status )
{
diff --git a/js/textbook_companion.js b/js/textbook_companion.js
index de0bbec..7602bdc 100755
--- a/js/textbook_companion.js
+++ b/js/textbook_companion.js
@@ -90,6 +90,24 @@ $('#edit-version').change(function() {
}
});
+
+/* highlighting current filter [A-Z] of book search pages */
+var pathname = window.location.pathname;
+var filter = pathname.charAt(pathname.length-1);
+$filters = $("#filter-links a");
+$filters.each(function() {
+
+ var current = $(this).attr("href");
+ var current = current.charAt(current.length-1);
+ if(current == filter) {
+ $(this).css({
+ "padding": "0 2px",
+ "color": "#000000",
+ "font-weight": "bolder",
+ "background-color": "#f5f5f5"
+ });
+ }
+});
});
diff --git a/latex.inc b/latex.inc
index 26072fb..7dfbe83 100755
--- a/latex.inc
+++ b/latex.inc
@@ -51,6 +51,13 @@ function _latex_generate_files($preference_id, $full_book = FALSE)
header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename="' . $preference_data->book . '_' . $preference_data->author . '.pdf"');
header('Content-Length: ' . filesize($dir_path . "book_" . $preference_data->id . ".pdf"));
+ header("Content-Transfer-Encoding: binary");
+ header('Expires: 0');
+ header('Pragma: no-cache');
+ ob_end_flush();
+ ob_clean();
+ flush();
+
readfile($dir_path . "book_" . $preference_data->id . ".pdf");
return;
}
@@ -153,6 +160,13 @@ function _latex_generate_files($preference_id, $full_book = FALSE)
header('Content-Type: application/pdf');
header('Content-disposition: attachment; filename="' . $preference_data->book . '_' . $preference_data->author . '.pdf"');
header('Content-Length: ' . filesize($dir_path . $pdf_filename));
+ header("Content-Transfer-Encoding: binary");
+ header('Expires: 0');
+ header('Pragma: no-cache');
+ ob_end_flush();
+ ob_clean();
+ flush();
+
readfile($dir_path . $pdf_filename);
} else {
drupal_set_message("Error occurred when generating the PDF version of the Book.", 'error');
diff --git a/latex/Initial_body b/latex/Initial_body
index 79b6b73..c8d3576 100755
--- a/latex/Initial_body
+++ b/latex/Initial_body
@@ -1,3 +1,4 @@
+\nonstopmode
\documentclass[12pt]{report}
\usepackage{hyperref}
\hypersetup{colorlinks=true,linkcolor=blue}
diff --git a/manage_proposal.inc b/manage_proposal.inc
index a4be25e..893bb29 100755
--- a/manage_proposal.inc
+++ b/manage_proposal.inc
@@ -25,6 +25,14 @@ function _proposal_pending()
function _proposal_all()
{
+ function _tbc_ext($status, $preference_id) {
+ if($status == "Approved") {
+ return " | " . l("ER", "tbc_external_review/add_book/" . $preference_id);
+ }
+ else {
+ return "";
+ }
+ }
/* get pending proposals to be approved */
$proposal_rows = array();
$proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} ORDER BY id DESC");
@@ -41,9 +49,15 @@ function _proposal_all()
case 1: $proposal_status = 'Approved'; break;
case 2: $proposal_status = 'Dis-approved'; break;
case 3: $proposal_status = 'Completed'; break;
+ case 4: $proposal_status = 'External'; break;
default: $proposal_status = 'Unknown'; break;
}
- $proposal_rows[] = array(date('d-m-Y', $proposal_data->creation_date), $preference_data->book, $preference_data->author, l($proposal_data->full_name, 'user/' . $proposal_data->uid), date('d-m-Y', $proposal_data->completion_date), $proposal_status, l('Status', 'manage_proposal/status/' . $proposal_data->id) . ' | ' . l('Edit', 'manage_proposal/edit/' . $proposal_data->id));
+ $proposal_rows[] = array(
+ date('d-m-Y', $proposal_data->creation_date), $preference_data->book, $preference_data->author,
+ l($proposal_data->full_name, 'user/' . $proposal_data->uid), date('d-m-Y', $proposal_data->completion_date),
+ $proposal_status, l('Status', 'manage_proposal/status/' . $proposal_data->id) . ' | ' . l('Edit', 'manage_proposal/edit/' . $proposal_data->id) .
+ _tbc_ext($proposal_status, $preference_data->id)
+ );
}
/* check if there are any pending proposals */
@@ -385,6 +399,7 @@ function proposal_status_form($form_state)
case 1: $proposal_status = t('Approved'); break;
case 2: $proposal_status = t('Dis-approved'); break;
case 3: $proposal_status = t('Completed'); break;
+ case 4: $proposal_status = t('External'); break;
default: $proposal_status = t('Unkown'); break;
}
$form['proposal_status'] = array(
@@ -401,7 +416,7 @@ function proposal_status_form($form_state)
);
}
- if ($proposal_data->proposal_status == 1)
+ if ($proposal_data->proposal_status == 1 || $proposal_data->proposal_status == 4)
{
$form['completed'] = array(
'#type' => 'checkbox',
diff --git a/pdf/generate_pdf.inc b/pdf/generate_pdf.inc
index f231a68..4f2cee7 100755
--- a/pdf/generate_pdf.inc
+++ b/pdf/generate_pdf.inc
@@ -4,10 +4,10 @@
require('fpdf/fpdf.php');
global $user;
$x = $user->uid;
- $book_id = arg(2);
- $query2 = db_query("SELECT * FROM {textbook_companion_preference} WHERE id=".$book_id);
+ $proposal_id = arg(2);
+ $query2 = db_query("SELECT * FROM {textbook_companion_preference} WHERE approval_status=1 AND proposal_id=".$proposal_id);
$data2 = db_fetch_object($query2);
- $query3 = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id=".$data2->proposal_id);
+ $query3 = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id=".$proposal_id);
$data3 = db_fetch_object($query3);
//var_dump($data3->gender);
$gender = array('salutation' => 'Mr. /Ms.', 'gender' => 'He/She');
@@ -20,8 +20,8 @@
}
}
//die;
- if($data3->proposal_status == 3)
- {
+ /*if($data3->proposal_status == 3)
+ {*/
$pdf=new FPDF('L', 'mm', 'Letter');
if (!$pdf)
{
@@ -38,7 +38,7 @@
$pdf->Image("/Sites/scilab_in/sites/default/files/scilab_logo.png", 10, 9, 0, 15);
$path = drupal_get_path('module', 'textbook_companion');
- $pdf->Image($path."/pdf/images/fossee.png", 232, 9, 0, 15);
+ $pdf->Image($path."/pdf/images/fossee.png", 228, 9, 0, 15);
$pdf->SetFont('Arial','B',25);
$pdf->Ln(30);
@@ -107,11 +107,11 @@
//$pdf->Cell(200,0,' Date: 28th August, 2013',0,1,'L');
$pdf->Cell(200,15,'Email: textbook@scilab.in', 0,1,'L');
$pdf->Output();
- }
+ /*}
else
{
drupal_set_message('Your Book Is Still Under Review.', 'status');
- }
+ }*/
}
?>
diff --git a/pdf/images/fossee.png b/pdf/images/fossee.png
index 49d1797..9e255a4 100755
Binary files a/pdf/images/fossee.png and b/pdf/images/fossee.png differ
diff --git a/pdf/images/sign.png b/pdf/images/sign.png
old mode 100644
new mode 100755
diff --git a/pdf/list_all_certificates.inc b/pdf/list_all_certificates.inc
index 4895a84..766c1f1 100755
--- a/pdf/list_all_certificates.inc
+++ b/pdf/list_all_certificates.inc
@@ -1,5 +1,5 @@
uid;
@@ -7,7 +7,10 @@
$query2 = db_query("SELECT * FROM {textbook_companion_proposal} WHERE proposal_status=3 AND uid=".$user->uid);
$data2 = db_fetch_object($query2);
if($data2->id)
- {
+ /*while($data2 = db_fetch_object($query2))
+ {*/
+ /* if($data2->id)
+ {
$search_rows = array();
global $output;
$output = '';
@@ -44,6 +47,51 @@
return '';
}
}
+//}
+} */
-}
+function _list_all_certificates()
+ {
+ global $user;
+ $query_id =db_query("SELECT id FROM textbook_companion_proposal WHERE proposal_status=3 AND uid=".$user->uid);
+ $exist_id = db_fetch_object($query_id);
+ if($exist_id->id)
+ {
+ if($exist_id->id<3)
+ {
+ drupal_set_message('You need to propose a book Book Proposal', 'status');
+ return '';
+ }
+ else
+ {
+ $search_rows = array();
+ global $output;
+ $output = '';
+ $query3 = db_query("SELECT prop.id,pref.isbn,pref.book,pref.author FROM textbook_companion_proposal as prop,textbook_companion_preference as pref WHERE prop.proposal_status=3 AND pref.approval_status=1 AND pref.proposal_id=prop.id AND prop.uid=".$user->uid);
+ while ($search_data3 = db_fetch_object($query3))
+ {
+ if($search_data3->id)
+ {
+ $search_rows[] = array($search_data3->isbn,$search_data3->book,$search_data3->author,l('Download Certificate', 'certificate/generate_pdf/'.$search_data3->id));
+ }
+ }
+ if($search_rows)
+ {
+ $search_header = array('ISBN', 'Book Name', 'Author', 'Download Certificates');
+ $output = theme_table($search_header, $search_rows);
+ return $output;
+ }
+ else
+ {
+ echo("Error");
+ return '';
+ }
+ }
+ }
+ else
+ {
+ drupal_set_message('You need to propose a book Book Proposal', 'status');
+ return '';
+ }
+}
?>
diff --git a/search.inc b/search.inc
index 887ec1f..5573d3a 100755
--- a/search.inc
+++ b/search.inc
@@ -110,11 +110,36 @@ function textbook_companion_browse_author()
return $return_html;
}
$book_rows = array();
- $book_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE author like '%s%%' AND approval_status = 1", $query_character);
+ $book_q = db_query("SELECT pe.book as book, pe.author as author, pe.publisher as publisher, pe.year as year, pe.id as id FROM {textbook_companion_preference} pe RIGHT JOIN {textbook_companion_proposal} po on pe.proposal_id=po.id WHERE po.proposal_status=3 and pe.approval_status = 1", $query_character);
while ($book_data = db_fetch_object($book_q))
{
- $book_rows[] = array(l($book_data->book, 'textbook_run/' . $book_data->id), $book_data->author);
+ /* Initial's fix algorithm */
+ preg_match_all("/{$query_character}[a-z]+/", $book_data->author, $matches);
+
+ if (count($matches) > 0) {
+ /* Remove the word "And"/i from the match array and make match bold */
+ if (count($matches[0]) > 0) {
+
+ foreach ($matches[0] as $key => $value) {
+
+ if (strtolower($value) == "and") {
+ unset($matches[$key]);
+ }
+ else {
+ $matches[0][$key] = "" . $value . "";
+ $book_data->author = str_replace($value, $matches[0][$key], $book_data->author);
+ }
+ }
+ }
+
+ /* Check count of matches after removing And */
+ if (count($matches[0]) > 0) {
+ $book_rows[] = array(l($book_data->book, 'textbook_run/' . $book_data->id), $book_data->author);
+ }
+ }
}
+
+
if (!$book_rows)
{
$return_html .= "Sorry no books are available with that author's name";
@@ -125,6 +150,38 @@ function textbook_companion_browse_author()
return $return_html;
}
+function textbook_companion_browse_student()
+{
+ $return_html = _browse_list('student');
+ $return_html .= '
';
+ $query_character = arg(2);
+ if (!$query_character) {
+ /* all books */
+ $return_html .= "Please select the starting character of the student's name";
+ return $return_html;
+ }
+ $book_rows = array();
+ $query = "SELECT * FROM textbook_companion_proposal WHERE full_name like '".$query_character."%' ORDER BY full_name ASC";
+ $student_q = db_query($query);
+ while ($student_data = db_fetch_object($student_q))
+ {
+ $query = "SELECT * FROM textbook_companion_preference WHERE proposal_id = " . $student_data->id . " AND approval_status = 1";
+ $book_q = db_query($query);
+ while ($book_data = db_fetch_object($book_q))
+ {
+ $book_rows[] = array(l($book_data->book, 'textbook_run/' . $book_data->id), $student_data->full_name);
+ }
+ }
+ if (!$book_rows)
+ {
+ $return_html .= "Sorry no books are available with that student's name";
+ } else {
+ $book_header = array('Title of the Book', 'Student Name');
+ $return_html .= theme_table($book_header, $book_rows);
+ }
+ return $return_html;
+}
+
function _browse_list($type)
{
$return_html = '';
@@ -135,7 +192,7 @@ function _browse_list($type)
if ($char_name != 'Z')
$return_html .= ' | ';
}
- return $return_html;
+ return '
' . $return_html . "
";
}
function _list_of_colleges()
{
diff --git a/search.inc.bak-23Oct2013 b/search.inc.bak-23Oct2013
new file mode 100755
index 0000000..df92e8a
--- /dev/null
+++ b/search.inc.bak-23Oct2013
@@ -0,0 +1,249 @@
+ 'textfield',
+ '#title' => t('Search'),
+ '#size' => 48,
+ );
+
+ $form['search_by_title'] = array(
+ '#type' => 'checkbox',
+ '#default_value' => TRUE,
+ '#title' => t('Search by Title of the Book'),
+ );
+
+ $form['search_by_author'] = array(
+ '#type' => 'checkbox',
+ '#default_value' => TRUE,
+ '#title' => t('Search by Author of the Book'),
+ );
+
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Search')
+ );
+
+ $form['cancel'] = array(
+ '#type' => 'markup',
+ '#value' => l(t('Cancel'), ''),
+ );
+
+ if ($_POST)
+ {
+ $output = '';
+ $search_rows = array();
+ $search_query = '';
+ if ($_POST['search_by_title'] && $_POST['search_by_author'])
+ $search_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE approval_status = 1 AND (book LIKE '%%%s%%' OR author LIKE '%%%s%%')", $_POST['search'], $_POST['search']);
+ else if ($_POST['search_by_title'])
+ $search_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE approval_status = 1 AND book LIKE '%%%s%%'", $_POST['search']);
+ else if ($_POST['search_by_author'])
+ $search_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE approval_status = 1 AND author LIKE '%%%s%%'", $_POST['search']);
+ else
+ drupal_set_message('Please select whether to search by Title and/or Author of the Book.', 'error');
+ while ($search_data = db_fetch_object($search_q))
+ {
+ $search_rows[] = array(l($search_data->book, 'textbook_run/' . $search_data->id), $search_data->author);
+ }
+ if ($search_rows)
+ {
+ $search_header = array('Title of the Book', 'Author Name');
+ $output .= theme_table($search_header, $search_rows);
+ $form['search_results'] = array(
+ '#type' => 'item',
+ '#title' => t('Search results for "') . $_POST['search'] . '"',
+ '#value' => $output,
+ );
+ } else {
+ $form['search_results'] = array(
+ '#type' => 'item',
+ '#title' => t('Search results for "') . $_POST['search'] . '"',
+ '#value' => 'No results found',
+ );
+ }
+ }
+ return $form;
+}
+
+/******************************************************************************/
+/**************************** BROWSE BY FORMS *********************************/
+/******************************************************************************/
+
+function textbook_companion_browse_book()
+{
+ $return_html = _browse_list('book');
+ $return_html .= '
';
+ $query_character = arg(2);
+ if (!$query_character) {
+ /* all books */
+ $return_html .= "Please select the starting character of the title of the book";
+ return $return_html;
+ }
+ $book_rows = array();
+ $book_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE book like '%s%%' AND approval_status = 1", $query_character);
+ while ($book_data = db_fetch_object($book_q))
+ {
+ $book_rows[] = array(l($book_data->book, 'textbook_run/' . $book_data->id), $book_data->author);
+ }
+ if (!$book_rows)
+ {
+ $return_html .= "Sorry no books are available with that title";
+ } else {
+ $book_header = array('Title of the Book', 'Author Name');
+ $return_html .= theme_table($book_header, $book_rows);
+ }
+ return $return_html;
+}
+
+function textbook_companion_browse_author()
+{
+ $return_html = _browse_list('author');
+ $return_html .= '
';
+ $query_character = arg(2);
+ if (!$query_character) {
+ /* all books */
+ $return_html .= "Please select the starting character of the author's name";
+ return $return_html;
+ }
+ $book_rows = array();
+ $book_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE author like '%s%%' AND approval_status = 1", $query_character);
+ while ($book_data = db_fetch_object($book_q))
+ {
+ $book_rows[] = array(l($book_data->book, 'textbook_run/' . $book_data->id), $book_data->author);
+ }
+ if (!$book_rows)
+ {
+ $return_html .= "Sorry no books are available with that author's name";
+ } else {
+ $book_header = array('Title of the Book', 'Author Name');
+ $return_html .= theme_table($book_header, $book_rows);
+ }
+ return $return_html;
+}
+
+function textbook_companion_browse_student()
+{
+ $return_html = _browse_list('student');
+ $return_html .= '
';
+ $query_character = arg(2);
+ if (!$query_character) {
+ /* all books */
+ $return_html .= "Please select the starting character of the student's name";
+ return $return_html;
+ }
+ $book_rows = array();
+ $query = "SELECT * FROM textbook_companion_proposal WHERE full_name like '".$query_character."%' ORDER BY full_name ASC";
+ $student_q = db_query($query);
+ while ($student_data = db_fetch_object($student_q))
+ {
+ $query = "SELECT * FROM textbook_companion_preference WHERE proposal_id = " . $student_data->id . " AND approval_status = 1";
+ $book_q = db_query($query);
+ while ($book_data = db_fetch_object($book_q))
+ {
+ $book_rows[] = array(l($book_data->book, 'textbook_run/' . $book_data->id), $student_data->full_name);
+ }
+ }
+ if (!$book_rows)
+ {
+ $return_html .= "Sorry no books are available with that student's name";
+ } else {
+ $book_header = array('Title of the Book', 'Student Name');
+ $return_html .= theme_table($book_header, $book_rows);
+ }
+ return $return_html;
+}
+
+function _browse_list($type)
+{
+ $return_html = '';
+ $char_list = array('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z');
+ foreach ($char_list as $char_name)
+ {
+ $return_html .= l($char_name, 'textbook_search/' . $type . '/' . $char_name);
+ if ($char_name != 'Z')
+ $return_html .= ' | ';
+ }
+ return $return_html;
+}
+function _list_of_colleges()
+{
+ $college_names = array('0' => '--- select ---');
+ $college_names_q = db_query("SELECT DISTINCT university FROM {textbook_companion_proposal} WHERE proposal_status=1 OR proposal_status=3 ORDER BY university ASC");
+ while ($college_names_data = db_fetch_object($college_names_q))
+ {
+ $college_names[$college_names_data->university] = $college_names_data->university;
+ }
+ return $college_names;
+}
+
+function _list_books_by_college($college) {
+ $query = "SELECT pro.full_name, pro.proposal_status, pre.id as preid, pre.book, pre.isbn FROM textbook_companion_proposal pro, textbook_companion_preference pre WHERE pro.university='".$college."' AND (pro.proposal_status=1 OR pro.proposal_status=3) AND pre.proposal_id=pro.id AND pre.approval_status=1";
+ $result = db_query($query);
+ $output = 'SNO | Name | Book | ISBN | Status |
';
+ $sno = 1;
+ while($row = db_fetch_object($result)) {
+
+ if($row->proposal_status == 1) {
+ $output .= ''.$sno++.' | '.$row->full_name.' | '.$row->book.' | '.str_replace("-", "", $row->isbn).' | Approved | ';
+ }else {
+ $output .= '
'.$sno++.' | '.$row->full_name.' | '.$row->book.' | '.str_replace("-", "", $row->isbn).' | Completed | ';
+ }
+ $output .= '
';
+ }
+
+ return $output;
+}
+
+function textbook_companion_browse_college_form($form_state) {
+ $form = array();
+
+ ahah_helper_register($form, $form_state);
+
+
+ if (!isset($form_state['storage']['college_info']['college'])) {
+ $usage_default_value = '0';
+ }
+ else {
+ $usage_default_value = $form_state['storage']['college_info']['college'];
+ }
+
+ $form['college_info'] = array(
+ '#type' => 'fieldset',
+ '#prefix' => '',
+ '#suffix' => '
',
+ '#tree' => TRUE,
+ );
+ $form['college_info']['college'] = array(
+ '#type' => 'select',
+ '#title' => t('College Name'),
+ '#options' => _list_of_colleges(),
+ '#default_value' => $usage_default_value,
+ '#ahah' => array(
+ 'event' => 'change',
+ 'path' => ahah_helper_path(array('college_info')),
+ 'wrapper' => 'college-info-wrapper',
+ ),
+ );
+
+
+ if ($usage_default_value != '0') {
+ $form['college_info']['book_details'] = array(
+ '#type' => 'item',
+ '#value' => _list_books_by_college($usage_default_value)
+ );
+ }
+
+ return $form;
+}
+
+function textbook_companion_browse_college_form_validate($form, &$form_state) {
+
+}
+
+function textbook_companion_browse_college_form_submit($form, &$form_state) {
+
+}
diff --git a/textbook_companion.module b/textbook_companion.module
index de09c2b..acaa9dc 100755
--- a/textbook_companion.module
+++ b/textbook_companion.module
@@ -246,7 +246,7 @@ function textbook_companion_menu()
'weight' => 1,
);
$items['textbook_search/book'] = array(
- 'title' => 'Browse By Title of the Book',
+ 'title' => 'By Book Title',
'description' => '',
'page callback' => 'textbook_companion_browse_book',
'access arguments' => array('access content'),
@@ -255,7 +255,7 @@ function textbook_companion_menu()
'weight' => 2,
);
$items['textbook_search/author'] = array(
- 'title' => 'Browse By Author Name',
+ 'title' => 'By Author',
'description' => '',
'page callback' => 'textbook_companion_browse_author',
'access arguments' => array('access content'),
@@ -264,7 +264,7 @@ function textbook_companion_menu()
'weight' => 3,
);
$items['textbook_search/college'] = array(
- 'title' => 'Browse By College',
+ 'title' => 'By College',
'description' => '',
'page callback' => 'textbook_companion_browse_college',
'page callback' => 'drupal_get_form',
@@ -274,6 +274,15 @@ function textbook_companion_menu()
'file' => 'search.inc',
'weight' => 4,
);
+ $items['textbook_search/student'] = array(
+ 'title' => 'By Student',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_student',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 5,
+ );
$items['textbook_run'] = array(
'title' => 'Download Codes',
@@ -344,6 +353,24 @@ function textbook_companion_menu()
'file' => 'full_download.inc',
);
+ /* external reviewer download */
+ $items['full_download_external/chapter'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_full_chapter',
+ 'access arguments' => array('download books to review'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'full_download.inc',
+ );
+ $items['full_download_external/book'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_full_book',
+ 'access arguments' => array('download books to review'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'full_download.inc',
+ );
+
/* latex script for book generation */
$items['textbook_companion/generate_book'] = array(
'title' => 'Generate Book',
@@ -472,7 +499,7 @@ function textbook_companion_menu()
*/
function textbook_companion_perm() {
- return array('create book proposal', 'approve book proposal', 'approve code', 'upload code', 'edit uploaded code', 'download code', 'create feedback', 'bulk manage code', 'bulk delete code', 'edit book proposal', 'administer book companion', 'generate book', 'cheque contct form', 'contact_details', 'comment cheque', 'list all certificates', 'generate pdf', 'paper submission form', 'cheque status form' ,'cheque report form' ,'cheque proposal');
+ return array('create book proposal', 'approve book proposal', 'approve code', 'upload code', 'edit uploaded code', 'download code', 'create feedback', 'bulk manage code', 'bulk delete code', 'edit book proposal', 'administer book companion', 'generate book', 'cheque contct form', 'contact_details', 'comment cheque', 'list all certificates', 'generate pdf', 'paper submission form', 'cheque status form' ,'cheque report form' ,'cheque proposal', 'download books to review');
}
@@ -592,21 +619,24 @@ function book_proposal_form($form_state)
'#required' => TRUE,
);
$form['faculty'] = array(
- '#type' => 'textfield',
+ '#type' => 'hidden',
+ '#value' => 'None',
'#title' => t('College Teacher/Professor'),
'#size' => 30,
'#maxlength' => 50,
'#required' => TRUE,
);
$form['faculty_email'] = array(
- '#type' => 'textfield',
+ '#type' => 'hidden',
+ '#value' => 'None',
'#title' => t('Teacher/Professor Email Id'),
'#default_value' => '@email.com',
'#size' => 30,
'#maxlength' => 50,
);
$form['reviewer'] = array(
- '#type' => 'textfield',
+ '#type' => 'hidden',
+ '#value' => 'None',
'#title' => t('Reviewer'),
'#size' => 30,
'#maxlength' => 50,
@@ -1147,6 +1177,12 @@ Publisher and Place : ' . $approved_preference_data->publisher . '
Edition : ' . $approved_preference_data->edition . '
Year of publication : ' . $approved_preference_data->year . '
+According the new Textbook Companion procedure, a student doing a textbook companion is not required to have a mentor. For more details check the links given below.
+http://scilab.in/tbc_honorarium
+http://scilab.in/Textbook_Companion_Internship
+
+Please contact us by sending an e-mail to textbook@scilab.in in case you wish to cancel this book proposal.
+
Best Wishes,
!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
diff --git a/textbook_companion.module.backup-feb-3-2014 b/textbook_companion.module.backup-feb-3-2014
new file mode 100755
index 0000000..9c8d4e5
--- /dev/null
+++ b/textbook_companion.module.backup-feb-3-2014
@@ -0,0 +1,1785 @@
+ 'Book Proposal Form',
+ 'description' => 'Book Proposal Form.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('book_proposal_form'),
+ 'access callback' => 'user_access',
+ 'access arguments' => array('create book proposal'),
+ 'type' => MENU_NORMAL_ITEM,
+ );
+
+ /* for reviewers */
+ $items['manage_proposal'] = array(
+ 'title' => 'Manage Book Proposals',
+ 'description' => 'Manage Book Proposals',
+ 'page callback' => '_proposal_pending',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/pending'] = array(
+ 'title' => 'Pending Proposals',
+ 'description' => 'Pending Proposals Queue',
+ 'page callback' => '_proposal_pending',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'weight' => 1,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/all'] = array(
+ 'title' => 'All Proposals',
+ 'description' => 'All Proposals',
+ 'page callback' => '_proposal_all',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 2,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/category'] = array(
+ 'title' => 'Categorize',
+ 'description' => 'Categorize Books',
+ 'page callback' => '_category_all',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 2,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/approve'] = array(
+ 'title' => 'Proposal Approval',
+ 'description' => 'Proposal Approval',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('proposal_approval_form'),
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/status'] = array(
+ 'title' => 'Proposal Status',
+ 'description' => 'Proposal Status',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('proposal_status_form'),
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/edit'] = array(
+ 'title' => 'Edit Proposal',
+ 'description' => 'Edit Proposal',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('proposal_edit_form'),
+ 'access arguments' => array('edit book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/category/edit'] = array(
+ 'title' => 'Edit Category',
+ 'description' => 'Edit category',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('category_edit_form'),
+ 'access arguments' => array('edit book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+
+ $items['code_approval'] = array(
+ 'title' => 'Manage Code Approval',
+ 'description' => 'Manage Code Approval',
+ 'page callback' => 'code_approval',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'code_approval.inc',
+ );
+ $items['code_approval/approve'] = array(
+ 'title' => 'Code Approval',
+ 'description' => 'Code Approval',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('code_approval_form'),
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'weight' => 1,
+ 'file' => 'code_approval.inc',
+ );
+ $items['code_approval/bulk'] = array(
+ 'title' => 'Bulk Manage',
+ 'description' => 'Bulk Mangage',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('bulk_approval_form'),
+ 'access arguments' => array('bulk manage code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 2,
+ 'file' => 'code_approval.inc',
+ );
+ $items['code_approval/editcode'] = array(
+ 'title' => 'Admin Edit Example',
+ 'description' => 'Admin Edit Example',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('upload_examples_admin_edit_form'),
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'weight' => 3,
+ 'file' => 'editcodeadmin.inc',
+ );
+ $items['code_approval/notes'] = array(
+ 'title' => 'Notes for Reviewers',
+ 'description' => 'Notes for Reviewers',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('book_notes_form'),
+ 'access arguments' => array('bulk manage code'),
+ 'type' => MENU_CALLBACK,
+ 'weight' => 4,
+ 'file' => 'notes.inc',
+ );
+ $items['code_approval/dependency'] = array(
+ 'title' => 'Dependency',
+ 'description' => 'Dependency',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_dependency_approval_form'),
+ 'access arguments' => array('bulk manage code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 3,
+ 'file' => 'dependency_approval.inc',
+ );
+
+ $items['textbook_companion/code'] = array(
+ 'title' => 'Code Submission',
+ 'description' => 'Code Submission',
+ 'page callback' => 'list_chapters',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('upload code'),
+ 'file' => 'general.inc',
+ );
+ $items['textbook_companion/code/list_chapters'] = array(
+ 'title' => 'List Chapters',
+ 'description' => 'List Chapters',
+ 'page callback' => 'list_chapters',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'file' => 'general.inc',
+ 'weight' => 1,
+ );
+ $items['textbook_companion/code/upload'] = array(
+ 'title' => 'Code Submission',
+ 'description' => 'Code Submission',
+ 'page callback' => 'upload_examples',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'code.inc',
+ 'weight' => 2,
+ );
+ $items['textbook_companion/code/upload_dep'] = array(
+ 'title' => 'Upload Dependency',
+ 'description' => 'Upload Dependency Files',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('upload_dependency_form'),
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'dependency.inc',
+ 'weight' => 3,
+ );
+ $items['textbook_companion/code/edit'] = array(
+ 'title' => 'Edit Example',
+ 'description' => 'Edit Example',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('upload_examples_edit_form'),
+ 'access arguments' => array('edit uploaded code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'editcode.inc',
+ );
+ $items['textbook_companion/code/delete'] = array(
+ 'title' => 'Delete Example',
+ 'description' => 'Delete Example',
+ 'page callback' => '_upload_examples_delete',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'code.inc',
+ );
+ $items['textbook_companion/code/chapter/edit'] = array(
+ 'title' => 'Edit Chapter Title',
+ 'description' => 'Edit Chapter Title',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('edit_chapter_title_form'),
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'editcode.inc',
+ );
+ $items['textbook_companion/code/list_examples'] = array(
+ 'title' => 'List Examples',
+ 'description' => 'List Examples',
+ 'page callback' => 'list_examples',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'general.inc',
+ 'weight' => 3,
+ );
+
+ $items['textbook_search'] = array(
+ 'title' => 'Book Search',
+ 'description' => '',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_search_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'search.inc',
+ );
+ $items['textbook_search/search'] = array(
+ 'title' => 'Book Search',
+ 'description' => '',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_search_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 1,
+ );
+ $items['textbook_search/book'] = array(
+ 'title' => 'By Book Title',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_book',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 2,
+ );
+ $items['textbook_search/author'] = array(
+ 'title' => 'By Author',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_author',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 3,
+ );
+ $items['textbook_search/college'] = array(
+ 'title' => 'By College',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_college',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_browse_college_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 4,
+ );
+ $items['textbook_search/student'] = array(
+ 'title' => 'By Student',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_student',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 5,
+ );
+
+ $items['textbook_run'] = array(
+ 'title' => 'Download Codes',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_run_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'run.inc',
+ );
+
+ /* download callbacks */
+ $items['download/file'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_example_file',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/dependency'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_dependency_file',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/example'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_example',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/chapter'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_chapter',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/book'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_book',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+
+ /* reviewer download */
+ $items['full_download/chapter'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_full_chapter',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'full_download.inc',
+ );
+ $items['full_download/book'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_full_book',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'full_download.inc',
+ );
+
+ /* latex script for book generation */
+ $items['textbook_companion/generate_book'] = array(
+ 'title' => 'Generate Book',
+ 'description' => 'Generate Book From Latex Script',
+ 'page callback' => 'textbook_companion_download_book',
+ 'access arguments' => array('generate book'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'latex.inc',
+ );
+ $items['textbook_companion/delete_book'] = array(
+ 'title' => 'Delete Book PDF',
+ 'description' => 'Delete Book PDF',
+ 'page callback' => 'textbook_companion_delete_book',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'latex.inc',
+ );
+
+ /* general purpose callbacks */
+ $items['textbook_companion/ajax'] = array(
+ 'title' => 'Ajax',
+ 'description' => 'Ajax',
+ 'page callback' => 'textbook_companion_ajax',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ /* for admin */
+ $items['admin/settings/book_companion'] = array(
+ 'title' => 'Book Companion Settings',
+ 'description' => 'Book Companion Settings',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_settings_form'),
+ 'access arguments' => array('administer book companion'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'settings.inc',
+ );
+ /* for data entry */
+ $items['dataentry_book'] = array(
+ 'title' => 'Approved books list',
+ 'page callback' => '_data_entry_proposal_all',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('dataentry book proposal'),
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['dataentry_edit'] = array(
+ 'title' => 'Edit book details',
+ 'page callback' => 'dataentry_edit',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('dataentry book proposal'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'manage_proposal.inc',
+ );
+ /*Cheque Details and Contact Form */
+ $items['cheque_manage/all'] = array(
+ 'title' => 'Cheque Proposals',
+ 'description' => 'Cheque Proposals',
+ 'page callback' => 'cheque_proposal_all',
+ 'access arguments' => array('cheque proposal'),
+ 'file' => 'cheque_manage.inc',
+ );
+ $items['mycontact'] = array(
+ 'title' => 'Update Contact Details',
+ 'description' => 'Update Contact Details',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('contact_details'),
+ 'access arguments' => array('contact_details'),
+ 'file' => 'cheque_contact.inc',
+ );
+
+ $items['cheque_contct'] = array(
+ 'title' => 'Report',
+ 'description' => 'Cheque Contact Form',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('cheque_contct_form'),
+ 'access arguments' => array('cheque contct form'),
+ 'file' => 'cheque_contact.inc',
+ );
+ $items['cheque_contact/status'] = array(
+ 'title' => 'Cheque Status',
+ 'description' => 'Cheque Status',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('cheque_status_form'),
+ 'access' => 'user_is_logged_in',
+ 'access arguments' => array('cheque status form'),
+ 'file' => 'cheque_contact.inc',
+ );
+ $items['cheque_contct/report'] = array(
+ 'title' => 'Report',
+ 'description' => 'Report',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('cheque_report_form'),
+ 'access' => 'user_is_logged_in',
+ 'access arguments' => array('cheque report form'),
+ 'file' => 'cheque_contact.inc',
+ );
+ $items['certificate'] = array(
+ 'title' => 'List Of All Certificates',
+ 'description' => 'List Of All Certificates',
+ 'page callback' => '_list_all_certificates',
+ 'access arguments' => array('list all certificates'),
+ 'file' => 'pdf/list_all_certificates.inc',
+ );
+ $items['certificate/generate_pdf'] = array(
+ 'title' => 'Download Certificate',
+ 'description' => 'Download Certificate',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('generate_pdf'),
+ 'access arguments' => array('generate pdf'),
+ 'file' => 'pdf/generate_pdf.inc',
+ );
+ $items['manage_proposal/paper_submission'] = array(
+ 'title' => 'Application Submission',
+ 'description' => 'Application Submission',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('paper_submission_form'),
+ 'access arguments' => array('paper submission form'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'cheque_contact.inc',
+ );
+ return $items;
+}
+
+/**
+ * Implementation of hook_perm().
+ */
+function textbook_companion_perm() {
+
+ return array('create book proposal', 'approve book proposal', 'approve code', 'upload code', 'edit uploaded code', 'download code', 'create feedback', 'bulk manage code', 'bulk delete code', 'edit book proposal', 'administer book companion', 'generate book', 'cheque contct form', 'contact_details', 'comment cheque', 'list all certificates', 'generate pdf', 'paper submission form', 'cheque status form' ,'cheque report form' ,'cheque proposal');
+}
+
+
+function book_proposal_form($form_state)
+{
+ global $user;
+
+ if (!$user->uid) {
+ drupal_set_message('It is mandatory to login on this website to access the proposal form', 'error');
+ return;
+ }
+
+ /* check if user has already submitted a proposal */
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE uid = %d ORDER BY id DESC LIMIT 1", $user->uid);
+ if ($proposal_q)
+ {
+ if ($proposal_data = db_fetch_object($proposal_q))
+ {
+ switch ($proposal_data->proposal_status)
+ {
+ case 0:
+ drupal_set_message(t('We have already received your proposal. We will get back to you soon.'), 'status');
+ drupal_goto('');
+ return;
+ break;
+ case 1:
+ drupal_set_message(t('Your proposal has been approved. Please go to ' . l('Code Submission', 'textbook_companion/code') . ' to upload your code'), 'status');
+ drupal_goto('');
+ return;
+ break;
+ case 2:
+ drupal_set_message(t('Your proposal has been dis-approved. Please create another proposal below.'), 'error');
+ break;
+ case 3:
+ drupal_set_message(t('Congratulations! You have completed your last book proposal. You can create another proposal below.'), 'status');
+ break;
+ default:
+ drupal_set_message(t('Invalid proposal state. Please contact site administrator for further information.'), 'error');
+ drupal_goto('');
+ return;
+ break;
+ }
+ }
+ }
+
+ $form['imp_notice'] = array(
+ '#type' => 'item',
+ '#value' => 'Please fill up this form carefully as the details entered here will be exactly written in the Textbook Companion',
+ );
+
+ $form['full_name'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Full Name'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['email_id'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Email'),
+ '#size' => 30,
+ '#value' => $user->mail,
+ '#disabled' => TRUE,
+ );
+ $form['mobile'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Mobile No.'),
+ '#size' => 30,
+ '#maxlength' => 15,
+ '#required' => TRUE,
+ );
+ $form['gender'] = array(
+ '#type' => 'radios',
+ '#title' => t('Gender'),
+ '#options' => array('M' => 'Male', 'F' => 'Female'),
+ '#required' => TRUE,
+ );
+
+ $form['how_project'] = array(
+ '#type' => 'select',
+ '#title' => t('How did you come to know about this project'),
+ '#options' => array('Scilab Website' => 'Scilab Website',
+ 'Friend' => 'Friend',
+ 'Professor/Teacher' => 'Professor/Teacher',
+ 'Mailing List' => 'Mailing List',
+ 'Poster in my/other college' => 'Poster in my/other college',
+ 'Others' => 'Others'),
+ '#required' => TRUE,
+ );
+ $form['course'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Course'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['branch'] = array(
+ '#type' => 'select',
+ '#title' => t('Department/Branch'),
+ '#options' => array('Electrical Engineering' => 'Electrical Engineering',
+ 'Electronics Engineering' => 'Electronics Engineering',
+ 'Computer Engineering' => 'Computer Engineering',
+ 'Chemical Engineering' => 'Chemical Engineering',
+ 'Instrumentation Engineering' => 'Instrumentation Engineering',
+ 'Mechanical Engineering' => 'Mechanical Engineering',
+ 'Civil Engineering' => 'Civil Engineering',
+ 'Physics' => 'Physics',
+ 'Mathematics' => 'Mathematics',
+ 'Others' => 'Others'),
+ '#required' => TRUE,
+ );
+ $form['university'] = array(
+ '#type' => 'textfield',
+ '#title' => t('University/Institute'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['faculty'] = array(
+ '#type' => 'textfield',
+ '#title' => t('College Teacher/Professor'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['faculty_email'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Teacher/Professor Email Id'),
+ '#default_value' => '@email.com',
+ '#size' => 30,
+ '#maxlength' => 50,
+ );
+ $form['reviewer'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Reviewer'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ );
+ $form['version'] = array(
+ '#type' => 'select',
+ '#title' => t('Version'),
+ '#options' => array('scilab 5.4.1' => 'Scilab 5.4.1',
+ 'scilab 5.3.3' => 'Scilab 5.3.3',
+ 'olderversion' => 'Older Version'),
+ '#required' => TRUE,
+ );
+ $form['older'] = array(
+ '#type' => 'textfield',
+ '#size' => 30,
+ '#maxlength' => 50,
+ //'#required' => TRUE,
+ '#description' => t('Specify the Older version used'),
+ );
+ $form['completion_date'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Expected Date of Completion'),
+ '#description' => t('Input date format should be DD-MM-YYYY. Eg: 23-03-2011'),
+ '#size' => 10,
+ '#maxlength' => 10,
+ );
+ $form['operating_system'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Operating System'),
+ '#required' => TRUE,
+ '#size' => 30,
+ '#maxlength' => 50,
+ );
+ /*$form['scilab_version'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Scilab Version'),
+ '#required' => TRUE,
+ '#size' => 10,
+ '#maxlength' => 10,
+ );*/
+ $form['preference1'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Book Preference 1'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+ $form['preference1']['book1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Title of the book'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference1']['author1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Author Name'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference1']['isbn1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('ISBN No'),
+ '#size' => 30,
+ '#maxlength' => 25,
+ '#required' => TRUE,
+ );
+ $form['preference1']['publisher1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Publisher & Place'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['preference1']['edition1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Edition'),
+ '#size' => 4,
+ '#maxlength' => 2,
+ '#required' => TRUE,
+ );
+ $form['preference1']['year1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Year of pulication'),
+ '#size' => 4,
+ '#maxlength' => 4,
+ '#required' => TRUE,
+ );
+ $form['preference2'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Book Preference 2'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+ $form['preference2']['book2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Title of the book'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference2']['author2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Author Name'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference2']['isbn2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('ISBN No'),
+ '#size' => 30,
+ '#maxlength' => 25,
+ '#required' => TRUE,
+ );
+ $form['preference2']['publisher2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Publisher & Place'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['preference2']['edition2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Edition'),
+ '#size' => 4,
+ '#maxlength' => 2,
+ '#required' => TRUE,
+ );
+ $form['preference2']['year2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Year of pulication'),
+ '#size' => 4,
+ '#maxlength' => 4,
+ '#required' => TRUE,
+ );
+ $form['preference3'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Book Preference 3'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+ $form['preference3']['book3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Title of the book'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference3']['author3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Author Name'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference3']['isbn3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('ISBN No'),
+ '#size' => 30,
+ '#maxlength' => 25,
+ '#required' => TRUE,
+ );
+ $form['preference3']['publisher3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Publisher & Place'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['preference3']['edition3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Edition'),
+ '#size' => 4,
+ '#maxlength' => 2,
+ '#required' => TRUE,
+ );
+ $form['preference3']['year3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Year of pulication'),
+ '#size' => 4,
+ '#maxlength' => 4,
+ '#required' => TRUE,
+ );
+ $form['termconditions'] = array(
+ '#type' => 'checkboxes',
+ '#title' => t('Terms And Conditions'),
+ '#options' => array(
+ 'status' => t('I agree to the Terms and Conditions'),),
+ '#required' => TRUE,
+ );
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Submit')
+ );
+ return $form;
+}
+
+function book_proposal_form_validate($form, &$form_state)
+{
+ /* mobile */
+ if (!preg_match('/^[0-9\ \+]{0,15}$/', $form_state['values']['mobile']))
+ form_set_error('mobile', t('Invalid mobile number'));
+
+ /* date of completion */
+ if (!preg_match('/^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$/', $form_state['values']['completion_date']))
+ form_set_error('completion_date', t('Invalid expected date of completion'));
+
+ list($d, $m, $y) = explode('-', $form_state['values']['completion_date']);
+ $d = (int)$d; $m = (int)$m; $y = (int)$y;
+ if (!checkdate($m, $d, $y))
+ form_set_error('completion_date', t('Invalid expected date of completion'));
+ if (mktime(0, 0, 0, $m, $d, $y) <= time())
+ form_set_error('completion_date', t('Expected date of completion should be in future'));
+
+ /* edition */
+ if (!preg_match('/^[1-9][0-9]{0,1}$/', $form_state['values']['edition1']))
+ form_set_error('edition1', t('Invalid edition for Book Preference 1'));
+ if (!preg_match('/^[1-9][0-9]{0,1}$/', $form_state['values']['edition2']))
+ form_set_error('edition2', t('Invalid edition for Book Preference 2'));
+ if (!preg_match('/^[1-9][0-9]{0,1}$/', $form_state['values']['edition3']))
+ form_set_error('edition3', t('Invalid edition for Book Preference 3'));
+
+ /* year of publication */
+ if (!preg_match('/^[1-3][0-9][0-9][0-9]$/', $form_state['values']['year1']))
+ form_set_error('year1', t('Invalid year of pulication for Book Preference 1'));
+ if (!preg_match('/^[1-3][0-9][0-9][0-9]$/', $form_state['values']['year2']))
+ form_set_error('year2', t('Invalid year of pulication for Book Preference 2'));
+ if (!preg_match('/^[1-3][0-9][0-9][0-9]$/', $form_state['values']['year3']))
+ form_set_error('year3', t('Invalid year of pulication for Book Preference 3'));
+
+ /* year of publication */
+ $cur_year = date('Y');
+ if ((int)$form_state['values']['year1'] > $cur_year)
+ form_set_error('year1', t('Year of pulication should be not in the future for Book Preference 1'));
+ if ((int)$form_state['values']['year2'] > $cur_year)
+ form_set_error('year2', t('Year of pulication should be not in the future for Book Preference 2'));
+ if ((int)$form_state['values']['year3'] > $cur_year)
+ form_set_error('year3', t('Year of pulication should be not in the future for Book Preference 3'));
+
+ /* isbn */
+ if (!preg_match('/^[0-9\-xX]+$/', $form_state['values']['isbn1']))
+ form_set_error('isbn1', t('Invalid ISBN for Book Preference 1'));
+ if (!preg_match('/^[0-9\-xX]+$/', $form_state['values']['isbn2']))
+ form_set_error('isbn2', t('Invalid ISBN for Book Preference 2'));
+ if (!preg_match('/^[0-9\-xX]+$/', $form_state['values']['isbn3']))
+ form_set_error('isbn3', t('Invalid ISBN for Book Preference 3'));
+
+ if($form_state['values']['version'] == 'olderversion'){
+ if($form_state['values']['older'] == ''){
+ form_set_error('older', t('Please provide valid version'));
+ }
+ }
+ return;
+}
+
+function book_proposal_form_submit($form, &$form_state)
+{
+ global $user;
+
+ if (!$user->uid) {
+ drupal_set_message('It is mandatory to login on this website to access the proposal form', 'error');
+ return;
+ }
+
+ /* completion date to timestamp */
+ list($d, $m, $y) = explode('-', $form_state['values']['completion_date']);
+ $completion_date_timestamp = mktime(0, 0, 0, $m, $d, $y);
+
+
+ $scilab_version = $form_state['values']['version'];
+
+ if($form_state['values']['version'] == 'olderversion'){
+ $scilab_version = $form_state['values']['older'];
+ }
+
+ //var_dump($form_state['values']);
+
+ $query = "INSERT INTO {textbook_companion_proposal}
+ (uid, approver_uid, full_name, mobile, gender, how_project, course, branch, university, faculty, reviewer, completion_date, creation_date, approval_date, proposal_status, scilab_version, operating_system, teacher_email) VALUES (".$user->uid.", 0, '".ucwords(strtolower($form_state['values']['full_name']))."', '".$form_state['values']['mobile']."', '".$form_state['values']['gender']."', '".$form_state['values']['how_project']."', '".$form_state['values']['course']."', '".$form_state['values']['branch']."', '".$form_state['values']['university']."', '".ucwords(strtolower($form_state['values']['faculty']))."', '".ucwords(strtolower($form_state['values']['reviewer']))."', '".$completion_date_timestamp."', '".time()."', 0, 0, '".$scilab_version."', '".$form_state['values']['operating_system']."', '".$form_state['values']['faculty_email']."')";
+
+ $result = db_query($query);
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your proposal. Please try again.'), 'error');
+ return;
+ }
+ /* proposal id */
+ $proposal_id = db_last_insert_id('textbook_companion_proposal', 'id');
+
+ /* inserting first book preference */
+ if ($form_state['values']['book1'])
+ {
+ $result = db_query("INSERT INTO {textbook_companion_preference}
+ (proposal_id, pref_number, book, author, isbn, publisher, edition, year, category, approval_status) VALUES
+ (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
+ $proposal_id,
+ 1,
+ ucwords(strtolower($form_state['values']['book1'])),
+ ucwords(strtolower($form_state['values']['author1'])),
+ $form_state['values']['isbn1'],
+ ucwords(strtolower($form_state['values']['publisher1'])),
+ $form_state['values']['edition1'],
+ $form_state['values']['year1'],
+ 0,
+ 0
+ );
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your first book preference.'), 'error');
+ }
+ }
+
+ /* inserting second book preference */
+ if ($form_state['values']['book2'])
+ {
+ $result = db_query("INSERT INTO {textbook_companion_preference}
+ (proposal_id, pref_number, book, author, isbn, publisher, edition, year, category, approval_status) VALUES
+ (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
+ $proposal_id,
+ 2,
+ ucwords(strtolower($form_state['values']['book2'])),
+ ucwords(strtolower($form_state['values']['author2'])),
+ $form_state['values']['isbn2'],
+ ucwords(strtolower($form_state['values']['publisher2'])),
+ $form_state['values']['edition2'],
+ $form_state['values']['year2'],
+ 0,
+ 0
+ );
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your second book preference.'), 'error');
+ }
+ }
+
+ /* inserting third book preference */
+ if ($form_state['values']['book3'])
+ {
+ $result = db_query("INSERT INTO {textbook_companion_preference}
+ (proposal_id, pref_number, book, author, isbn, publisher, edition, year, category, approval_status) VALUES
+ (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
+ $proposal_id,
+ 3,
+ ucwords(strtolower($form_state['values']['book3'])),
+ ucwords(strtolower($form_state['values']['author3'])),
+ $form_state['values']['isbn3'],
+ ucwords(strtolower($form_state['values']['publisher3'])),
+ $form_state['values']['edition3'],
+ $form_state['values']['year3'],
+ 0,
+ 0
+ );
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your third book preference.'), 'error');
+ }
+ }
+
+ /* sending email */
+ $email_to = $user->mail;
+ $param['proposal_received']['proposal_id'] = $proposal_id;
+ $param['proposal_received']['user_id'] = $user->uid;
+ if (!drupal_mail('textbook_companion', 'proposal_received', $email_to , language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+
+ drupal_set_message(t('We have received you book proposal. We will get back to you soon.'), 'status');
+ drupal_goto('');
+}
+
+/**
+ * Implementation of hook_mail().
+ */
+function textbook_companion_mail($key, &$message, $params)
+{
+ global $user;
+ $language = $message['lianguage'];
+ $tbc_bcc_emails = array(
+ 'Bcc' => variable_get('textbook_companion_emails', ''),
+ );
+ switch ($key)
+ {
+ case 'proposal_received':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ /* initializing data */
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_received']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $preference1_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_received']['proposal_id'], 1);
+ $preference1_data = db_fetch_object($preference1_q);
+ $preference2_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_received']['proposal_id'], 2);
+ $preference2_data = db_fetch_object($preference2_q);
+ $preference3_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_received']['proposal_id'], 3);
+ $preference3_data = db_fetch_object($preference3_q);
+ $user_data = user_load($params['proposal_received']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your book proposal has been received', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your following book proposal:
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Your Book Preferences :
+
+Book Preference 1 :-
+Title of the book : ' . $preference1_data->book . '
+Author name : ' . $preference1_data->author . '
+ISBN No. : ' . $preference1_data->isbn . '
+Publisher and Place : ' . $preference1_data->publisher . '
+Edition : ' . $preference1_data->edition . '
+Year of publication : ' . $preference1_data->year . '
+
+Book Preference 2 :-
+Title of the book : ' . $preference2_data->book . '
+Author name : ' . $preference2_data->author . '
+ISBN No. : ' . $preference2_data->isbn . '
+Publisher and Place : ' . $preference2_data->publisher . '
+Edition : ' . $preference2_data->edition . '
+Year of publication : ' . $preference2_data->year . '
+
+Book Preference 3 :-
+Title of the book : ' . $preference3_data->book . '
+Author name : ' . $preference3_data->author . '
+ISBN No. : ' . $preference3_data->isbn . '
+Publisher and Place : ' . $preference3_data->publisher . '
+Edition : ' . $preference3_data->edition . '
+Year of publication : ' . $preference3_data->year . '
+
+Your proposal is under review and you will soon receive an email from us regarding the same.
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'proposal_disapproved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ /* initializing data */
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_disapproved']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $preference1_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_disapproved']['proposal_id'], 1);
+ $preference1_data = db_fetch_object($preference1_q);
+ $preference2_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_disapproved']['proposal_id'], 2);
+ $preference2_data = db_fetch_object($preference2_q);
+ $preference3_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_disapproved']['proposal_id'], 3);
+ $preference3_data = db_fetch_object($preference3_q);
+ $user_data = user_load($params['proposal_disapproved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your book proposal has been disapproved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following book proposal has been disapproved:
+
+Reason for disapproval: ' . $proposal_data->message . '
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Your Book Preferences :
+
+Book Preference 1 :-
+Title of the book : ' . $preference1_data->book . '
+Author name : ' . $preference1_data->author . '
+ISBN No. : ' . $preference1_data->isbn . '
+Publisher and Place : ' . $preference1_data->publisher . '
+Edition : ' . $preference1_data->edition . '
+Year of publication : ' . $preference1_data->year . '
+
+Book Preference 2 :-
+Title of the book : ' . $preference2_data->book . '
+Author name : ' . $preference2_data->author . '
+ISBN No. : ' . $preference2_data->isbn . '
+Publisher and Place : ' . $preference2_data->publisher . '
+Edition : ' . $preference2_data->edition . '
+Year of publication : ' . $preference2_data->year . '
+
+Book Preference 3 :-
+Title of the book : ' . $preference3_data->book . '
+Author name : ' . $preference3_data->author . '
+ISBN No. : ' . $preference3_data->isbn . '
+Publisher and Place : ' . $preference3_data->publisher . '
+Edition : ' . $preference3_data->edition . '
+Year of publication : ' . $preference3_data->year . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'proposal_approved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_approved']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $approved_preference_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND approval_status = 1 LIMIT 1", $params['proposal_approved']['proposal_id']);
+ $approved_preference_data = db_fetch_object($approved_preference_q);
+ $user_data = user_load($params['proposal_approved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your book proposal has been approved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following book proposal has been approved:
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Title of the book : ' . $approved_preference_data->book . '
+Author name : ' . $approved_preference_data->author . '
+ISBN No. : ' . $approved_preference_data->isbn . '
+Publisher and Place : ' . $approved_preference_data->publisher . '
+Edition : ' . $approved_preference_data->edition . '
+Year of publication : ' . $approved_preference_data->year . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'proposal_completed':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_completed']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $approved_preference_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND approval_status = 1 LIMIT 1", $params['proposal_completed']['proposal_id']);
+ $approved_preference_data = db_fetch_object($approved_preference_q);
+ $user_data = user_load($params['proposal_completed']['user_id']);
+
+ $message['subject'] = t('[!site_name] Congratulations for completion of the book.', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Following book has been completed sucessfully by you:
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Title of the book : ' . $approved_preference_data->book . '
+Author name : ' . $approved_preference_data->author . '
+ISBN No. : ' . $approved_preference_data->isbn . '
+Publisher and Place : ' . $approved_preference_data->publisher . '
+Edition : ' . $approved_preference_data->edition . '
+Year of publication : ' . $approved_preference_data->year . '
+
+Your book is now available at following link to download.
+
+http://scilab.in/textbook_run/' . $approved_preference_data->id . '
+
+Now you should be able to propose a new book...
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_uploaded':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_uploaded']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_uploaded']['user_id']);
+
+ $message['subject'] = t('[!site_name] You have uploaded example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+You have uploaded the following example:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+The example is under review. You will be notified when it has been approved.
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_updated':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_updated']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_updated']['user_id']);
+
+ $message['subject'] = t('[!site_name] You have updated example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+You have updated the following example:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+The example is still under review. You will be notified when it has been approved.
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_updated_admin':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_updated_admin']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_updated_admin']['user_id']);
+
+ $message['subject'] = t('[!site_name] Reviewer have updated example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Reviewer have updated the following example:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_approved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_approved']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_approved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your uploaded example has been approved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following example has been approved:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_disapproved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['example_disapproved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your uploaded example has been disapproved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following example has been disapproved:
+
+Example number : ' . $params['example_disapproved']['example_number'] . '
+Caption : ' . $params['example_disapproved']['example_caption'] . '
+
+Reason for dis-approval : ' . $params['example_disapproved']['message'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_deleted_user':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['example_deleted_user']['user_id']);
+
+ $message['subject'] = t('[!site_name] User has deleted pending example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following pending example has been deleted :
+
+Title of the Book : ' . $params['example_deleted_user']['book_title'] . '
+Title of the Chapter : ' . $params['example_deleted_user']['chapter_title'] . '
+Example number : ' . $params['example_deleted_user']['example_number'] . '
+Caption : ' . $params['example_deleted_user']['example_caption'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'dependency_uploaded':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['dependency_uploaded']['user_id']);
+ $dependency_files = implode(',', $params['dependency_uploaded']['dependency_names']);
+
+ $message['subject'] = t('[!site_name] You have uploaded dependency file', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+You have uploaded following dependency files :
+ ' . $dependency_files . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'feedback_received':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['feedback_received']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your following feedback
+
+Title of the Book: ' . $params['feedback_received']['book_title'] . '
+Title of the Chapter: ' . $params['feedback_received']['chapter_number'] . ' ' . $params['feedback_received']['chapter_title'] . '
+Example No.: ' . $params['feedback_received']['example_no'] . '
+
+Your feedback :
+' . $params['feedback_received']['feedback'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'internshipform':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['internshipform']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your Internship Form Application for the book
+
+Title of the Book: ' . $params['internshipform']['book_title'] . '
+Title of the Chapter: ' . $params['internshipform']['chapter_number'] . ' ' . $params['internshipform']['chapter_title'] . '
+Example No.: ' . $params['internshipform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+case 'copyrighttransferform':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['copyrighttransferform']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your Copyright Form Application for the book
+
+Title of the Book: ' . $params['copyrighttransferform']['book_title'] . '
+Title of the Chapter: ' . $params['copyrighttransferform']['chapter_number'] . ' ' . $params['copyrighttransferform']['chapter_title'] . '
+Example No.: ' . $params['copyrighttransferform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+case 'undertakingform':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['undertakingform']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your Undertaking Form Application for the book
+
+Title of the Book: ' . $params['undertakingform']['book_title'] . '
+Title of the Chapter: ' . $params['undertakingform']['chapter_number'] . ' ' . $params['undertakingform']['chapter_title'] . '
+Example No.: ' . $params['undertakingform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+
+case 'remark':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['remark']['user_id']);
+
+ $message['subject'] = t('[!site_name] A remark has been given.Please check your contact detail form', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+A Remark has been given.Please check your Contact Detail Form
+
+Title of the Book: ' . $params['internshipform']['book_title'] . '
+Title of the Chapter: ' . $params['internshipform']['chapter_number'] . ' ' . $params['internshipform']['chapter_title'] . '
+Example No.: ' . $params['internshipform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'cheque_sent':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['cheque_sent']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have Sent Cheque for the following book proposed
+
+Title of the Book: ' . $params['cheque_sent']['book_title'] . '
+Title of the Chapter: ' . $params['cheque_sent']['chapter_number'] . ' ' . $params['cheque_sent']['chapter_title'] . '
+Example No.: ' . $params['cheque_sent']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+
+ case 'standard':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $message['subject'] = $params['standard']['subject'];
+ $message['body'] = $params['standard']['body'];
+ break;
+ }
+}
+
+/* AJAX CALLS */
+function textbook_companion_ajax()
+{
+ $query_type = arg(2);
+ if ($query_type == 'chapter_title')
+ {
+ $chapter_number = arg(3);
+ $preference_id = arg(4);
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE number = %d AND preference_id = %d LIMIT 1", $chapter_number, $preference_id);
+ if ($chapter_data = db_fetch_object($chapter_q))
+ {
+ echo $chapter_data->name;
+ return;
+ }
+ } else if ($query_type == 'example_exists') {
+ $chapter_number = arg(3);
+ $preference_id = arg(4);
+ $example_number = arg(5);
+
+ $chapter_id = 0;
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE number = %d AND preference_id = %d LIMIT 1", $chapter_number, $preference_id);
+ if (!$chapter_data = db_fetch_object($chapter_q))
+ {
+ echo '';
+ return;
+ } else {
+ $chapter_id = $chapter_data->id;
+ }
+
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE chapter_id = %d AND number = '%s' LIMIT 1", $chapter_id, $example_number);
+ if ($example_data = db_fetch_object($example_q))
+ {
+ if ($example_data->approval_status == 1)
+ echo 'Warning! Example already approved. You cannot upload the same example again.';
+ else
+ echo 'Warning! Example already uploaded. Delete the example and reupload it.';
+ return;
+ }
+ }
+ echo '';
+}
+
+/*************************** VALIDATION FUNCTIONS *****************************/
+function textbook_companion_check_valid_filename($file_name) {
+ if (!preg_match('/^[0-9a-zA-Z\_\.]+$/', $file_name))
+ return FALSE;
+ else
+ if (substr_count($file_name, ".") > 1)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+function check_name($name = '') {
+ if (!preg_match('/^[0-9a-zA-Z\ ]+$/', $name))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+function check_chapter_number($name = '') {
+ if (!preg_match('/^([0-9])+(\.([0-9a-zA-Z])+)+$/', $name))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+function textbook_companion_path() {
+ return $_SERVER['DOCUMENT_ROOT'] . base_path() . 'uploads/';
+}
+
+/****************************** DELETION FUNCTIONS ****************************/
+
+function delete_example($example_id)
+{
+ global $user;
+ $root_path = textbook_companion_path();
+ $status = TRUE;
+
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d", $example_id);
+ $example_data = db_fetch_object($example_q);
+ if (!$example_data)
+ {
+ drupal_set_message(t('Invalid example.'), 'error');
+ return FALSE;
+ }
+
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE id = %d", $example_data->chapter_id);
+ $chapter_data = db_fetch_object($chapter_q);
+ if (!$chapter_data)
+ {
+ drupal_set_message(t('Invalid example chapter.'), 'error');
+ return FALSE;
+ }
+
+ /* deleting example files */
+ $examples_files_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE example_id = %d", $example_id);
+ while ($examples_files_data = db_fetch_object($examples_files_q))
+ {
+ if (!file_exists($root_path . $examples_files_data->filepath))
+ {
+ $status = FALSE;
+ drupal_set_message(t('Error deleting !file. File does not exists.', array('!file' => $examples_files_data->filepath)), 'error');
+ continue;
+ }
+
+ /* removing example file */
+ if (!unlink($root_path . $examples_files_data->filepath))
+ {
+ $status = FALSE;
+ drupal_set_message(t('Error deleting !file', array('!file' => $examples_files_data->filepath)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting example file";
+ $param['standard']['body'] = "Error deleting example files by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . " :
+ example id : " . $example_id . "
+ file id : " . $examples_files_data->id . "
+ file path : " . $examples_files_data->filepath;
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ } else {
+ /* deleting example files database entries */
+ db_query("DELETE FROM {textbook_companion_example_files} WHERE id = %d", $examples_files_data->id);
+ }
+ }
+
+ if (!$status)
+ return FALSE;
+
+ /* removing example folder */
+ $ex_path = $chapter_data->preference_id . '/' . 'CH' . $chapter_data->number . '/' . 'EX' . $example_data->number;
+ $dir_path = $root_path . $ex_path;
+ if (is_dir($dir_path))
+ {
+ if (!rmdir($dir_path))
+ {
+ drupal_set_message(t('Error deleting folder !folder', array('!folder' => $dir_path)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting folder";
+ $param['standard']['body'] = "Error deleting folder " . $dir_path . " by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ return FALSE;
+ }
+ } else {
+ drupal_set_message(t('Cannot delete example folder. !folder does not exists.', array('!folder' => $dir_path)), 'error');
+ return FALSE;
+ }
+
+ /* deleting example dependency and exmaple database entries */
+ db_query("DELETE FROM {textbook_companion_example_dependency} WHERE example_id = %d", $example_id);
+ db_query("DELETE FROM {textbook_companion_example} WHERE id = %d", $example_id);
+
+ return $status;
+}
+
+function delete_chapter($chapter_id)
+{
+ $status = TRUE;
+ $root_path = textbook_companion_path();
+
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE id = %d", $chapter_id);
+ $chapter_data = db_fetch_object($chapter_q);
+ if (!$chapter_data)
+ {
+ drupal_set_message('Invalid chapter.', 'error');
+ return FALSE;
+ }
+
+ /* deleting examples */
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE chapter_id = %d", $chapter_id);
+ while ($example_data = db_fetch_object($example_q))
+ {
+ if (!delete_example($example_data->id))
+ $status = FALSE;
+ }
+
+ if ($status)
+ {
+ $dir_path = $root_path . $chapter_data->preference_id . '/CH' . $chapter_data->number;
+
+ if (is_dir($dir_path))
+ {
+ $res = rmdir($dir_path);
+ if (!$res)
+ {
+ drupal_set_message(t('Error deleting chapter folder !folder', array('!folder' => $dir_path)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting folder";
+ $param['standard']['body'] = "Error deleting folder " . $dir_path;
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ return FALSE;
+ } else {
+ /* deleting chapter details from database */
+ db_query("DELETE FROM {textbook_companion_chapter} WHERE id = %d", $chapter_id);
+ return TRUE;
+ }
+ } else {
+ drupal_set_message(t('Cannot delete chapter folder. !folder does not exists.', array('!folder' => $dir_path)), 'error');
+ return FALSE;
+ }
+ }
+ return FALSE;
+}
+
+function delete_book($book_id)
+{
+ $status = TRUE;
+ $root_path = textbook_companion_path();
+
+ $preference_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE id = %d", $book_id);
+ $preference_data = db_fetch_object($preference_q);
+ if (!$preference_data)
+ {
+ drupal_set_message('Invalid book.', 'error');
+ return FALSE;
+ }
+
+ /* delete chapters */
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE preference_id = %d", $preference_data->id);
+ while ($chapter_data = db_fetch_object($chapter_q))
+ {
+ if (!delete_chapter($chapter_data->id))
+ {
+ $status = FALSE;
+ }
+ }
+ return $status;
+}
+
+function delete_file($file_id)
+{
+ $root_path = textbook_companion_path();
+
+ $file_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE id = %d LIMIT 1", $file_id);
+ $file_data = db_fetch_object($file_q);
+ if (!$file_data)
+ {
+ drupal_set_message('Invalid file specified.', 'error');
+ return FALSE;
+ }
+
+ if (!file_exists($root_path . $file_data->filepath))
+ {
+ drupal_set_message(t('Error deleting !file. File does not exists.', array('!file' => $file_data->filepath)), 'error');
+ return FALSE;
+ }
+
+ /* removing example file */
+ if (!unlink($root_path . $file_data->filepath))
+ {
+ drupal_set_message(t('Error deleting !file', array('!file' => $file_data->filepath)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting file";
+ $param['standard']['body'] = "Error deleting file by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . " :
+ file id : " . $file_id . "
+ file path : " . $file_data->filepath;
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ return FALSE;
+ } else {
+ /* deleting example files database entries */
+ db_query("DELETE FROM {textbook_companion_example_files} WHERE id = %d", $file_id);
+ return TRUE;
+ }
+}
+
+function del_book_pdf($book_id)
+{
+ $root_path = textbook_companion_path();
+ $dir_path = $root_path . "latex/";
+ $pdf_filename = "book_" . $book_id . ".pdf";
+ if (file_exists($dir_path . $pdf_filename))
+ unlink($dir_path . $pdf_filename);
+}
+function textbook_companion_init(){
+ //drupal_add_css('http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css', array('type' => 'external'));
+ //drupal_add_js('http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css', array('type' => 'external'));
+ //drupal_add_js(drupal_get_path('module', 'textbook_companion') .'/js/jquery-ui.js');
+ //drupal_add_js(drupal_get_path('module', 'textbook_companion') .'/js/jquery.js');
+ drupal_add_css(drupal_get_path('module', 'textbook_companion') .'/css/textbook_companion.css');
+ drupal_add_js(drupal_get_path('module', 'textbook_companion') .'/js/textbook_companion.js');
+}
diff --git a/textbook_companion.module.bak-23Oct2013 b/textbook_companion.module.bak-23Oct2013
new file mode 100755
index 0000000..9c8d4e5
--- /dev/null
+++ b/textbook_companion.module.bak-23Oct2013
@@ -0,0 +1,1785 @@
+ 'Book Proposal Form',
+ 'description' => 'Book Proposal Form.',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('book_proposal_form'),
+ 'access callback' => 'user_access',
+ 'access arguments' => array('create book proposal'),
+ 'type' => MENU_NORMAL_ITEM,
+ );
+
+ /* for reviewers */
+ $items['manage_proposal'] = array(
+ 'title' => 'Manage Book Proposals',
+ 'description' => 'Manage Book Proposals',
+ 'page callback' => '_proposal_pending',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/pending'] = array(
+ 'title' => 'Pending Proposals',
+ 'description' => 'Pending Proposals Queue',
+ 'page callback' => '_proposal_pending',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'weight' => 1,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/all'] = array(
+ 'title' => 'All Proposals',
+ 'description' => 'All Proposals',
+ 'page callback' => '_proposal_all',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 2,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/category'] = array(
+ 'title' => 'Categorize',
+ 'description' => 'Categorize Books',
+ 'page callback' => '_category_all',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 2,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/approve'] = array(
+ 'title' => 'Proposal Approval',
+ 'description' => 'Proposal Approval',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('proposal_approval_form'),
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/status'] = array(
+ 'title' => 'Proposal Status',
+ 'description' => 'Proposal Status',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('proposal_status_form'),
+ 'access arguments' => array('approve book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/edit'] = array(
+ 'title' => 'Edit Proposal',
+ 'description' => 'Edit Proposal',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('proposal_edit_form'),
+ 'access arguments' => array('edit book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['manage_proposal/category/edit'] = array(
+ 'title' => 'Edit Category',
+ 'description' => 'Edit category',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('category_edit_form'),
+ 'access arguments' => array('edit book proposal'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'manage_proposal.inc',
+ );
+
+ $items['code_approval'] = array(
+ 'title' => 'Manage Code Approval',
+ 'description' => 'Manage Code Approval',
+ 'page callback' => 'code_approval',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'code_approval.inc',
+ );
+ $items['code_approval/approve'] = array(
+ 'title' => 'Code Approval',
+ 'description' => 'Code Approval',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('code_approval_form'),
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'weight' => 1,
+ 'file' => 'code_approval.inc',
+ );
+ $items['code_approval/bulk'] = array(
+ 'title' => 'Bulk Manage',
+ 'description' => 'Bulk Mangage',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('bulk_approval_form'),
+ 'access arguments' => array('bulk manage code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 2,
+ 'file' => 'code_approval.inc',
+ );
+ $items['code_approval/editcode'] = array(
+ 'title' => 'Admin Edit Example',
+ 'description' => 'Admin Edit Example',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('upload_examples_admin_edit_form'),
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'weight' => 3,
+ 'file' => 'editcodeadmin.inc',
+ );
+ $items['code_approval/notes'] = array(
+ 'title' => 'Notes for Reviewers',
+ 'description' => 'Notes for Reviewers',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('book_notes_form'),
+ 'access arguments' => array('bulk manage code'),
+ 'type' => MENU_CALLBACK,
+ 'weight' => 4,
+ 'file' => 'notes.inc',
+ );
+ $items['code_approval/dependency'] = array(
+ 'title' => 'Dependency',
+ 'description' => 'Dependency',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_dependency_approval_form'),
+ 'access arguments' => array('bulk manage code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'weight' => 3,
+ 'file' => 'dependency_approval.inc',
+ );
+
+ $items['textbook_companion/code'] = array(
+ 'title' => 'Code Submission',
+ 'description' => 'Code Submission',
+ 'page callback' => 'list_chapters',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('upload code'),
+ 'file' => 'general.inc',
+ );
+ $items['textbook_companion/code/list_chapters'] = array(
+ 'title' => 'List Chapters',
+ 'description' => 'List Chapters',
+ 'page callback' => 'list_chapters',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'file' => 'general.inc',
+ 'weight' => 1,
+ );
+ $items['textbook_companion/code/upload'] = array(
+ 'title' => 'Code Submission',
+ 'description' => 'Code Submission',
+ 'page callback' => 'upload_examples',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'code.inc',
+ 'weight' => 2,
+ );
+ $items['textbook_companion/code/upload_dep'] = array(
+ 'title' => 'Upload Dependency',
+ 'description' => 'Upload Dependency Files',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('upload_dependency_form'),
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'dependency.inc',
+ 'weight' => 3,
+ );
+ $items['textbook_companion/code/edit'] = array(
+ 'title' => 'Edit Example',
+ 'description' => 'Edit Example',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('upload_examples_edit_form'),
+ 'access arguments' => array('edit uploaded code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'editcode.inc',
+ );
+ $items['textbook_companion/code/delete'] = array(
+ 'title' => 'Delete Example',
+ 'description' => 'Delete Example',
+ 'page callback' => '_upload_examples_delete',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'code.inc',
+ );
+ $items['textbook_companion/code/chapter/edit'] = array(
+ 'title' => 'Edit Chapter Title',
+ 'description' => 'Edit Chapter Title',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('edit_chapter_title_form'),
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'editcode.inc',
+ );
+ $items['textbook_companion/code/list_examples'] = array(
+ 'title' => 'List Examples',
+ 'description' => 'List Examples',
+ 'page callback' => 'list_examples',
+ 'access arguments' => array('upload code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'general.inc',
+ 'weight' => 3,
+ );
+
+ $items['textbook_search'] = array(
+ 'title' => 'Book Search',
+ 'description' => '',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_search_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'search.inc',
+ );
+ $items['textbook_search/search'] = array(
+ 'title' => 'Book Search',
+ 'description' => '',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_search_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_DEFAULT_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 1,
+ );
+ $items['textbook_search/book'] = array(
+ 'title' => 'By Book Title',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_book',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 2,
+ );
+ $items['textbook_search/author'] = array(
+ 'title' => 'By Author',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_author',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 3,
+ );
+ $items['textbook_search/college'] = array(
+ 'title' => 'By College',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_college',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_browse_college_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 4,
+ );
+ $items['textbook_search/student'] = array(
+ 'title' => 'By Student',
+ 'description' => '',
+ 'page callback' => 'textbook_companion_browse_student',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_LOCAL_TASK,
+ 'file' => 'search.inc',
+ 'weight' => 5,
+ );
+
+ $items['textbook_run'] = array(
+ 'title' => 'Download Codes',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_run_form'),
+ 'access arguments' => array('access content'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'run.inc',
+ );
+
+ /* download callbacks */
+ $items['download/file'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_example_file',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/dependency'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_dependency_file',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/example'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_example',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/chapter'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_chapter',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+ $items['download/book'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_book',
+ 'access arguments' => array('download code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'download.inc',
+ );
+
+ /* reviewer download */
+ $items['full_download/chapter'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_full_chapter',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'full_download.inc',
+ );
+ $items['full_download/book'] = array(
+ 'title' => 'Code Download',
+ 'description' => 'Code Download',
+ 'page callback' => 'textbook_companion_download_full_book',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'full_download.inc',
+ );
+
+ /* latex script for book generation */
+ $items['textbook_companion/generate_book'] = array(
+ 'title' => 'Generate Book',
+ 'description' => 'Generate Book From Latex Script',
+ 'page callback' => 'textbook_companion_download_book',
+ 'access arguments' => array('generate book'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'latex.inc',
+ );
+ $items['textbook_companion/delete_book'] = array(
+ 'title' => 'Delete Book PDF',
+ 'description' => 'Delete Book PDF',
+ 'page callback' => 'textbook_companion_delete_book',
+ 'access arguments' => array('approve code'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'latex.inc',
+ );
+
+ /* general purpose callbacks */
+ $items['textbook_companion/ajax'] = array(
+ 'title' => 'Ajax',
+ 'description' => 'Ajax',
+ 'page callback' => 'textbook_companion_ajax',
+ 'access arguments' => array('access content'),
+ 'type' => MENU_CALLBACK,
+ );
+
+ /* for admin */
+ $items['admin/settings/book_companion'] = array(
+ 'title' => 'Book Companion Settings',
+ 'description' => 'Book Companion Settings',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('textbook_companion_settings_form'),
+ 'access arguments' => array('administer book companion'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'settings.inc',
+ );
+ /* for data entry */
+ $items['dataentry_book'] = array(
+ 'title' => 'Approved books list',
+ 'page callback' => '_data_entry_proposal_all',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('dataentry book proposal'),
+ 'file' => 'manage_proposal.inc',
+ );
+ $items['dataentry_edit'] = array(
+ 'title' => 'Edit book details',
+ 'page callback' => 'dataentry_edit',
+ 'access callback' => 'user_access',
+ 'access arguments' => array('dataentry book proposal'),
+ 'type' => MENU_NORMAL_ITEM,
+ 'file' => 'manage_proposal.inc',
+ );
+ /*Cheque Details and Contact Form */
+ $items['cheque_manage/all'] = array(
+ 'title' => 'Cheque Proposals',
+ 'description' => 'Cheque Proposals',
+ 'page callback' => 'cheque_proposal_all',
+ 'access arguments' => array('cheque proposal'),
+ 'file' => 'cheque_manage.inc',
+ );
+ $items['mycontact'] = array(
+ 'title' => 'Update Contact Details',
+ 'description' => 'Update Contact Details',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('contact_details'),
+ 'access arguments' => array('contact_details'),
+ 'file' => 'cheque_contact.inc',
+ );
+
+ $items['cheque_contct'] = array(
+ 'title' => 'Report',
+ 'description' => 'Cheque Contact Form',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('cheque_contct_form'),
+ 'access arguments' => array('cheque contct form'),
+ 'file' => 'cheque_contact.inc',
+ );
+ $items['cheque_contact/status'] = array(
+ 'title' => 'Cheque Status',
+ 'description' => 'Cheque Status',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('cheque_status_form'),
+ 'access' => 'user_is_logged_in',
+ 'access arguments' => array('cheque status form'),
+ 'file' => 'cheque_contact.inc',
+ );
+ $items['cheque_contct/report'] = array(
+ 'title' => 'Report',
+ 'description' => 'Report',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('cheque_report_form'),
+ 'access' => 'user_is_logged_in',
+ 'access arguments' => array('cheque report form'),
+ 'file' => 'cheque_contact.inc',
+ );
+ $items['certificate'] = array(
+ 'title' => 'List Of All Certificates',
+ 'description' => 'List Of All Certificates',
+ 'page callback' => '_list_all_certificates',
+ 'access arguments' => array('list all certificates'),
+ 'file' => 'pdf/list_all_certificates.inc',
+ );
+ $items['certificate/generate_pdf'] = array(
+ 'title' => 'Download Certificate',
+ 'description' => 'Download Certificate',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('generate_pdf'),
+ 'access arguments' => array('generate pdf'),
+ 'file' => 'pdf/generate_pdf.inc',
+ );
+ $items['manage_proposal/paper_submission'] = array(
+ 'title' => 'Application Submission',
+ 'description' => 'Application Submission',
+ 'page callback' => 'drupal_get_form',
+ 'page arguments' => array('paper_submission_form'),
+ 'access arguments' => array('paper submission form'),
+ 'type' => MENU_CALLBACK,
+ 'file' => 'cheque_contact.inc',
+ );
+ return $items;
+}
+
+/**
+ * Implementation of hook_perm().
+ */
+function textbook_companion_perm() {
+
+ return array('create book proposal', 'approve book proposal', 'approve code', 'upload code', 'edit uploaded code', 'download code', 'create feedback', 'bulk manage code', 'bulk delete code', 'edit book proposal', 'administer book companion', 'generate book', 'cheque contct form', 'contact_details', 'comment cheque', 'list all certificates', 'generate pdf', 'paper submission form', 'cheque status form' ,'cheque report form' ,'cheque proposal');
+}
+
+
+function book_proposal_form($form_state)
+{
+ global $user;
+
+ if (!$user->uid) {
+ drupal_set_message('It is mandatory to login on this website to access the proposal form', 'error');
+ return;
+ }
+
+ /* check if user has already submitted a proposal */
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE uid = %d ORDER BY id DESC LIMIT 1", $user->uid);
+ if ($proposal_q)
+ {
+ if ($proposal_data = db_fetch_object($proposal_q))
+ {
+ switch ($proposal_data->proposal_status)
+ {
+ case 0:
+ drupal_set_message(t('We have already received your proposal. We will get back to you soon.'), 'status');
+ drupal_goto('');
+ return;
+ break;
+ case 1:
+ drupal_set_message(t('Your proposal has been approved. Please go to ' . l('Code Submission', 'textbook_companion/code') . ' to upload your code'), 'status');
+ drupal_goto('');
+ return;
+ break;
+ case 2:
+ drupal_set_message(t('Your proposal has been dis-approved. Please create another proposal below.'), 'error');
+ break;
+ case 3:
+ drupal_set_message(t('Congratulations! You have completed your last book proposal. You can create another proposal below.'), 'status');
+ break;
+ default:
+ drupal_set_message(t('Invalid proposal state. Please contact site administrator for further information.'), 'error');
+ drupal_goto('');
+ return;
+ break;
+ }
+ }
+ }
+
+ $form['imp_notice'] = array(
+ '#type' => 'item',
+ '#value' => 'Please fill up this form carefully as the details entered here will be exactly written in the Textbook Companion',
+ );
+
+ $form['full_name'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Full Name'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['email_id'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Email'),
+ '#size' => 30,
+ '#value' => $user->mail,
+ '#disabled' => TRUE,
+ );
+ $form['mobile'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Mobile No.'),
+ '#size' => 30,
+ '#maxlength' => 15,
+ '#required' => TRUE,
+ );
+ $form['gender'] = array(
+ '#type' => 'radios',
+ '#title' => t('Gender'),
+ '#options' => array('M' => 'Male', 'F' => 'Female'),
+ '#required' => TRUE,
+ );
+
+ $form['how_project'] = array(
+ '#type' => 'select',
+ '#title' => t('How did you come to know about this project'),
+ '#options' => array('Scilab Website' => 'Scilab Website',
+ 'Friend' => 'Friend',
+ 'Professor/Teacher' => 'Professor/Teacher',
+ 'Mailing List' => 'Mailing List',
+ 'Poster in my/other college' => 'Poster in my/other college',
+ 'Others' => 'Others'),
+ '#required' => TRUE,
+ );
+ $form['course'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Course'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['branch'] = array(
+ '#type' => 'select',
+ '#title' => t('Department/Branch'),
+ '#options' => array('Electrical Engineering' => 'Electrical Engineering',
+ 'Electronics Engineering' => 'Electronics Engineering',
+ 'Computer Engineering' => 'Computer Engineering',
+ 'Chemical Engineering' => 'Chemical Engineering',
+ 'Instrumentation Engineering' => 'Instrumentation Engineering',
+ 'Mechanical Engineering' => 'Mechanical Engineering',
+ 'Civil Engineering' => 'Civil Engineering',
+ 'Physics' => 'Physics',
+ 'Mathematics' => 'Mathematics',
+ 'Others' => 'Others'),
+ '#required' => TRUE,
+ );
+ $form['university'] = array(
+ '#type' => 'textfield',
+ '#title' => t('University/Institute'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['faculty'] = array(
+ '#type' => 'textfield',
+ '#title' => t('College Teacher/Professor'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['faculty_email'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Teacher/Professor Email Id'),
+ '#default_value' => '@email.com',
+ '#size' => 30,
+ '#maxlength' => 50,
+ );
+ $form['reviewer'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Reviewer'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ );
+ $form['version'] = array(
+ '#type' => 'select',
+ '#title' => t('Version'),
+ '#options' => array('scilab 5.4.1' => 'Scilab 5.4.1',
+ 'scilab 5.3.3' => 'Scilab 5.3.3',
+ 'olderversion' => 'Older Version'),
+ '#required' => TRUE,
+ );
+ $form['older'] = array(
+ '#type' => 'textfield',
+ '#size' => 30,
+ '#maxlength' => 50,
+ //'#required' => TRUE,
+ '#description' => t('Specify the Older version used'),
+ );
+ $form['completion_date'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Expected Date of Completion'),
+ '#description' => t('Input date format should be DD-MM-YYYY. Eg: 23-03-2011'),
+ '#size' => 10,
+ '#maxlength' => 10,
+ );
+ $form['operating_system'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Operating System'),
+ '#required' => TRUE,
+ '#size' => 30,
+ '#maxlength' => 50,
+ );
+ /*$form['scilab_version'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Scilab Version'),
+ '#required' => TRUE,
+ '#size' => 10,
+ '#maxlength' => 10,
+ );*/
+ $form['preference1'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Book Preference 1'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+ $form['preference1']['book1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Title of the book'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference1']['author1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Author Name'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference1']['isbn1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('ISBN No'),
+ '#size' => 30,
+ '#maxlength' => 25,
+ '#required' => TRUE,
+ );
+ $form['preference1']['publisher1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Publisher & Place'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['preference1']['edition1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Edition'),
+ '#size' => 4,
+ '#maxlength' => 2,
+ '#required' => TRUE,
+ );
+ $form['preference1']['year1'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Year of pulication'),
+ '#size' => 4,
+ '#maxlength' => 4,
+ '#required' => TRUE,
+ );
+ $form['preference2'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Book Preference 2'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+ $form['preference2']['book2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Title of the book'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference2']['author2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Author Name'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference2']['isbn2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('ISBN No'),
+ '#size' => 30,
+ '#maxlength' => 25,
+ '#required' => TRUE,
+ );
+ $form['preference2']['publisher2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Publisher & Place'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['preference2']['edition2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Edition'),
+ '#size' => 4,
+ '#maxlength' => 2,
+ '#required' => TRUE,
+ );
+ $form['preference2']['year2'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Year of pulication'),
+ '#size' => 4,
+ '#maxlength' => 4,
+ '#required' => TRUE,
+ );
+ $form['preference3'] = array(
+ '#type' => 'fieldset',
+ '#title' => t('Book Preference 3'),
+ '#collapsible' => TRUE,
+ '#collapsed' => FALSE,
+ );
+ $form['preference3']['book3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Title of the book'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference3']['author3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Author Name'),
+ '#size' => 30,
+ '#maxlength' => 100,
+ '#required' => TRUE,
+ );
+ $form['preference3']['isbn3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('ISBN No'),
+ '#size' => 30,
+ '#maxlength' => 25,
+ '#required' => TRUE,
+ );
+ $form['preference3']['publisher3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Publisher & Place'),
+ '#size' => 30,
+ '#maxlength' => 50,
+ '#required' => TRUE,
+ );
+ $form['preference3']['edition3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Edition'),
+ '#size' => 4,
+ '#maxlength' => 2,
+ '#required' => TRUE,
+ );
+ $form['preference3']['year3'] = array(
+ '#type' => 'textfield',
+ '#title' => t('Year of pulication'),
+ '#size' => 4,
+ '#maxlength' => 4,
+ '#required' => TRUE,
+ );
+ $form['termconditions'] = array(
+ '#type' => 'checkboxes',
+ '#title' => t('Terms And Conditions'),
+ '#options' => array(
+ 'status' => t('I agree to the Terms and Conditions'),),
+ '#required' => TRUE,
+ );
+ $form['submit'] = array(
+ '#type' => 'submit',
+ '#value' => t('Submit')
+ );
+ return $form;
+}
+
+function book_proposal_form_validate($form, &$form_state)
+{
+ /* mobile */
+ if (!preg_match('/^[0-9\ \+]{0,15}$/', $form_state['values']['mobile']))
+ form_set_error('mobile', t('Invalid mobile number'));
+
+ /* date of completion */
+ if (!preg_match('/^[0-9]{1,2}-[0-9]{1,2}-[0-9]{4}$/', $form_state['values']['completion_date']))
+ form_set_error('completion_date', t('Invalid expected date of completion'));
+
+ list($d, $m, $y) = explode('-', $form_state['values']['completion_date']);
+ $d = (int)$d; $m = (int)$m; $y = (int)$y;
+ if (!checkdate($m, $d, $y))
+ form_set_error('completion_date', t('Invalid expected date of completion'));
+ if (mktime(0, 0, 0, $m, $d, $y) <= time())
+ form_set_error('completion_date', t('Expected date of completion should be in future'));
+
+ /* edition */
+ if (!preg_match('/^[1-9][0-9]{0,1}$/', $form_state['values']['edition1']))
+ form_set_error('edition1', t('Invalid edition for Book Preference 1'));
+ if (!preg_match('/^[1-9][0-9]{0,1}$/', $form_state['values']['edition2']))
+ form_set_error('edition2', t('Invalid edition for Book Preference 2'));
+ if (!preg_match('/^[1-9][0-9]{0,1}$/', $form_state['values']['edition3']))
+ form_set_error('edition3', t('Invalid edition for Book Preference 3'));
+
+ /* year of publication */
+ if (!preg_match('/^[1-3][0-9][0-9][0-9]$/', $form_state['values']['year1']))
+ form_set_error('year1', t('Invalid year of pulication for Book Preference 1'));
+ if (!preg_match('/^[1-3][0-9][0-9][0-9]$/', $form_state['values']['year2']))
+ form_set_error('year2', t('Invalid year of pulication for Book Preference 2'));
+ if (!preg_match('/^[1-3][0-9][0-9][0-9]$/', $form_state['values']['year3']))
+ form_set_error('year3', t('Invalid year of pulication for Book Preference 3'));
+
+ /* year of publication */
+ $cur_year = date('Y');
+ if ((int)$form_state['values']['year1'] > $cur_year)
+ form_set_error('year1', t('Year of pulication should be not in the future for Book Preference 1'));
+ if ((int)$form_state['values']['year2'] > $cur_year)
+ form_set_error('year2', t('Year of pulication should be not in the future for Book Preference 2'));
+ if ((int)$form_state['values']['year3'] > $cur_year)
+ form_set_error('year3', t('Year of pulication should be not in the future for Book Preference 3'));
+
+ /* isbn */
+ if (!preg_match('/^[0-9\-xX]+$/', $form_state['values']['isbn1']))
+ form_set_error('isbn1', t('Invalid ISBN for Book Preference 1'));
+ if (!preg_match('/^[0-9\-xX]+$/', $form_state['values']['isbn2']))
+ form_set_error('isbn2', t('Invalid ISBN for Book Preference 2'));
+ if (!preg_match('/^[0-9\-xX]+$/', $form_state['values']['isbn3']))
+ form_set_error('isbn3', t('Invalid ISBN for Book Preference 3'));
+
+ if($form_state['values']['version'] == 'olderversion'){
+ if($form_state['values']['older'] == ''){
+ form_set_error('older', t('Please provide valid version'));
+ }
+ }
+ return;
+}
+
+function book_proposal_form_submit($form, &$form_state)
+{
+ global $user;
+
+ if (!$user->uid) {
+ drupal_set_message('It is mandatory to login on this website to access the proposal form', 'error');
+ return;
+ }
+
+ /* completion date to timestamp */
+ list($d, $m, $y) = explode('-', $form_state['values']['completion_date']);
+ $completion_date_timestamp = mktime(0, 0, 0, $m, $d, $y);
+
+
+ $scilab_version = $form_state['values']['version'];
+
+ if($form_state['values']['version'] == 'olderversion'){
+ $scilab_version = $form_state['values']['older'];
+ }
+
+ //var_dump($form_state['values']);
+
+ $query = "INSERT INTO {textbook_companion_proposal}
+ (uid, approver_uid, full_name, mobile, gender, how_project, course, branch, university, faculty, reviewer, completion_date, creation_date, approval_date, proposal_status, scilab_version, operating_system, teacher_email) VALUES (".$user->uid.", 0, '".ucwords(strtolower($form_state['values']['full_name']))."', '".$form_state['values']['mobile']."', '".$form_state['values']['gender']."', '".$form_state['values']['how_project']."', '".$form_state['values']['course']."', '".$form_state['values']['branch']."', '".$form_state['values']['university']."', '".ucwords(strtolower($form_state['values']['faculty']))."', '".ucwords(strtolower($form_state['values']['reviewer']))."', '".$completion_date_timestamp."', '".time()."', 0, 0, '".$scilab_version."', '".$form_state['values']['operating_system']."', '".$form_state['values']['faculty_email']."')";
+
+ $result = db_query($query);
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your proposal. Please try again.'), 'error');
+ return;
+ }
+ /* proposal id */
+ $proposal_id = db_last_insert_id('textbook_companion_proposal', 'id');
+
+ /* inserting first book preference */
+ if ($form_state['values']['book1'])
+ {
+ $result = db_query("INSERT INTO {textbook_companion_preference}
+ (proposal_id, pref_number, book, author, isbn, publisher, edition, year, category, approval_status) VALUES
+ (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
+ $proposal_id,
+ 1,
+ ucwords(strtolower($form_state['values']['book1'])),
+ ucwords(strtolower($form_state['values']['author1'])),
+ $form_state['values']['isbn1'],
+ ucwords(strtolower($form_state['values']['publisher1'])),
+ $form_state['values']['edition1'],
+ $form_state['values']['year1'],
+ 0,
+ 0
+ );
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your first book preference.'), 'error');
+ }
+ }
+
+ /* inserting second book preference */
+ if ($form_state['values']['book2'])
+ {
+ $result = db_query("INSERT INTO {textbook_companion_preference}
+ (proposal_id, pref_number, book, author, isbn, publisher, edition, year, category, approval_status) VALUES
+ (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
+ $proposal_id,
+ 2,
+ ucwords(strtolower($form_state['values']['book2'])),
+ ucwords(strtolower($form_state['values']['author2'])),
+ $form_state['values']['isbn2'],
+ ucwords(strtolower($form_state['values']['publisher2'])),
+ $form_state['values']['edition2'],
+ $form_state['values']['year2'],
+ 0,
+ 0
+ );
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your second book preference.'), 'error');
+ }
+ }
+
+ /* inserting third book preference */
+ if ($form_state['values']['book3'])
+ {
+ $result = db_query("INSERT INTO {textbook_companion_preference}
+ (proposal_id, pref_number, book, author, isbn, publisher, edition, year, category, approval_status) VALUES
+ (%d, %d, '%s', '%s', '%s', '%s', '%s', '%s', %d, %d)",
+ $proposal_id,
+ 3,
+ ucwords(strtolower($form_state['values']['book3'])),
+ ucwords(strtolower($form_state['values']['author3'])),
+ $form_state['values']['isbn3'],
+ ucwords(strtolower($form_state['values']['publisher3'])),
+ $form_state['values']['edition3'],
+ $form_state['values']['year3'],
+ 0,
+ 0
+ );
+ if (!$result)
+ {
+ drupal_set_message(t('Error receiving your third book preference.'), 'error');
+ }
+ }
+
+ /* sending email */
+ $email_to = $user->mail;
+ $param['proposal_received']['proposal_id'] = $proposal_id;
+ $param['proposal_received']['user_id'] = $user->uid;
+ if (!drupal_mail('textbook_companion', 'proposal_received', $email_to , language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+
+ drupal_set_message(t('We have received you book proposal. We will get back to you soon.'), 'status');
+ drupal_goto('');
+}
+
+/**
+ * Implementation of hook_mail().
+ */
+function textbook_companion_mail($key, &$message, $params)
+{
+ global $user;
+ $language = $message['lianguage'];
+ $tbc_bcc_emails = array(
+ 'Bcc' => variable_get('textbook_companion_emails', ''),
+ );
+ switch ($key)
+ {
+ case 'proposal_received':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ /* initializing data */
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_received']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $preference1_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_received']['proposal_id'], 1);
+ $preference1_data = db_fetch_object($preference1_q);
+ $preference2_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_received']['proposal_id'], 2);
+ $preference2_data = db_fetch_object($preference2_q);
+ $preference3_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_received']['proposal_id'], 3);
+ $preference3_data = db_fetch_object($preference3_q);
+ $user_data = user_load($params['proposal_received']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your book proposal has been received', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your following book proposal:
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Your Book Preferences :
+
+Book Preference 1 :-
+Title of the book : ' . $preference1_data->book . '
+Author name : ' . $preference1_data->author . '
+ISBN No. : ' . $preference1_data->isbn . '
+Publisher and Place : ' . $preference1_data->publisher . '
+Edition : ' . $preference1_data->edition . '
+Year of publication : ' . $preference1_data->year . '
+
+Book Preference 2 :-
+Title of the book : ' . $preference2_data->book . '
+Author name : ' . $preference2_data->author . '
+ISBN No. : ' . $preference2_data->isbn . '
+Publisher and Place : ' . $preference2_data->publisher . '
+Edition : ' . $preference2_data->edition . '
+Year of publication : ' . $preference2_data->year . '
+
+Book Preference 3 :-
+Title of the book : ' . $preference3_data->book . '
+Author name : ' . $preference3_data->author . '
+ISBN No. : ' . $preference3_data->isbn . '
+Publisher and Place : ' . $preference3_data->publisher . '
+Edition : ' . $preference3_data->edition . '
+Year of publication : ' . $preference3_data->year . '
+
+Your proposal is under review and you will soon receive an email from us regarding the same.
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'proposal_disapproved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ /* initializing data */
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_disapproved']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $preference1_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_disapproved']['proposal_id'], 1);
+ $preference1_data = db_fetch_object($preference1_q);
+ $preference2_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_disapproved']['proposal_id'], 2);
+ $preference2_data = db_fetch_object($preference2_q);
+ $preference3_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND pref_number = %d LIMIT 1", $params['proposal_disapproved']['proposal_id'], 3);
+ $preference3_data = db_fetch_object($preference3_q);
+ $user_data = user_load($params['proposal_disapproved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your book proposal has been disapproved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following book proposal has been disapproved:
+
+Reason for disapproval: ' . $proposal_data->message . '
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Your Book Preferences :
+
+Book Preference 1 :-
+Title of the book : ' . $preference1_data->book . '
+Author name : ' . $preference1_data->author . '
+ISBN No. : ' . $preference1_data->isbn . '
+Publisher and Place : ' . $preference1_data->publisher . '
+Edition : ' . $preference1_data->edition . '
+Year of publication : ' . $preference1_data->year . '
+
+Book Preference 2 :-
+Title of the book : ' . $preference2_data->book . '
+Author name : ' . $preference2_data->author . '
+ISBN No. : ' . $preference2_data->isbn . '
+Publisher and Place : ' . $preference2_data->publisher . '
+Edition : ' . $preference2_data->edition . '
+Year of publication : ' . $preference2_data->year . '
+
+Book Preference 3 :-
+Title of the book : ' . $preference3_data->book . '
+Author name : ' . $preference3_data->author . '
+ISBN No. : ' . $preference3_data->isbn . '
+Publisher and Place : ' . $preference3_data->publisher . '
+Edition : ' . $preference3_data->edition . '
+Year of publication : ' . $preference3_data->year . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'proposal_approved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_approved']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $approved_preference_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND approval_status = 1 LIMIT 1", $params['proposal_approved']['proposal_id']);
+ $approved_preference_data = db_fetch_object($approved_preference_q);
+ $user_data = user_load($params['proposal_approved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your book proposal has been approved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following book proposal has been approved:
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Title of the book : ' . $approved_preference_data->book . '
+Author name : ' . $approved_preference_data->author . '
+ISBN No. : ' . $approved_preference_data->isbn . '
+Publisher and Place : ' . $approved_preference_data->publisher . '
+Edition : ' . $approved_preference_data->edition . '
+Year of publication : ' . $approved_preference_data->year . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'proposal_completed':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $proposal_q = db_query("SELECT * FROM {textbook_companion_proposal} WHERE id = %d LIMIT 1", $params['proposal_completed']['proposal_id']);
+ $proposal_data = db_fetch_object($proposal_q);
+ $approved_preference_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE proposal_id = %d AND approval_status = 1 LIMIT 1", $params['proposal_completed']['proposal_id']);
+ $approved_preference_data = db_fetch_object($approved_preference_q);
+ $user_data = user_load($params['proposal_completed']['user_id']);
+
+ $message['subject'] = t('[!site_name] Congratulations for completion of the book.', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Following book has been completed sucessfully by you:
+
+Full Name : ' . $proposal_data->full_name . '
+Email : ' . $user_data->mail . '
+Mobile : ' . $proposal_data->mobile . '
+Course : ' . $proposal_data->course . '
+Department/Branch : ' . $proposal_data->branch . '
+University/Institute : ' . $proposal_data->university . '
+College Teacher / Professor : ' . $proposal_data->faculty . '
+Reviewer : ' . $proposal_data->reviewer . '
+Expected date of completion : ' . date('d-m-Y', $proposal_data->completion_date) . '
+
+Title of the book : ' . $approved_preference_data->book . '
+Author name : ' . $approved_preference_data->author . '
+ISBN No. : ' . $approved_preference_data->isbn . '
+Publisher and Place : ' . $approved_preference_data->publisher . '
+Edition : ' . $approved_preference_data->edition . '
+Year of publication : ' . $approved_preference_data->year . '
+
+Your book is now available at following link to download.
+
+http://scilab.in/textbook_run/' . $approved_preference_data->id . '
+
+Now you should be able to propose a new book...
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_uploaded':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_uploaded']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_uploaded']['user_id']);
+
+ $message['subject'] = t('[!site_name] You have uploaded example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+You have uploaded the following example:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+The example is under review. You will be notified when it has been approved.
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_updated':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_updated']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_updated']['user_id']);
+
+ $message['subject'] = t('[!site_name] You have updated example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+You have updated the following example:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+The example is still under review. You will be notified when it has been approved.
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_updated_admin':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_updated_admin']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_updated_admin']['user_id']);
+
+ $message['subject'] = t('[!site_name] Reviewer have updated example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Reviewer have updated the following example:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_approved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d LIMIT 1", $params['example_approved']['example_id']);
+ $example_data = db_fetch_object($example_q);
+ $user_data = user_load($params['example_approved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your uploaded example has been approved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following example has been approved:
+
+Example number : ' . $example_data->number . '
+Caption : ' . $example_data->caption . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_disapproved':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['example_disapproved']['user_id']);
+
+ $message['subject'] = t('[!site_name] Your uploaded example has been disapproved', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following example has been disapproved:
+
+Example number : ' . $params['example_disapproved']['example_number'] . '
+Caption : ' . $params['example_disapproved']['example_caption'] . '
+
+Reason for dis-approval : ' . $params['example_disapproved']['message'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'example_deleted_user':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['example_deleted_user']['user_id']);
+
+ $message['subject'] = t('[!site_name] User has deleted pending example', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+Your following pending example has been deleted :
+
+Title of the Book : ' . $params['example_deleted_user']['book_title'] . '
+Title of the Chapter : ' . $params['example_deleted_user']['chapter_title'] . '
+Example number : ' . $params['example_deleted_user']['example_number'] . '
+Caption : ' . $params['example_deleted_user']['example_caption'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'dependency_uploaded':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['dependency_uploaded']['user_id']);
+ $dependency_files = implode(',', $params['dependency_uploaded']['dependency_names']);
+
+ $message['subject'] = t('[!site_name] You have uploaded dependency file', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+You have uploaded following dependency files :
+ ' . $dependency_files . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'feedback_received':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $user_data = user_load($params['feedback_received']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your following feedback
+
+Title of the Book: ' . $params['feedback_received']['book_title'] . '
+Title of the Chapter: ' . $params['feedback_received']['chapter_number'] . ' ' . $params['feedback_received']['chapter_title'] . '
+Example No.: ' . $params['feedback_received']['example_no'] . '
+
+Your feedback :
+' . $params['feedback_received']['feedback'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'internshipform':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['internshipform']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your Internship Form Application for the book
+
+Title of the Book: ' . $params['internshipform']['book_title'] . '
+Title of the Chapter: ' . $params['internshipform']['chapter_number'] . ' ' . $params['internshipform']['chapter_title'] . '
+Example No.: ' . $params['internshipform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+case 'copyrighttransferform':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['copyrighttransferform']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your Copyright Form Application for the book
+
+Title of the Book: ' . $params['copyrighttransferform']['book_title'] . '
+Title of the Chapter: ' . $params['copyrighttransferform']['chapter_number'] . ' ' . $params['copyrighttransferform']['chapter_title'] . '
+Example No.: ' . $params['copyrighttransferform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+case 'undertakingform':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['undertakingform']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have received your Undertaking Form Application for the book
+
+Title of the Book: ' . $params['undertakingform']['book_title'] . '
+Title of the Chapter: ' . $params['undertakingform']['chapter_number'] . ' ' . $params['undertakingform']['chapter_title'] . '
+Example No.: ' . $params['undertakingform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+
+case 'remark':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['remark']['user_id']);
+
+ $message['subject'] = t('[!site_name] A remark has been given.Please check your contact detail form', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+A Remark has been given.Please check your Contact Detail Form
+
+Title of the Book: ' . $params['internshipform']['book_title'] . '
+Title of the Chapter: ' . $params['internshipform']['chapter_number'] . ' ' . $params['internshipform']['chapter_title'] . '
+Example No.: ' . $params['internshipform']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+ case 'cheque_sent':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+
+ $user_data = user_load($params['cheque_sent']['user_id']);
+
+ $message['subject'] = t('[!site_name] We have received your feedback', array('!site_name' => variable_get('site_name', '')), $language->language);
+ $message['body'] = t('
+Dear !user_name,
+
+We have Sent Cheque for the following book proposed
+
+Title of the Book: ' . $params['cheque_sent']['book_title'] . '
+Title of the Chapter: ' . $params['cheque_sent']['chapter_number'] . ' ' . $params['cheque_sent']['chapter_title'] . '
+Example No.: ' . $params['cheque_sent']['example_no'] . '
+
+Best Wishes,
+
+!site_name', array('!site_name' => variable_get('site_name', ''), '!user_name' => $user_data->name), $language->language);
+ break;
+
+
+ case 'standard':
+ // bcc to textbook_companion_emails
+ $message['headers'] += $tbc_bcc_emails;
+ $message['subject'] = $params['standard']['subject'];
+ $message['body'] = $params['standard']['body'];
+ break;
+ }
+}
+
+/* AJAX CALLS */
+function textbook_companion_ajax()
+{
+ $query_type = arg(2);
+ if ($query_type == 'chapter_title')
+ {
+ $chapter_number = arg(3);
+ $preference_id = arg(4);
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE number = %d AND preference_id = %d LIMIT 1", $chapter_number, $preference_id);
+ if ($chapter_data = db_fetch_object($chapter_q))
+ {
+ echo $chapter_data->name;
+ return;
+ }
+ } else if ($query_type == 'example_exists') {
+ $chapter_number = arg(3);
+ $preference_id = arg(4);
+ $example_number = arg(5);
+
+ $chapter_id = 0;
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE number = %d AND preference_id = %d LIMIT 1", $chapter_number, $preference_id);
+ if (!$chapter_data = db_fetch_object($chapter_q))
+ {
+ echo '';
+ return;
+ } else {
+ $chapter_id = $chapter_data->id;
+ }
+
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE chapter_id = %d AND number = '%s' LIMIT 1", $chapter_id, $example_number);
+ if ($example_data = db_fetch_object($example_q))
+ {
+ if ($example_data->approval_status == 1)
+ echo 'Warning! Example already approved. You cannot upload the same example again.';
+ else
+ echo 'Warning! Example already uploaded. Delete the example and reupload it.';
+ return;
+ }
+ }
+ echo '';
+}
+
+/*************************** VALIDATION FUNCTIONS *****************************/
+function textbook_companion_check_valid_filename($file_name) {
+ if (!preg_match('/^[0-9a-zA-Z\_\.]+$/', $file_name))
+ return FALSE;
+ else
+ if (substr_count($file_name, ".") > 1)
+ return FALSE;
+ else
+ return TRUE;
+}
+
+function check_name($name = '') {
+ if (!preg_match('/^[0-9a-zA-Z\ ]+$/', $name))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+function check_chapter_number($name = '') {
+ if (!preg_match('/^([0-9])+(\.([0-9a-zA-Z])+)+$/', $name))
+ return FALSE;
+ else
+ return TRUE;
+}
+
+function textbook_companion_path() {
+ return $_SERVER['DOCUMENT_ROOT'] . base_path() . 'uploads/';
+}
+
+/****************************** DELETION FUNCTIONS ****************************/
+
+function delete_example($example_id)
+{
+ global $user;
+ $root_path = textbook_companion_path();
+ $status = TRUE;
+
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE id = %d", $example_id);
+ $example_data = db_fetch_object($example_q);
+ if (!$example_data)
+ {
+ drupal_set_message(t('Invalid example.'), 'error');
+ return FALSE;
+ }
+
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE id = %d", $example_data->chapter_id);
+ $chapter_data = db_fetch_object($chapter_q);
+ if (!$chapter_data)
+ {
+ drupal_set_message(t('Invalid example chapter.'), 'error');
+ return FALSE;
+ }
+
+ /* deleting example files */
+ $examples_files_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE example_id = %d", $example_id);
+ while ($examples_files_data = db_fetch_object($examples_files_q))
+ {
+ if (!file_exists($root_path . $examples_files_data->filepath))
+ {
+ $status = FALSE;
+ drupal_set_message(t('Error deleting !file. File does not exists.', array('!file' => $examples_files_data->filepath)), 'error');
+ continue;
+ }
+
+ /* removing example file */
+ if (!unlink($root_path . $examples_files_data->filepath))
+ {
+ $status = FALSE;
+ drupal_set_message(t('Error deleting !file', array('!file' => $examples_files_data->filepath)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting example file";
+ $param['standard']['body'] = "Error deleting example files by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . " :
+ example id : " . $example_id . "
+ file id : " . $examples_files_data->id . "
+ file path : " . $examples_files_data->filepath;
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ } else {
+ /* deleting example files database entries */
+ db_query("DELETE FROM {textbook_companion_example_files} WHERE id = %d", $examples_files_data->id);
+ }
+ }
+
+ if (!$status)
+ return FALSE;
+
+ /* removing example folder */
+ $ex_path = $chapter_data->preference_id . '/' . 'CH' . $chapter_data->number . '/' . 'EX' . $example_data->number;
+ $dir_path = $root_path . $ex_path;
+ if (is_dir($dir_path))
+ {
+ if (!rmdir($dir_path))
+ {
+ drupal_set_message(t('Error deleting folder !folder', array('!folder' => $dir_path)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting folder";
+ $param['standard']['body'] = "Error deleting folder " . $dir_path . " by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ return FALSE;
+ }
+ } else {
+ drupal_set_message(t('Cannot delete example folder. !folder does not exists.', array('!folder' => $dir_path)), 'error');
+ return FALSE;
+ }
+
+ /* deleting example dependency and exmaple database entries */
+ db_query("DELETE FROM {textbook_companion_example_dependency} WHERE example_id = %d", $example_id);
+ db_query("DELETE FROM {textbook_companion_example} WHERE id = %d", $example_id);
+
+ return $status;
+}
+
+function delete_chapter($chapter_id)
+{
+ $status = TRUE;
+ $root_path = textbook_companion_path();
+
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE id = %d", $chapter_id);
+ $chapter_data = db_fetch_object($chapter_q);
+ if (!$chapter_data)
+ {
+ drupal_set_message('Invalid chapter.', 'error');
+ return FALSE;
+ }
+
+ /* deleting examples */
+ $example_q = db_query("SELECT * FROM {textbook_companion_example} WHERE chapter_id = %d", $chapter_id);
+ while ($example_data = db_fetch_object($example_q))
+ {
+ if (!delete_example($example_data->id))
+ $status = FALSE;
+ }
+
+ if ($status)
+ {
+ $dir_path = $root_path . $chapter_data->preference_id . '/CH' . $chapter_data->number;
+
+ if (is_dir($dir_path))
+ {
+ $res = rmdir($dir_path);
+ if (!$res)
+ {
+ drupal_set_message(t('Error deleting chapter folder !folder', array('!folder' => $dir_path)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting folder";
+ $param['standard']['body'] = "Error deleting folder " . $dir_path;
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ return FALSE;
+ } else {
+ /* deleting chapter details from database */
+ db_query("DELETE FROM {textbook_companion_chapter} WHERE id = %d", $chapter_id);
+ return TRUE;
+ }
+ } else {
+ drupal_set_message(t('Cannot delete chapter folder. !folder does not exists.', array('!folder' => $dir_path)), 'error');
+ return FALSE;
+ }
+ }
+ return FALSE;
+}
+
+function delete_book($book_id)
+{
+ $status = TRUE;
+ $root_path = textbook_companion_path();
+
+ $preference_q = db_query("SELECT * FROM {textbook_companion_preference} WHERE id = %d", $book_id);
+ $preference_data = db_fetch_object($preference_q);
+ if (!$preference_data)
+ {
+ drupal_set_message('Invalid book.', 'error');
+ return FALSE;
+ }
+
+ /* delete chapters */
+ $chapter_q = db_query("SELECT * FROM {textbook_companion_chapter} WHERE preference_id = %d", $preference_data->id);
+ while ($chapter_data = db_fetch_object($chapter_q))
+ {
+ if (!delete_chapter($chapter_data->id))
+ {
+ $status = FALSE;
+ }
+ }
+ return $status;
+}
+
+function delete_file($file_id)
+{
+ $root_path = textbook_companion_path();
+
+ $file_q = db_query("SELECT * FROM {textbook_companion_example_files} WHERE id = %d LIMIT 1", $file_id);
+ $file_data = db_fetch_object($file_q);
+ if (!$file_data)
+ {
+ drupal_set_message('Invalid file specified.', 'error');
+ return FALSE;
+ }
+
+ if (!file_exists($root_path . $file_data->filepath))
+ {
+ drupal_set_message(t('Error deleting !file. File does not exists.', array('!file' => $file_data->filepath)), 'error');
+ return FALSE;
+ }
+
+ /* removing example file */
+ if (!unlink($root_path . $file_data->filepath))
+ {
+ drupal_set_message(t('Error deleting !file', array('!file' => $file_data->filepath)), 'error');
+
+ /* sending email to admins */
+ $email_to = variable_get('textbook_companion_emails', '');
+ $param['standard']['subject'] = "[ERROR] Error deleting file";
+ $param['standard']['body'] = "Error deleting file by " . $user->uid . " at " . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] . " :
+ file id : " . $file_id . "
+ file path : " . $file_data->filepath;
+ if (!drupal_mail('textbook_companion', 'standard', $email_to, language_default(), $param, variable_get('textbook_companion_from_email', NULL), TRUE))
+ drupal_set_message('Error sending email message.', 'error');
+ return FALSE;
+ } else {
+ /* deleting example files database entries */
+ db_query("DELETE FROM {textbook_companion_example_files} WHERE id = %d", $file_id);
+ return TRUE;
+ }
+}
+
+function del_book_pdf($book_id)
+{
+ $root_path = textbook_companion_path();
+ $dir_path = $root_path . "latex/";
+ $pdf_filename = "book_" . $book_id . ".pdf";
+ if (file_exists($dir_path . $pdf_filename))
+ unlink($dir_path . $pdf_filename);
+}
+function textbook_companion_init(){
+ //drupal_add_css('http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css', array('type' => 'external'));
+ //drupal_add_js('http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css', array('type' => 'external'));
+ //drupal_add_js(drupal_get_path('module', 'textbook_companion') .'/js/jquery-ui.js');
+ //drupal_add_js(drupal_get_path('module', 'textbook_companion') .'/js/jquery.js');
+ drupal_add_css(drupal_get_path('module', 'textbook_companion') .'/css/textbook_companion.css');
+ drupal_add_js(drupal_get_path('module', 'textbook_companion') .'/js/textbook_companion.js');
+}
--
cgit