'min' => 1,
'max' => 1,
),
+ 'skip-email-import' => array(
+ 'desc' => 'Skip email import',
+ 'default' => '',
+ 'min' => 1,
+ 'max' => 1,
+ ),
'procedures-only' => array(
'desc' => 'Only import procedures (not supported by most modules yet) - ignores sql directory',
'default' => '',
'min' => 1,
'max' => 1,
),
+ 'disable-create-triggers' => array(
+ 'desc' => 'So not create the mysql triggers',
+ 'default' => '',
+ 'min' => 1,
+ 'max' => 1,
+ ),
'json-person' => array(
'desc' => 'Person JSON file',
),
);
-
+
static function cli_opts()
{
$ret = array_merge($ret, $cls->getStaticPropertyValue('cli_opts'));
}
-
}
return $ret;
var $emailTemplates = array(
'EVENT_ERRORS_REPORT' => array(
+ 'bcc_group' => 'Empty Group',
'test_class' => 'Pman/Admin/Report/SendEventErrors',
'to_group' => 'Administrators',
'active' => 1,
- 'description' => '9. System Error Messages'
+ '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() {
function get($args, $opts=array())
{
-
PEAR::setErrorHandling(PEAR_ERROR_CALLBACK, array($this, 'onPearError'));
$this->checkSystem();
- $this->verifyExtensions(array('curl'));
+ $this->verifyExtensions($this->required_extensions);
if (class_exists('PDO_DataObjects_Introspection')) {
PDO_DataObject_Introspection::$cache = array();
}
// ask all the modules to verify the opts
- echo "Checi options\n";
+ 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
// this will trigger errors about freetext indexes - we will have to remove them manually.?
// otherwise we need to do an sql query to find them, then remove them (not really worth it as it only affects really old code..)
-
+ echo "Run extensions\n";
+
$this->runExtensions();
if (empty($opts['data-only'])) {
+ echo "Import SQL\n";
$this->importSQL();
}
if (!empty($opts['only-module-sql'])) {
return;
}
-
+ echo "run Update Modules Data\n";
$this->runUpdateModulesData();
$this->clearApacheDataobjectsCache();
$this->clearApacheAssetCache();
+
+
+
+
+
+
}
function output() {
$mysql_cmd = $mysql .
' -h ' . $dburl['host'] .
+ (empty($dburl['port']) ? '' : " -P{$dburl['port']} ") .
' -u' . escapeshellarg($dburl['user']) .
(!empty($dburl['pass']) ? ' -p' . escapeshellarg($dburl['pass']) : '') .
' ' . basename($dburl['path']);
$extra[] = "create sequence {$tbl}_seq;";
}
-
+ if ($tbl && preg_match('#engine=\S+#i', $l, $m)) {
+ $l = preg_replace('#engine=\S+#i', '', $l);
+
+ }
if (preg_match('#alter\s+table\s+(\`[a-z0-9_]+\`)#i', $l, $m)){
$l = preg_replace('#alter\s+table\s+(\`[a-z0-9_]+\`)#i', "ALTER TABLE {$tbl}", $l);
}
if(!method_exists($x, 'updateData')){
continue;
};
+ $x->rootDir = $this->rootDir;
echo "$module\n";
$x->updateData();
}
array(
'name' => 'bcc-email', // group who are bcc'ed on all requests.
'type' => 0, // system
+ 'is_system' => 1,
+ 'display_name' => 'Standard BCC Group'
),
array(
'name' => 'system-email-from',
'type' => 0, // system
+ 'is_system' => 1,
+ 'display_name' => 'Standard System Email From Group'
),
array(
'name' => 'core-person-signup-bcc',
'type' => 0, // system
+ 'is_system' => 1,
+ 'display_name' => 'Standard Person Signup BCC Group'
),
-
+ array(
+ 'name' => 'Empty Group', // use for no bcc emails.
+ 'type' => 0,
+ 'is_system' => 1,
+ 'display_name' => 'Standard Empty Group'
+ )
));
$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);
}
+ function updateDataEmails()
+ {
+ if (!empty($this->opts['skip-email-import'])) {
+ return;
+ }
+ foreach ($this->emailTemplates as $k => $mail) {
+
+ $this->initEmails(
+ !empty($mail['template_dir']) ? "{$this->rootDir}{$mail['template_dir']}" : '',
+ array($k => $mail),
+ false
+ );
+ }
+ }
function initEmails($templateDir, $emails, $mapping = false)
{
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)) {
+ if (empty($g->id)) { // Admin group as bcc will not have any member at initialization.
$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' && $g->name != 'Administrators') {
$this->jerr("bcc_group {$data['bcc_group']} does not have any members");
}
$cm->active = $data['active'];
}
- if(!empty($data['description'])){
+ /*
+ * 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']);
}
$opts = array(
'update' => 1,
- 'file' => $templateDir. $name .'.html'
);
-
+ if (!empty($templateDir)) {
+ $opts['file'] = $templateDir. $name .'.html';
+ }
+ if (!empty($data['raw_content'])) {
+ $opts['raw_content'] = $data['raw_content'];
+ $opts['name'] = $name;
+ }
if (!empty($data['master'])) {
$opts['master'] = $templateDir . $master .'.html';
}
}
HTML_FlexyFramework::get()->generateDataobjectsCache(true);
-
$this->updateDataEnums();
$this->updateDataGroups();
$this->updateDataCompanies();
$c = DB_DataObject::Factory('I18n');
$c->buildDB();
-
-
-
-
}
function fixMysqlInnodb()
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"
+ );
}
}
$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;
}
+ echo "Running : {$fn}\n";
require_once $fn;
$c = new $cls();
'pdftoppm',
'rsvg-convert', //librsvg2-bin
'strings',
- 'oathtool'
+ 'oathtool',
+ 'gifsicle', // used for gif conversions
);
-
-
+
// these are prefered - but may have complicated depenacies
$pref = $pref !== false ? $pref : array(
'abiword',
- 'faad',
+ //'faad',
'ffmpeg',
'html2text', // not availabe in debian squeeze
'pdftocairo', //poppler-utils - not available in debian squeeze.
- 'lame',
+ //'lame',
'ssconvert',
'unoconv',
'wkhtmltopdf',
function clearApacheDataobjectsCache()
{
- echo "Clearing Database Cache\n";
+
// this needs to clear it's own cache along with remote one..
+ $url = "http://localhost{$this->local_base_url}/Core/RefreshDatabaseCache";
- $response = $this->curl("http://localhost{$this->local_base_url}/Core/RefreshDatabaseCache");
+ 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 $response. "\n";
+ echo "fetching $url\n";
+ echo "GOT:" . $response. "\n";
echo "Clear DataObjects Cache failed\n";
exit;
}
function clearApacheAssetCache()
{
- echo "Clearing Asset Cache\n";
+ 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' ),
foreach ($extensions as $e){
- if(extension_loaded($e)) {
+ if(empty($e) || extension_loaded($e)) {
continue;
}