function writeConfig() { $config = array('metas' => array('title' => null, 'author' => null, 'creation' => strftime('%Y'), 'subject' => 'scout,' . $this->data['site']['association']), 'system' => array('short_title' => null, 'association' => $this->data['site']['association'], 'realm' => $this->generateRealm(), 'duree_connexion' => 2678400, 'admin' => $this->data['admin']['adelec'], 'mail' => array('enable' => true, 'smtp' => ''), 'style' => 'joubert')); $config = new Strass_Config_Php('strass', $config); $config->write(); Zend_Registry::set('config', $config); }
function offline() { if (file_exists('cache')) { rename('cache', 'private/cache'); } // config Zend_Registry::set('config_basedir', 'config/'); $config = array(); $tmp = new Strass_Config_Php('knema/db'); $newpath = 'private/strass.sqlite'; rename($tmp->config->dbname, $newpath); $tmp->config->dbname = $newpath; $config['db'] = $tmp->toArray(); $tmp = new Strass_Config_Php('knema/site'); $config['site'] = $tmp->toArray(); $tmp = new Strass_Config_Php('strass/inscription'); $config['inscription'] = $tmp->toArray(); $tmp = new Strass_Config_Php('knema/menu'); $config['menu'] = $tmp->toArray(); Zend_Registry::set('config_basedir', 'private/config/'); $config = new Strass_Config_Php('strass', $config); $config->write(); // Renommages rename("resources/styles/" . $config->site->style, "data/styles/" . $config->site->style); shell_exec("rsync -av data/statiques/ private/statiques/"); self::rrmdir('data/statiques'); rename("private/statiques/strass/unites", "private/unites"); rename("data/images/strass/unites/", "data/unites"); rename("data/images/strass/photos/", "data/photos"); rename("data/images/strass/individus/", "data/avatars/"); rename("data/images/strass/journaux/", "data/journaux"); rename("data/intro.wiki", "private/unites/intro.wiki"); // Nettoyages @unlink('resources/templates/.htaccess'); self::rrmdir('resources/'); @unlink('config/.htaccess'); self::rrmdir('config/'); @unlink('data/db/.htaccess'); self::rrmdir('data/db/'); self::rrmdir('data/images/'); self::rrmdir('private/statiques/strass'); @self::rrmdir('private/statiques/scout'); Strass::setInstalled(); }
function online($db) { $old = new Strass_Config_Php('strass'); $new = new Strass_Config_Php('strass', array()); $new->metas = $old->site->metas; $system = $old->site->toArray(); if ($system['id'] == 'morel') { $mvt = 'fse'; } else { $mvt = 'suf'; } $system['mouvement'] = $mvt; unset($system['id']); unset($system['association']); unset($system['metas']); unset($system['rubrique']); unset($system['sauvegarder']); $new->system = $system; /* Plutôt que d'afficher un style pété, on se repli */ $new->system->style = 'strass'; $new->write(); Zend_Registry::set('config', $new); }
function online($db) { $config = new Strass_Config_Php('strass'); $SUF = $config->get('site/id') == 'suf1520'; $db->exec(<<<'EOS' CREATE TABLE `unite_type` ( id INTEGER PRIMARY KEY, slug CHAR(32) NOT NULL UNIQUE, parent INTEGER REFERENCES unite_type(id), virtuelle BOOLEAN DEFAULT 0, nom CHAR(32) NOT NULL, -- Comment s'appelle l'extra ? Cri de pat ? Saint patron ? extra CHAR(32) DEFAULT NULL, ordre INT(2), sexe CHAR(1), age_min INT(4), age_max INT(4), nom_reunion CHAR(16) DEFAULT 'Réunion', nom_sortie CHAR(16) DEFAULT 'Sortie', nom_we CHAR(16) DEFAULT 'Weekend', nom_camp CHAR(16) DEFAULT 'Camp', accr_reunion CHAR(8) DEFAULT 'Réunion', accr_sortie CHAR(8) DEFAULT 'Sortie', accr_we CHAR(8) DEFAULT 'WE', accr_camp CHAR(8) DEFAULT 'Camp' ); EOS ); if ($SUF) { $db->exec(<<<'EOS' -- copie-collé de l'installeur INSERT INTO unite_type (slug, nom, parent, virtuelle, sexe, age_min, age_max) VALUES ('groupe', 'Groupe', NULL, 0, 'm', 30, 130), ('aines', 'Communauté des aînés', 1, 1, NULL, NULL, NULL), ('clan', 'Clan', 1, 0, 'h', 16, 130), ('eqclan', 'Équipe', 3, 0, 'h', 16, 30), ('feu', 'Feu', 1, 0, 'm', 16, 130), ('eqfeu', 'Équipe', 5, 0, 'f', 16, 30), ('troupe', 'Troupe', 1, 0, 'h', 18, 130), ('hp', 'Haute-Patrouille', 7, 1, NULL, NULL, NULL), ('patrouille', 'Patrouille', 7, 0, 'h', 11, 17), ('compagnie', 'Compagnie', 1, 0, 'm', 18, 130), ('he', 'Haute-Équipe', 10, 1, NULL, NULL, NULL), ('equipe', 'Équipe', 10, 0, 'f', 11, 17), ('meute', 'Meute', 1, 0, 'm', 17, 130), ('sizloup', 'Sizaine', 13, 0, 'h', 7, 12), ('ronde', 'Ronde', 1, 0, 'm', 17, 130), ('sizjeannette', 'Sizaine', 15, 0, 'f', 7, 12); UPDATE unite_type SET accr_we = 'WEG', nom_we = 'Weekend de groupe' WHERE slug = 'groupe'; UPDATE unite_type SET accr_we = 'WEA', nom_we = 'Weekend aînés' WHERE slug = 'aines'; UPDATE unite_type SET accr_we = 'WEC', nom_we = 'Weekend de clan', accr_camp = 'Route', nom_camp = 'Route' WHERE slug = 'clan'; UPDATE unite_type SET accr_we = 'WEF', nom_we = 'Weekend de feu' WHERE slug = 'feu'; UPDATE unite_type SET accr_we = 'WEE', nom_we = 'Weekend d''équipe' WHERE slug IN ('eqclan', 'eqfeu', 'equipe'); UPDATE unite_type SET accr_we = 'WET', nom_we = 'Weekend de troupe' WHERE slug = 'troupe'; UPDATE unite_type SET accr_we = 'WEHP', nom_we = 'Weekend HP', nom_camp = 'Camp HP' WHERE slug = 'hp'; UPDATE unite_type SET accr_we = 'WEP', nom_we = 'Weekend de patrouille' WHERE slug = 'patrouille'; UPDATE unite_type SET accr_we = 'WECie', nom_we = 'Weekend de compagnie' WHERE slug = 'compagnie'; UPDATE unite_type SET accr_we = 'WEHE', nom_we = 'Weekend HE', nom_camp = 'Camp HE' WHERE slug = 'he'; UPDATE unite_type SET nom_sortie = 'Chasse', nom_we = 'Grand chasse', nom_camp = 'Grande chasse', accr_sortie = 'Chasse', accr_we = 'Grande chasse', accr_camp = 'Grande chasse' WHERE slug = 'meute'; UPDATE unite_type SET ordre = 0 WHERE slug = 'groupe'; UPDATE unite_type SET ordre = 10 WHERE slug IN ('aines'); UPDATE unite_type SET ordre = 11 WHERE slug IN ('clan', 'feu'); UPDATE unite_type SET ordre = 12 WHERE slug IN ('eqclan', 'eqfeu'); UPDATE unite_type SET ordre = 20 WHERE slug IN ('troupe', 'compagnie'); UPDATE unite_type SET ordre = 21 WHERE slug IN ('hp', 'he'); UPDATE unite_type SET ordre = 22 WHERE slug IN ('patrouille', 'equipe'); UPDATE unite_type SET ordre = 30 WHERE slug IN ('meute', 'ronde'); UPDATE unite_type SET ordre = 31 WHERE slug IN ('sizloup', 'sizjeannette'); UPDATE unite_type SET extra = 'Cri de pat' WHERE slug IN ('hp', 'patrouille', 'he', 'equipe'); UPDATE unite_type SET extra = 'Saint patron' WHERE slug IN ('groupe', 'aines', 'clan', 'eqclan', 'feu', 'eqfeu', 'troupe', 'compagnie'); EOS ); } else { // FSE $db->exec(<<<'EOS' -- copie-collé de l'installeur INSERT INTO unite_type (slug, nom, parent, virtuelle, sexe, age_min, age_max) VALUES ('groupe', 'Groupe', NULL, 0, 'm', 30, 130), ('clan', 'Clan', NULL, 0, 'h', 17, 50), ('eqclan', 'Équipe', 2, 0, 'h', 16, 30), ('feu', 'Feu', NULL, 0, 'f', 17, 30), ('eqfeu', 'Équipe', 4, 0, 'f', 16, 30), ('troupe', 'Troupe', 1, 0, 'h', 18, 30), ('hp', 'Haute-Patrouille', 6, 1, NULL, NULL, NULL), ('patrouille', 'Patrouille', 6, 0, 'h', 11, 17), ('compagnie', 'Compagnie', 1, 0, 'f', 18, 30), ('hpc', 'Haute-Patrouille', 9, 1, NULL, NULL, NULL), ('patguide', 'Patrouille', 9, 0, 'f', 11, 17), ('meute', 'Meute', 1, 0, 'm', 17, 30), ('sizloup', 'Sizaine', 12, 0, 'h', 7, 12), ('clairiere', 'Clairière', 1, 0, 'f', 17, 30), ('sizlouvette', 'Sizaine', 14, 0, 'f', 7, 12); UPDATE unite_type SET accr_we = 'WEG', nom_we = 'Weekend de groupe' WHERE slug = 'groupe'; UPDATE unite_type SET accr_we = 'WEC', nom_we = 'Weekend de clan', accr_camp = 'Route', nom_camp = 'Route' WHERE slug = 'clan'; UPDATE unite_type SET accr_we = 'WEF', nom_we = 'Weekend de feu' WHERE slug = 'feu'; UPDATE unite_type SET accr_we = 'WEE', nom_we = 'Weekend d''équipe' WHERE slug IN ('eqclan', 'eqfeu'); UPDATE unite_type SET accr_we = 'WET', nom_we = 'Weekend de troupe' WHERE slug = 'troupe'; UPDATE unite_type SET accr_we = 'WECie', nom_we = 'Weekend de compagnie' WHERE slug = 'compagnie'; UPDATE unite_type SET accr_we = 'WEHP', nom_we = 'Weekend HP', accr_camp = 'Camp HP', nom_camp = 'Camp HP' WHERE slug IN ('hp', 'hpc'); UPDATE unite_type SET accr_we = 'WEP', nom_we = 'Weekend de patrouille' WHERE slug IN ('patrouille', 'patguide'); UPDATE unite_type SET nom_sortie = 'Chasse', nom_we = 'Grand chasse', nom_camp = 'Grande chasse', accr_sortie = 'Chasse', accr_we = 'Grande chasse', accr_camp = 'Grande chasse' WHERE slug IN ('meute', 'clairiere'); UPDATE unite_type SET ordre = 0 WHERE slug = 'groupe'; UPDATE unite_type SET ordre = 11 WHERE slug IN ('clan', 'feu'); UPDATE unite_type SET ordre = 12 WHERE slug IN ('eqclan', 'eqfeu'); UPDATE unite_type SET ordre = 20 WHERE slug IN ('troupe', 'compagnie'); UPDATE unite_type SET ordre = 21 WHERE slug IN ('hp', 'hpc'); UPDATE unite_type SET ordre = 22 WHERE slug IN ('patrouille', 'patguide'); UPDATE unite_type SET ordre = 30 WHERE slug IN ('meute', 'clairiere'); UPDATE unite_type SET ordre = 31 WHERE slug IN ('sizloup', 'sizlouvette'); UPDATE unite_type SET extra = 'Cri de pat' WHERE slug IN ('hp', 'patrouille', 'hpc', 'patguide'); UPDATE unite_type SET extra = 'Saint patron' WHERE slug IN ('groupe', 'clan', 'eqclan', 'feu', 'eqfeu', 'troupe', 'compagnie'); EOS ); } $db->exec(<<<'EOS' DROP TABLE types_unite; CREATE VIEW vtypes AS SELECT t.id, t.slug, t.nom, t.virtuelle, t.sexe, t.age_min AS min, t.age_max AS max, p.nom AS parent FROM unite_type AS t LEFT JOIN unite_type AS p on p.id = t.parent ORDER BY t.ordre; CREATE TABLE `unite` ( id INTEGER PRIMARY KEY, slug CHAR(128) UNIQUE NOT NULL, parent INTEGER REFERENCES unite(id), nom CHAR(128) NOT NULL, `type` INTEGER REFERENCES unite_type(id), -- cri de pat/équipe/nom de troupe/compagnie/guide extra CHAR(128) NULL ); INSERT INTO unite (slug, nom, type, extra) SELECT id, nom, (SELECT id FROM unite_type WHERE slug = type), extra FROM unites; UPDATE unite SET parent = ( SELECT parent.id FROM unites JOIN unite AS parent ON parent.slug = unites.parent WHERE unites.id = unite.slug); DROP TABLE unites; CREATE VIEW vunites AS SELECT u.id, u.slug, t.nom AS type, u.nom, u.extra FROM unite AS u JOIN unite_type AS t ON t.id = u.type; -- chef, assistant, 3e, etc. CREATE TABLE `unite_role` ( id INTEGER PRIMARY KEY, slug CHAR(16) UNIQUE, type INTEGER REFERENCES unites_type(id), acl_role CHAR(16), titre CHAR(64), accr CHAR(6), ordre INT(2), nom_jungle BOOLEAN DEFAULT 0, UNIQUE (slug, type) ); EOS ); if ($SUF) { $db->exec(<<<'EOS' -- Ze bug :x UPDATE appartient SET role = 'chef' WHERE unite = 'ronde' AND role = 'siz'; -- copie-collé de l'installeur INSERT INTO unite_role (slug, titre, accr, type, acl_role) VALUES ('cg', 'Chef de groupe', 'CG', 1, 'chef'), -- 1 ('acg', 'Assistant chef de groupe', 'ACG', 1, 'assistant'), ('cc', 'Chef de clan', 'CC', 3, 'chef'), ('acc', 'Assistant chef de clan', 'ACC', 3, 'assistant'), ('routier', 'Routier', 'SR', 3, 'assistant'), -- 5 ('cer', 'Chef d''équipe', 'CE', 4, 'chef'), ('equipier', 'Routier', 'SR', 4, 'assistant'), ('cf', 'Cheftaine de feu', 'CF', 5, 'chef'), ('acf', 'Assistante cheftaine de feu', 'ACF', 5, 'chef'), ('ga', 'Guide-aînée', 'GA', 5, 'assistant'), -- 10 ('cef', 'Cheftaine d''équipe', 'CE', 6, 'chef'), ('equipiere', 'Guide-aînée', 'GA', 6, 'assistant'), ('ct', 'Chef de troupe', 'CT', 7, 'chef'), ('act', 'Assistant chef de troupe', 'ACT', 7, 'assistant'), ('cp', 'Chef de patrouille', 'CP', 9, 'chef'), -- 15 ('sp', 'Second de patrouille', 'SP', 9, 'assistant'), ('3e-patrouille','3e', NULL, 9, 'membre'), ('4e-patrouille','4e', NULL, 9, 'membre'), ('5e-patrouille','5e', NULL, 9, 'membre'), ('6e-patrouille','6e', NULL, 9, 'membre'), -- 20 ('7e-patrouille','7e', NULL, 9, 'membre'), ('8e-patrouille','8e', NULL, 9, 'membre'), ('ccie', 'Cheftaine de compagnie', 'CCie', 10, 'chef'), ('accie', 'Assistante cheftaine de compagnie','ACCie',10, 'chef'), ('ce', 'Cheftaine d''équipe', 'CE', 12, 'chef'), -- 25 ('se', 'Seconde d''équipe', 'SE', 12, 'assistant'), ('3e-equipe', '3e', NULL, 12, 'membre'), ('4e-equipe', '4e', NULL, 12, 'membre'), ('5e-equipe', '5e', NULL, 12, 'membre'), ('6e-equipe', '6e', NULL, 12, 'membre'), -- 30 ('7e-equipe', '7e', NULL, 12, 'membre'), ('8e-equipe', '8e', NULL, 12, 'membre'), ('akela', 'Akéla', NULL, 13, 'chef'), ('acm', 'Assistante d''Akéla', 'ACM', 13, 'chef'), ('sizainier', 'Sizainier', NULL, 14, 'membre'), -- 35 ('second', 'Second', NULL, 14, 'membre'), ('3e-louveteau','3e', NULL, 14, 'membre'), ('4e-louveteau','4e', NULL, 14, 'membre'), ('5e-louveteau','5e', NULL, 14, 'membre'), ('6e-louveteau','6e', NULL, 14, 'membre'), -- 40 ('guillemette', 'Guillemette', NULL, 15, 'chef'), ('acr', 'Assistante de Guillemette', NULL, 15, 'chef'), ('sizainiere', 'Sizainière', NULL, 16, 'membre'), ('seconde', 'Seconde', NULL, 16, 'membre'), ('3e-jeannette','3e', NULL, 16, 'membre'), -- 45 ('4e-jeannette','4e', NULL, 16, 'membre'), ('5e-jeannette','5e', NULL, 16, 'membre'), ('6e-jeannette','6e', NULL, 16, 'membre'); UPDATE unite_role SET nom_jungle = 1 WHERE slug IN ('akela', 'guillemette', 'acm', 'acr'); UPDATE unite_role SET ordre = 0 WHERE slug = 'cg'; UPDATE unite_role SET ordre = 1 WHERE slug = 'acg'; UPDATE unite_role SET ordre = 10 WHERE slug IN ('cc', 'cf'); UPDATE unite_role SET ordre = 11 WHERE slug IN ('acc', 'acf', 'cer', 'cef'); UPDATE unite_role SET ordre = 12 WHERE slug IN ('routier', 'equipier', 'ga', 'equipiere'); UPDATE unite_role SET ordre = 20 WHERE slug IN ('ct', 'ccie'); UPDATE unite_role SET ordre = 21 WHERE slug IN ('act', 'accie'); UPDATE unite_role SET ordre = 30 WHERE slug IN ('akela', 'guillemette'); UPDATE unite_role SET ordre = 31 WHERE slug IN ('acm', 'acr'); UPDATE unite_role SET ordre = 40 WHERE slug IN ('cp', 'ce'); UPDATE unite_role SET ordre = 41 WHERE slug IN ('sp', 'se'); UPDATE unite_role SET ordre = 42 WHERE slug IN ('3e-patrouille', '3e-equipe'); UPDATE unite_role SET ordre = 43 WHERE slug IN ('4e-patrouille', '4e-equipe'); UPDATE unite_role SET ordre = 44 WHERE slug IN ('5e-patrouille', '5e-equipe'); UPDATE unite_role SET ordre = 45 WHERE slug IN ('6e-patrouille', '6e-equipe'); UPDATE unite_role SET ordre = 46 WHERE slug IN ('7e-patrouille', '7e-equipe'); UPDATE unite_role SET ordre = 47 WHERE slug IN ('8e-patrouille', '8e-equipe'); UPDATE unite_role SET ordre = 50 WHERE slug IN ('sizainier', 'sizainiere'); UPDATE unite_role SET ordre = 51 WHERE slug IN ('second', 'seconde'); UPDATE unite_role SET ordre = 52 WHERE slug IN ('3e-louveteau', '3e-jeannette'); UPDATE unite_role SET ordre = 53 WHERE slug IN ('4e-louveteau', '4e-jeannette'); UPDATE unite_role SET ordre = 54 WHERE slug IN ('5e-louveteau', '5e-jeannette'); UPDATE unite_role SET ordre = 55 WHERE slug IN ('6e-louveteau', '6e-jeannette'); EOS ); } else { // FSE $db->exec(<<<'EOS' -- copie-collé de l'installeur INSERT INTO unite_role (slug, titre, accr, type, acl_role, ordre) VALUES ('cg', 'Chef de groupe', 'CG', 1, 'chef', 0), -- 1 ('acg', 'Assistant chef de groupe', 'ACG', 1, 'assistant', 1), ('cc', 'Chef de clan', 'CC', 2, 'chef', 10), ('cca', 'Chef de clan adjoint', 'CCA', 2, 'assistant', 11), ('acc', 'Chef d''équipe', 'ACC', 3, 'chef', 11), -- 5 ('equipier', 'Équipier', NULL, 3, 'membre', 12), ('cf', 'Cheftaine de feu', 'CF', 4, 'chef', 10), ('cfa', 'Cheftaine de feu adjointe', 'CFA', 4, 'chef', 11), ('acf', 'Cheftaine d''équipe', 'ACF', 5, 'chef', 11), ('equipiere', 'Guide-aînée', 'GA', 5, 'membre', 12), -- 10 ('ct', 'Chef de troupe', 'CT', 6, 'chef', 20), ('act', 'Assistant chef de troupe', 'ACT', 6, 'assistant', 21), ('cp', 'Chef de patrouille', 'CP', 8, 'chef', 40), ('sp', 'Second de patrouille', 'SP', 8, 'assistant', 41), ('3e-patrouille','3e', NULL, 8, 'membre', 42), -- 15 ('4e-patrouille','4e', NULL, 8, 'membre', 43), ('5e-patrouille','5e', NULL, 8, 'membre', 44), ('6e-patrouille','6e', NULL, 8, 'membre', 45), ('7e-patrouille','7e', NULL, 8, 'membre', 46), ('8e-patrouille','8e', NULL, 8, 'membre', 46), -- 20 ('ccie', 'Cheftaine de compagnie', 'CCie', 9, 'chef', 20), ('accie', 'Assistante cheftaine de compagnie','ACCie',9, 'chef', 21), ('ce', 'Cheftaine d''équipe', 'CE', 11, 'chef', 40), ('se', 'Seconde d''équipe', 'SE', 11, 'assistant', 41), ('3e-equipe', '3e', NULL, 11, 'membre', 42), -- 25 ('4e-equipe', '4e', NULL, 11, 'membre', 43), ('5e-equipe', '5e', NULL, 11, 'membre', 44), ('6e-equipe', '6e', NULL, 11, 'membre', 45), ('7e-equipe', '7e', NULL, 11, 'membre', 46), ('8e-equipe', '8e', NULL, 11, 'membre', 47), -- 30 ('akela', 'Akéla', NULL, 12, 'chef', 30), ('acm', 'Assistant d''Akéla', 'ACM', 12, 'chef', 31), ('sizainier', 'Sizainier', NULL, 13, 'membre', 50), ('second', 'Second', NULL, 13, 'membre', 51), ('3e-louveteau','3e', NULL, 13, 'membre', 52), -- 35 ('4e-louveteau','4e', NULL, 13, 'membre', 53), ('5e-louveteau','5e', NULL, 13, 'membre', 54), ('6e-louveteau','6e', NULL, 13, 'membre', 55), ('akelaf', 'Akéla', NULL, 14, 'chef', 30), ('accl', 'Assistante d''Akéla', NULL, 14, 'chef', 31), -- 40 ('sizainiere', 'Sizainière', NULL, 15, 'membre', 50), ('seconde', 'Seconde', NULL, 15, 'membre', 51), ('3e-louvette','3e', NULL, 15, 'membre', 52), ('4e-louvette','4e', NULL, 15, 'membre', 53), ('5e-louvette','5e', NULL, 15, 'membre', 54), -- 45 ('6e-louvette','6e', NULL, 15, 'membre', 55); UPDATE unite_role SET ordre = 0 WHERE slug = 'cg'; UPDATE unite_role SET ordre = 1 WHERE slug = 'acg'; UPDATE unite_role SET ordre = 10 WHERE slug IN ('cc', 'cf'); UPDATE unite_role SET ordre = 11 WHERE slug IN ('cca', 'cfa', 'acc', 'acf'); UPDATE unite_role SET ordre = 12 WHERE slug IN ('routier', 'equipier', 'ga', 'equipiere'); UPDATE unite_role SET ordre = 20 WHERE slug IN ('ct', 'ccie'); UPDATE unite_role SET ordre = 21 WHERE slug IN ('act', 'accie'); UPDATE unite_role SET ordre = 30 WHERE slug IN ('akela', 'akelaf'); UPDATE unite_role SET ordre = 31 WHERE slug IN ('acm', 'accl'); UPDATE unite_role SET ordre = 40 WHERE slug IN ('cp', 'ce'); UPDATE unite_role SET ordre = 41 WHERE slug IN ('sp', 'se'); UPDATE unite_role SET ordre = 42 WHERE slug IN ('3e-patrouille', '3e-equipe'); UPDATE unite_role SET ordre = 43 WHERE slug IN ('4e-patrouille', '4e-equipe'); UPDATE unite_role SET ordre = 44 WHERE slug IN ('5e-patrouille', '5e-equipe'); UPDATE unite_role SET ordre = 45 WHERE slug IN ('6e-patrouille', '6e-equipe'); UPDATE unite_role SET ordre = 46 WHERE slug IN ('7e-patrouille', '7e-equipe'); UPDATE unite_role SET ordre = 47 WHERE slug IN ('8e-patrouille', '8e-equipe'); UPDATE unite_role SET ordre = 50 WHERE slug IN ('sizainier', 'sizainiere'); UPDATE unite_role SET ordre = 51 WHERE slug IN ('second', 'seconde'); UPDATE unite_role SET ordre = 52 WHERE slug IN ('3e-louveteau', '3e-louvette'); UPDATE unite_role SET ordre = 53 WHERE slug IN ('4e-louveteau', '4e-louvette'); UPDATE unite_role SET ordre = 54 WHERE slug IN ('5e-louveteau', '5e-louvette'); UPDATE unite_role SET ordre = 55 WHERE slug IN ('6e-louveteau', '6e-louvette'); EOS ); } $db->exec(<<<'EOS' CREATE VIEW vroles AS SELECT r.id, r.slug, r.titre, t.nom, r.accr, acl_role AS acl FROM unite_role AS r JOIN unite_type AS t ON t.id = r.type ORDER BY t.ordre, r.ordre; -- titre comme Bagheera, Hauviette, aumônier, etc. CREATE TABLE `unite_titre` ( id INTEGER PRIMARY KEY, slug CHAR(128) NOT NULL, role INTEGER REFERENCES unite_role(id), nom CHAR(128) NOT NULL, UNIQUE (role, nom), UNIQUE (role, slug) ); EOS ); if ($SUF) { $db->exec(<<<'EOS' -- copie-collé de l'installeur INSERT INTO unite_titre (slug, nom, role) VALUES ('aumonier-g', 'Aumônier', 2), ('tresorier', 'Trésorier', 2), ('materialiste','Matérialiste', 2), ('secretaire', 'Secrétaire', 2), ('aumonier-c', 'Aumônier', 4), -- clan ('aumonier-f', 'Aumônier', 8), -- feu ('aumonier-t', 'Aumônier', 14), -- troupe ('pcp', 'PCP', 15), ('aumonier-ccie','Aumônier', 24), -- compagnie ('aumonier-m', 'Aumônier', 34), -- meute ('ahdeek', 'Ahdeek', 34), ('baloo', 'Baloo', 34), ('bagheera', 'Bagheera', 34), ('chikai', 'Chikaï', 34), ('chil', 'Chil', 34), ('chunchundra', 'Chunchundra', 34), ('dahinda', 'Dahinda', 34), ('darzee', 'Darzee', 34), ('ferao', 'Ferao', 34), ('gris', 'Frère-Gris', 34), ('hathi', 'Hathi', 34), ('jacala', 'jacala', 34), ('kaa', 'Kaa', 34), ('keego', 'Keego', 34), ('keneu', 'Keneu', 34), ('ko', 'Ko', 34), ('kotick', 'Kotick', 34), ('lardaki', 'Lardaki', 34), ('louie', 'Roi-Louie', 34), ('mang', 'Mang', 34), ('mor', 'Mor', 34), ('mysa', 'Mysa', 34), ('nag', 'Nag', 34), ('oo', 'Oo', 34), ('oonai', 'Oonaï', 34), ('phao', 'Phao', 34), ('phaona', 'Phaona', 34), ('pukeena', 'Pukeena', 34), ('raksha', 'Raksha', 34), ('rama', 'Rama', 34), ('rikki', 'Rikki Tiki Tavi',34), ('sahi', 'Sahi', 34), ('shada', 'Shada', 34), ('shawshaw', 'Shaw Shaw', 34), ('singum', 'Singum', 34), ('sona', 'Sona', 34), ('tegumai', 'Tegumaï', 34), ('tha', 'Thâ', 34), ('thuu', 'Thuu', 34), ('wontolla', 'Won-Tolla', 34), ('aumonier-r', 'aumônier', 41), -- ronde ('zabilet', 'Zabilet', 41), ('mengette', 'Mengette', 41), ('hauviette', 'Hauviette', 41), ('isabelette', 'Isabellette', 41), ('colette', 'Nicolette', 41); EOS ); } else { // FSE $db->exec(<<<'EOS' INSERT INTO unite_titre (slug, nom, role) VALUES ('aumonier-g', 'CR', 2), ('tresorier', 'Trésorier', 2), ('materialiste','Matérialiste', 2), ('secretaire', 'Secrétaire', 2), ('aumonier-c', 'CR', 4), -- clan ('aumonier-f', 'CR', 8), -- feu ('aumonier-t', 'CR', 12), -- troupe ('aumonier-ccie','CR', 22), -- compagnie ('aumonier-m', 'CR', 32), -- meute ('ahdeek', 'Ahdeek', 32), ('baloo', 'Baloo', 32), ('bagheera', 'Bagheera', 32), ('chikai', 'Chikaï', 32), ('chil', 'Chil', 32), ('chunchundra', 'Chunchundra', 32), ('dahinda', 'Dahinda', 32), ('darzee', 'Darzee', 32), ('ferao', 'Ferao', 32), ('gris', 'Frère-Gris', 32), ('hathi', 'Hathi', 32), ('jacala', 'jacala', 32), ('kaa', 'Kaa', 32), ('keego', 'Keego', 32), ('keneu', 'Keneu', 32), ('ko', 'Ko', 32), ('kotick', 'Kotick', 32), ('lardaki', 'Lardaki', 32), ('louie', 'Roi-Louie', 32), ('mang', 'Mang', 32), ('mor', 'Mor', 32), ('mysa', 'Mysa', 32), ('nag', 'Nag', 32), ('oo', 'Oo', 32), ('oonai', 'Oonaï', 32), ('phao', 'Phao', 32), ('phaona', 'Phaona', 32), ('pukeena', 'Pukeena', 32), ('raksha', 'Raksha', 32), ('rama', 'Rama', 32), ('rikki', 'Rikki Tiki Tavi',32), ('sahi', 'Sahi', 32), ('shada', 'Shada', 32), ('shawshaw', 'Shaw Shaw', 32), ('singum', 'Singum', 32), ('sona', 'Sona', 32), ('tegumai', 'Tegumaï', 32), ('tha', 'Thâ', 32), ('thuu', 'Thuu', 32), ('wontolla', 'Won-Tolla', 32), ('aumonier-m', 'CR', 40), -- clairière ('ahdeek', 'Ahdeek', 40), ('baloo', 'Baloo', 40), ('bagheera', 'Bagheera', 40), ('chikai', 'Chikaï', 40), ('chil', 'Chil', 40), ('chunchundra', 'Chunchundra', 40), ('dahinda', 'Dahinda', 40), ('darzee', 'Darzee', 40), ('ferao', 'Ferao', 40), ('gris', 'Frère-Gris', 40), ('hathi', 'Hathi', 40), ('jacala', 'jacala', 40), ('kaa', 'Kaa', 40), ('keego', 'Keego', 40), ('keneu', 'Keneu', 40), ('ko', 'Ko', 40), ('kotick', 'Kotick', 40), ('lardaki', 'Lardaki', 40), ('louie', 'Roi-Louie', 40), ('mang', 'Mang', 40), ('mor', 'Mor', 40), ('mysa', 'Mysa', 40), ('nag', 'Nag', 40), ('oo', 'Oo', 40), ('oonai', 'Oonaï', 40), ('phao', 'Phao', 40), ('phaona', 'Phaona', 40), ('pukeena', 'Pukeena', 40), ('raksha', 'Raksha', 40), ('rama', 'Rama', 40), ('rikki', 'Rikki Tiki Tavi',40), ('sahi', 'Sahi', 40), ('shada', 'Shada', 40), ('shawshaw', 'Shaw Shaw', 40), ('singum', 'Singum', 40), ('sona', 'Sona', 40), ('tegumai', 'Tegumaï', 40), ('tha', 'Thâ', 40), ('thuu', 'Thuu', 40), ('wontolla', 'Won-Tolla', 40); EOS ); } $inscriptions_avant = $db->query('SELECT COUNT(*) FROM appartient;')->fetchColumn(); $db->exec(<<<'EOS' CREATE VIEW vtitres AS SELECT t.id, t.slug, t.nom, unite_role.titre, unite_type.nom AS unite FROM unite_titre AS t JOIN unite_role ON unite_role.id = t.role JOIN unite_type ON unite_type.id = unite_role.type; CREATE TABLE `appartenance` ( id INTEGER PRIMARY KEY, individu INTEGER REFERENCES individu(id) NOT NULL, unite INTEGER REFERENCES unite(id) NOT NULL, role INTEGER REFERENCES unite_role(id) NOT NULL, titre CHAR(64), debut DATE NOT NULL, fin DATE DEFAULT NULL ); -- Migration des inscriptions. Le plus délicat est de retrouver le rôle, c'est ce qui a le plus changé. INSERT INTO appartenance (individu, unite, role, titre, debut, fin) SELECT DISTINCT individu.id, unite.id, unite_role.id, unite_titre.nom, debut, fin FROM appartient JOIN individu ON individu.slug = appartient.individu JOIN unite ON unite.slug = appartient.unite JOIN roles ON roles.id = appartient.role AND roles.type = appartient.type JOIN unite_role ON unite_role.type = unite.type AND (CASE WHEN roles.titre = 'routier' AND roles.type = 'clan' THEN unite_role.slug = roles.titre WHEN roles.titre = 'routier' AND roles.type = 'eqclan' THEN unite_role.slug = 'equipier' -- On a distingué les role et les noms de jungle/forêt. WHEN roles.type IN ('meute', 'ronde') AND roles.id <> 'chef' THEN unite_role.slug LIKE 'ac%' -- Pour bagheera, raksha, etc. -- Pour les unités féminines, il n'y a pas d'assistante au niveau -- ACL, donc on ne peut pas se baser sur acl_role pour retrouver -- le nouveau role. WHEN appartient.role = 'chef' AND roles.type NOT IN ('meute', 'ronde', 'compagnie', 'feu') THEN unite_role.acl_role = appartient.role WHEN appartient.role = 'chef' AND roles.type IN ('meute', 'ronde', 'feu') THEN unite_role.titre = roles.titre WHEN appartient.role = 'chef' AND roles.type IN ('compagnie') THEN unite_role.slug = 'ccie' WHEN appartient.role IN ('3e', '4e', '5e', '6e', '7e', '8e', 'siz', 'sec') THEN unite_role.slug LIKE appartient.role || '%' -- Ici passent les SP, SE, ACC, etc. ELSE unite_role.acl_role = 'assistant' END) JOIN unite_type ON unite_type.id = unite.type LEFT JOIN unite_titre ON unite_titre.role = unite_role.id AND unite_titre.slug LIKE appartient.role || '%' ORDER BY debut; DROP TABLE roles; -- suppression des titres (aumônier, bagheera, etc.) UPDATE unite_role SET acl_role = 'membre' WHERE acl_role LIKE '_e' OR acl_role IN ('siz', 'sec'); DELETE FROM unite_role WHERE acl_role NOT IN ('chef', 'assistant', 'membre'); CREATE VIEW vappartenances AS SELECT DISTINCT appartenance.id, individu.slug AS individu, appartenance.titre, role.titre AS role, unite.nom AS unite FROM appartenance JOIN individu ON individu.id = appartenance.individu JOIN unite_role AS role ON role.id = appartenance.role JOIN unite ON unite.id = appartenance.unite ORDER BY individu.naissance ASC; DROP TABLE appartient; EOS ); $inscriptions_apres = $db->query('SELECT COUNT(*) FROM appartenance;')->fetchColumn(); $diff = $inscriptions_avant - $inscriptions_apres; if ($diff > 0) { error_log($diff . " inscriptions ont été perdues pendant la migration"); } elseif ($diff < 0) { throw new Exception(-1 * $diff . " inscriptions générées !!"); } $rootslug = $db->query("SELECT slug FROM unite WHERE parent IS NULL LIMIT 1")->fetchColumn(); rename('private/unites/intro.wiki', 'private/unites/' . $rootslug . '.wiki'); }
function parametresAction() { static $blocs = array('branches' => 'Les branches', 'unites' => 'Les unités', 'photos' => 'Photos aléatoires', 'activites' => 'Activités marquantes', 'documents' => 'Documents'); $this->view->unite = $u = $this->_helper->Unite(); $this->assert(null, $u, null, "Vous n'avez pas le droit de modifier cette unité"); $this->metas(array('DC.Title' => 'Paramètres ' . $u->getFullname())); $this->view->model = $m = new Wtk_Form_Model('parametres'); $w = $u->getWiki(null, false); $m->addString('presentation', "Message d'accueil", is_readable($w) ? file_get_contents($w) : ''); $config = new Strass_Config_Php($u->slug); $t = $m->addTable('blocs', "Blocs de la page d'accueil", array('id' => array('String'), 'nom' => array('String', 'Bloc', true), 'enable' => array('Bool', 'Actif')), true, false); $enabled = $config->blocs; if ($enabled) { $enabled = $enabled->toArray(); } else { $enabled = array(); } foreach ($enabled as $k) { $r = $t->addRow($k, $blocs[$k], true); } /* nouveau blocs */ foreach ($blocs as $k => $v) { if (!in_array($k, $enabled)) { $r = $t->addRow($k, $v, false); } } $m->addNewSubmission('enregistrer', "Enregistrer"); if ($m->validate()) { $u->storePresentation($m->presentation); $blocs = array(); foreach ($m->blocs as $row) { if ($row['enable']) { array_push($blocs, $row['id']); } } $config->blocs = $blocs; $config->write(); $this->logger->info("Configuration de page d'accueil"); $this->redirectSimple('index', 'unites', null, array('unite' => $u->slug)); } }
function online($db) { error_log("Unicité des identifiants de photos"); do { $slugs = $db->query("SELECT count(*) AS count, id AS slug FROM photos GROUP BY id HAVING count > 1"); $count = 0; foreach ($slugs as $i => $row) { $count += 1; extract($row); $activites = $db->query("SELECT activite FROM photos WHERE id = '{$slug}' ORDER BY ROWID"); foreach ($activites as $i => $arow) { if (!$i) { continue; } extract($arow); $newslug = "{$slug}-{$i}"; error_log("Renommage de {$activite}/{$slug} en {$newslug}."); rename("data/photos/{$activite}/{$slug}.jpeg", "data/photos/{$activite}/{$newslug}.jpeg"); rename("data/photos/{$activite}/{$slug}-vignette.jpeg", "data/photos/{$activite}/{$newslug}-vignette.jpeg"); $db->exec(<<<EOS UPDATE photos SET id = '{$newslug}' WHERE id = '{$slug}' AND activite = '{$activite}'; UPDATE commentaires SET photo = '{$newslug}' WHERE photo = '{$slug}' AND activite = '{$activite}'; EOS ); } } } while ($count); error_log("Migration des photos"); $db->exec(<<<'EOS' -- CREATE TABLE `commentaire` ( id INTEGER PRIMARY KEY, auteur INTEGER REFERENCES individu(id), parent INTEGER REFERENCES commentaire(id), `date` DATETIME DEFAULT CURRENT_TIMESTAMP, message TEXT, -- Interdire les réponses multiples. Le site ne sert pas à discuter. UNIQUE(auteur, parent) ); INSERT INTO commentaire (`date`, message) SELECT photos.`date`, photos.id FROM photos ORDER BY `date`; CREATE TABLE `photo` ( id INTEGER PRIMARY KEY, slug CHAR(512) UNIQUE, activite INTEGER NOT NULL REFERENCES activite(id), promotion INTEGER DEFAULT 0, `date` DATETIME, titre CHAR(512), commentaires INTEGER NOT NULL REFERENCES commentaire(id) ); INSERT INTO photo (slug, titre, activite, date, commentaires) SELECT photos.id, titre, activite.id, photos.date, ( SELECT id FROM commentaire WHERE commentaire.message = photos.id) FROM photos JOIN activite ON activite.slug = photos.activite ORDER BY activite.debut, photos.date; UPDATE commentaire SET message = (SELECT desc FROM photos WHERE photos.id = message); DROP TABLE photos; INSERT INTO commentaire (auteur, parent, date, message) SELECT individu.id, photo.commentaires, commentaires.date, commentaires.commentaire FROM commentaires JOIN individu ON individu.slug = commentaires.individu JOIN activite ON activite.slug = commentaires.activite JOIN photo ON photo.slug = commentaires.photo AND photo.activite = activite.id ORDER BY commentaires.date; DROP TABLE commentaires; CREATE VIEW vphotos AS SELECT photo.id, photo.slug, activite.slug AS activite, photo.titre FROM photo JOIN activite ON activite.id = photo.activite ORDER BY activite.debut, photo.date; CREATE VIEW vcommentaires AS SELECT commentaire.id, activite.slug AS activite, photo.slug AS photo, individu.slug, commentaire.date, message FROM commentaire JOIN photo ON photo.commentaires = commentaire.parent JOIN activite ON activite.id = photo.activite LEFT JOIN individu ON individu.id = commentaire.auteur ORDER BY photo.id, commentaire.date; EOS ); error_log("Écriture de la configuration des photos."); $config = new Strass_Config_Php('strass'); $config->photos = array('size' => 2048, 'quality' => 85, 'vignette' => 256); $config->write(); error_log('Regénération des vignettes'); $total = $db->query("SELECT count(*) FROM vphotos;")->fetchColumn(); $stmt = $db->query("SELECT id, slug, activite FROM vphotos;"); $top = microtime(true); foreach ($stmt as $i => $row) { $now = microtime(true); if (intval($now - $top) > 3) { $count = $i + 1; error_log("{$count} vignettes sur {$total} regénérées."); $top = microtime(true); } extract($row); $base = 'data/photos/' . $activite . '/' . $slug; $photo = $base . '.jpeg'; $vignette = $base . '-vignette.jpeg'; if (!file_exists($photo)) { error_log("Photo perdue : {$activite}/{$slug}"); $db->exec("DELETE FROM photo WHERE id = " . $id . ";"); continue; } $im = new Imagick($photo); $width = $im->getImageWidth(); $height = $im->getImageHeight(); $im->setImageCompressionQuality(85); $MAX = 256; if (min($width, $height) > $MAX) { $im->cropThumbnailImage($MAX, $MAX); } $im->writeImage($vignette); } $db->exec(<<<'EOS' -- Supprimer les descriptions de photos supprimées DELETE FROM commentaire WHERE commentaire.parent IS NULL AND NOT EXISTS ( SELECT * FROM photo WHERE commentaires = commentaire.id); -- Supprimer les commentaires orphelins DELETE FROM commentaire WHERE commentaire.parent IS NOT NULL AND NOT EXISTS ( SELECT * FROM commentaire AS parent WHERE parent.id = commentaire.id); EOS ); }