public function create($sitedata, $createDb = true) { $result = false; $hook = new Hook($this->ampdb, 'ampoliros', 'site.create'); if ($hook->CallHooks('calltime', $this, array('sitedata' => $sitedata)) == HOOK_RESULT_OK) { $goon = true; if ($GLOBALS['gEnv']['core']['edition'] == AMP_EDITION_ENTERPRISE) { $check_query =& $GLOBALS['gEnv']['root']['db']->Execute('SELECT count(*) AS sites ' . 'FROM sites'); if ($check_query->Fields('sites') > 0) { $goon = false; } } if ($goon) { // Default settings and settings tuning // $nextseq = $this->ampdb->NextSeqValue('sites_id_seq'); $sitedata['siteid'] = $this->defopt(strtolower(str_replace(' ', '', trim($sitedata['siteid']))), $nextseq); //$sitedata['sitemd5id'] = md5( $sitedata['siteid'] ); $sitedata['sitemd5id'] = md5(microtime()); $sitedata['sitepath'] = $this->defopt(trim($sitedata['sitepath']), SITES_TREE . $sitedata['siteid']); $sitedata['sitename'] = $this->defopt(trim($sitedata['sitename']), $sitedata['siteid'] . ' site'); $sitedata['sitepassword'] = $this->defopt(trim($sitedata['sitepassword']), $sitedata['siteid']); $sitedata['sitedbname'] = $this->defopt(strtolower(str_replace(' ', '', trim($sitedata['sitedbname']))), 'amp' . $sitedata['siteid'] . 'site'); $sitedata['sitedbhost'] = $this->defopt(trim($sitedata['sitedbhost']), AMP_DBHOST); $sitedata['sitedbport'] = $this->defopt(trim($sitedata['sitedbport']), AMP_DBPORT); $sitedata['sitedbuser'] = $this->defopt(str_replace(' ', '', trim($sitedata['sitedbuser'])), AMP_DBUSER); $sitedata['sitedbpassword'] = $this->defopt(trim($sitedata['sitedbpassword']), AMP_DBPASS); $sitedata['sitedblog'] = $this->defopt(trim($sitedata['sitedblog']), SITESTUFF_PATH . $sitedata['siteid'] . '/log/db.log'); $sitedata['sitedbtype'] = $this->defopt(trim($sitedata['sitedbtype']), AMP_DBTYPE); $sitedata['sitecreationdate'] = isset($sitedata['sitecreationdate']) ? trim($sitedata['sitecreationdate']) : time(); $sitedata['siteexpirydate'] = isset($sitedata['siteexpirytime']) ? trim($sitedata['siteexpirydate']) : time(); $sitedata['siteactive'] = isset($sitedata['siteactive']) ? $sitedata['siteactive'] : $this->ampdb->fmttrue; $sitedata['maxusers'] = isset($sitedata['maxusers']) ? $sitedata['maxusers'] : '0'; if (!isset($sitedata['sitenotes'])) { $sitedata['sitenotes'] = ''; } $args['dbtype'] = strlen($sitedata['sitedbtype']) ? $sitedata['sitedbtype'] : AMP_DBTYPE; $args['dbname'] = $sitedata['sitedbname']; $args['dbhost'] = $sitedata['sitedbhost']; $args['dbport'] = $sitedata['sitedbport']; $args['dbuser'] = $sitedata['sitedbuser']; $args['dbpass'] = $sitedata['sitedbpassword']; $args['dblog'] = $sitedata['sitedblog']; if ($this->ampdb->Execute('INSERT INTO sites VALUES ( ' . $nextseq . ',' . $this->ampdb->Format_Text($sitedata['siteid']) . ',' . $this->ampdb->Format_Text($sitedata['sitemd5id']) . ',' . $this->ampdb->Format_Text($sitedata['sitepath']) . ',' . $this->ampdb->Format_Text($sitedata['sitename']) . ',' . $this->ampdb->Format_Text(md5($sitedata['sitepassword'])) . ',' . $this->ampdb->Format_Text($sitedata['siteurl']) . ',' . $this->ampdb->Format_Text($sitedata['sitedbname']) . ',' . $this->ampdb->Format_Text($sitedata['sitedbhost']) . ',' . $this->ampdb->Format_Text($sitedata['sitedbport']) . ',' . $this->ampdb->Format_Text($sitedata['sitedbuser']) . ',' . $this->ampdb->Format_Text($sitedata['sitedbpassword']) . ',' . $this->ampdb->Format_Text($sitedata['sitedblog']) . ',' . $this->ampdb->Format_Text($sitedata['sitedbtype']) . ',' . $this->ampdb->Format_Date($sitedata['sitecreationdate']) . ',' . $this->ampdb->Format_Date($sitedata['siteexpirydate']) . ',' . $this->ampdb->Format_Text($sitedata['siteactive']) . ',' . $this->ampdb->Format_Text($sitedata['sitenotes']) . ',' . $sitedata['maxusers'] . ')')) { $this->siteid = $sitedata['siteid']; $this->siteserial = $nextseq; $this->sitelog = new Logger(SITESTUFF_PATH . $sitedata['siteid'] . '/log/site.log'); // Directory tree creation $this->makedir($sitedata['sitepath']); $this->makedir($sitedata['sitepath'] . '/media'); $this->makedir(SITESTUFF_PATH . $sitedata['siteid']); $this->makedir(SITESTUFF_PATH . $sitedata['siteid'] . '/log'); $this->makedir(SITESTUFF_PATH . $sitedata['siteid'] . '/templates'); $this->makedir(SITESTUFF_PATH . $sitedata['siteid'] . '/etc'); // Site database population //if ( strcmp( $sitedata['sitedbhost'], AMP_DBHOST ) == 0 ) //{ // Site database host is the same of the mall one // Database creation $args['name'] = $sitedata['sitedbname']; //$this->ampdb->createdb( $args ); import('com.solarix.ampoliros.db.DBLayerFactory'); $db_fact = new DBLayerFactory(); $tmpdb = $db_fact->NewDBLayer($args); if ($createDb) { if ($tmpdb->Connect($args)) { $tmpdb->DropDB($args); $tmpdb->Close(); } } if (!$createDb or $created = $tmpdb->CreateDB($args)) { if (isset($created) and $created == true) { $this->sitelog->LogEvent($sitedata['siteid'], 'Database ' . $args['dbname'] . ' created', LOGGER_NOTICE); } if ($tmpdb->Connect($args)) { $this->sitedb =& $tmpdb; //$xmldb = new XmlDb( $tmpdb, DBLAYER_PARSER_SQL_CREATE ); $tmpquery = $this->ampdb->Execute('SELECT id ' . 'FROM modules ' . 'WHERE modid=' . $this->ampdb->Format_Text('ampoliros')); if ($this->EnableModule($tmpquery->Fields('id'))) { //$tmpsets = new SiteSettings( $tmpdb ); //$tmpsets->EditKey( 'sitelocale', AMP_LANG ); $tmpuser = new User($this->ampdb, $nextseq); $tmpuser->CreateAdminUser($sitedata['siteid'], $sitedata['sitepassword']); import('com.solarix.ampoliros.io.log.Logger'); $log = new Logger(AMP_LOG); $log->LogEvent($sitedata['siteid'], 'Created new site ' . $sitedata['siteid'], LOGGER_NOTICE); $this->sitelog->LogEvent($sitedata['siteid'], 'Created site ' . $sitedata['siteid'], LOGGER_NOTICE); if ($hook->CallHooks('sitecreated', $this, array('sitedata' => $sitedata)) != HOOK_RESULT_ABORT) { $result = true; } global $gEnv; if ($gEnv['core']['config']->Value('ALERT_ON_SITE_OPERATION') == '1') { Carthag::import('com.solarix.ampoliros.security.SecurityLayer'); $amp_security = new SecurityLayer(); $amp_security->SendAlert('A site has been created with id ' . $sitedata['siteid']); unset($amp_security); } } else { import('com.solarix.ampoliros.io.log.Logger'); $log = new Logger(AMP_LOG); $log->LogEvent('ampoliros.sites_library.site_class.create', 'Unable to enable Ampoliros to the site', LOGGER_ERROR); } } else { import('com.solarix.ampoliros.io.log.Logger'); $log = new Logger(AMP_LOG); $log->LogEvent('ampoliros.sites_library.site_class.create', 'Unable to connect to site database', LOGGER_ERROR); } } else { import('com.solarix.ampoliros.io.log.Logger'); $log = new Logger(AMP_LOG); $log->LogEvent('ampoliros.sites_library.site_class.create', 'Unable to create site database', LOGGER_ERROR); } } else { import('com.solarix.ampoliros.io.log.Logger'); $log = new Logger(AMP_LOG); $log->LogEvent('ampoliros.sites_library.site_class.create', 'Unable to insert site row in sites table', LOGGER_ERROR); } } else { import('com.solarix.ampoliros.io.log.Logger'); $log = new Logger(AMP_LOG); $log->LogEvent('ampoliros.sites_library.site_class.create', 'Tried to create another site in Enterprise edition', LOGGER_WARNING); } } return $result; }