public static function importFromOldWS($args)\r
{\r
global $core;\r
+ // Supprime pour le test\r
+ $core->con->execute('DELETE FROM book_pages WHERE book_id>3940 AND book_id<10000');\r
+ $core->con->execute('DELETE FROM books WHERE book_id>3940 AND book_id<10000');\r
+ $core->con->execute('DELETE FROM themes WHERE theme_id>627 AND theme_id<1000');\r
+ $core->con->execute('DELETE FROM documents WHERE document_id>12673 AND document_id<100000');\r
+ $core->con->execute('DELETE FROM langues WHERE lang_id=\'te\'');\r
+ $core->con->execute('DELETE FROM utilisateurs WHERE utilisateur_id>699');\r
+ $core->con->execute('DELETE FROM entreprises WHERE entreprise_id>561');\r
// Import des fluidbooks\r
// Donc le dernier importé est le max dont le numéro est inférieur à 10000\r
- $r = $core->con->select('SELECT MAX(book_id) FROM books WHERE book<10000');\r
+ $r = $core->con->select('SELECT MAX(book_id) AS book_id FROM books WHERE book_id<10000');\r
$lastImported = $r->book_id;\r
// On recherche maintenant les fluidbook dans la vieille base\r
- $r = $core->con->select('SELECT bid FROM ws.book WHERE bid>' . $r->book_id);\r
+ $r = $core->con->select('SELECT bid FROM ws.book WHERE bid>' . $lastImported);\r
$oldBooks = array();\r
while ($r->fetch()) {\r
$oldBooks[] = $r->bid;\r
}\r
\r
- self::importLangs($oldBooks);\r
- self::importThemes($oldBooks);\r
- self::importDocs($oldBooks);\r
- self::importBooks($oldBooks);\r
+ fb($oldBooks, 'Old books to import');\r
\r
- $core->refreshWSUsersTree();\r
+ if (count($oldBooks)) {\r
+ self::importLangs($oldBooks);\r
+ self::importThemes($oldBooks);\r
+ self::importDocs($oldBooks);\r
+ self::importBooks($oldBooks);\r
+ }\r
+\r
+ $core->refreshWSUsersTree();\r
}\r
\r
public static function importLangs($oldBooks)\r
{\r
- global $core;\r
+ global $core, $allTrads, $trads;\r
// On regarde d'abord les langues que nous avons déjà\r
$r = $core->con->select('SELECT lang_id FROM langues');\r
$already = array();\r
$toImport[] = $r->lang;\r
}\r
\r
- if (!count($toImport)) {\r
- return;\r
- }\r
-\r
$allTrads = array();\r
$trad = array();\r
$r = $core->con->select('SELECT * FROM ws.lang_trad,ws.lang_ord WHERE lang_trad.idlt=lang_ord.idlt AND idl ' . self::_sqlIn($toImport) . ' ');\r
while ($r->fetch()) {\r
- $idl = getLangCode($r->idl);\r
+ $idl = self::_getLangCode($r->idl);\r
if (!isset($trad[$idl])) {\r
$trad[$idl] = array();\r
}\r
$trad[$idl][$r->ord] = $r->text;\r
}\r
\r
- foreach($toImport as $idl) {\r
- $idl = getLangCode($idl);\r
-\r
+ foreach($trad as $idl => $t) {\r
$traductions = wsLang::getTraductionWithId($trad[$idl]);\r
$allTrads[$idl] = $traductions;\r
+ }\r
+\r
+ if (!count($toImport)) {\r
+ return;\r
+ }\r
+\r
+ foreach($toImport as $idl) {\r
+ $idl = self::_getLangCode($idl);\r
\r
$c = $core->con->openCursor('langues');\r
$c->lang_id = $idl;\r
$c->charset = 'Latin1';\r
$c->font = 'Fluidbook.otf';\r
- $c->traductions = json_encode($traductions);\r
+ $c->traductions = json_encode($allTrads[$idl]);\r
$c->insert();\r
}\r
}\r
\r
public static function importThemes($oldBooks)\r
{\r
+ global $core;\r
+\r
+ $r = $core->con->select('SELECT MAX(theme_id) AS theme_id FROM themes WHERE theme_id<1000');\r
+ $lastImported = $r->theme_id;\r
// Import des thèmes\r
- $r = $core->con->select('SELECT * FROM ws.theme WHERE tid IN (SELECT * FROM ws.book WHERE bid ' . self::_sqlIn($oldBooks) . ')');\r
+ $r = $core->con->select('SELECT * FROM ws.theme WHERE tid IN (SELECT tid FROM ws.book WHERE bid ' . self::_sqlIn($oldBooks) . ') AND tid>' . $lastImported);\r
$theme = new wsTheme();\r
while ($r->fetch()) {\r
+ $tid = $r->tid;\r
+\r
$c = $core->con->openCursor('themes');\r
$c->theme_id = $r->tid;\r
$c->proprietaire = self::_getWsUser($r->proprietaire);\r
$c->icones = self::_oldIconesToColor($r->iid, $parametres);\r
$c->parametres = serialize($parametres);\r
$c->insert();\r
+\r
+ $dest = WS_THEMES . '/' . $tid . '/';\r
+ if (!file_exists($dest)) {\r
+ mkdir($dest, 0777, true);\r
+ }\r
+\r
+ `/bin/cp -r /home/ws/www/themes/$tid/* $dest`;\r
}\r
}\r
\r
public static function importDocs($oldBooks)\r
{\r
+ global $core;\r
// On cherche maintenant à savoir si l'on doit importer de nouveaux documents associés\r
$oldDocuments = array();\r
$r = $core->con->select('SELECT DISTINCT did FROM ws.book_pages WHERE bid ' . self::_sqlIn($oldBooks) . '');\r
return;\r
}\r
\r
- $r = $core->con->select('SELECT * FROM ws.document ORDER BY did WHERE did ' . self::_sqlIn($oldDocuments));\r
+ $r = $core->con->select('SELECT * FROM ws.document WHERE did ' . self::_sqlIn($oldDocuments) . ' ORDER BY did');\r
while ($r->fetch()) {\r
$c = $core->con->openCursor('documents');\r
$c->document_id = $r->did;\r
$c->insert();\r
}\r
catch(Exception $e) {\r
+ fb($e);\r
}\r
}\r
+\r
+ fb($oldDocuments, 'Old documents imported');\r
}\r
\r
- public static function importBooks($oldBook)\r
+ public static function importBooks($oldBooks)\r
{\r
+ global $core, $allTrads;\r
+ // Importe les fluidbooks\r
+ $r = $core->con->select('SELECT * FROM ws.book WHERE bid ' . self::_sqlIn($oldBooks) . ' ORDER BY bid');\r
+ if (!$r->count()) {\r
+ return;\r
+ }\r
+ // .\r
+ while ($r->fetch()) {\r
+ $c = $core->con->openCursor('books');\r
+ $c->book_id = $r->bid;\r
+ $c->nom = $r->titre;\r
+ $c->lang = substr(self::_getLangCode($r->lang), 0, 2);\r
+ $c->theme = $r->tid;\r
+ if (strlen($r->lang) > 2) {\r
+ $c->traductions = json_encode($allTrads[self::_getLangCode($r->lang)]);\r
+ } else {\r
+ $c->traductions = '';\r
+ }\r
+ $c->proprietaire = self::_getWsUser($r->uid);\r
+ $c->status = $r->status;\r
+ $c->date_status = $r->date_status;\r
+ $c->hash = $r->code;\r
+ $c->compteur_visites = 20;\r
+ $c->date = $r->date;\r
+ $parametres = new wsBookParametres(new stdClass());\r
+ $parametres->fromRecord($r);\r
+\r
+ $xml = @simplexml_load_string('<extras>' . $r->extras . '</extras>');\r
+ if ($xml !== false) {\r
+ $parametres->fromXML($xml);\r
+ } else {\r
+ }\r
+\r
+ $n = array();\r
+ // Pages sans numéro\r
+ $offset = $r->first_page_nr-1;\r
+ for($i = 0;$i < $offset;$i++) {\r
+ $n[] = '';\r
+ }\r
+ // Pages avec numero\r
+ for($j = 1;$j + $offset <= $r->pages;$j++) {\r
+ $n[] = $j;\r
+ }\r
+ $c->numerotation = implode(',', $n);\r
+\r
+ $parametres->signature =/*$signatures[$r->tid]*/ 1;\r
+ $parametres->title = $r->titre;\r
+ $parametres->visualisationMode = '0';\r
+ $c->parametres = serialize($parametres);\r
+ $c->insert();\r
+ }\r
+ // Import des pages\r
+ $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));\r
}\r
\r
protected static function _oldIconesToColor($iid, &$parametres)\r
global $oldIconesColors;\r
if (!isset($oldIconesColors)) {\r
$oldIconesColors = array();\r
- $fp = fopen(dirname(__FILE__) . '/../../icones.csv', 'rb');\r
+ $fp = fopen(dirname(__FILE__) . '/../../../icones.csv', 'rb');\r
$i = 1;\r
while ($line = fgetcsv($fp, 1000, ';', '"')) {\r
$oldIconesColors[$i] = array('color' => trim($line[0]), 'iid' => trim($line[1]));\r
protected static function _getWsUser($oldid)\r
{\r
global $ws2ext;\r
+ if (!isset($ws2ext)) {\r
+ self::_getAllUsers();\r
+ }\r
if (!isset($ws2ext[$oldid])) {\r
- $ws2ext[$oldid] = 5;\r
+ self::_importOldUser($oldid);\r
}\r
return $ws2ext[$oldid];\r
}\r
\r
+ protected static function _getAllUsers()\r
+ {\r
+ global $core, $entreprises, $entreprise_id, $utilisateurs_entreprises, $utilisateur_id, $ws2ext, $grades;\r
+ $grades = array(0 => 1, 0.4 => 1, '0.4' => 1, 0.5 => 1, '0.5' => 1, 1 => 1, 2 => 2, 3 => 3, 4 => 5);\r
+ // Contrôle des entreprises déjà dans la base extranet\r
+ $entreprises = array();\r
+ $entreprise_id = 0;\r
+ $r = $core->con->select('SELECT entreprise_id,nom FROM entreprises');\r
+ while ($r->fetch()) {\r
+ $nom = mb_strtolower(trim($r->nom));\r
+ $nom = cubeText::str2URL($nom);\r
+ $entreprises[$nom] = $r->entreprise_id;\r
+ $entreprise_id = max($entreprise_id, $r->entreprise_id);\r
+ }\r
+\r
+ $utilisateurs_entreprises = array();\r
+ $r = $core->con->select('SELECT entreprise,utilisateur_id FROM utilisateurs');\r
+ while ($r->fetch()) {\r
+ $utilisateurs_entreprises[$r->utilisateur_id] = $r->entreprise;\r
+ }\r
+\r
+ $entreprise_id++;\r
+ // Obtient les emails des utilisateurs\r
+ $utilisateur_id = 0;\r
+ $utilisateurs = array();\r
+ $r = $core->con->select('SELECT utilisateur_id,email FROM utilisateurs');\r
+ while ($r->fetch()) {\r
+ $utilisateur_id = max($r->utilisateur_id, $utilisateur_id);\r
+ $utilisateurs[trim(mb_strtolower($r->email))] = $r->utilisateur_id;\r
+ }\r
+ $utilisateur_id++;\r
+\r
+ $ws2ext = array();\r
+ $r = $core->con->select('SELECT ws_id,utilisateur_id,entreprise FROM utilisateurs WHERE ws_id IS NOT NULL');\r
+ while ($r->fetch()) {\r
+ $ws2ext[$r->ws_id] = $r->utilisateur_id;\r
+ }\r
+ }\r
+\r
+ protected static function _importOldUser($oldid)\r
+ {\r
+ global $core, $entreprises, $entreprise_id, $utilisateurs_entreprises, $utilisateur_id, $ws2ext, $grades;\r
+ // Get user from old\r
+ $r = $core->con->select('SELECT * FROM ws.user WHERE uid=\'' . $core->con->escape($oldid) . '\'');\r
+ if ($r->extranet != 0) {\r
+ $ws2ext[$r->uid] = $r->extranet;\r
+ return;\r
+ }\r
+ // On s'occupe de l'entreprise\r
+ $email = trim(mb_strtolower($r->email));\r
+\r
+ $rs = trim($r->rs);\r
+ if ($rs == '') {\r
+ $rs = trim($r->prenom . ' ' . $r->nom);\r
+ }\r
+ $nom = mb_strtolower($rs);\r
+\r
+ $nom = cubeText::str2URL($nom);\r
+\r
+ if (isset($utilisateurs[$email])) {\r
+ $newid = $utilisateurs[$email];\r
+ $e = $utilisateurs_entreprises[$newid];\r
+ $update = true;\r
+ } elseif (isset($entreprises[$nom])) {\r
+ $e = $entreprises[$nom];\r
+ $update = true;\r
+ } else {\r
+ $c = $core->con->openCursor('entreprises');\r
+ $c->entreprise_id = $entreprise_id;\r
+ $c->nom = $rs;\r
+ $c->adresse = $r->adresse;\r
+ $c->code_postal = $r->code_postal;\r
+ $c->ville = $r->ville;\r
+ $c->pays = $r->pays;\r
+ $c->date_creation = $r->date;\r
+ $c->ws_grade = $grades[$r->grade];\r
+ $c->ws_admin = self::_getWsUser($r->admin);\r
+ $c->insert();\r
+ $e = $entreprises[$nom] = $entreprise_id;\r
+ $entreprise_id++;\r
+ $update = false;\r
+ }\r
+\r
+ if ($update) {\r
+ $c = $core->con->openCursor('entreprises');\r
+ $c->ws_grade = $grades[$r->grade];\r
+ $c->ws_admin = self::_getWsUser($r->admin);\r
+ $c->update('WHERE entreprise_id=\'' . $e . '\'');\r
+ }\r
+ // Puis de l'utilisateur\r
+ if (isset($utilisateurs[$email])) {\r
+ $c = $core->con->openCursor('utilisateurs');\r
+ $c->ws_password = $r->password;\r
+ $c->ws_id = $r->uid;\r
+ $c->update('WHERE utilisateur_id=\'' . $utilisateurs[$email] . '\'');\r
+ $ws2ext[$r->uid] = $utilisateurs[$email];\r
+ $utilisateurs_entreprises[$utilisateurs[$email]] = $e;\r
+ } else {\r
+ $c = $core->con->openCursor('utilisateurs');\r
+ $c->utilisateur_id = $utilisateur_id;\r
+ $c->entreprise = $e;\r
+ $c->nom = $r->nom;\r
+ $c->prenom = $r->prenom;\r
+ $c->email = $r->email;\r
+ $c->password = $r->password;\r
+ $c->adresse = $r->adresse;\r
+ $c->code_postal = $r->code_postal;\r
+ $c->ville = $r->ville;\r
+ $c->pays = $r->pays;\r
+ $c->lang = $r->lang;\r
+ $c->telephone = $r->telephone;\r
+ $c->date_creation = $r->date;\r
+ $c->notes = 'Inséré à l\'import vers le nouveau Fluidbook Workshop';\r
+ $c->ws_password = $r->password;\r
+ $c->ws_id = $r->uid;\r
+ $c->insert();\r
+ $ws2ext[$r->uid] = $utilisateur_id;\r
+ $utilisateurs_entreprises[$utilisateur_id] = $e;\r
+ $utilisateur_id++;\r
+ }\r
+ }\r
+\r
protected static function _sqlIn($tab)\r
{\r
return ' IN(\'' . implode('\',\'', $tab) . '\') ';\r