From: vincent@cubedesigners.com Date: Tue, 15 Mar 2011 15:40:27 +0000 (+0000) Subject: (no commit message) X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=b7c55bbbef2cfa2bcdc1d2da85a14d7584324d2c;p=cubeextranet.git --- diff --git a/importWs.php b/importWs.php index 246ecd324..ff0326d1e 100644 --- a/importWs.php +++ b/importWs.php @@ -17,7 +17,7 @@ try { define('MYSQL_BIN', '/usr/local/mysql/bin/'); // Copie de la base extranet vers extranet_dev - cubeDb::truncateDatabase('extranet_dev'); + cubeDb::truncateDatabase('extranet_workshop'); cubeDb::mysqlDump('localhost', 'extranet' , DB_USER , DB_PASSWORD , dirname(__FILE__) . '/dump.sql', false, 0); cubeDb::mysqlRestore('localhost', DB_NAME, DB_USER , DB_PASSWORD , dirname(__FILE__) . '/dump.sql', false); unlink(dirname(__FILE__) . '/dump.sql'); @@ -33,10 +33,10 @@ try { $core->con->execute('ALTER TABLE ' . $t . ' DISABLE KEYS'); } // Copie des dossiers - `/bin/cp /home/extranet/www/devis/* /home/extranet/dev/devis/`; - `/bin/cp /home/extranet/www/factures/* /home/extranet/dev/factures/`; - `/bin/cp -r /home/ws/www/themes/* /home/extranet/dev/fluidbook/themes/`; - `/bin/rm -rf /home/extranet/dev/fluidbook/docs`; + `/bin/cp /home/extranet/_www/devis/* /home/extranet/www/devis/`; + `/bin/cp /home/extranet/_www/factures/* /home/extranet/www/factures/`; + `/bin/cp -r /home/ws/www/themes/* /home/extranet/www/fluidbook/themes/`; + `/bin/rm -rf /home/extranet/www/fluidbook/docs`; $core->con->execute('UPDATE entreprises SET ws_grade=0, ws_admin=1'); @@ -385,7 +385,6 @@ try { while ($r->fetch()) { if (!isset($docs[$r->did])) { $c = $core->con->openCursor('documents'); - $c->document_id = $r->did; $c->proprietaire = $books_proprietaires[$r->bid]; $c->insert(); $docs[$r->did] = true; diff --git a/inc/commons/class.common.core.php b/inc/commons/class.common.core.php index b25c6c677..446c7008f 100644 --- a/inc/commons/class.common.core.php +++ b/inc/commons/class.common.core.php @@ -142,6 +142,7 @@ class commonCore extends cubeCore { $db->utilisateurs->unique('unique_utilisateurs_email', 'email'); $db->utilisateurs->index('index_utilisateurs_nom', 'BTREE', 'nom'); $db->utilisateurs->index('index_utilisateurs_prenom', 'BTREE', 'prenom'); + $db->utilisateurs->index('index_utilisateurs_grade', 'BTREE', 'grade'); $db->utilisateurs->reference('fk_utilisateurs_entreprise', 'entreprise', 'entreprises', 'entreprise_id', false, false); // Table entreprises $db->entreprises->entreprise_id('integer', 0, false); diff --git a/inc/postconfig.inc.php b/inc/postconfig.inc.php index 8ab1e8e97..5458fe008 100644 --- a/inc/postconfig.inc.php +++ b/inc/postconfig.inc.php @@ -18,7 +18,7 @@ if ($dev) { } else { // Définition des variables dans l'environnement de production define('DB_HOST', ':/var/run/mysqld/mysqld.sock'); - define('DB_NAME', 'extranet'); + define('DB_NAME', 'extranet_workshop'); define('DB_USER', 'ws'); define('DB_PASSWORD', '*arica*2'); diff --git a/inc/prepend.php b/inc/prepend.php index 209f36fe0..d6227db09 100644 --- a/inc/prepend.php +++ b/inc/prepend.php @@ -11,22 +11,22 @@ require_once(dirname(__FILE__) . '/commons/_common.php'); if ($ws) { define('GA', 'UA-4339912-5'); - define('TITLE', 'Fuidbook Workshop DEV'); + define('TITLE', 'Fuidbook Workshop'); define('FROM_EMAIL', 'tech@fluidbook.com'); define('FROM_NAME', 'Fluidbook Workshop'); - define('EMAIL_SUBJECT', 'Fluidbook Workshop DEV'); + define('EMAIL_SUBJECT', 'Fluidbook Workshop'); define('TEAM_EMAIL', 'team@fluidbook.com'); define('TEAM_NAME', __("L'équipe Fluidbook")); define('RAPPEL', __('Rappel des identifiants de connexion au Fluidbook Workshop')); define('ASK_IDENT', __('Vous avez demandé la récupération de votre mot de passe sur le Fluidbook Workshop')); } elseif ($extranet) { define('GA', 'UA-4339912-4'); - define('TITLE', 'Extranet Cubedesigners DEV'); + define('TITLE', 'Extranet Cubedesigners'); define('FROM_EMAIL', 'contact@cubedesigners.com'); - define('FROM_NAME', 'Extranet Cubedesigners DEV'); - define('EMAIL_SUBJECT', 'Extranet Cubedesigners DEV'); + define('FROM_NAME', 'Extranet Cubedesigners'); + define('EMAIL_SUBJECT', 'Extranet Cubedesigners'); define('TEAM_EMAIL', 'team@cubedesigners.com'); define('TEAM_NAME', __("L'équipe Cubedesigners")); define('RAPPEL', __('Rappel des identifiants de connexion à l\'extranet Cubedesigners')); diff --git a/inc/ws/Controlleur/class.ws.maintenance.php b/inc/ws/Controlleur/class.ws.maintenance.php index c8b736afa..d8e938a4a 100644 --- a/inc/ws/Controlleur/class.ws.maintenance.php +++ b/inc/ws/Controlleur/class.ws.maintenance.php @@ -14,28 +14,40 @@ class wsMaintenance { public static function importFromOldWS($args) { global $core; + // Supprime pour le test + $core->con->execute('DELETE FROM book_pages WHERE book_id>3940 AND book_id<10000'); + $core->con->execute('DELETE FROM books WHERE book_id>3940 AND book_id<10000'); + $core->con->execute('DELETE FROM themes WHERE theme_id>627 AND theme_id<1000'); + $core->con->execute('DELETE FROM documents WHERE document_id>12673 AND document_id<100000'); + $core->con->execute('DELETE FROM langues WHERE lang_id=\'te\''); + $core->con->execute('DELETE FROM utilisateurs WHERE utilisateur_id>699'); + $core->con->execute('DELETE FROM entreprises WHERE entreprise_id>561'); // Import des fluidbooks // Donc le dernier importé est le max dont le numéro est inférieur à 10000 - $r = $core->con->select('SELECT MAX(book_id) FROM books WHERE book<10000'); + $r = $core->con->select('SELECT MAX(book_id) AS book_id FROM books WHERE book_id<10000'); $lastImported = $r->book_id; // On recherche maintenant les fluidbook dans la vieille base - $r = $core->con->select('SELECT bid FROM ws.book WHERE bid>' . $r->book_id); + $r = $core->con->select('SELECT bid FROM ws.book WHERE bid>' . $lastImported); $oldBooks = array(); while ($r->fetch()) { $oldBooks[] = $r->bid; } - self::importLangs($oldBooks); - self::importThemes($oldBooks); - self::importDocs($oldBooks); - self::importBooks($oldBooks); + fb($oldBooks, 'Old books to import'); - $core->refreshWSUsersTree(); + if (count($oldBooks)) { + self::importLangs($oldBooks); + self::importThemes($oldBooks); + self::importDocs($oldBooks); + self::importBooks($oldBooks); + } + + $core->refreshWSUsersTree(); } public static function importLangs($oldBooks) { - global $core; + global $core, $allTrads, $trads; // On regarde d'abord les langues que nous avons déjà $r = $core->con->select('SELECT lang_id FROM langues'); $already = array(); @@ -56,42 +68,50 @@ class wsMaintenance { $toImport[] = $r->lang; } - if (!count($toImport)) { - return; - } - $allTrads = array(); $trad = array(); $r = $core->con->select('SELECT * FROM ws.lang_trad,ws.lang_ord WHERE lang_trad.idlt=lang_ord.idlt AND idl ' . self::_sqlIn($toImport) . ' '); while ($r->fetch()) { - $idl = getLangCode($r->idl); + $idl = self::_getLangCode($r->idl); if (!isset($trad[$idl])) { $trad[$idl] = array(); } $trad[$idl][$r->ord] = $r->text; } - foreach($toImport as $idl) { - $idl = getLangCode($idl); - + foreach($trad as $idl => $t) { $traductions = wsLang::getTraductionWithId($trad[$idl]); $allTrads[$idl] = $traductions; + } + + if (!count($toImport)) { + return; + } + + foreach($toImport as $idl) { + $idl = self::_getLangCode($idl); $c = $core->con->openCursor('langues'); $c->lang_id = $idl; $c->charset = 'Latin1'; $c->font = 'Fluidbook.otf'; - $c->traductions = json_encode($traductions); + $c->traductions = json_encode($allTrads[$idl]); $c->insert(); } } public static function importThemes($oldBooks) { + global $core; + + $r = $core->con->select('SELECT MAX(theme_id) AS theme_id FROM themes WHERE theme_id<1000'); + $lastImported = $r->theme_id; // Import des thèmes - $r = $core->con->select('SELECT * FROM ws.theme WHERE tid IN (SELECT * FROM ws.book WHERE bid ' . self::_sqlIn($oldBooks) . ')'); + $r = $core->con->select('SELECT * FROM ws.theme WHERE tid IN (SELECT tid FROM ws.book WHERE bid ' . self::_sqlIn($oldBooks) . ') AND tid>' . $lastImported); $theme = new wsTheme(); while ($r->fetch()) { + $tid = $r->tid; + $c = $core->con->openCursor('themes'); $c->theme_id = $r->tid; $c->proprietaire = self::_getWsUser($r->proprietaire); @@ -103,11 +123,19 @@ class wsMaintenance { $c->icones = self::_oldIconesToColor($r->iid, $parametres); $c->parametres = serialize($parametres); $c->insert(); + + $dest = WS_THEMES . '/' . $tid . '/'; + if (!file_exists($dest)) { + mkdir($dest, 0777, true); + } + + `/bin/cp -r /home/ws/www/themes/$tid/* $dest`; } } public static function importDocs($oldBooks) { + global $core; // On cherche maintenant à savoir si l'on doit importer de nouveaux documents associés $oldDocuments = array(); $r = $core->con->select('SELECT DISTINCT did FROM ws.book_pages WHERE bid ' . self::_sqlIn($oldBooks) . ''); @@ -119,7 +147,7 @@ class wsMaintenance { return; } - $r = $core->con->select('SELECT * FROM ws.document ORDER BY did WHERE did ' . self::_sqlIn($oldDocuments)); + $r = $core->con->select('SELECT * FROM ws.document WHERE did ' . self::_sqlIn($oldDocuments) . ' ORDER BY did'); while ($r->fetch()) { $c = $core->con->openCursor('documents'); $c->document_id = $r->did; @@ -129,12 +157,68 @@ class wsMaintenance { $c->insert(); } catch(Exception $e) { + fb($e); } } + + fb($oldDocuments, 'Old documents imported'); } - public static function importBooks($oldBook) + public static function importBooks($oldBooks) { + global $core, $allTrads; + // Importe les fluidbooks + $r = $core->con->select('SELECT * FROM ws.book WHERE bid ' . self::_sqlIn($oldBooks) . ' ORDER BY bid'); + if (!$r->count()) { + return; + } + // . + while ($r->fetch()) { + $c = $core->con->openCursor('books'); + $c->book_id = $r->bid; + $c->nom = $r->titre; + $c->lang = substr(self::_getLangCode($r->lang), 0, 2); + $c->theme = $r->tid; + if (strlen($r->lang) > 2) { + $c->traductions = json_encode($allTrads[self::_getLangCode($r->lang)]); + } else { + $c->traductions = ''; + } + $c->proprietaire = self::_getWsUser($r->uid); + $c->status = $r->status; + $c->date_status = $r->date_status; + $c->hash = $r->code; + $c->compteur_visites = 20; + $c->date = $r->date; + $parametres = new wsBookParametres(new stdClass()); + $parametres->fromRecord($r); + + $xml = @simplexml_load_string('' . $r->extras . ''); + if ($xml !== false) { + $parametres->fromXML($xml); + } else { + } + + $n = array(); + // Pages sans numéro + $offset = $r->first_page_nr-1; + for($i = 0;$i < $offset;$i++) { + $n[] = ''; + } + // Pages avec numero + for($j = 1;$j + $offset <= $r->pages;$j++) { + $n[] = $j; + } + $c->numerotation = implode(',', $n); + + $parametres->signature =/*$signatures[$r->tid]*/ 1; + $parametres->title = $r->titre; + $parametres->visualisationMode = '0'; + $c->parametres = serialize($parametres); + $c->insert(); + } + // Import des pages + $core->con->execute('INSERT INTO book_pages (book_id,book_page,document_id,document_page) SELECT bid,bpid,did,dpid FROM ws.book_pages WHERE bid ' . self::_sqlIn($oldBooks)); } protected static function _oldIconesToColor($iid, &$parametres) @@ -142,7 +226,7 @@ class wsMaintenance { global $oldIconesColors; if (!isset($oldIconesColors)) { $oldIconesColors = array(); - $fp = fopen(dirname(__FILE__) . '/../../icones.csv', 'rb'); + $fp = fopen(dirname(__FILE__) . '/../../../icones.csv', 'rb'); $i = 1; while ($line = fgetcsv($fp, 1000, ';', '"')) { $oldIconesColors[$i] = array('color' => trim($line[0]), 'iid' => trim($line[1])); @@ -170,12 +254,137 @@ class wsMaintenance { protected static function _getWsUser($oldid) { global $ws2ext; + if (!isset($ws2ext)) { + self::_getAllUsers(); + } if (!isset($ws2ext[$oldid])) { - $ws2ext[$oldid] = 5; + self::_importOldUser($oldid); } return $ws2ext[$oldid]; } + protected static function _getAllUsers() + { + global $core, $entreprises, $entreprise_id, $utilisateurs_entreprises, $utilisateur_id, $ws2ext, $grades; + $grades = array(0 => 1, 0.4 => 1, '0.4' => 1, 0.5 => 1, '0.5' => 1, 1 => 1, 2 => 2, 3 => 3, 4 => 5); + // Contrôle des entreprises déjà dans la base extranet + $entreprises = array(); + $entreprise_id = 0; + $r = $core->con->select('SELECT entreprise_id,nom FROM entreprises'); + while ($r->fetch()) { + $nom = mb_strtolower(trim($r->nom)); + $nom = cubeText::str2URL($nom); + $entreprises[$nom] = $r->entreprise_id; + $entreprise_id = max($entreprise_id, $r->entreprise_id); + } + + $utilisateurs_entreprises = array(); + $r = $core->con->select('SELECT entreprise,utilisateur_id FROM utilisateurs'); + while ($r->fetch()) { + $utilisateurs_entreprises[$r->utilisateur_id] = $r->entreprise; + } + + $entreprise_id++; + // Obtient les emails des utilisateurs + $utilisateur_id = 0; + $utilisateurs = array(); + $r = $core->con->select('SELECT utilisateur_id,email FROM utilisateurs'); + while ($r->fetch()) { + $utilisateur_id = max($r->utilisateur_id, $utilisateur_id); + $utilisateurs[trim(mb_strtolower($r->email))] = $r->utilisateur_id; + } + $utilisateur_id++; + + $ws2ext = array(); + $r = $core->con->select('SELECT ws_id,utilisateur_id,entreprise FROM utilisateurs WHERE ws_id IS NOT NULL'); + while ($r->fetch()) { + $ws2ext[$r->ws_id] = $r->utilisateur_id; + } + } + + protected static function _importOldUser($oldid) + { + global $core, $entreprises, $entreprise_id, $utilisateurs_entreprises, $utilisateur_id, $ws2ext, $grades; + // Get user from old + $r = $core->con->select('SELECT * FROM ws.user WHERE uid=\'' . $core->con->escape($oldid) . '\''); + if ($r->extranet != 0) { + $ws2ext[$r->uid] = $r->extranet; + return; + } + // On s'occupe de l'entreprise + $email = trim(mb_strtolower($r->email)); + + $rs = trim($r->rs); + if ($rs == '') { + $rs = trim($r->prenom . ' ' . $r->nom); + } + $nom = mb_strtolower($rs); + + $nom = cubeText::str2URL($nom); + + if (isset($utilisateurs[$email])) { + $newid = $utilisateurs[$email]; + $e = $utilisateurs_entreprises[$newid]; + $update = true; + } elseif (isset($entreprises[$nom])) { + $e = $entreprises[$nom]; + $update = true; + } else { + $c = $core->con->openCursor('entreprises'); + $c->entreprise_id = $entreprise_id; + $c->nom = $rs; + $c->adresse = $r->adresse; + $c->code_postal = $r->code_postal; + $c->ville = $r->ville; + $c->pays = $r->pays; + $c->date_creation = $r->date; + $c->ws_grade = $grades[$r->grade]; + $c->ws_admin = self::_getWsUser($r->admin); + $c->insert(); + $e = $entreprises[$nom] = $entreprise_id; + $entreprise_id++; + $update = false; + } + + if ($update) { + $c = $core->con->openCursor('entreprises'); + $c->ws_grade = $grades[$r->grade]; + $c->ws_admin = self::_getWsUser($r->admin); + $c->update('WHERE entreprise_id=\'' . $e . '\''); + } + // Puis de l'utilisateur + if (isset($utilisateurs[$email])) { + $c = $core->con->openCursor('utilisateurs'); + $c->ws_password = $r->password; + $c->ws_id = $r->uid; + $c->update('WHERE utilisateur_id=\'' . $utilisateurs[$email] . '\''); + $ws2ext[$r->uid] = $utilisateurs[$email]; + $utilisateurs_entreprises[$utilisateurs[$email]] = $e; + } else { + $c = $core->con->openCursor('utilisateurs'); + $c->utilisateur_id = $utilisateur_id; + $c->entreprise = $e; + $c->nom = $r->nom; + $c->prenom = $r->prenom; + $c->email = $r->email; + $c->password = $r->password; + $c->adresse = $r->adresse; + $c->code_postal = $r->code_postal; + $c->ville = $r->ville; + $c->pays = $r->pays; + $c->lang = $r->lang; + $c->telephone = $r->telephone; + $c->date_creation = $r->date; + $c->notes = 'Inséré à l\'import vers le nouveau Fluidbook Workshop'; + $c->ws_password = $r->password; + $c->ws_id = $r->uid; + $c->insert(); + $ws2ext[$r->uid] = $utilisateur_id; + $utilisateurs_entreprises[$utilisateur_id] = $e; + $utilisateur_id++; + } + } + protected static function _sqlIn($tab) { return ' IN(\'' . implode('\',\'', $tab) . '\') ';