From e5ddee51384dd75fd9611897ce92cb4e76e37952 Mon Sep 17 00:00:00 2001 From: Alan Jack Pippin Date: Sun, 15 Oct 2006 22:04:53 -0600 Subject: [PATCH] Added new Admin page with a data import tool. --- import_ward_data | 18 ++--- inc/class.eq.inc.php | 127 ++++++++++++++++++++++++++++++++++- templates/default/admin.tpl | 51 ++++++++++++++ templates/default/header.tpl | 5 +- 4 files changed, 190 insertions(+), 11 deletions(-) create mode 100644 templates/default/admin.tpl diff --git a/import_ward_data b/import_ward_data index da23ae4..c04da9f 100755 --- a/import_ward_data +++ b/import_ward_data @@ -82,7 +82,7 @@ sub print_hash #+-------+--------------------+------+-----+---------+-------+ sub update_eq_aaronic_table { - print "-> Updating eq_aaronic table\n"; + print "\n-> Updating eq_aaronic table\n"; # Set all records to be invalid. Only mark them as valid if they appear on the new list. $sth = $dbh->prepare("update eq_aaronic set valid=0"); @@ -138,7 +138,7 @@ sub update_eq_aaronic_table #+------------+------------------+------+-----+---------+-------+ sub update_eq_elder_table { - print "-> Updating eq_elder table\n"; + print "\n-> Updating eq_elder table\n"; # Set all records to be invalid. Only mark them as valid if they appear on the new list. $sth = $dbh->prepare("update eq_elder set valid=0"); @@ -197,7 +197,7 @@ sub update_eq_elder_table #+--------------+------------------+------+-----+---------+-------+ sub update_eq_calling_table() { - print "-> Updating eq_calling table\n"; + print "\n-> Updating eq_calling table\n"; #print "-> Organization Data Dump\n\n"; #&print_hash(\%organization_data); @@ -237,7 +237,7 @@ sub update_eq_district_table { # Districts should be created by hand. This subroutine only # updates the supervisor's ID in each district. - print "-> Updating eq_district table\n"; + print "\n-> Updating eq_district table\n"; $sth = $dbh->prepare("select * from eq_district"); $sth->execute or die "-E- DB error: $DBI::errstr\n"; while($sqlhashref = $sth->fetchrow_hashref) { @@ -267,7 +267,7 @@ sub update_eq_district_table #+---------------+------------------+------+-----+---------+-------+ sub update_eq_companionship_table { - print "-> Updating eq_companionship table\n"; + print "\n-> Updating eq_companionship table\n"; # First, mark all existing companionships as invalid in case they have been dissolved $sth = $dbh->prepare("update eq_companionship set valid=0"); @@ -354,7 +354,7 @@ sub update_eq_companionship_table #+---------------+------------------+------+-----+---------+-------+ sub update_eq_family_table { - print "-> Updating eq_family table\n"; + print "\n-> Updating eq_family table\n"; # Set all records to be invalid. Only mark them as valid if they appear on the new list. $sth = $dbh->prepare("update eq_family set valid=0"); @@ -441,7 +441,7 @@ sub update_eq_family_table #+----------+------------------+------+-----+---------+-------+ sub update_eq_parent_table { - print "-> Updating eq_parent table\n"; + print "\n-> Updating eq_parent table\n"; # Set all records to be invalid. Only mark them as valid if they appear on the new list. $sth = $dbh->prepare("update eq_parent set valid=0"); @@ -526,7 +526,7 @@ sub update_eq_parent_table #+----------+------------------+------+-----+---------+-------+ sub update_eq_child_table { - print "-> Updating eq_child table\n"; + print "\n-> Updating eq_child table\n"; # Set all records to be invalid. Only mark them as valid if they appear on the new list. $sth = $dbh->prepare("update eq_child set valid=0"); @@ -656,7 +656,7 @@ if(defined $opt_o) { # Process command line options if(defined $opt_n) { $datadir = $opt_n; } else { $datadir = shift(@ARGV); } -print "-> Processing all ward data files in $datadir\n"; +print "\n-> Processing all ward data files in $datadir\n"; ################################################### # Parse Ward Data Files diff --git a/inc/class.eq.inc.php b/inc/class.eq.inc.php index b1dbb23..d6bf500 100644 --- a/inc/class.eq.inc.php +++ b/inc/class.eq.inc.php @@ -25,6 +25,8 @@ class eq var $default_att_num_months; var $current_year; var $current_month; + var $upload_target_path; + var $script_path; var $public_functions = array ( @@ -41,7 +43,8 @@ class eq 'att_view' => True, 'att_update' => True, 'dir_view' => True, - 'org_view' => True + 'org_view' => True, + 'admin' => True ); function eq() @@ -50,6 +53,8 @@ class eq $this->default_ppi_num_months = 3; $this->default_ppi_num_years = 0; $this->default_att_num_months = 3; + $this->upload_target_path = "/home/users/eqpres/eq_data/"; + $this->script_path = "/usr/share/phpgroupware/eq/"; $this->db = $GLOBALS['phpgw']->db; $this->db2 = $this->db; @@ -121,6 +126,9 @@ class eq $link_data['menuaction'] = 'eq.eq.org_view'; $this->t->set_var('link_org',$GLOBALS['phpgw']->link('/eq/index.php',$link_data)); $this->t->set_var('lang_org','Callings'); + $link_data['menuaction'] = 'eq.eq.admin'; + $this->t->set_var('link_admin',$GLOBALS['phpgw']->link('/eq/index.php',$link_data)); + $this->t->set_var('lang_admin','Admin'); $this->t->pparse('out','eq_header'); } @@ -1851,6 +1859,123 @@ class eq $this->t->pfp('out','org_view_t'); $this->save_sessiondata(); } + + function admin() + { + $this->t->set_file(array('admin_t' => 'admin.tpl')); + $this->t->set_block('admin_t','upload','uploadhandle'); + $this->t->set_block('admin_t','admin','adminhandle'); + $this->t->set_block('admin_t','cmd','cmdhandle'); + + $this->t->set_var('upload_action',$GLOBALS['phpgw']->link('/eq/index.php','menuaction=eq.eq.admin&action=upload')); + + $action = get_var('action',array('GET','POST')); + + $this->t->pfp('out','admin_t'); + + if($action == 'upload') + { + $target_path = $this->upload_target_path . basename( $_FILES['uploadedfile']['name']); + + if(($_FILES['uploadedfile']['type'] == "application/zip") && + (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))) { + $uploadstatus = "The following file was uploaded successfully:

"; + $uploadstatus.= "Filename : " . $_FILES['uploadedfile']['name'] . "
"; + $uploadstatus.= "Type : " . $_FILES['uploadedfile']['type'] . "
"; + $uploadstatus.= "Size : " . $_FILES['uploadedfile']['size'] . "
"; + $this->t->set_var('uploadstatus',$uploadstatus); + $this->t->pfp('uploadhandle','upload'); + $this->t->set_var('uploadhandle',''); + print "
\n
";
+	    
+	    # make a directory for this data to be stored in
+	    $date="data_" . date("Y_m_d");
+	    $data_dir = $this->upload_target_path . $date;
+	    print "-> Making the data directory: $date
\n"; + exec('mkdir ' . $data_dir . ' 2>&1', $result, $return_code); + if($return_code != 0) { + print implode('\n',$result) . "
"; + print ""; + print "-E- Unable to create the data directory. Aborting import."; + print ""; + return 0; + } + + # move the file uploaded into this directory + print "-> Moving the uploaded file into the data dir
\n"; + exec('mv ' . $target_path . ' ' . $data_dir . '/' . ' 2>&1', $result, $return_code); + if($return_code != 0) { + print implode('\n',$result) . "
"; + print ""; + print "-E- Unable to move the uploaded file into the data dir. Aborting import."; + print ""; + return 0; + } + + # unzip the data into this directory + print "-> Unzipping the data
\n"; + $data_file = $data_dir . ''; + exec('unzip ' . $data_dir . '/*.zip -d ' . $data_dir . ' 2>&1', $result, $return_code); + if($return_code != 0) { + print implode('\n',$result) . "
"; + print ""; + print "-E- Unable to unzip the uploaded file into the data dir. Aborting import."; + print ""; + return 0; + } + exec('mv ' . $data_dir . '/*/* '. $data_dir . ' 2>&1', $result, $return_code); + + # update the data_latest link to point to this new directory + print "-> Updating the latest data dir link
\n"; + $data_latest = $this->upload_target_path . 'data_latest'; + exec('rm ' . $data_latest. '; ln -s ' . $data_dir .' '. $data_latest .' 2>&1', $result, $return_code); + if($return_code != 0) { + print implode('\n',$result) . "
"; + print ""; + print "-E- Unable to update the data latest link. Aborting import."; + print ""; + return 0; + } + + # run the import perl script to encorporate it into the DB + ob_start('ob_logstdout', 2); + print "-> Importing the data into the EQ database
\n"; + ob_flush(); flush(); sleep(1); + $import_log = $this->upload_target_path . '/import.log'; + $data_log = $this->upload_target_path . '/data.log'; + $import_cmd = $this->script_path . 'import_ward_data ' . $data_latest . ' | tee ' . $import_log; + $parse_cmd = $this->script_path . 'parse_ward_data -v ' . $data_latest . ' > ' . $data_log; + #print "import_cmd: $import_cmd
"; + #print "parse_cmd: $parse_cmd
"; + ob_start('ob_logstdout', 2); + passthru($import_cmd); + passthru($parse_cmd); + ob_flush(); flush(); sleep(1); + + # fix the permissions of the data dir + exec('chmod -R o-rwx ' . $data_dir, $result, $return_code); + + $this->t->pfp('cmdhandle','cmd'); + print "
"; + + } else if($_FILES['uploadedfile']['type'] != "application/zip") { + $uploadstatus = "The file format must be a .zip file, please try again! "; + $this->t->set_var('uploadstatus',$uploadstatus); + + } else { + $uploadstatus = " There was an error (" . $_FILES['uploadedfile']['error']; + $uploadstatus.= ") uploading the file, please try again! "; + $this->t->set_var('uploadstatus',$uploadstatus); + } + } + else + { + $this->t->set_var('adminhandle',''); + $this->t->pfp('adminhandle','admin'); + } + + $this->save_sessiondata(); + } } diff --git a/templates/default/admin.tpl b/templates/default/admin.tpl new file mode 100644 index 0000000..d2a87ba --- /dev/null +++ b/templates/default/admin.tpl @@ -0,0 +1,51 @@ + +
+ + + + +
Administrator Tools
+
+ + + +
+ + + + +
+
+ Update our MLS database snapshot +

+
+ + Choose the MLS data file to upload (.zip):
+
+   (Import can take up to 30 seconds) +
+
+
+ + + +
+ + + + +
+
+ {uploadstatus} +
+
+ + + + + + +
+ + + diff --git a/templates/default/header.tpl b/templates/default/header.tpl index 6ccfdea..3e109a4 100644 --- a/templates/default/header.tpl +++ b/templates/default/header.tpl @@ -2,7 +2,7 @@

- +
-- 2.34.1
{lang_hometeaching} @@ -27,6 +27,9 @@     {lang_org} +   +   + {lang_admin}