Example #1
0
 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;
 }