X-Git-Url: http://git.roojs.org/?p=Pman.Core;a=blobdiff_plain;f=UpdateDatabase.php;h=989e524f2962be96974923717da3488924cadf0e;hp=5fb08cbb4f93cd403d4b4613cc0c320a1fe3f09d;hb=692861c958898f425cc365906c092559d7cfc60c;hpb=03f9f68656d7cdcfac3d435f70708c4bbc182820 diff --git a/UpdateDatabase.php b/UpdateDatabase.php index 5fb08cbb..989e524f 100644 --- a/UpdateDatabase.php +++ b/UpdateDatabase.php @@ -90,7 +90,7 @@ class Pman_Core_UpdateDatabase extends Pman ), ); - + static function cli_opts() { @@ -113,7 +113,6 @@ class Pman_Core_UpdateDatabase extends Pman $ret = array_merge($ret, $cls->getStaticPropertyValue('cli_opts')); } - } return $ret; @@ -127,6 +126,32 @@ class Pman_Core_UpdateDatabase extends Pman var $local_base_url = false; + var $emailTemplates = array( + 'EVENT_ERRORS_REPORT' => array( + 'bcc_group' => 'Empty Group', + 'test_class' => 'Pman/Admin/Report/SendEventErrors', + 'to_group' => 'Administrators', + 'active' => 1, + 'description' => '9.2 System Error Messages', + 'template_dir' => '/Pman/Admin/templates/mail/' + ), + 'ADMIN_PASSWORD_RESET' => array( + 'bcc_group' => 'Administrators', + 'test_class' => 'Pman/Core/DataObjects/Core_person', + 'to_group' => '', + 'active' => 1, + 'description' => '9.1 Management System Password Reset', + 'template_dir' => '/Pman/Core/templates/mail/' + + + ) + ); + + var $required_extensions = array( + 'curl', + 'gd' + ); + function getAuth() { @@ -147,17 +172,18 @@ class Pman_Core_UpdateDatabase extends Pman function get($args, $opts=array()) { - PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError')); $this->checkSystem(); + $this->verifyExtensions($this->required_extensions); + if (class_exists('PDO_DataObjects_Introspection')) { PDO_DataObject_Introspection::$cache = array(); } - + echo "Generate DB cache\n"; HTML_FlexyFramework::get()->generateDataobjectsCache(true); - + echo "Generated DB cache\n"; $ff = HTML_FlexyFramework::get(); if(!isset($ff->Pman) || !isset($ff->Pman['local_base_url'])){ @@ -178,16 +204,34 @@ class Pman_Core_UpdateDatabase extends Pman $this->opts = $opts; if (!empty($opts['debug'])) { - echo "Setting debug Level : {$opts['debug']}\n"; - DB_DataObject::DebugLevel($opts['debug']); + DB_DataObject::DebugLevel($opts['debug']); } - // ask all the modules to verify the opts - + echo "Checking options\n"; $this->checkOpts($opts); - + $response = $this->curl("http://localhost{$this->local_base_url}/Core/UpdateDatabase/VerifyExtensions"); + $json = json_decode($response, true); + + if(empty($json['data']) || $json['data'] != 'DONE'){ + echo "\nError: Missing php extensions:\n"; + print_r($response); + echo "Please install the above extensions and restart the apache.\n"; + sleep(5); + + //exit; + } + + echo "Checking Setup Requirements\n"; + require_once 'Pman/Core/UpdateDatabase/VerifyConfig.php'; + $sq = new Pman_Core_UpdateDatabase_VerifyConfig(); + $ret = $sq->get($args, $opts); + + if(!empty($ret)){ + echo implode("\n", $ret) . "\n"; + sleep(30); + } // do this first, so the innodb change + utf8 fixes column max sizes @@ -204,6 +248,8 @@ class Pman_Core_UpdateDatabase extends Pman return; } + + $this->runUpdateModulesData(); if (!empty($opts['add-company']) && !in_array('Core', $this->disabled)) { @@ -214,10 +260,17 @@ class Pman_Core_UpdateDatabase extends Pman $this->runExtensions(); - $this->generateDataobjectsCache(); + $this->clearApacheDataobjectsCache(); + + $this->clearApacheAssetCache(); + + + + + - } + function output() { echo "\nUpdate Completed SUCCESS\n"; return ''; @@ -302,9 +355,10 @@ class Pman_Core_UpdateDatabase extends Pman // new -- sql directory.. // new style will not support migrate ... they have to go into mysql-migrate.... directories.. // new style will not support pg.sql etc.. naming - that's what the direcotries are for.. + $dbdir = $dbtype == 'mysqli' ? 'mysql' : $dbtype; $this->{$dirmethod}($dburl, $this->rootDir. "/Pman/$m/sql"); - $this->{$dirmethod}($dburl, $this->rootDir. "/Pman/$m/{$dbtype}"); + $this->{$dirmethod}($dburl, $this->rootDir. "/Pman/$m/{$dbdir}"); @@ -780,16 +834,23 @@ class Pman_Core_UpdateDatabase extends Pman array( 'name' => 'bcc-email', // group who are bcc'ed on all requests. 'type' => 0, // system + 'display_name' => 'Standard BCC Group' ), array( 'name' => 'system-email-from', 'type' => 0, // system + 'display_name' => 'Standard System Email From Group' ), array( 'name' => 'core-person-signup-bcc', 'type' => 0, // system + 'display_name' => 'Standard Person Signup BCC Group' ), - + array( + 'name' => 'Empty Group', // use for no bcc emails. + 'type' => 0, + 'display_name' => 'Standard Empty Group' + ) )); @@ -802,17 +863,21 @@ class Pman_Core_UpdateDatabase extends Pman $c = DB_DataObject::Factory('core_company'); $c->selectAdd(); $c->selectAdd('distinct(comptype) as comptype'); - $c->whereAdd("comptype != ''"); + $c->whereAdd(" + comptype != '' + AND + comptype != 'undefined' + AND + comptype != 'undefine' + "); $ctb = array(); foreach($c->fetchAll('comptype') as $cts) { - - - $ctb[]= array( 'etype'=>'COMPTYPE', 'name' => $cts, 'display_name' => ucfirst(strtolower($cts))); + $ctb[]= array( 'etype'=>'COMPTYPE', 'name' => $cts, 'display_name' => ucfirst(strtolower($cts))); } - $c = DB_DataObject::Factory('core_enum'); + $c = DB_DataObject::Factory('core_enum'); $c->initEnums($ctb); //DB_DataObject::debugLevel(1); @@ -834,6 +899,19 @@ class Pman_Core_UpdateDatabase extends Pman } + function updateDataEmails() + { + foreach ($this->emailTemplates as $k => $mail) { + + $mail_dir = "{$this->rootDir}{$mail['template_dir']}"; + + $this->initEmails( + $mail_dir, + array($k => $mail), + false + ); + } + } function initEmails($templateDir, $emails, $mapping = false) { @@ -849,13 +927,14 @@ class Pman_Core_UpdateDatabase extends Pman if (empty($data['bcc_group'])) { $this->jerr("missing bcc_group for template $name"); } + $g = DB_DataObject::Factory('core_group')->lookup('name',$data['bcc_group']); if (empty($g->id)) { $this->jerr("bcc_group {$data['bcc_group']} does not exist when importing template $name"); } - if (!$g->members('email')) { + if (!$g->members('email') && $g->name != 'Empty Group') { $this->jerr("bcc_group {$data['bcc_group']} does not have any members"); } @@ -863,10 +942,11 @@ class Pman_Core_UpdateDatabase extends Pman } // initEmails will always have the latest location of the test class - in theory the user should not be changign the value of this... //if (empty($cm->test_class)) { - if (empty($data['test_class'])) { - $this->jerr("missing test_class for template $name"); - } - $cm->test_class = $data['test_class']; + if (empty($data['test_class'])) { + $this->jerr("missing test_class for template $name"); + } + + $cm->test_class = $data['test_class']; //} if(isset($cm->to_group_id)) { print_r('isset'); @@ -891,6 +971,14 @@ class Pman_Core_UpdateDatabase extends Pman $cm->active = $data['active']; } + /* + * Set description to email. + * However we do not update if it is been set. + */ + if(empty($cm->description) && !empty($data['description'])){ + $cm->description = $cm->escape($data['description']); + } + require_once $cm->test_class . '.php'; $clsname = str_replace('/','_', $cm->test_class); @@ -941,16 +1029,15 @@ class Pman_Core_UpdateDatabase extends Pman PDO_DataObject_Introspection::$cache = array(); } HTML_FlexyFramework::get()->generateDataobjectsCache(true); + $this->updateDataEnums(); $this->updateDataGroups(); $this->updateDataCompanies(); + $this->updateDataEmails(); + $c = DB_DataObject::Factory('I18n'); $c->buildDB(); - - - - } function fixMysqlInnodb() @@ -993,7 +1080,9 @@ class Pman_Core_UpdateDatabase extends Pman in_array('STRICT_TRANS_TABLES', $modes) || !in_array('ALLOW_INVALID_DATES', $modes) ){ - die("Error: set sql_mode include 'ALLOW_INVALID_DATES', remove 'NO_ZERO_IN_DATE' AND 'STRICT_TRANS_TABLES' AND 'NO_ZERO_DATE' in my.cnf\n\n"); + die("Error: set sql_mode include 'ALLOW_INVALID_DATES', remove 'NO_ZERO_IN_DATE' AND 'STRICT_TRANS_TABLES' AND 'NO_ZERO_DATE' in my.cnf\n\n". + "Recommended line: \n\nsql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,ALLOW_INVALID_DATES\n\n" + ); } } @@ -1111,12 +1200,14 @@ class Pman_Core_UpdateDatabase extends Pman $dburl = parse_url($ff->database); $dbtype = $dburl['scheme']; - + $dbtype = ($dbtype == 'mysqli') ? 'mysql' : $dbtype; + foreach($this->extensions as $ext) { $scls = ucfirst($dbtype). $ext; $cls = __CLASS__ . '_'. $scls; $fn = implode('/',explode('_', $cls)).'.php'; + if (!file_exists(__DIR__.'/UpdateDatabase/'. $scls .'.php')) { return; } @@ -1141,7 +1232,8 @@ class Pman_Core_UpdateDatabase extends Pman 'pdftoppm', 'rsvg-convert', //librsvg2-bin 'strings', - 'oathtool' + 'oathtool', + 'gifsicle', // used for gif conversions ); @@ -1185,14 +1277,48 @@ class Pman_Core_UpdateDatabase extends Pman } - function generateDataobjectsCache() + function clearApacheDataobjectsCache() { + + // this needs to clear it's own cache along with remote one.. + $url = "http://localhost{$this->local_base_url}/Core/RefreshDatabaseCache"; - - $this->curl($url); + + echo "Clearing Database Cache : http://localhost{$this->local_base_url}/Core/RefreshDatabaseCache\n"; + + $response = $this->curl($url); + + $json = json_decode($response, true); + + if(empty($json['data']) || $json['data'] != 'DONE'){ + echo "fetching $url\n"; + echo "GOT:" . $response. "\n"; + echo "Clear DataObjects Cache failed\n"; + exit; + } } + + function clearApacheAssetCache() + { + echo "Clearing Asset Cache : http://localhost{$this->local_base_url}/Core/Asset\n"; + $response = $this->curl( + "http://localhost{$this->local_base_url}/Core/Asset", + array( '_clear_cache' => 1 ,'returnHTML' => 'NO' ), + 'POST' + ); + $json = json_decode($response, true); + + if(empty($json['success']) || !$json['success']) { + echo $response. "\n"; + echo "CURL Clear Asset cache failed\n"; + exit; + } + + } + + function curl($url, $request = array(), $method = 'GET') { if($method == 'GET'){ @@ -1208,7 +1334,6 @@ class Pman_Core_UpdateDatabase extends Pman curl_setopt($ch, CURLOPT_POSTFIELDS, $request); } else { - curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/x-www-form-urlencoded", "Content-Length: " . strlen($request))); @@ -1228,6 +1353,25 @@ class Pman_Core_UpdateDatabase extends Pman return $response; } - + static function verifyExtensions($extensions) + { + $error = array(); + + foreach ($extensions as $e){ + + if(empty($e) || extension_loaded($e)) { + continue; + } + + $error[] = "Error: Please install php extension: {$e}"; + } + + if(empty($error)){ + return true; + } + $ff = HTML_FLexyFramework::get(); + + $ff->page->jerr(implode('\n', $error)); + } }