function indexAction() { $this->view->unite = $u = $this->_helper->Unite(); $this->metas(array('DC.Title' => $u->getFullname())); $w = $u->getWiki(); $this->view->presentation = $w ? file_get_contents($w) : ''; $this->view->unites = $u->findSousUnites(true, false); $this->view->photos = $u->findPhotosAleatoires(); $this->view->activites = $u->findActivitesMarquantes(null, 6); $this->view->documents = $u->findDocuments(); $this->view->fiches = $this->assert(null, $u, 'fiches'); $config = new Strass_Config_Php($u->slug); $default = $u->isTerminale() ? array('photos') : array('unites'); $this->view->blocs = $config->get('blocs', $default); if ($u->isFermee()) { $this->actions->append("Rouvrir", array('action' => 'inscrire'), array(null, $u)); } $soustypename = $u->getSousTypeName(); if (!$u->isTerminale() && $soustypename) { $this->actions->append("Fonder une " . $soustypename, array('action' => 'fonder'), array(null, $u)); } $journal = $u->findJournaux()->current(); if (!$journal) { $this->actions->append("Fonder le journal", array('controller' => 'journaux', 'action' => 'fonder'), array(null, $u, 'fonder-journal')); } $this->actions->append("Éditer l'unité", array('action' => 'editer'), array(null, $u)); $this->actions->append("Paramétrer la page", array('action' => 'parametres'), array(null, $u)); if (!$u->isFermee()) { $this->actions->append("Fermer l'unité", array('action' => 'fermer'), array(null, $u)); } }
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'); }