diff --git a/.gitignore b/.gitignore index 83405db..1904248 100755 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ +/test.php /.idea /.project /repositories/config.json diff --git a/Docs/BDD.sql b/Docs/BDD.sql index 966eaff..5206c98 100755 --- a/Docs/BDD.sql +++ b/Docs/BDD.sql @@ -1,11 +1,11 @@ -- phpMyAdmin SQL Dump --- version 4.2.12deb2+deb8u1 +-- version 4.5.2 -- http://www.phpmyadmin.net -- -- Client : localhost --- Généré le : Jeu 03 Décembre 2015 à 09:52 --- Version du serveur : 5.5.46-0+deb8u1 --- Version de PHP : 5.6.14-0+deb8u1 +-- Généré le : Mar 08 Décembre 2015 à 08:30 +-- Version du serveur : 10.1.9-MariaDB-log +-- Version de PHP : 7.0.0RC7 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; @@ -14,10 +14,10 @@ SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; +/*!40101 SET NAMES utf8mb4 */; -- --- Base de données : `msl1911a` +-- Base de données : `projetphp` -- -- -------------------------------------------------------- @@ -26,20 +26,126 @@ SET time_zone = "+00:00"; -- Structure de la table `Medecin` -- -CREATE TABLE IF NOT EXISTS `Medecin` ( -`Id` int(11) NOT NULL, +CREATE TABLE `Medecin` ( + `Id` int(11) NOT NULL, `Civilite` char(1) NOT NULL, `Prenom` varchar(45) NOT NULL, `Nom` varchar(45) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; +-- +-- Contenu de la table `Medecin` +-- + +INSERT INTO `Medecin` (`Id`, `Civilite`, `Prenom`, `Nom`) VALUES + (1, 'M', 'Heather', 'HUFF'), + (2, 'F', 'Leann', 'SCOTT'), + (3, 'F', 'Browning', 'DAVENPORT'), + (4, 'M', 'Garner', 'REYNOLDS'), + (5, 'M', 'Juana', 'KOCH'), + (6, 'F', 'Lynn', 'OWENS'), + (7, 'M', 'Jefferson', 'FIGUEROA'), + (8, 'M', 'Jones', 'LOWE'), + (9, 'M', 'Kristi', 'FITZGERALD'), + (10, 'F', 'Sue', 'SHEPHERD'), + (11, 'F', 'Dyer', 'KNOX'), + (12, 'M', 'Joann', 'VALENCIA'), + (13, 'F', 'Catherine', 'BAXTER'), + (14, 'F', 'Dominique', 'MOONEY'), + (15, 'F', 'Baldwin', 'BAUER'), + (16, 'M', 'Turner', 'SANDOVAL'), + (17, 'M', 'Martin', 'KIDD'), + (18, 'M', 'Shannon', 'BALLARD'), + (19, 'F', 'Lillian', 'SOLOMON'), + (20, 'F', 'Cervantes', 'HURLEY'), + (21, 'M', 'Mcgee', 'WIGGINS'), + (22, 'M', 'Bartlett', 'COTE'), + (23, 'M', 'Rosanna', 'WILLIAM'), + (24, 'F', 'Diane', 'HOLMES'), + (25, 'F', 'Mattie', 'AYERS'), + (26, 'F', 'Shepherd', 'MOON'), + (27, 'M', 'Kendra', 'LARSEN'), + (28, 'F', 'Gaines', 'WHITEHEAD'), + (29, 'M', 'Cindy', 'LEVY'), + (30, 'F', 'Meredith', 'MACIAS'), + (31, 'F', 'Christine', 'MEYERS'), + (32, 'F', 'Gabriela', 'INGRAM'), + (33, 'F', 'Fleming', 'MONTGOMERY'), + (34, 'M', 'Cannon', 'GRANT'), + (35, 'M', 'Joyce', 'WHITFIELD'), + (36, 'M', 'Hardin', 'SHIELDS'), + (37, 'M', 'Rowena', 'AVILA'), + (38, 'F', 'Renee', 'RICE'), + (39, 'F', 'Anna', 'RANDOLPH'), + (40, 'F', 'Kathie', 'CONLEY'), + (41, 'F', 'Clemons', 'COLLINS'), + (42, 'M', 'Black', 'HARTMAN'), + (43, 'M', 'Baker', 'BUSH'), + (44, 'M', 'Emerson', 'GUTIERREZ'), + (45, 'M', 'Schmidt', 'HOUSE'), + (46, 'M', 'Frances', 'MORGAN'), + (47, 'F', 'Mcdonald', 'MIDDLETON'), + (48, 'M', 'Taylor', 'NIXON'), + (49, 'F', 'Durham', 'HALEY'), + (50, 'M', 'Craft', 'FORBES'), + (51, 'M', 'Stephanie', 'LANG'), + (52, 'F', 'Chapman', 'PRATT'), + (53, 'M', 'Jody', 'WISE'), + (54, 'F', 'Prince', 'DUDLEY'), + (55, 'M', 'Terry', 'BURNETT'), + (56, 'F', 'Gwen', 'JUSTICE'), + (57, 'F', 'Lancaster', 'DORSEY'), + (58, 'M', 'Eloise', 'MELENDEZ'), + (59, 'F', 'Mercedes', 'GOULD'), + (60, 'F', 'Caitlin', 'WHITE'), + (61, 'F', 'Ashlee', 'DAVIDSON'), + (62, 'F', 'Mccall', 'CARLSON'), + (63, 'M', 'Workman', 'PETTY'), + (64, 'M', 'Sonya', 'DONOVAN'), + (65, 'F', 'Sharon', 'HOPPER'), + (66, 'F', 'Sylvia', 'STARK'), + (67, 'F', 'Sheri', 'ALLISON'), + (68, 'F', 'Fuentes', 'BURGESS'), + (69, 'M', 'Elaine', 'WEEKS'), + (70, 'F', 'Nunez', 'HARMON'), + (71, 'M', 'Darcy', 'FORD'), + (72, 'F', 'Delacruz', 'SANDERS'), + (73, 'M', 'Farrell', 'BOND'), + (74, 'M', 'Jana', 'GORDON'), + (75, 'F', 'Brooke', 'ROSALES'), + (76, 'F', 'Carson', 'WILKERSON'), + (77, 'M', 'Jeanine', 'ONEILL'), + (78, 'F', 'Molly', 'FITZPATRICK'), + (79, 'F', 'Moon', 'WILLIS'), + (80, 'M', 'Rose', 'SOSA'), + (81, 'M', 'Ericka', 'PARSONS'), + (82, 'F', 'Lynch', 'SWANSON'), + (83, 'M', 'Le', 'BRADLEY'), + (84, 'M', 'Lois', 'BENTLEY'), + (85, 'F', 'Vance', 'ORTEGA'), + (86, 'M', 'Alice', 'PARK'), + (87, 'F', 'Dickerson', 'LAMB'), + (88, 'M', 'Jewel', 'SNIDER'), + (89, 'F', 'Hewitt', 'BATTLE'), + (90, 'M', 'Louise', 'PADILLA'), + (91, 'F', 'Eliza', 'FOWLER'), + (92, 'F', 'Catalina', 'PETERSEN'), + (93, 'F', 'Simon', 'NGUYEN'), + (94, 'M', 'Boyd', 'MATHIS'), + (95, 'M', 'Alston', 'CALDERON'), + (96, 'M', 'Bolton', 'ELLISON'), + (97, 'M', 'Stefanie', 'DURHAM'), + (98, 'F', 'Janice', 'FRANCIS'), + (99, 'F', 'Jean', 'BOOTH'), + (100, 'F', 'Ryan', 'SHEPPARD'); + -- -------------------------------------------------------- -- -- Structure de la table `Patient` -- -CREATE TABLE IF NOT EXISTS `Patient` ( +CREATE TABLE `Patient` ( `Civilite` char(1) NOT NULL, `Nom` varchar(45) CHARACTER SET big5 NOT NULL, `Prenom` varchar(45) NOT NULL, @@ -50,38 +156,138 @@ CREATE TABLE IF NOT EXISTS `Patient` ( `DateNaissance` date NOT NULL, `LieuNaissance` varchar(50) NOT NULL, `NumSecuriteSociale` varchar(15) NOT NULL, -`Id` int(11) NOT NULL, + `Id` int(11) NOT NULL, `MedecinTraitant` int(11) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- --- RELATIONS POUR LA TABLE `Patient`: --- `MedecinTraitant` --- `Medecin` -> `id` +-- Contenu de la table `Patient` -- +INSERT INTO `Patient` (`Civilite`, `Nom`, `Prenom`, `Adresse`, `Adresse 2`, `Ville`, `CodePostal`, `DateNaissance`, `LieuNaissance`, `NumSecuriteSociale`, `Id`, `MedecinTraitant`) VALUES + ('M', 'SILVA', 'Lena', '649 Banner Avenue, Tooleville, Iowa', NULL, 'North Dakota', '52882', '1911-09-13', 'Texas', '12698948371', 1, 33), + ('F', 'KEMP', 'Clay', '807 Beayer Place, Linganore, New Hampshire', NULL, 'South Dakota', '61218', '2010-08-20', 'Arkansas', '20628078948', 2, 70), + ('M', 'PAUL', 'Buck', '494 Macdougal Street, Chumuckla, Marshall Islands', NULL, 'Massachusetts', '68865', '1910-12-09', 'Federated States Of Micronesia', '15945373003', 3, 9), + ('M', 'GARNER', 'Martina', '339 Frank Court, Defiance, West Virginia', NULL, 'Puerto Rico', '62671', '2008-10-01', 'Hawaii', '19329610967', 4, 66), + ('F', 'BURCH', 'Chasity', '866 Clarendon Road, Cumminsville, Virginia', NULL, 'Vermont', '38435', '2012-06-25', 'Arizona', '27391164606', 5, 25), + ('F', 'JEFFERSON', 'Shana', '175 Wyckoff Street, Trucksville, South Carolina', NULL, 'New Mexico', '85431', '2006-10-15', 'Mississippi', '26819094421', 6, 30), + ('F', 'BLAKE', 'Arlene', '859 Debevoise Street, Russellville, Virgin Islands', NULL, 'Wyoming', '61926', '1966-06-18', 'Pennsylvania', '23960497083', 7, 93), + ('F', 'DIAZ', 'Dawn', '273 Madison Street, Boonville, Idaho', NULL, 'North Carolina', '02209', '2006-10-04', 'Rhode Island', '27215823739', 8, 40), + ('F', 'WHITLEY', 'Franco', '693 Horace Court, Rockbridge, Florida', NULL, 'California', '97479', '1927-06-07', 'Indiana', '29328474141', 9, 46), + ('M', 'BUCK', 'Beck', '919 Cleveland Street, Barronett, Montana', NULL, 'Palau', '48585', '2012-12-09', 'American Samoa', '19699641707', 10, 67), + ('M', 'COLE', 'Solomon', '412 Elizabeth Place, Bannock, Wisconsin', NULL, 'Michigan', '12693', '1935-04-15', 'Tennessee', '10678642104', 11, 89), + ('M', 'VASQUEZ', 'Best', '335 Krier Place, Tedrow, Delaware', NULL, 'Connecticut', '32627', '2007-08-28', 'Guam', '19009855991', 12, 32), + ('M', 'ROSS', 'Clark', '979 Celeste Court, Hessville, Louisiana', NULL, 'Northern Mariana Islands', '87310', '2007-06-27', 'Illinois', '11086416557', 13, 72), + ('M', 'CHEN', 'Ida', '205 Malta Street, Camas, Oklahoma', NULL, 'Alaska', '14500', '1927-06-02', 'New York', '17998195070', 14, 35), + ('F', 'BUCKLEY', 'Kathie', '415 Varick Street, Watchtower, Nevada', NULL, 'Minnesota', '87418', '2010-11-20', 'Colorado', '28577369272', 15, 29), + ('F', 'FOX', 'Mitchell', '474 Navy Walk, Waterford, Alabama', NULL, 'Kentucky', '20730', '2008-12-13', 'Missouri', '23197712678', 16, 94), + ('M', 'GOODMAN', 'Anthony', '526 Dodworth Street, Shawmut, Kansas', NULL, 'Ohio', '73624', '2000-11-21', 'Nebraska', '14355429029', 17, 87), + ('M', 'SAWYER', 'Brigitte', '490 Ebony Court, Steinhatchee, Maryland', NULL, 'Maine', '90009', '1993-09-30', 'Georgia', '19496691291', 18, 12), + ('F', 'CHRISTENSEN', 'Bates', '743 Middleton Street, Lowell, District Of Columbia', NULL, 'Washington', '43676', '2015-09-05', 'Oregon', '29308759372', 19, 84), + ('M', 'TALLEY', 'Angela', '524 Wythe Avenue, Bawcomville, New Jersey', NULL, 'Iowa', '50898', '2003-10-30', 'North Dakota', '11465049462', 20, 43), + ('F', 'COLEMAN', 'Logan', '238 Kent Street, Celeryville, Texas', NULL, 'New Hampshire', '06311', '2008-03-17', 'South Dakota', '28533965670', 21, 21), + ('M', 'MCCULLOUGH', 'Newman', '199 Kane Place, Yogaville, Arkansas', NULL, 'Marshall Islands', '80883', '2002-07-04', 'Massachusetts', '13498991796', 22, 48), + ('M', 'ROWLAND', 'Koch', '676 Oliver Street, Kraemer, Federated States Of Micronesia', NULL, 'West Virginia', '52228', '1998-05-18', 'Puerto Rico', '15879675253', 23, 63), + ('M', 'COOLEY', 'Matthews', '610 Arlington Avenue, Kennedyville, Hawaii', NULL, 'Virginia', '57187', '2003-05-13', 'Vermont', '12165901177', 24, 35), + ('M', 'PENNINGTON', 'Robbins', '101 Falmouth Street, Unionville, Arizona', NULL, 'South Carolina', '16649', '2012-09-12', 'New Mexico', '13627814148', 25, 50), + ('M', 'FARLEY', 'Austin', '869 Duffield Street, Rivers, Mississippi', NULL, 'Virgin Islands', '41659', '2002-08-03', 'Wyoming', '19094300308', 26, 8), + ('M', 'VELAZQUEZ', 'Winifred', '594 Rock Street, Fairacres, Pennsylvania', NULL, 'Idaho', '99838', '1981-06-30', 'North Carolina', '15647563918', 27, 24), + ('F', 'WALLACE', 'Frost', '135 Sapphire Street, Tolu, Rhode Island', NULL, 'Florida', '85278', '2007-11-12', 'California', '25913410982', 28, 39), + ('M', 'STANLEY', 'Hood', '833 Fountain Avenue, Moraida, Indiana', NULL, 'Montana', '96419', '2006-08-16', 'Palau', '17946621124', 29, 26), + ('M', 'GILES', 'Maggie', '643 Joval Court, Trail, American Samoa', NULL, 'Wisconsin', '48204', '2012-03-04', 'Michigan', '10662686180', 30, 26), + ('F', 'ESPINOZA', 'Tamara', '371 Ralph Avenue, Cuylerville, Tennessee', NULL, 'Delaware', '07341', '2008-08-10', 'Connecticut', '20083172261', 31, 26), + ('F', 'HOLDER', 'Pena', '712 Channel Avenue, Richmond, Guam', NULL, 'Louisiana', '72630', '2013-06-17', 'Northern Mariana Islands', '29005097826', 32, 65), + ('M', 'STOKES', 'Strong', '389 Dank Court, Temperanceville, Illinois', NULL, 'Oklahoma', '19213', '1924-04-09', 'Alaska', '14386411303', 33, 82), + ('M', 'PENA', 'Pamela', '979 Dumont Avenue, Stollings, New York', NULL, 'Nevada', '01244', '2008-09-06', 'Minnesota', '19329398624', 34, 50), + ('F', 'LEON', 'Allen', '899 Nevins Street, Fedora, Colorado', NULL, 'Alabama', '14863', '2015-05-10', 'Kentucky', '20535405226', 35, 52), + ('M', 'STOUT', 'Gamble', '238 Oceanview Avenue, Graball, Missouri', NULL, 'Kansas', '35626', '2011-12-13', 'Ohio', '16717569080', 36, 67), + ('M', 'BUTLER', 'Shawn', '563 Interborough Parkway, Lupton, Nebraska', NULL, 'Maryland', '82759', '1953-09-09', 'Maine', '18681124800', 37, 45), + ('F', 'HENDRICKS', 'Ayala', '839 Navy Street, Grahamtown, Georgia', NULL, 'District Of Columbia', '60566', '2004-07-12', 'Washington', '29995060639', 38, 48), + ('M', 'MAYO', 'Hicks', '626 Wilson Street, Noxen, Oregon', NULL, 'New Jersey', '87938', '2002-10-26', 'Iowa', '11993094532', 39, 45), + ('M', 'ATKINS', 'Cecelia', '210 Humboldt Street, Elbert, North Dakota', NULL, 'Texas', '17198', '2002-08-06', 'New Hampshire', '15111976539', 40, 49), + ('F', 'SUMMERS', 'Pauline', '550 Lorimer Street, Hailesboro, South Dakota', NULL, 'Arkansas', '95004', '1958-10-05', 'Marshall Islands', '28350963212', 41, 47), + ('F', 'GREER', 'Shelly', '469 Livonia Avenue, Lodoga, Massachusetts', NULL, 'Federated States Of Micronesia', '30292', '2001-01-30', 'West Virginia', '21326809626', 42, 67), + ('F', 'NIEVES', 'Wilma', '450 Guider Avenue, Selma, Puerto Rico', NULL, 'Hawaii', '39647', '1917-02-04', 'Virginia', '27216034661', 43, 5), + ('F', 'WALLER', 'Duncan', '255 Blake Court, Freetown, Vermont', NULL, 'Arizona', '48683', '2008-03-07', 'South Carolina', '25345198647', 44, 36), + ('M', 'VINCENT', 'Glenna', '727 Leonora Court, Tryon, New Mexico', NULL, 'Mississippi', '55687', '2009-10-09', 'Virgin Islands', '10271387742', 45, 16), + ('F', 'WILKERSON', 'Kelley', '304 Bleecker Street, Concho, Wyoming', NULL, 'Pennsylvania', '30593', '2004-10-12', 'Idaho', '20837368947', 46, 76), + ('M', 'CHAVEZ', 'Carolina', '620 Cumberland Street, Greer, North Carolina', NULL, 'Rhode Island', '72334', '1996-06-02', 'Florida', '13128264581', 47, 39), + ('F', 'CORTEZ', 'Donaldson', '654 Diamond Street, Bonanza, California', NULL, 'Indiana', '67633', '1936-05-13', 'Montana', '20450513660', 48, 5), + ('M', 'WHITAKER', 'Geraldine', '248 Louisiana Avenue, Hobucken, Palau', NULL, 'American Samoa', '19680', '1912-01-11', 'Wisconsin', '14501409312', 49, 71), + ('F', 'WILSON', 'Isabelle', '319 Stryker Street, Henrietta, Michigan', NULL, 'Tennessee', '75542', '2013-09-30', 'Delaware', '21523135649', 50, 93), + ('F', 'KLINE', 'Shirley', '325 Newel Street, Retsof, Connecticut', NULL, 'Guam', '67214', '2006-04-28', 'Louisiana', '29829440387', 51, 97), + ('F', 'CROSBY', 'Sweet', '406 Dekalb Avenue, Nadine, Northern Mariana Islands', NULL, 'Illinois', '18491', '2002-10-02', 'Oklahoma', '22799689361', 52, 15), + ('M', 'PRUITT', 'Bette', '140 Voorhies Avenue, Weedville, Alaska', NULL, 'New York', '73961', '1961-11-01', 'Nevada', '11917517213', 53, 59), + ('F', 'LARSEN', 'Julianne', '706 Tiffany Place, Eagleville, Minnesota', NULL, 'Colorado', '39520', '1984-01-12', 'Alabama', '29343266278', 54, 29), + ('F', 'NICHOLS', 'Mckay', '383 Dewey Place, Lithium, Kentucky', NULL, 'Missouri', '20493', '1929-07-17', 'Kansas', '21719339678', 55, 47), + ('M', 'REEVES', 'Vasquez', '164 Cozine Avenue, Tecolotito, Ohio', NULL, 'Nebraska', '64893', '2009-06-25', 'Maryland', '16427456557', 56, 40), + ('M', 'HERRING', 'Finch', '798 Albemarle Road, Gouglersville, Maine', NULL, 'Georgia', '58812', '1957-06-18', 'District Of Columbia', '13122477225', 57, 24), + ('M', 'HOLLOWAY', 'Cummings', '522 Howard Alley, Escondida, Washington', NULL, 'Oregon', '62194', '1960-09-09', 'New Jersey', '19596957459', 58, 89), + ('M', 'MILLER', 'Oliver', '273 Lenox Road, Norwood, Iowa', NULL, 'North Dakota', '62699', '1932-03-25', 'Texas', '19968426193', 59, 57), + ('M', 'CAMPOS', 'Hart', '787 Polhemus Place, Motley, New Hampshire', NULL, 'South Dakota', '77516', '2007-12-21', 'Arkansas', '17253462074', 60, 31), + ('M', 'CASE', 'Henson', '174 Stillwell Place, Mulino, Marshall Islands', NULL, 'Massachusetts', '85870', '2001-09-11', 'Federated States Of Micronesia', '12489367510', 61, 96), + ('M', 'HANSEN', 'Melisa', '349 Berriman Street, Shasta, West Virginia', NULL, 'Puerto Rico', '48480', '2000-12-22', 'Hawaii', '12589313144', 62, 6), + ('F', 'DALE', 'Jean', '169 Bay Parkway, Mayfair, Virginia', NULL, 'Vermont', '98518', '2009-06-09', 'Arizona', '22810920517', 63, 86), + ('F', 'GONZALEZ', 'Combs', '374 Merit Court, Sperryville, South Carolina', NULL, 'New Mexico', '59695', '2013-05-27', 'Mississippi', '20990109001', 64, 61), + ('M', 'SWEENEY', 'Edith', '995 Maple Avenue, Ilchester, Virgin Islands', NULL, 'Wyoming', '67276', '2007-02-02', 'Pennsylvania', '16022894937', 65, 70), + ('F', 'STRONG', 'Jacquelyn', '626 Hazel Court, Allensworth, Idaho', NULL, 'North Carolina', '67826', '2005-07-12', 'Rhode Island', '20684605971', 66, 56), + ('F', 'RIVERA', 'Leigh', '708 Quay Street, Hachita, Florida', NULL, 'California', '91928', '2005-12-05', 'Indiana', '29628059742', 67, 33), + ('F', 'MYERS', 'Gladys', '141 Heyward Street, Darbydale, Montana', NULL, 'Palau', '84636', '1969-09-14', 'American Samoa', '28694761131', 68, 40), + ('F', 'KELLER', 'Terry', '170 Hanover Place, Boykin, Wisconsin', NULL, 'Michigan', '78173', '2014-01-01', 'Tennessee', '26102225068', 69, 22), + ('M', 'MAY', 'Snyder', '854 Orange Street, Stouchsburg, Delaware', NULL, 'Connecticut', '55484', '1936-10-14', 'Guam', '16217199153', 70, 75), + ('M', 'DOTSON', 'Joanna', '976 Albany Avenue, Saranap, Louisiana', NULL, 'Northern Mariana Islands', '88021', '2003-04-25', 'Illinois', '18490418466', 71, 58), + ('F', 'CRANE', 'Sampson', '574 Summit Street, Johnsonburg, Oklahoma', NULL, 'Alaska', '09843', '2013-01-22', 'New York', '27655744344', 72, 58), + ('M', 'ROBERTS', 'Elizabeth', '679 Highland Place, Riviera, Nevada', NULL, 'Minnesota', '28575', '1934-06-02', 'Colorado', '19433331796', 73, 8), + ('F', 'DELANEY', 'Gross', '467 Butler Place, Aurora, Alabama', NULL, 'Kentucky', '69364', '2005-01-08', 'Missouri', '22011388800', 74, 46), + ('M', 'ROBERSON', 'Claire', '792 Nichols Avenue, Roulette, Kansas', NULL, 'Ohio', '01221', '1919-11-19', 'Nebraska', '16305786338', 75, 80), + ('F', 'CONRAD', 'Tammi', '621 Crystal Street, Newkirk, Maryland', NULL, 'Maine', '03729', '2010-05-19', 'Georgia', '25770649159', 76, 23), + ('F', 'ERICKSON', 'Grace', '736 Commerce Street, Beechmont, District Of Columbia', NULL, 'Washington', '32188', '2002-08-09', 'Oregon', '23105547041', 77, 99), + ('F', 'STEWART', 'Alston', '807 Empire Boulevard, Keyport, New Jersey', NULL, 'Iowa', '73784', '1923-04-03', 'North Dakota', '27009664661', 78, 17), + ('M', 'RIOS', 'Terri', '462 Fanchon Place, Zeba, Texas', NULL, 'New Hampshire', '50920', '2012-12-10', 'South Dakota', '13800615485', 79, 3), + ('F', 'BOND', 'Spence', '803 Amherst Street, Rosine, Arkansas', NULL, 'Marshall Islands', '11222', '1975-07-18', 'Massachusetts', '23767781414', 80, 77), + ('M', 'BARTON', 'Blake', '636 Prince Street, Mammoth, Federated States Of Micronesia', NULL, 'West Virginia', '17295', '2014-09-29', 'Puerto Rico', '10219535739', 81, 22), + ('M', 'VANG', 'Monica', '691 Gerry Street, Toftrees, Hawaii', NULL, 'Virginia', '17720', '2006-07-08', 'Vermont', '19231014062', 82, 41), + ('F', 'FIELDS', 'Giles', '189 Sullivan Place, Hilltop, Arizona', NULL, 'South Carolina', '93234', '1945-10-11', 'New Mexico', '24846926528', 83, 75), + ('M', 'CLAY', 'Dalton', '375 Fay Court, Greensburg, Mississippi', NULL, 'Virgin Islands', '15908', '1939-12-22', 'Wyoming', '19933111163', 84, 24), + ('M', 'WEEKS', 'Tonya', '411 Milton Street, Valmy, Pennsylvania', NULL, 'Idaho', '64798', '2004-02-08', 'North Carolina', '17176317887', 85, 24), + ('F', 'WALTER', 'Sanford', '984 Rapelye Street, Oasis, Rhode Island', NULL, 'Florida', '19871', '2007-02-03', 'California', '22983447225', 86, 85), + ('M', 'SCHWARTZ', 'Mae', '740 Kossuth Place, Tyro, Indiana', NULL, 'Montana', '56876', '2010-11-17', 'Palau', '18050339720', 87, 8), + ('F', 'HILL', 'Alyson', '935 Bay Avenue, Neibert, American Samoa', NULL, 'Wisconsin', '81361', '2006-11-22', 'Michigan', '24102999369', 88, 37), + ('F', 'BAKER', 'Judy', '159 Kenilworth Place, Washington, Tennessee', NULL, 'Delaware', '23849', '2012-11-08', 'Connecticut', '28124601703', 89, 92), + ('F', 'VALDEZ', 'Phelps', '207 Grant Avenue, Buxton, Guam', NULL, 'Louisiana', '39088', '1948-10-28', 'Northern Mariana Islands', '23363949354', 90, 18), + ('M', 'TERRY', 'Bernadine', '126 Cook Street, Drummond, Illinois', NULL, 'Oklahoma', '82875', '1902-12-13', 'Alaska', '10607274186', 91, 54), + ('F', 'COFFEY', 'Mabel', '242 Dupont Street, Wiscon, New York', NULL, 'Nevada', '34688', '2015-10-18', 'Minnesota', '20291563081', 92, 95), + ('F', 'TODD', 'Lucy', '158 Jardine Place, Bowie, Colorado', NULL, 'Alabama', '84196', '2011-01-08', 'Kentucky', '29773564480', 93, 24), + ('F', 'MENDEZ', 'Joann', '584 Kiely Place, Frizzleburg, Missouri', NULL, 'Kansas', '80528', '2007-04-19', 'Ohio', '22504705446', 94, 47), + ('F', 'KIRKLAND', 'Patrice', '924 Bond Street, Katonah, Nebraska', NULL, 'Maryland', '56940', '1972-03-21', 'Maine', '25277175911', 95, 34), + ('F', 'NASH', 'Sexton', '323 Coventry Road, Spelter, Georgia', NULL, 'District Of Columbia', '74403', '1994-03-26', 'Washington', '20857808066', 96, 100), + ('M', 'FLORES', 'Yvonne', '606 Beacon Court, Westwood, Oregon', NULL, 'New Jersey', '17963', '1977-08-10', 'Iowa', '10912788354', 97, 81), + ('F', 'IRWIN', 'Helene', '747 Martense Street, Lafferty, North Dakota', NULL, 'Texas', '00597', '1953-06-21', 'New Hampshire', '21111493296', 98, 96), + ('F', 'JACOBSON', 'Wendi', '482 Poly Place, Veyo, South Dakota', NULL, 'Arkansas', '54428', '1980-12-11', 'Marshall Islands', '20915062532', 99, 69), + ('F', 'RICH', 'Guerra', '191 Hart Street, Teasdale, Massachusetts', NULL, 'Federated States Of Micronesia', '67771', '2001-05-16', 'West Virginia', '24748914281', 100, 71); + -- -------------------------------------------------------- -- -- Structure de la table `RDV` -- -CREATE TABLE IF NOT EXISTS `RDV` ( +CREATE TABLE `RDV` ( `Id` int(11) NOT NULL, - `DateRDV` timestamp NULL DEFAULT NULL, + `DateRDV` datetime DEFAULT NULL, `Duree` time DEFAULT NULL, `Patient_Id` int(11) NOT NULL, `Medecin_id` int(11) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- --- RELATIONS POUR LA TABLE `RDV`: --- `Patient_Id` --- `Patient` -> `Id` --- `Medecin_id` --- `Medecin` -> `id` +-- Contenu de la table `RDV` -- +INSERT INTO `RDV` (`Id`, `DateRDV`, `Duree`, `Patient_Id`, `Medecin_id`) VALUES + (1, '2015-12-08 08:28:12', '08:58:12', 2, 1), + (2, '2015-12-08 08:28:47', '00:30:00', 2, 1); + -- -- Index pour les tables exportées -- @@ -90,19 +296,25 @@ CREATE TABLE IF NOT EXISTS `RDV` ( -- Index pour la table `Medecin` -- ALTER TABLE `Medecin` - ADD PRIMARY KEY (`Id`), ADD UNIQUE KEY `id_UNIQUE` (`Id`); +ADD PRIMARY KEY (`Id`), +ADD UNIQUE KEY `id_UNIQUE` (`Id`); -- -- Index pour la table `Patient` -- ALTER TABLE `Patient` - ADD PRIMARY KEY (`Id`), ADD UNIQUE KEY `NumSecuriteSociale_UNIQUE` (`NumSecuriteSociale`), ADD UNIQUE KEY `Id_UNIQUE` (`Id`), ADD KEY `fk_Patient_Medecin_idx` (`MedecinTraitant`); +ADD PRIMARY KEY (`Id`), +ADD UNIQUE KEY `NumSecuriteSociale_UNIQUE` (`NumSecuriteSociale`), +ADD UNIQUE KEY `Id_UNIQUE` (`Id`), +ADD KEY `fk_Patient_Medecin_idx` (`MedecinTraitant`); -- -- Index pour la table `RDV` -- ALTER TABLE `RDV` - ADD PRIMARY KEY (`Id`), ADD KEY `fk_RDV_Patient1_idx` (`Patient_Id`), ADD KEY `fk_RDV_Medecin1_idx` (`Medecin_id`); +ADD PRIMARY KEY (`Id`), +ADD KEY `fk_RDV_Patient1_idx` (`Patient_Id`), +ADD KEY `fk_RDV_Medecin1_idx` (`Medecin_id`); -- -- AUTO_INCREMENT pour les tables exportées @@ -112,12 +324,17 @@ ALTER TABLE `RDV` -- AUTO_INCREMENT pour la table `Medecin` -- ALTER TABLE `Medecin` -MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT; +MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=105; -- -- AUTO_INCREMENT pour la table `Patient` -- ALTER TABLE `Patient` -MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT; +MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=105; +-- +-- AUTO_INCREMENT pour la table `RDV` +-- +ALTER TABLE `RDV` +MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3; -- -- Contraintes pour les tables exportées -- @@ -126,14 +343,14 @@ MODIFY `Id` int(11) NOT NULL AUTO_INCREMENT; -- Contraintes pour la table `Patient` -- ALTER TABLE `Patient` -ADD CONSTRAINT `fk_Patient_Medecin` FOREIGN KEY (`MedecinTraitant`) REFERENCES `Medecin` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; +ADD CONSTRAINT `fk_Patient_Medecin` FOREIGN KEY (`MedecinTraitant`) REFERENCES `Medecin` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION; -- -- Contraintes pour la table `RDV` -- ALTER TABLE `RDV` -ADD CONSTRAINT `fk_RDV_Patient1` FOREIGN KEY (`Patient_Id`) REFERENCES `Patient` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION, -ADD CONSTRAINT `fk_RDV_Medecin1` FOREIGN KEY (`Medecin_id`) REFERENCES `Medecin` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION; +ADD CONSTRAINT `fk_RDV_Medecin1` FOREIGN KEY (`Medecin_id`) REFERENCES `Medecin` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION, +ADD CONSTRAINT `fk_RDV_Patient1` FOREIGN KEY (`Patient_Id`) REFERENCES `Patient` (`Id`) ON DELETE NO ACTION ON UPDATE NO ACTION; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; diff --git a/Docs/Model.mwb b/Docs/Model.mwb old mode 100755 new mode 100644 index d746949..71a3690 Binary files a/Docs/Model.mwb and b/Docs/Model.mwb differ diff --git a/Docs/Model.mwb.bak b/Docs/Model.mwb.bak new file mode 100644 index 0000000..a4c09f5 Binary files /dev/null and b/Docs/Model.mwb.bak differ diff --git a/Docs/RDVExemple.json b/Docs/RDVExemple.json new file mode 100644 index 0000000..a9f083e --- /dev/null +++ b/Docs/RDVExemple.json @@ -0,0 +1,602 @@ +[ + { + "DateRDV": "2015-06-08 11:33:43", + "Duree": 60, + "Patient_Id": 14, + "Medecin_Id": 60 + }, + { + "DateRDV": "2015-04-04 04:22:43", + "Duree": 60, + "Patient_Id": 9, + "Medecin_Id": 15 + }, + { + "DateRDV": "2015-02-08 06:05:29", + "Duree": 60, + "Patient_Id": 63, + "Medecin_Id": 2 + }, + { + "DateRDV": "2015-04-13 08:48:17", + "Duree": 30, + "Patient_Id": 3, + "Medecin_Id": 40 + }, + { + "DateRDV": "2015-10-23 08:01:11", + "Duree": 60, + "Patient_Id": 58, + "Medecin_Id": 74 + }, + { + "DateRDV": "2015-01-02 09:51:57", + "Duree": 30, + "Patient_Id": 33, + "Medecin_Id": 71 + }, + { + "DateRDV": "2015-09-17 11:06:44", + "Duree": 60, + "Patient_Id": 21, + "Medecin_Id": 69 + }, + { + "DateRDV": "2015-07-08 03:55:22", + "Duree": 30, + "Patient_Id": 18, + "Medecin_Id": 41 + }, + { + "DateRDV": "2015-10-18 03:25:50", + "Duree": 60, + "Patient_Id": 23, + "Medecin_Id": 70 + }, + { + "DateRDV": "2015-01-29 09:21:39", + "Duree": 30, + "Patient_Id": 82, + "Medecin_Id": 8 + }, + { + "DateRDV": "2015-08-23 02:57:06", + "Duree": 30, + "Patient_Id": 13, + "Medecin_Id": 25 + }, + { + "DateRDV": "2015-11-30 05:11:44", + "Duree": 60, + "Patient_Id": 20, + "Medecin_Id": 77 + }, + { + "DateRDV": "2015-06-28 09:08:39", + "Duree": 30, + "Patient_Id": 49, + "Medecin_Id": 82 + }, + { + "DateRDV": "2015-06-08 02:00:35", + "Duree": 30, + "Patient_Id": 93, + "Medecin_Id": 13 + }, + { + "DateRDV": "2015-03-01 02:39:30", + "Duree": 60, + "Patient_Id": 28, + "Medecin_Id": 26 + }, + { + "DateRDV": "2015-09-24 01:02:24", + "Duree": 30, + "Patient_Id": 56, + "Medecin_Id": 76 + }, + { + "DateRDV": "2015-09-06 11:13:48", + "Duree": 60, + "Patient_Id": 39, + "Medecin_Id": 97 + }, + { + "DateRDV": "2015-01-15 03:36:46", + "Duree": 30, + "Patient_Id": 46, + "Medecin_Id": 78 + }, + { + "DateRDV": "2015-06-26 09:04:07", + "Duree": 60, + "Patient_Id": 97, + "Medecin_Id": 55 + }, + { + "DateRDV": "2015-07-01 08:27:26", + "Duree": 60, + "Patient_Id": 22, + "Medecin_Id": 50 + }, + { + "DateRDV": "2015-02-08 11:50:46", + "Duree": 30, + "Patient_Id": 18, + "Medecin_Id": 34 + }, + { + "DateRDV": "2015-01-29 03:27:30", + "Duree": 60, + "Patient_Id": 14, + "Medecin_Id": 58 + }, + { + "DateRDV": "2015-03-16 01:57:19", + "Duree": 30, + "Patient_Id": 52, + "Medecin_Id": 4 + }, + { + "DateRDV": "2015-09-21 05:49:59", + "Duree": 30, + "Patient_Id": 11, + "Medecin_Id": 14 + }, + { + "DateRDV": "2015-08-09 03:58:24", + "Duree": 30, + "Patient_Id": 91, + "Medecin_Id": 29 + }, + { + "DateRDV": "2015-02-04 06:35:51", + "Duree": 30, + "Patient_Id": 29, + "Medecin_Id": 62 + }, + { + "DateRDV": "2015-11-04 09:18:35", + "Duree": 30, + "Patient_Id": 99, + "Medecin_Id": 87 + }, + { + "DateRDV": "2015-05-02 04:25:22", + "Duree": 30, + "Patient_Id": 2, + "Medecin_Id": 50 + }, + { + "DateRDV": "2015-11-29 02:33:10", + "Duree": 60, + "Patient_Id": 51, + "Medecin_Id": 89 + }, + { + "DateRDV": "2015-10-15 07:02:24", + "Duree": 60, + "Patient_Id": 10, + "Medecin_Id": 8 + }, + { + "DateRDV": "2015-04-23 08:57:53", + "Duree": 30, + "Patient_Id": 65, + "Medecin_Id": 35 + }, + { + "DateRDV": "2015-02-22 04:17:11", + "Duree": 60, + "Patient_Id": 35, + "Medecin_Id": 82 + }, + { + "DateRDV": "2015-04-04 07:48:57", + "Duree": 30, + "Patient_Id": 76, + "Medecin_Id": 53 + }, + { + "DateRDV": "2015-09-18 07:48:07", + "Duree": 30, + "Patient_Id": 94, + "Medecin_Id": 19 + }, + { + "DateRDV": "2015-02-15 07:25:06", + "Duree": 60, + "Patient_Id": 69, + "Medecin_Id": 44 + }, + { + "DateRDV": "2015-06-08 04:25:39", + "Duree": 60, + "Patient_Id": 15, + "Medecin_Id": 88 + }, + { + "DateRDV": "2015-11-24 01:33:30", + "Duree": 60, + "Patient_Id": 84, + "Medecin_Id": 20 + }, + { + "DateRDV": "2015-07-11 04:17:24", + "Duree": 60, + "Patient_Id": 30, + "Medecin_Id": 78 + }, + { + "DateRDV": "2015-08-12 10:59:53", + "Duree": 30, + "Patient_Id": 61, + "Medecin_Id": 95 + }, + { + "DateRDV": "2015-09-19 05:08:41", + "Duree": 30, + "Patient_Id": 11, + "Medecin_Id": 23 + }, + { + "DateRDV": "2015-09-29 07:56:16", + "Duree": 30, + "Patient_Id": 75, + "Medecin_Id": 86 + }, + { + "DateRDV": "2015-03-22 01:07:22", + "Duree": 30, + "Patient_Id": 83, + "Medecin_Id": 23 + }, + { + "DateRDV": "2015-06-11 06:05:41", + "Duree": 60, + "Patient_Id": 89, + "Medecin_Id": 20 + }, + { + "DateRDV": "2015-03-17 04:28:43", + "Duree": 60, + "Patient_Id": 77, + "Medecin_Id": 88 + }, + { + "DateRDV": "2015-11-27 06:14:03", + "Duree": 60, + "Patient_Id": 27, + "Medecin_Id": 54 + }, + { + "DateRDV": "2015-03-07 09:38:22", + "Duree": 60, + "Patient_Id": 2, + "Medecin_Id": 4 + }, + { + "DateRDV": "2015-02-02 01:45:32", + "Duree": 30, + "Patient_Id": 36, + "Medecin_Id": 60 + }, + { + "DateRDV": "2015-06-18 04:52:09", + "Duree": 60, + "Patient_Id": 69, + "Medecin_Id": 99 + }, + { + "DateRDV": "2015-06-24 11:53:34", + "Duree": 60, + "Patient_Id": 89, + "Medecin_Id": 40 + }, + { + "DateRDV": "2015-10-21 04:19:14", + "Duree": 60, + "Patient_Id": 85, + "Medecin_Id": 76 + }, + { + "DateRDV": "2015-04-14 09:14:08", + "Duree": 30, + "Patient_Id": 73, + "Medecin_Id": 48 + }, + { + "DateRDV": "2015-04-18 09:11:32", + "Duree": 30, + "Patient_Id": 90, + "Medecin_Id": 11 + }, + { + "DateRDV": "2015-08-23 02:03:16", + "Duree": 30, + "Patient_Id": 17, + "Medecin_Id": 57 + }, + { + "DateRDV": "2015-05-03 02:25:11", + "Duree": 30, + "Patient_Id": 21, + "Medecin_Id": 63 + }, + { + "DateRDV": "2015-08-07 09:12:44", + "Duree": 30, + "Patient_Id": 97, + "Medecin_Id": 92 + }, + { + "DateRDV": "2015-05-09 06:18:46", + "Duree": 30, + "Patient_Id": 21, + "Medecin_Id": 32 + }, + { + "DateRDV": "2015-09-10 10:26:08", + "Duree": 30, + "Patient_Id": 9, + "Medecin_Id": 6 + }, + { + "DateRDV": "2015-09-06 11:38:09", + "Duree": 30, + "Patient_Id": 26, + "Medecin_Id": 48 + }, + { + "DateRDV": "2015-07-22 04:18:29", + "Duree": 60, + "Patient_Id": 81, + "Medecin_Id": 90 + }, + { + "DateRDV": "2015-11-29 12:25:38", + "Duree": 60, + "Patient_Id": 91, + "Medecin_Id": 2 + }, + { + "DateRDV": "2015-07-22 05:27:02", + "Duree": 60, + "Patient_Id": 92, + "Medecin_Id": 27 + }, + { + "DateRDV": "2015-02-12 09:02:35", + "Duree": 30, + "Patient_Id": 50, + "Medecin_Id": 35 + }, + { + "DateRDV": "2015-11-07 04:16:19", + "Duree": 60, + "Patient_Id": 98, + "Medecin_Id": 35 + }, + { + "DateRDV": "2015-11-20 09:12:30", + "Duree": 60, + "Patient_Id": 22, + "Medecin_Id": 57 + }, + { + "DateRDV": "2015-11-13 09:09:55", + "Duree": 30, + "Patient_Id": 98, + "Medecin_Id": 69 + }, + { + "DateRDV": "2015-08-04 07:56:59", + "Duree": 30, + "Patient_Id": 88, + "Medecin_Id": 44 + }, + { + "DateRDV": "2015-07-15 07:32:15", + "Duree": 60, + "Patient_Id": 72, + "Medecin_Id": 59 + }, + { + "DateRDV": "2015-05-26 07:16:43", + "Duree": 60, + "Patient_Id": 22, + "Medecin_Id": 57 + }, + { + "DateRDV": "2015-03-08 05:21:56", + "Duree": 60, + "Patient_Id": 95, + "Medecin_Id": 19 + }, + { + "DateRDV": "2015-01-12 02:11:24", + "Duree": 30, + "Patient_Id": 51, + "Medecin_Id": 72 + }, + { + "DateRDV": "2015-11-29 08:22:29", + "Duree": 60, + "Patient_Id": 95, + "Medecin_Id": 56 + }, + { + "DateRDV": "2015-10-09 06:50:11", + "Duree": 60, + "Patient_Id": 53, + "Medecin_Id": 5 + }, + { + "DateRDV": "2015-01-09 04:59:41", + "Duree": 60, + "Patient_Id": 9, + "Medecin_Id": 44 + }, + { + "DateRDV": "2015-03-06 01:45:26", + "Duree": 30, + "Patient_Id": 50, + "Medecin_Id": 90 + }, + { + "DateRDV": "2015-08-20 07:20:01", + "Duree": 30, + "Patient_Id": 70, + "Medecin_Id": 60 + }, + { + "DateRDV": "2015-08-08 03:18:32", + "Duree": 60, + "Patient_Id": 34, + "Medecin_Id": 23 + }, + { + "DateRDV": "2015-07-07 05:49:03", + "Duree": 30, + "Patient_Id": 100, + "Medecin_Id": 97 + }, + { + "DateRDV": "2015-05-14 12:17:01", + "Duree": 60, + "Patient_Id": 37, + "Medecin_Id": 4 + }, + { + "DateRDV": "2015-05-26 02:31:26", + "Duree": 30, + "Patient_Id": 26, + "Medecin_Id": 92 + }, + { + "DateRDV": "2015-07-10 01:06:31", + "Duree": 30, + "Patient_Id": 37, + "Medecin_Id": 19 + }, + { + "DateRDV": "2015-02-12 06:48:08", + "Duree": 60, + "Patient_Id": 26, + "Medecin_Id": 36 + }, + { + "DateRDV": "2015-04-04 09:58:14", + "Duree": 60, + "Patient_Id": 56, + "Medecin_Id": 51 + }, + { + "DateRDV": "2015-09-09 11:00:38", + "Duree": 30, + "Patient_Id": 58, + "Medecin_Id": 60 + }, + { + "DateRDV": "2015-04-07 06:46:08", + "Duree": 60, + "Patient_Id": 6, + "Medecin_Id": 18 + }, + { + "DateRDV": "2015-12-07 04:20:04", + "Duree": 60, + "Patient_Id": 64, + "Medecin_Id": 6 + }, + { + "DateRDV": "2015-09-28 02:43:55", + "Duree": 60, + "Patient_Id": 57, + "Medecin_Id": 66 + }, + { + "DateRDV": "2015-08-26 12:20:03", + "Duree": 60, + "Patient_Id": 27, + "Medecin_Id": 36 + }, + { + "DateRDV": "2015-09-06 08:31:43", + "Duree": 30, + "Patient_Id": 71, + "Medecin_Id": 80 + }, + { + "DateRDV": "2015-04-21 08:18:20", + "Duree": 30, + "Patient_Id": 22, + "Medecin_Id": 30 + }, + { + "DateRDV": "2015-08-13 11:00:42", + "Duree": 30, + "Patient_Id": 10, + "Medecin_Id": 72 + }, + { + "DateRDV": "2015-05-18 01:40:59", + "Duree": 60, + "Patient_Id": 2, + "Medecin_Id": 78 + }, + { + "DateRDV": "2015-11-15 05:32:12", + "Duree": 60, + "Patient_Id": 94, + "Medecin_Id": 77 + }, + { + "DateRDV": "2015-02-27 03:23:52", + "Duree": 60, + "Patient_Id": 2, + "Medecin_Id": 71 + }, + { + "DateRDV": "2015-11-07 04:56:09", + "Duree": 30, + "Patient_Id": 96, + "Medecin_Id": 52 + }, + { + "DateRDV": "2015-07-20 10:32:31", + "Duree": 30, + "Patient_Id": 57, + "Medecin_Id": 38 + }, + { + "DateRDV": "2015-04-09 06:30:20", + "Duree": 30, + "Patient_Id": 91, + "Medecin_Id": 67 + }, + { + "DateRDV": "2015-10-20 04:25:11", + "Duree": 30, + "Patient_Id": 56, + "Medecin_Id": 98 + }, + { + "DateRDV": "2015-11-11 08:29:45", + "Duree": 30, + "Patient_Id": 88, + "Medecin_Id": 39 + }, + { + "DateRDV": "2015-10-21 07:55:43", + "Duree": 30, + "Patient_Id": 97, + "Medecin_Id": 6 + }, + { + "DateRDV": "2015-07-11 11:02:43", + "Duree": 60, + "Patient_Id": 7, + "Medecin_Id": 22 + } +] \ No newline at end of file diff --git a/Docs/generateRDV b/Docs/generateRDV new file mode 100644 index 0000000..ab1fc4b --- /dev/null +++ b/Docs/generateRDV @@ -0,0 +1,9 @@ +[ + '{{repeat(100)}}', + { + DateRDV: '{{date(new Date(2015, 0, 1), new Date(), "YYYY-MM-dd hh:mm:ss")}}', + Duree: '{{random(30,60)}}', + Patient_Id: '{{integer(1,100)}}', + Medecin_Id: '{{integer(1,100)}}' + } +] \ No newline at end of file diff --git a/autoloader.php b/autoloader.php index 6f2b45e..2d314ed 100755 --- a/autoloader.php +++ b/autoloader.php @@ -1,5 +1,9 @@ + +
+ ++ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 7 |
+ CRAP | +
+
+
+ |
+ 0.00% |
+ 0 / 37 |
+
Authentification | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 7 |
+ 306 | +
+
+
+ |
+ 0.00% |
+ 0 / 37 |
+
__construct | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 2 |
+ |||
authentification | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 20 | +
+
+
+ |
+ 0.00% |
+ 0 / 8 |
+ |||
deconnection | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 3 |
+ |||
createSecureSession | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 7 |
+ |||
destroySecureSession | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 3 |
+ |||
checkUser | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 72 | +
+
+
+ |
+ 0.00% |
+ 0 / 12 |
+ |||
getCurrentUser | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 2 |
+
<?php | |
class Authentification{ | |
private $users; | |
public function __construct(){ | |
$this->users = json_decode(file_get_contents($GLOBALS['managers_dir'].DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'users.json'),true); | |
} | |
/** | |
* méthode d'authentification, utilise param['identifiant'] et param['mdp'] et les comparent à | |
* nos utilisateurs enregistrés puis créer une session securisée par token | |
* @param array $param contiens les infomations de connection | |
* @return json json contenant le résultat de l'authentification (true si authentification correcte, sinon non) | |
*/ | |
public function authentification($user,$mdp){ | |
foreach($this->users as $utilisateur=>$infos){ | |
if($utilisateur == $user and $infos['password'] == $mdp){ | |
$this->createSecureSession($user,$infos['role']); | |
return true; | |
} | |
} | |
return false; | |
} | |
/** | |
* déconnecte l'utilisateur en détruisant la session et le cookie | |
* @return json renvoie true, il n'y aucune raison que ça foire | |
*/ | |
public function deconnection(){ | |
$this->destroySecureSession(); | |
Response::quickResponse(200,json_encode(['result' => true])); | |
} | |
/** | |
* créer une session sécurisé , protégé du vol de session par identification de l'utilisateur par navigateur/ip/cookie | |
* @param String $user nom d'utilisateur | |
* @param String $role role de l'utilisateur (0=administrateur, 1= prof, 2=scolarité,3=élève) | |
* @return void | |
*/ | |
private function createSecureSession($user,$role){ | |
$id = uniqid(); | |
$_SESSION['id'] = $id; | |
$_SESSION['token'] = sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$id); | |
session_regenerate_id(); | |
$_SESSION['user'] = $user; | |
$_SESSION['role'] = $role; | |
} | |
/** | |
* Détruit une session | |
* @return void | |
*/ | |
private function destroySecureSession(){ | |
session_destroy(); | |
setcookie('token',time()-1); | |
} | |
/** | |
* Vérifie qu'un utilisateur donné a les droits demandés (passés en paramètres) | |
* @param int $role role minimum | |
* @param boolean $strict si strict vaut true, seul les utilisateurs avec le role précis seront acceptés, sinon tout les utilisateurs | |
* avec un role superieur le seront | |
* @return boolean | |
*/ | |
public static function checkUser($role, $strict=false){ | |
if(isset($_SESSION['token'])){ | |
foreach($_SESSION['role'] as $roleUser){ | |
if(($strict and $roleUser == $role) or (!$strict and $roleUser<= $role)){ | |
if($_SESSION['token'] == sha1($_SERVER['HTTP_USER_AGENT'].$_SERVER['REMOTE_ADDR'].$_SESSION['id'])){ | |
session_regenerate_id(); | |
return true; | |
}; | |
} | |
} | |
} | |
return false; | |
} | |
public static function getCurrentUser(){ | |
return $_SESSION['user']; | |
} | |
} | |
?> |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ CRAP | +
+
+
+ |
+ 95.24% |
+ 20 / 21 |
+
MedecinRepo | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ 7 | +
+
+
+ |
+ 95.24% |
+ 20 / 21 |
+
getById | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 3 / 3 |
+ |||
add | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2.02 | +
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ |||
delete | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
search | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+ |||
getPatients | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+ |||
getAll | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+
<?php | |
/** | |
* Created by PhpStorm. | |
* User: seekdasky | |
* Date: 02/12/15 | |
* Time: 12:36 | |
*/ | |
class MedecinRepo | |
{ | |
public static function getById($id){ | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM Medecin WHERE Id = :id'); | |
$req->execute(['id' => $id]); | |
return StaticRepo::delNumeric( $req->fetch(), true ); | |
} | |
public static function add($civilite,$prenom,$nom){ | |
$req = StaticRepo::getConnexion()->prepare('INSERT INTO Medecin VALUES (DEFAULT,:civilite,:prenom,:nom)'); | |
$result = $req->execute(['civilite' => $civilite, | |
'nom' => $nom, | |
'prenom' => $prenom]); | |
if($result != false){return StaticRepo::getConnexion()->lastInsertId();} | |
else{return false;} | |
} | |
public static function delete($idMedecin){ | |
$req = StaticRepo::getConnexion()->prepare('DELETE FROM Medecin WHERE Id = :id'); | |
return $req->execute(['id' => $idMedecin]); | |
} | |
public static function search($nom,$prenom){ | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM Medecin WHERE Nom LIKE :nom AND Prenom LIKE :prenom'); | |
$req->execute(['nom' => $nom, | |
'prenom' => $prenom]); | |
return StaticRepo::delNumeric($req->fetchAll()); | |
} | |
public static function getPatients($idMedecin){ | |
$req = StaticRepo::getConnexion()->prepare('SELECT Patient.* FROM Patient,Medecin | |
WHERE Medecin.Id = :id | |
AND Medecin.Id = Patient.MedecinTraitant'); | |
$req->execute(['id' => $idMedecin]); | |
return StaticRepo::delNumeric($req->fetchAll()); | |
} | |
public static function getAll(){ | |
$req = StaticRepo::getConnexion()->query('SELECT * FROM Medecin ORDER BY nom, prenom ASC'); | |
return StaticRepo::delNumeric( $req->fetchAll() ); | |
} | |
} |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ CRAP | +
+
+
+ |
+ 85.71% |
+ 12 / 14 |
+
MedecinRepoTest | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ 6.10 | +
+
+
+ |
+ 85.71% |
+ 12 / 14 |
+
__construct | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 2 |
+ |||
testConstruct | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
testAddAndDelete | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+ |||
testSearch | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
testGetPatient | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
testGetById | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+
<?php | |
/** | |
* Created by PhpStorm. | |
* User: seekdasky | |
* Date: 03/12/15 | |
* Time: 12:50 | |
*/ | |
class MedecinRepoTest extends PHPUnit_Framework_TestCase | |
{ | |
private $repo; | |
public function __construct(){ | |
$this->repo = new MedecinRepo(); | |
} | |
public function testConstruct(){ | |
$this->assertTrue(new MedecinRepo() instanceof MedecinRepo); | |
} | |
public function testAddAndDelete(){ | |
$id = $this->repo->add('M','Lucas','Mascaro'); | |
$this->assertNotNull($id); | |
$this->assertTrue($this->repo->delete($id)); | |
} | |
public function testSearch(){ | |
$this->assertEquals($this->repo->search('HUFF','Heather')[0]['Nom'],'HUFF'); | |
} | |
public function testGetPatient(){ | |
$this->assertEquals($this->repo->getPatients(9)[0]['Nom'],'PAUL'); | |
} | |
public function testGetById(){ | |
$this->assertEquals($this->repo->getById(1)['Nom'],'HUFF'); | |
} | |
} |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ CRAP | +
+
+
+ |
+ 96.43% |
+ 27 / 28 |
+
PatientRepo | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ 7 | +
+
+
+ |
+ 96.43% |
+ 27 / 28 |
+
getById | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 3 / 3 |
+ |||
add | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2.00 | +
+
+
+ |
+ 93.75% |
+ 15 / 16 |
+ |||
delete | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
updateMedecinTraitant | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
search | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 3 / 3 |
+ |||
getAll | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+
<?php | |
/** | |
* Created by PhpStorm. | |
* User: seekdasky | |
* Date: 02/12/15 | |
* Time: 12:36 | |
*/ | |
class PatientRepo | |
{ | |
// private $connexion; | |
// public function __construct(){ | |
// StaticRepo::getConnexion() = StaticRepo::getConnexion(); | |
// } | |
public static function getById($id){ | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM Patient WHERE Id = :id'); | |
$req->execute(['id' => $id]); | |
return StaticRepo::delNumeric( $req->fetch(), true ); | |
} | |
public static function add($civilite,$prenom,$nom,$adresse,$adresse2,$ville,$codePostal,$dateNaissance,$lieuNaissance,$numSecu,$medecinTraitant = null){ | |
$dateNaissance = strtotime($dateNaissance); | |
$dateNaissance = Date('o-m-d',$dateNaissance); | |
$req = StaticRepo::getConnexion()->prepare('INSERT INTO Patient VALUES (:civilite,:nom,:prenom,:adresse,:adresse2,:ville,:codePostal,:dateNaissance,:lieuNaissance,:numSecu,DEFAULT,:medecin)'); | |
$result = $req->execute(['civilite' => $civilite, | |
'nom' => $nom, | |
'prenom' => $prenom, | |
'adresse' => $adresse, | |
'adresse2' => $adresse2, | |
'ville' => $ville, | |
'codePostal' => $codePostal, | |
'dateNaissance' => $dateNaissance, | |
'lieuNaissance' => $lieuNaissance, | |
'numSecu' => $numSecu, | |
'medecin' => $medecinTraitant ]); | |
if($result){return StaticRepo::getConnexion()->lastInsertId();} | |
else{return false;} | |
} | |
public static function delete($idPatient){ | |
$req = StaticRepo::getConnexion()->prepare('DELETE FROM Patient WHERE Patient.Id = :id'); | |
return $req->execute(['id' => $idPatient]); | |
} | |
public static function updateMedecinTraitant($idPatient,$idMedecin){ | |
$req = StaticRepo::getConnexion()->prepare('UPDATE Patient SET MedecinTraitant = :medecin WHERE Id = :id'); | |
return $req->execute(['medecin' => $idMedecin, 'id' => $idPatient]); | |
} | |
public static function search($nom,$prenom){ | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM Patient WHERE Nom LIKE :nom AND Prenom LIKE :prenom'); | |
$req->execute(['nom' => $nom, 'prenom' => $prenom]); | |
return StaticRepo::delNumeric($req->fetchAll()); | |
} | |
public static function getAll(){ | |
$req = StaticRepo::getConnexion()->query('SELECT * FROM Patient ORDER BY nom, prenom ASC'); | |
return StaticRepo::delNumeric( $req->fetchAll() ); | |
} | |
} |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ CRAP | +
+
+
+ |
+ 87.50% |
+ 14 / 16 |
+
PatientRepoTest | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ 6.07 | +
+
+
+ |
+ 87.50% |
+ 14 / 16 |
+
__construct | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 2 |
+ |||
testConstruct | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
testGetById | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
testAddAndDeletePatient | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+ |||
testSearch | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
testUpdateMedecinTraitant | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+
<?php | |
/** | |
* Created by PhpStorm. | |
* User: seekdasky | |
* Date: 03/12/15 | |
* Time: 12:31 | |
*/ | |
class PatientRepoTest extends PHPUnit_Framework_TestCase | |
{ | |
private $repo; | |
public function __construct() | |
{ | |
$this->repo = new PatientRepo(); | |
} | |
public function testConstruct(){ | |
$this->assertTrue(new PatientRepo() instanceof PatientRepo); | |
} | |
public function testGetById(){ | |
$this->assertEquals($this->repo->getById(2)['Nom'],'KEMP'); | |
} | |
public function testAddAndDeletePatient(){ | |
$id = $this->repo->add('M','Lucas','Mascaro','3 rue des fleurs qui sentent bon',NULL,'Pimpous-Les-Bains','31524','1996-11-19','Toulouse','123456789876543', 69); | |
$this->assertNotNull($id); | |
$this->assertTrue($this->repo->delete($id)); | |
} | |
public function testSearch(){ | |
$this->assertEquals($this->repo->search('KEMP','Clay')[0]['Nom'],'KEMP'); | |
} | |
public function testUpdateMedecinTraitant(){ | |
$id = rand(0,100); | |
$this->repo->updateMedecinTraitant(2,$id); | |
$this->assertEquals($this->repo->getById(2)['MedecinTraitant'],$id); | |
} | |
} |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ CRAP | +
+
+
+ |
+ 96.30% |
+ 26 / 27 |
+
RDVRepo | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 83.33% |
+ 5 / 6 |
+ 7 | +
+
+
+ |
+ 96.30% |
+ 26 / 27 |
+
getById | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 3 / 3 |
+ |||
getByDate | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+ |||
delete | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 2 / 2 |
+ |||
add | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2.01 | +
+
+
+ |
+ 88.89% |
+ 8 / 9 |
+ |||
updateDateTime | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 4 / 4 |
+ |||
getByPatientAndDate | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 5 / 5 |
+
<?php | |
/** | |
* Created by PhpStorm. | |
* User: seekdasky | |
* Date: 02/12/15 | |
* Time: 12:36 | |
*/ | |
class RDVRepo | |
{ | |
public static function getById($id){ | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE RDV.id = :id'); | |
$req->execute(['id' => $id]); | |
return StaticRepo::delNumeric( $req->fetch(), true ); | |
} | |
public static function getByDate($date){ | |
$date = date('Y-m-d',strtotime($date)); | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE DATE(DateRDV) = :date ORDER BY DateRDV ASC'); | |
$req->execute(['date' => $date]); | |
return StaticRepo::delNumeric($req->fetchAll()); | |
} | |
public static function delete($idRDV){ | |
$req = StaticRepo::getConnexion()->prepare('DELETE FROM RDV WHERE RDV.id = :id'); | |
return $req->execute(['id' => $idRDV]); | |
} | |
public static function add($date,$duree,$idPatient,$idMedecin){ | |
$date = date('Y-m-d H:i:s',strtotime($date)); | |
$duree = date('H:i:s',$duree*60); | |
$req = StaticRepo::getConnexion()->prepare('INSERT INTO RDV VALUES (DEFAULT,:date,:duree,:patient,:medecin)'); | |
$result = $req->execute(['date' => $date, | |
'duree' => $duree, | |
'patient' => $idPatient, | |
'medecin' => $idMedecin]); | |
if($result != false){return StaticRepo::getConnexion()->lastInsertId();} | |
else{return false;} | |
} | |
public static function updateDateTime($idRDV,$dateTime){ | |
$date = date('Y-m-d H:i:s',strtotime($dateTime)); | |
$req = StaticRepo::getConnexion()->prepare('UPDATE RDV SET DateRDV = :date WHERE id = :id'); | |
return $req->execute(['date' => $date, | |
'id' => $idRDV]); | |
} | |
public static function getByPatientAndDate($idPatient,$date){ | |
$date = date('Y-m-d',strtotime($date)); | |
$req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE Patient_Id=:patient AND DATE(DateRDV)=:date'); | |
$req->execute(['patient' => $idPatient, | |
'date' => $date]); | |
return StaticRepo::delNumeric($req->fetchAll()); | |
} | |
} |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 7 |
+ CRAP | +
+
+
+ |
+ 0.00% |
+ 0 / 67 |
+
Response | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 7 |
+ 380 | +
+
+
+ |
+ 0.00% |
+ 0 / 67 |
+
__construct | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 6 |
+ |||
write | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 2 |
+ |||
stream | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 56 | +
+
+
+ |
+ 0.00% |
+ 0 / 22 |
+ |||
sendHeader | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 12 | +
+
+
+ |
+ 0.00% |
+ 0 / 9 |
+ |||
setHeader | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 2 |
+ |||
send | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 30 | +
+
+
+ |
+ 0.00% |
+ 0 / 22 |
+ |||
quickResponse | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 4 |
+
<?php | |
/* | |
* La classe Response permet de gérer la réponse envoyée au client (status, contenu, type, encodage) | |
* son utilitée principale est de pouvoir d'envoyer un pseudo-flux de donnée au client et permettre ainsi de suivre le déroulement | |
* d'une opération côté serveur par exemple. Son second aventage est qu'une fois la réponse envoyée et féermée, le script PHP peut continuer de s'executer | |
* permettant ainsi une sensation de vitesse au niveau du client (inutile d'attendre la fin des insertions en base de donnée pour avoir la réponse par exemple) | |
*/ | |
class Response{ | |
private $status; | |
private $headers = []; | |
private $config = []; | |
private $response = ""; | |
private $Messages = array( | |
//Informational 1xx | |
100 => '100 Continue', | |
101 => '101 Switching Protocols', | |
//Successful 2xx | |
200 => '200 OK', | |
201 => '201 Created', | |
202 => '202 Accepted', | |
203 => '203 Non-Authoritative Information', | |
204 => '204 No Content', | |
205 => '205 Reset Content', | |
206 => '206 Partial Content', | |
226 => '226 IM Used', | |
//Redirection 3xx | |
300 => '300 Multiple Choices', | |
301 => '301 Moved Permanently', | |
302 => '302 Found', | |
303 => '303 See Other', | |
304 => '304 Not Modified', | |
305 => '305 Use Proxy', | |
306 => '306 (Unused)', | |
307 => '307 Temporary Redirect', | |
//Client Error 4xx | |
400 => '400 Bad Request', | |
401 => '401 Unauthorized', | |
402 => '402 Payment Required', | |
403 => '403 Forbidden', | |
404 => '404 Not Found', | |
405 => '405 Method Not Allowed', | |
406 => '406 Not Acceptable', | |
407 => '407 Proxy Authentication Required', | |
408 => '408 Request Timeout', | |
409 => '409 Conflict', | |
410 => '410 Gone', | |
411 => '411 Length Required', | |
412 => '412 Precondition Failed', | |
413 => '413 Request Entity Too Large', | |
414 => '414 Request-URI Too Long', | |
415 => '415 Unsupported Media Type', | |
416 => '416 Requested Range Not Satisfiable', | |
417 => '417 Expectation Failed', | |
418 => '418 I\'m a teapot', | |
422 => '422 Unprocessable Entity', | |
423 => '423 Locked', | |
426 => '426 Upgrade Required', | |
428 => '428 Precondition Required', | |
429 => '429 Too Many Requests', | |
431 => '431 Request Header Fields Too Large', | |
//Server Error 5xx | |
500 => '500 Internal Server Error', | |
501 => '501 Not Implemented', | |
502 => '502 Bad Gateway', | |
503 => '503 Service Unavailable', | |
504 => '504 Gateway Timeout', | |
505 => '505 HTTP Version Not Supported', | |
506 => '506 Variant Also Negotiates', | |
510 => '510 Not Extended', | |
511 => '511 Network Authentication Required' | |
); | |
/** | |
* Constructeur de la Response | |
* @param int $status status HTTP de la réponse (404,200,500, etc) | |
* @param bool|false $stream Si la réponse est un stream (avtive/désactive les méthodes send/stream() | |
* @param string $type type HTTP des données de retour | |
* @param bool|true $clearBuffer si activé, vide le buffer avant chaque envoi de donnée (a pour effet de ne pas afficher les echo/printf) | |
*/ | |
public function __construct($status = 200,$stream = false,$type = 'application/json', $clearBuffer = false) | |
{ | |
$this->status = $status; | |
array_push($this->headers,['Content-Type',$type]); | |
$this->config['clearBuffer'] = $clearBuffer; | |
$this->config['stream'] = $stream; | |
} | |
/** Ajoute du contenu a la réponse qui sera envoyé (par stream() ou par send() ) | |
* @param $content contenu a ajouter a la réponse | |
*/ | |
public function write($content){ | |
$this->response .= $content; | |
} | |
/** Envoie une partie de réponse au client (doit être récupéré en ajax, aucun intéret sinon), chaque bloc de donéne envoyé est séparé par | |
* un délimiteur ("//Block//" par défaut).ATTENTION: stream() vide la réponse (si on write() puis stream(), la réponse qu'il restera dans l'objet sera vide) | |
* @param string $content contenu a envoyer (optionnel car on peut utiliser la méthode write pour le faire) | |
* @throws Exception si la réponse n'est pas un stream | |
*/ | |
public function stream($content="",$delimiter = "//Block//"){ | |
//vérification que la réponse est un stream | |
if(!$this->config['stream']){ | |
throw new Exception("Stream d'une réponse synchrone"); | |
} | |
//si les headers ne sont pas encore envoyés, on le fait | |
if(!headers_sent()){ | |
$this->sendHeader(); | |
} | |
//si demandé, on clear le buffer avant d'envoyer | |
if($this->config['clearBuffer']){ | |
ob_end_clean(); | |
if($GLOBALS['compression']){ | |
ob_start("ob_gzhandler"); | |
}else{ | |
ob_start(); | |
} | |
} | |
//on envoi le contenu de response et la variable content | |
if($this->response!=""){ | |
echo $delimiter.$this->response; | |
}if($content != ""){ | |
echo $delimiter.$content; | |
} | |
ob_flush();flush(); | |
$this->response = ''; | |
} | |
/** | |
* Envoi les headers de la réponse (status et ceux potentiellement défnini par l'utilisateur) | |
*/ | |
public function sendHeader(){ | |
//envoie le status de la requete (petit trick suivant l'architecture de PHP) | |
if (strpos(PHP_SAPI, 'cgi') === 0) { | |
header(sprintf('Status: %s', $this->Messages[$this->status])); | |
} else { | |
header(sprintf('HTTP/1.1 %s', $this->Messages[$this->status])); | |
} | |
//les autres headers | |
foreach($this->headers as $header){ | |
header(sprintf('%s: %s',$header[0],$header[1])); | |
} | |
} | |
/** | |
* Défini un header qui sera envoyé | |
* @param $header Nom du header | |
* @param $value Valeur du header | |
*/ | |
public function setHeader($header,$value){ | |
array_push($this->headers,[$header,$value]); | |
} | |
/** Envoi la réponse et ferme la communication | |
* @throws Exception si la réponse est un stream | |
*/ | |
public function send(){ | |
//vérification que la réponse n'est pas un stream | |
if($this->config['stream']){ | |
throw new Exception("Envoi synchrone d'une réponse stream"); | |
} | |
//si les headers ne sont pas encore envoyés, on le fait | |
if(!headers_sent()){ | |
$this->sendHeader(); | |
} | |
//si demandé, on clear le buffer avant d'envoyer | |
if($this->config['clearBuffer']){ | |
ob_end_clean(); | |
if($GLOBALS['compression']){ | |
ob_start("ob_gzhandler"); | |
}else{ | |
ob_start(); | |
} | |
} | |
//envoi de la réponse | |
echo $this->response; | |
//fermeture de la communication | |
header('Connection: close'); | |
header('Content-Length: '.ob_get_length()); | |
ob_end_flush(); | |
ob_flush(); | |
flush(); | |
//permet au reste du script de s'executer même si la réponse a été envoyé et que l'utilisateur interromp le script (changement de page, etc...) | |
ignore_user_abort(true); | |
} | |
/** | |
* @param int $status status HTTP de la réponse (404,200,500, etc) | |
* @param $content | |
* @param string $type | |
*/ | |
public static function quickResponse($status,$content,$type = 'application/json'){ | |
$response = new Response($status,false,$type); | |
$response->write($content); | |
$response->send(); | |
} | |
} |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 40.00% |
+ 2 / 5 |
+ CRAP | +
+
+
+ |
+ 58.06% |
+ 18 / 31 |
+
StaticRepo | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 40.00% |
+ 2 / 5 |
+ 62.01 | +
+
+
+ |
+ 58.06% |
+ 18 / 31 |
+
__construct | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 2 | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ |||
getConnexion | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 3 | +
+
+
+ |
+ 100.00% |
+ 5 / 5 |
+ |||
testConnexion | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ 1 | +
+
+
+ |
+ 100.00% |
+ 1 / 1 |
+ |||
delNumeric | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 10.29 | +
+
+
+ |
+ 85.71% |
+ 12 / 14 |
+ |||
checkParam | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 72 | +
+
+
+ |
+ 0.00% |
+ 0 / 10 |
+
<?php | |
class StaticRepo{ | |
//contiens l'instance de la Connexion PDO | |
private static $connexion; | |
//contiens les informations de connexion a la BDD | |
private static $config; | |
private function __construct(){ | |
} | |
/** | |
* @return PDO instance de la connexion a la BDD | |
*/ | |
public static function getConnexion(){ | |
if(static::$config == null){ | |
static::$config = json_decode(file_get_contents(dirname(__FILE__).DIRECTORY_SEPARATOR.'config.json'),true); | |
} | |
if(static::$connexion == null){ | |
static::$connexion = new PDO('mysql:host='.static::$config['host'].';dbname='.static::$config['database'], static::$config['login'], static::$config['password']); | |
} | |
return static::$connexion; | |
} | |
/** | |
* @return bool test de la Connexion | |
*/ | |
public static function testConnexion(){ | |
return static::getConnexion() instanceof PDO; | |
} | |
/* SUPPRIME LES VALEURS À CLÉS NUMÉRIQUES DANS UN FETCH D'UNE TABLE DE LA BDD | |
* | |
* @fetchData<Array> le résultat d'une $requeteSQL->fetchAll() / $requeteSQL->fetch() | |
* | |
* @return newFetchData<Array> retourne le tableau donné en paramètre mais sans les valeurs à clés numériques | |
* | |
*/ | |
public static function delNumeric($fetchData, $oneDimension=false){ | |
// cas où fetch renvoie FALSE | |
if( $fetchData === false ) return false; | |
/* [1] 2 dimensions | |
===============================================*/ | |
if( !$oneDimension ){ | |
// on supprime les doublons des entrées (indice numérique) | |
for( $i = 0 ; $i < count($fetchData) ; $i++ ) // pour tout les utilisateurs | |
foreach($fetchData[$i] as $col => $val){ // pour toutes les entrées | |
if( !mb_detect_encoding($val, 'UTF-8') ) | |
$fetchData[$i][$col] = utf8_encode($val); | |
if( is_int($col) ) // si l'indice est un entier | |
unset( $fetchData[$i][$col] ); // on le supprime | |
} | |
/* [2] 1 dimensions | |
===============================================*/ | |
}else{ | |
// on supprime les doublons des entrées (indice numérique) | |
foreach($fetchData as $i=>$val){ // pour toutes les entrées | |
if( !mb_detect_encoding($val, 'UTF-8') ) | |
$fetchData[$i] = utf8_encode($val); | |
if( is_int($i) ) // si l'indice est un entier | |
unset( $fetchData[$i] ); // on le supprime | |
} | |
} | |
return $fetchData; | |
} | |
// _ _____ ___ _ _ ___ ____ | |
// / \ | ___|_ _| \ | |_ _| _ \ | |
// / _ \ | |_ | || \| || || |_) | | |
// / ___ \ | _| | || |\ || || _ < | |
// /_/ \_\ |_| |___|_| \_|___|_| \_\ | |
/* Vérifie le type d'une variable | |
* | |
* @variable<mixed> la variable à vérifier | |
* @dbtype<String> le type correspondant à la vérification | |
* | |
* | |
* @return correct<Boolean> TRUE si le type est bon / FALSE si le type ne match pas | |
* | |
*/ | |
public static function checkParam($variable, $dbtype){ | |
/* [1] on vérifie que $dbtype est un String | |
=============================================================*/ | |
if( !is_string($dbtype) ) return false; | |
/* [2] Vérifications | |
=============================================================*/ | |
$checker = true; // contiendra VRAI si la vérification s'avère correcte | |
switch($dbtype){ | |
// [1] 'M' / 'F' | |
case 'Civilité': | |
$checker = $checker && is_string($variable) && in_array(array('M', 'F'), $variable); | |
break; | |
// [2] Nom de patient | |
case 'Nom': | |
$checker = $checker && is_string($variable) && in_array(array('M', 'F'), $variable); | |
break; | |
// [N] Type inconnu | |
default: $checker = false; break; | |
} | |
/* [3] On retourne le résultat de la vérif | |
=============================================================*/ | |
return $checker; | |
} | |
} | |
?> |
+ | Code Coverage |
+ |||||||||
+ | Classes and Traits |
+ Functions and Methods |
+ Lines |
+ |||||||
Total | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ CRAP | +
+
+
+ |
+ 0.00% |
+ 0 / 30 |
+
StatsRepo | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 72 | +
+
+
+ |
+ 0.00% |
+ 0 / 30 |
+
getStats | +
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+ 72 | +
+
+
+ |
+ 0.00% |
+ 0 / 30 |
+
<?php | |
/** | |
* Created by PhpStorm. | |
* User: seekdasky | |
* Date: 02/12/15 | |
* Time: 12:36 | |
*/ | |
class StatsRepo | |
{ | |
public static function getStats(){ | |
$patients = PatientRepo::getAll(); | |
$homme = ['25-'=>0,'25-50'=>0,'50+'=>0]; | |
$femme = ['25-'=>0,'25-50'=>0,'50+'=>0]; | |
foreach($patients as $key=>$patient){ | |
$dateNaissance = strtotime($patient['DateNaissance']); | |
$age = date('Y',time()-$dateNaissance); | |
$patient['age'] = $age - 1970; | |
switch($patient['Civilite']){ | |
case 'M': | |
if($patient['age']<25){ | |
$homme['25-']++; | |
}elseif($patient['age']<50){ | |
$homme['25-50']++; | |
}else{ | |
$homme['50+']++; | |
} | |
break; | |
case 'F': | |
if($patient['age']<25){ | |
$femme['25-']++; | |
}elseif($patient['age']<50){ | |
$femme['25-50']++; | |
}else{ | |
$femme['50+']++; | |
} | |
break; | |
} | |
} | |
return ['H'=>$homme,'F'=>$femme]; | |
} | |
} |
Class | +Coverage | +
---|---|
StaticRepo | 58% |
Class | +CRAP | +
---|---|
StaticRepo | 62 |
Method | +Coverage | +
---|---|
__construct | 0% |
checkParam | 0% |
add | 83% |
delNumeric | 85% |
getAll | 85% |
add | 88% |
Method | +CRAP | +
---|---|
checkParam | 72 |
delNumeric | 10 |
getAll | 4 |
add | 2 |
add | 2 |
+ | Code Coverage |
+ ||||||||
+ | Lines |
+ Functions and Methods |
+ Classes and Traits |
+ ||||||
Total | +
+
+
+ |
+ 86.11% |
+ 124 / 144 |
+
+
+
+ |
+ 68.00% |
+ 17 / 25 |
+
+
+
+ |
+ 0.00% |
+ 0 / 5 |
+
repos | +
+
+
+ |
+ 93.81% |
+ 106 / 113 |
+
+
+
+ |
+ 75.00% |
+ 15 / 20 |
+
+
+
+ |
+ 0.00% |
+ 0 / 4 |
+
StaticRepo.php | +
+
+
+ |
+ 58.06% |
+ 18 / 31 |
+
+
+
+ |
+ 40.00% |
+ 2 / 5 |
+
+
+
+ |
+ 0.00% |
+ 0 / 1 |
+
=i.length)return n;var r=[],u=o[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,u={},i=[],o=[];return u.map=function(t,e){return n(e,t,0)},u.entries=function(e){return t(n(ta.map,e,0),0)},u.key=function(n){return i.push(n),u},u.sortKeys=function(n){return o[i.length-1]=n,u},u.sortValues=function(n){return e=n,u},u.rollup=function(n){return r=n,u},u},ta.set=function(n){var t=new m;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},c(m,{has:h,add:function(n){return this._[s(n+="")]=!0,n},remove:g,values:p,size:v,empty:d,forEach:function(n){for(var t in this._)n.call(this,f(t))}}),ta.behavior={},ta.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r=0&&(r=n.slice(e+1),n=n.slice(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},ta.event=null,ta.requote=function(n){return n.replace(ma,"\\$&")};var ma=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,ya={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Ma=function(n,t){return t.querySelector(n)},xa=function(n,t){return t.querySelectorAll(n)},ba=function(n,t){var e=n.matches||n[x(n,"matchesSelector")];return(ba=function(n,t){return e.call(n,t)})(n,t)};"function"==typeof Sizzle&&(Ma=function(n,t){return Sizzle(n,t)[0]||null},xa=Sizzle,ba=Sizzle.matchesSelector),ta.selection=function(){return ta.select(ua.documentElement)};var _a=ta.selection.prototype=[];_a.select=function(n){var t,e,r,u,i=[];n=N(n);for(var o=-1,a=this.length;++o=0&&(e=n.slice(0,t),n=n.slice(t+1)),wa.hasOwnProperty(e)?{space:wa[e],local:n}:n}},_a.attr=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node();return n=ta.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(z(t,n[t]));return this}return this.each(z(n,t))},_a.classed=function(n,t){if(arguments.length<2){if("string"==typeof n){var e=this.node(),r=(n=T(n)).length,u=-1;if(t=e.classList){for(;++u =0?n.slice(0,t):n,r=t>=0?n.slice(t+1):"in";return e=cl.get(e)||al,r=ll.get(r)||y,Mu(r(e.apply(null,ea.call(arguments,1))))},ta.interpolateHcl=Lu,ta.interpolateHsl=Tu,ta.interpolateLab=Ru,ta.interpolateRound=Du,ta.transform=function(n){var t=ua.createElementNS(ta.ns.prefix.svg,"g");return(ta.transform=function(n){if(null!=n){t.setAttribute("transform",n);var e=t.transform.baseVal.consolidate()}return new Pu(e?e.matrix:sl)})(n)},Pu.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var sl={a:1,b:0,c:0,d:1,e:0,f:0};ta.interpolateTransform=Hu,ta.layout={},ta.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++ea",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h
","
"],tr:[2,"","
"],col:[2,"
"],td:[3,"
"],_default:k.htmlSerialize?[0,"",""]:[1,"X"," "!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("")).appendTo(b.documentElement),b=(Ca[0].contentWindow||Ca[0].contentDocument).document,b.write(),b.close(),c=Ea(a,b),Ca.detach()),Da[a]=c),c}!function(){var a;k.shrinkWrapBlocks=function(){if(null!=a)return a;a=!1;var b,c,d;return c=y.getElementsByTagName("body")[0],c&&c.style?(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:1px;width:1px;zoom:1",b.appendChild(y.createElement("div")).style.width="5px",a=3!==b.offsetWidth),c.removeChild(d),a):void 0}}();var Ga=/^margin/,Ha=new RegExp("^("+S+")(?!px)[a-z%]+$","i"),Ia,Ja,Ka=/^(top|right|bottom|left)$/;a.getComputedStyle?(Ia=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c.getPropertyValue(b)||c[b]:void 0,c&&(""!==g||m.contains(a.ownerDocument,a)||(g=m.style(a,b)),Ha.test(g)&&Ga.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0===g?g:g+""}):y.documentElement.currentStyle&&(Ia=function(a){return a.currentStyle},Ja=function(a,b,c){var d,e,f,g,h=a.style;return c=c||Ia(a),g=c?c[b]:void 0,null==g&&h&&h[b]&&(g=h[b]),Ha.test(g)&&!Ka.test(b)&&(d=h.left,e=a.runtimeStyle,f=e&&e.left,f&&(e.left=a.currentStyle.left),h.left="fontSize"===b?"1em":g,g=h.pixelLeft+"px",h.left=d,f&&(e.left=f)),void 0===g?g:g+""||"auto"});function La(a,b){return{get:function(){var c=a();if(null!=c)return c?void delete this.get:(this.get=b).apply(this,arguments)}}}!function(){var b,c,d,e,f,g,h;if(b=y.createElement("div"),b.innerHTML="
a",d=b.getElementsByTagName("a")[0],c=d&&d.style){c.cssText="float:left;opacity:.5",k.opacity="0.5"===c.opacity,k.cssFloat=!!c.cssFloat,b.style.backgroundClip="content-box",b.cloneNode(!0).style.backgroundClip="",k.clearCloneStyle="content-box"===b.style.backgroundClip,k.boxSizing=""===c.boxSizing||""===c.MozBoxSizing||""===c.WebkitBoxSizing,m.extend(k,{reliableHiddenOffsets:function(){return null==g&&i(),g},boxSizingReliable:function(){return null==f&&i(),f},pixelPosition:function(){return null==e&&i(),e},reliableMarginRight:function(){return null==h&&i(),h}});function i(){var b,c,d,i;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),b.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",e=f=!1,h=!0,a.getComputedStyle&&(e="1%"!==(a.getComputedStyle(b,null)||{}).top,f="4px"===(a.getComputedStyle(b,null)||{width:"4px"}).width,i=b.appendChild(y.createElement("div")),i.style.cssText=b.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",i.style.marginRight=i.style.width="0",b.style.width="1px",h=!parseFloat((a.getComputedStyle(i,null)||{}).marginRight),b.removeChild(i)),b.innerHTML="
",i=b.getElementsByTagName("td"),i[0].style.cssText="margin:0;border:0;padding:0;display:none",g=0===i[0].offsetHeight,g&&(i[0].style.display="",i[1].style.display="none",g=0===i[0].offsetHeight),c.removeChild(d))}}}(),m.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Ma=/alpha\([^)]*\)/i,Na=/opacity\s*=\s*([^)]*)/,Oa=/^(none|table(?!-c[ea]).+)/,Pa=new RegExp("^("+S+")(.*)$","i"),Qa=new RegExp("^([+-])=("+S+")","i"),Ra={position:"absolute",visibility:"hidden",display:"block"},Sa={letterSpacing:"0",fontWeight:"400"},Ta=["Webkit","O","Moz","ms"];function Ua(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=Ta.length;while(e--)if(b=Ta[e]+c,b in a)return b;return d}function Va(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=m._data(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&U(d)&&(f[g]=m._data(d,"olddisplay",Fa(d.nodeName)))):(e=U(d),(c&&"none"!==c||!e)&&m._data(d,"olddisplay",e?c:m.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function Wa(a,b,c){var d=Pa.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function Xa(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=m.css(a,c+T[f],!0,e)),d?("content"===c&&(g-=m.css(a,"padding"+T[f],!0,e)),"margin"!==c&&(g-=m.css(a,"border"+T[f]+"Width",!0,e))):(g+=m.css(a,"padding"+T[f],!0,e),"padding"!==c&&(g+=m.css(a,"border"+T[f]+"Width",!0,e)));return g}function Ya(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ia(a),g=k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=Ja(a,b,f),(0>e||null==e)&&(e=a.style[b]),Ha.test(e))return e;d=g&&(k.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+Xa(a,b,c||(g?"border":"content"),d,f)+"px"}m.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Ja(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":k.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=m.camelCase(b),i=a.style;if(b=m.cssProps[h]||(m.cssProps[h]=Ua(i,h)),g=m.cssHooks[b]||m.cssHooks[h],void 0===c)return g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b];if(f=typeof c,"string"===f&&(e=Qa.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(m.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||m.cssNumber[h]||(c+="px"),k.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),!(g&&"set"in g&&void 0===(c=g.set(a,c,d)))))try{i[b]=c}catch(j){}}},css:function(a,b,c,d){var e,f,g,h=m.camelCase(b);return b=m.cssProps[h]||(m.cssProps[h]=Ua(a.style,h)),g=m.cssHooks[b]||m.cssHooks[h],g&&"get"in g&&(f=g.get(a,!0,c)),void 0===f&&(f=Ja(a,b,d)),"normal"===f&&b in Sa&&(f=Sa[b]),""===c||c?(e=parseFloat(f),c===!0||m.isNumeric(e)?e||0:f):f}}),m.each(["height","width"],function(a,b){m.cssHooks[b]={get:function(a,c,d){return c?Oa.test(m.css(a,"display"))&&0===a.offsetWidth?m.swap(a,Ra,function(){return Ya(a,b,d)}):Ya(a,b,d):void 0},set:function(a,c,d){var e=d&&Ia(a);return Wa(a,c,d?Xa(a,b,d,k.boxSizing&&"border-box"===m.css(a,"boxSizing",!1,e),e):0)}}}),k.opacity||(m.cssHooks.opacity={get:function(a,b){return Na.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=m.isNumeric(b)?"alpha(opacity="+100*b+")":"",f=d&&d.filter||c.filter||"";c.zoom=1,(b>=1||""===b)&&""===m.trim(f.replace(Ma,""))&&c.removeAttribute&&(c.removeAttribute("filter"),""===b||d&&!d.filter)||(c.filter=Ma.test(f)?f.replace(Ma,e):f+" "+e)}}),m.cssHooks.marginRight=La(k.reliableMarginRight,function(a,b){return b?m.swap(a,{display:"inline-block"},Ja,[a,"marginRight"]):void 0}),m.each({margin:"",padding:"",border:"Width"},function(a,b){m.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+T[d]+b]=f[d]||f[d-2]||f[0];return e}},Ga.test(a)||(m.cssHooks[a+b].set=Wa)}),m.fn.extend({css:function(a,b){return V(this,function(a,b,c){var d,e,f={},g=0;if(m.isArray(b)){for(d=Ia(a),e=b.length;e>g;g++)f[b[g]]=m.css(a,b[g],!1,d);return f}return void 0!==c?m.style(a,b,c):m.css(a,b)},a,b,arguments.length>1)},show:function(){return Va(this,!0)},hide:function(){return Va(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){U(this)?m(this).show():m(this).hide()})}});function Za(a,b,c,d,e){
+return new Za.prototype.init(a,b,c,d,e)}m.Tween=Za,Za.prototype={constructor:Za,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(m.cssNumber[c]?"":"px")},cur:function(){var a=Za.propHooks[this.prop];return a&&a.get?a.get(this):Za.propHooks._default.get(this)},run:function(a){var b,c=Za.propHooks[this.prop];return this.options.duration?this.pos=b=m.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):Za.propHooks._default.set(this),this}},Za.prototype.init.prototype=Za.prototype,Za.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=m.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){m.fx.step[a.prop]?m.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[m.cssProps[a.prop]]||m.cssHooks[a.prop])?m.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},Za.propHooks.scrollTop=Za.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},m.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},m.fx=Za.prototype.init,m.fx.step={};var $a,_a,ab=/^(?:toggle|show|hide)$/,bb=new RegExp("^(?:([+-])=|)("+S+")([a-z%]*)$","i"),cb=/queueHooks$/,db=[ib],eb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=bb.exec(b),f=e&&e[3]||(m.cssNumber[a]?"":"px"),g=(m.cssNumber[a]||"px"!==f&&+d)&&bb.exec(m.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,m.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};function fb(){return setTimeout(function(){$a=void 0}),$a=m.now()}function gb(a,b){var c,d={height:a},e=0;for(b=b?1:0;4>e;e+=2-b)c=T[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function hb(a,b,c){for(var d,e=(eb[b]||[]).concat(eb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,l,n=this,o={},p=a.style,q=a.nodeType&&U(a),r=m._data(a,"fxshow");c.queue||(h=m._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,n.always(function(){n.always(function(){h.unqueued--,m.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[p.overflow,p.overflowX,p.overflowY],j=m.css(a,"display"),l="none"===j?m._data(a,"olddisplay")||Fa(a.nodeName):j,"inline"===l&&"none"===m.css(a,"float")&&(k.inlineBlockNeedsLayout&&"inline"!==Fa(a.nodeName)?p.zoom=1:p.display="inline-block")),c.overflow&&(p.overflow="hidden",k.shrinkWrapBlocks()||n.always(function(){p.overflow=c.overflow[0],p.overflowX=c.overflow[1],p.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],ab.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(q?"hide":"show")){if("show"!==e||!r||void 0===r[d])continue;q=!0}o[d]=r&&r[d]||m.style(a,d)}else j=void 0;if(m.isEmptyObject(o))"inline"===("none"===j?Fa(a.nodeName):j)&&(p.display=j);else{r?"hidden"in r&&(q=r.hidden):r=m._data(a,"fxshow",{}),f&&(r.hidden=!q),q?m(a).show():n.done(function(){m(a).hide()}),n.done(function(){var b;m._removeData(a,"fxshow");for(b in o)m.style(a,b,o[b])});for(d in o)g=hb(q?r[d]:0,d,n),d in r||(r[d]=g.start,q&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=m.camelCase(c),e=b[d],f=a[c],m.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=m.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=db.length,h=m.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=$a||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:m.extend({},b),opts:m.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:$a||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=m.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);g>f;f++)if(d=db[f].call(j,a,k,j.opts))return d;return m.map(k,hb,j),m.isFunction(j.opts.start)&&j.opts.start.call(a,j),m.fx.timer(m.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}m.Animation=m.extend(kb,{tweener:function(a,b){m.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],eb[c]=eb[c]||[],eb[c].unshift(b)},prefilter:function(a,b){b?db.unshift(a):db.push(a)}}),m.speed=function(a,b,c){var d=a&&"object"==typeof a?m.extend({},a):{complete:c||!c&&b||m.isFunction(a)&&a,duration:a,easing:c&&b||b&&!m.isFunction(b)&&b};return d.duration=m.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in m.fx.speeds?m.fx.speeds[d.duration]:m.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){m.isFunction(d.old)&&d.old.call(this),d.queue&&m.dequeue(this,d.queue)},d},m.fn.extend({fadeTo:function(a,b,c,d){return this.filter(U).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=m.isEmptyObject(a),f=m.speed(b,c,d),g=function(){var b=kb(this,m.extend({},a),f);(e||m._data(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=m.timers,g=m._data(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&cb.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&m.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=m._data(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=m.timers,g=d?d.length:0;for(c.finish=!0,m.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),m.each(["toggle","show","hide"],function(a,b){var c=m.fn[b];m.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),m.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){m.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),m.timers=[],m.fx.tick=function(){var a,b=m.timers,c=0;for($a=m.now();ct a",d=b.getElementsByTagName("a")[0],c=y.createElement("select"),e=c.appendChild(y.createElement("option")),a=b.getElementsByTagName("input")[0],d.style.cssText="top:1px",k.getSetAttribute="t"!==b.className,k.style=/top/.test(d.getAttribute("style")),k.hrefNormalized="/a"===d.getAttribute("href"),k.checkOn=!!a.value,k.optSelected=e.selected,k.enctype=!!y.createElement("form").enctype,c.disabled=!0,k.optDisabled=!e.disabled,a=y.createElement("input"),a.setAttribute("value",""),k.input=""===a.getAttribute("value"),a.value="t",a.setAttribute("type","radio"),k.radioValue="t"===a.value}();var lb=/\r/g;m.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=m.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,m(this).val()):a,null==e?e="":"number"==typeof e?e+="":m.isArray(e)&&(e=m.map(e,function(a){return null==a?"":a+""})),b=m.valHooks[this.type]||m.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=m.valHooks[e.type]||m.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(lb,""):null==c?"":c)}}}),m.extend({valHooks:{option:{get:function(a){var b=m.find.attr(a,"value");return null!=b?b:m.trim(m.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],!(!c.selected&&i!==e||(k.optDisabled?c.disabled:null!==c.getAttribute("disabled"))||c.parentNode.disabled&&m.nodeName(c.parentNode,"optgroup"))){if(b=m(c).val(),f)return b;g.push(b)}return g},set:function(a,b){var c,d,e=a.options,f=m.makeArray(b),g=e.length;while(g--)if(d=e[g],m.inArray(m.valHooks.option.get(d),f)>=0)try{d.selected=c=!0}catch(h){d.scrollHeight}else d.selected=!1;return c||(a.selectedIndex=-1),e}}}}),m.each(["radio","checkbox"],function(){m.valHooks[this]={set:function(a,b){return m.isArray(b)?a.checked=m.inArray(m(a).val(),b)>=0:void 0}},k.checkOn||(m.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var mb,nb,ob=m.expr.attrHandle,pb=/^(?:checked|selected)$/i,qb=k.getSetAttribute,rb=k.input;m.fn.extend({attr:function(a,b){return V(this,m.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){m.removeAttr(this,a)})}}),m.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===K?m.prop(a,b,c):(1===f&&m.isXMLDoc(a)||(b=b.toLowerCase(),d=m.attrHooks[b]||(m.expr.match.bool.test(b)?nb:mb)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=m.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void m.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(E);if(f&&1===a.nodeType)while(c=f[e++])d=m.propFix[c]||c,m.expr.match.bool.test(c)?rb&&qb||!pb.test(c)?a[d]=!1:a[m.camelCase("default-"+c)]=a[d]=!1:m.attr(a,c,""),a.removeAttribute(qb?c:d)},attrHooks:{type:{set:function(a,b){if(!k.radioValue&&"radio"===b&&m.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),nb={set:function(a,b,c){return b===!1?m.removeAttr(a,c):rb&&qb||!pb.test(c)?a.setAttribute(!qb&&m.propFix[c]||c,c):a[m.camelCase("default-"+c)]=a[c]=!0,c}},m.each(m.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ob[b]||m.find.attr;ob[b]=rb&&qb||!pb.test(b)?function(a,b,d){var e,f;return d||(f=ob[b],ob[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,ob[b]=f),e}:function(a,b,c){return c?void 0:a[m.camelCase("default-"+b)]?b.toLowerCase():null}}),rb&&qb||(m.attrHooks.value={set:function(a,b,c){return m.nodeName(a,"input")?void(a.defaultValue=b):mb&&mb.set(a,b,c)}}),qb||(mb={set:function(a,b,c){var d=a.getAttributeNode(c);return d||a.setAttributeNode(d=a.ownerDocument.createAttribute(c)),d.value=b+="","value"===c||b===a.getAttribute(c)?b:void 0}},ob.id=ob.name=ob.coords=function(a,b,c){var d;return c?void 0:(d=a.getAttributeNode(b))&&""!==d.value?d.value:null},m.valHooks.button={get:function(a,b){var c=a.getAttributeNode(b);return c&&c.specified?c.value:void 0},set:mb.set},m.attrHooks.contenteditable={set:function(a,b,c){mb.set(a,""===b?!1:b,c)}},m.each(["width","height"],function(a,b){m.attrHooks[b]={set:function(a,c){return""===c?(a.setAttribute(b,"auto"),c):void 0}}})),k.style||(m.attrHooks.style={get:function(a){return a.style.cssText||void 0},set:function(a,b){return a.style.cssText=b+""}});var sb=/^(?:input|select|textarea|button|object)$/i,tb=/^(?:a|area)$/i;m.fn.extend({prop:function(a,b){return V(this,m.prop,a,b,arguments.length>1)},removeProp:function(a){return a=m.propFix[a]||a,this.each(function(){try{this[a]=void 0,delete this[a]}catch(b){}})}}),m.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!m.isXMLDoc(a),f&&(b=m.propFix[b]||b,e=m.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=m.find.attr(a,"tabindex");return b?parseInt(b,10):sb.test(a.nodeName)||tb.test(a.nodeName)&&a.href?0:-1}}}}),k.hrefNormalized||m.each(["href","src"],function(a,b){m.propHooks[b]={get:function(a){return a.getAttribute(b,4)}}}),k.optSelected||(m.propHooks.selected={get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}}),m.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){m.propFix[this.toLowerCase()]=this}),k.enctype||(m.propFix.enctype="encoding");var ub=/[\t\r\n\f]/g;m.fn.extend({addClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j="string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).addClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):" ")){f=0;while(e=b[f++])d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=m.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0,i=this.length,j=0===arguments.length||"string"==typeof a&&a;if(m.isFunction(a))return this.each(function(b){m(this).removeClass(a.call(this,b,this.className))});if(j)for(b=(a||"").match(E)||[];i>h;h++)if(c=this[h],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(ub," "):"")){f=0;while(e=b[f++])while(d.indexOf(" "+e+" ")>=0)d=d.replace(" "+e+" "," ");g=a?m.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):this.each(m.isFunction(a)?function(c){m(this).toggleClass(a.call(this,c,this.className,b),b)}:function(){if("string"===c){var b,d=0,e=m(this),f=a.match(E)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else(c===K||"boolean"===c)&&(this.className&&m._data(this,"__className__",this.className),this.className=this.className||a===!1?"":m._data(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(ub," ").indexOf(b)>=0)return!0;return!1}}),m.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){m.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),m.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var vb=m.now(),wb=/\?/,xb=/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g;m.parseJSON=function(b){if(a.JSON&&a.JSON.parse)return a.JSON.parse(b+"");var c,d=null,e=m.trim(b+"");return e&&!m.trim(e.replace(xb,function(a,b,e,f){return c&&b&&(d=0),0===d?a:(c=e||b,d+=!f-!e,"")}))?Function("return "+e)():m.error("Invalid JSON: "+b)},m.parseXML=function(b){var c,d;if(!b||"string"!=typeof b)return null;try{a.DOMParser?(d=new DOMParser,c=d.parseFromString(b,"text/xml")):(c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(b))}catch(e){c=void 0}return c&&c.documentElement&&!c.getElementsByTagName("parsererror").length||m.error("Invalid XML: "+b),c};var yb,zb,Ab=/#.*$/,Bb=/([?&])_=[^&]*/,Cb=/^(.*?):[ \t]*([^\r\n]*)\r?$/gm,Db=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Eb=/^(?:GET|HEAD)$/,Fb=/^\/\//,Gb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,Hb={},Ib={},Jb="*/".concat("*");try{zb=location.href}catch(Kb){zb=y.createElement("a"),zb.href="",zb=zb.href}yb=Gb.exec(zb.toLowerCase())||[];function Lb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(E)||[];if(m.isFunction(c))while(d=f[e++])"+"===d.charAt(0)?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Mb(a,b,c,d){var e={},f=a===Ib;function g(h){var i;return e[h]=!0,m.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Nb(a,b){var c,d,e=m.ajaxSettings.flatOptions||{};for(d in b)void 0!==b[d]&&((e[d]?a:c||(c={}))[d]=b[d]);return c&&m.extend(!0,a,c),a}function Ob(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===e&&(e=a.mimeType||b.getResponseHeader("Content-Type"));if(e)for(g in h)if(h[g]&&h[g].test(e)){i.unshift(g);break}if(i[0]in c)f=i[0];else{for(g in c){if(!i[0]||a.converters[g+" "+i[0]]){f=g;break}d||(d=g)}f=f||d}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function Pb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}m.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:zb,type:"GET",isLocal:Db.test(yb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Jb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":m.parseJSON,"text xml":m.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Nb(Nb(a,m.ajaxSettings),b):Nb(m.ajaxSettings,a)},ajaxPrefilter:Lb(Hb),ajaxTransport:Lb(Ib),ajax:function(a,b){"object"==typeof a&&(b=a,a=void 0),b=b||{};var c,d,e,f,g,h,i,j,k=m.ajaxSetup({},b),l=k.context||k,n=k.context&&(l.nodeType||l.jquery)?m(l):m.event,o=m.Deferred(),p=m.Callbacks("once memory"),q=k.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!j){j={};while(b=Cb.exec(f))j[b[1].toLowerCase()]=b[2]}b=j[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(k.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return i&&i.abort(b),x(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,k.url=((a||k.url||zb)+"").replace(Ab,"").replace(Fb,yb[1]+"//"),k.type=b.method||b.type||k.method||k.type,k.dataTypes=m.trim(k.dataType||"*").toLowerCase().match(E)||[""],null==k.crossDomain&&(c=Gb.exec(k.url.toLowerCase()),k.crossDomain=!(!c||c[1]===yb[1]&&c[2]===yb[2]&&(c[3]||("http:"===c[1]?"80":"443"))===(yb[3]||("http:"===yb[1]?"80":"443")))),k.data&&k.processData&&"string"!=typeof k.data&&(k.data=m.param(k.data,k.traditional)),Mb(Hb,k,b,v),2===t)return v;h=m.event&&k.global,h&&0===m.active++&&m.event.trigger("ajaxStart"),k.type=k.type.toUpperCase(),k.hasContent=!Eb.test(k.type),e=k.url,k.hasContent||(k.data&&(e=k.url+=(wb.test(e)?"&":"?")+k.data,delete k.data),k.cache===!1&&(k.url=Bb.test(e)?e.replace(Bb,"$1_="+vb++):e+(wb.test(e)?"&":"?")+"_="+vb++)),k.ifModified&&(m.lastModified[e]&&v.setRequestHeader("If-Modified-Since",m.lastModified[e]),m.etag[e]&&v.setRequestHeader("If-None-Match",m.etag[e])),(k.data&&k.hasContent&&k.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",k.contentType),v.setRequestHeader("Accept",k.dataTypes[0]&&k.accepts[k.dataTypes[0]]?k.accepts[k.dataTypes[0]]+("*"!==k.dataTypes[0]?", "+Jb+"; q=0.01":""):k.accepts["*"]);for(d in k.headers)v.setRequestHeader(d,k.headers[d]);if(k.beforeSend&&(k.beforeSend.call(l,v,k)===!1||2===t))return v.abort();u="abort";for(d in{success:1,error:1,complete:1})v[d](k[d]);if(i=Mb(Ib,k,b,v)){v.readyState=1,h&&n.trigger("ajaxSend",[v,k]),k.async&&k.timeout>0&&(g=setTimeout(function(){v.abort("timeout")},k.timeout));try{t=1,i.send(r,x)}catch(w){if(!(2>t))throw w;x(-1,w)}}else x(-1,"No Transport");function x(a,b,c,d){var j,r,s,u,w,x=b;2!==t&&(t=2,g&&clearTimeout(g),i=void 0,f=d||"",v.readyState=a>0?4:0,j=a>=200&&300>a||304===a,c&&(u=Ob(k,v,c)),u=Pb(k,u,v,j),j?(k.ifModified&&(w=v.getResponseHeader("Last-Modified"),w&&(m.lastModified[e]=w),w=v.getResponseHeader("etag"),w&&(m.etag[e]=w)),204===a||"HEAD"===k.type?x="nocontent":304===a?x="notmodified":(x=u.state,r=u.data,s=u.error,j=!s)):(s=x,(a||!x)&&(x="error",0>a&&(a=0))),v.status=a,v.statusText=(b||x)+"",j?o.resolveWith(l,[r,x,v]):o.rejectWith(l,[v,x,s]),v.statusCode(q),q=void 0,h&&n.trigger(j?"ajaxSuccess":"ajaxError",[v,k,j?r:s]),p.fireWith(l,[v,x]),h&&(n.trigger("ajaxComplete",[v,k]),--m.active||m.event.trigger("ajaxStop")))}return v},getJSON:function(a,b,c){return m.get(a,b,c,"json")},getScript:function(a,b){return m.get(a,void 0,b,"script")}}),m.each(["get","post"],function(a,b){m[b]=function(a,c,d,e){return m.isFunction(c)&&(e=e||d,d=c,c=void 0),m.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),m._evalUrl=function(a){return m.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},m.fn.extend({wrapAll:function(a){if(m.isFunction(a))return this.each(function(b){m(this).wrapAll(a.call(this,b))});if(this[0]){var b=m(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&1===a.firstChild.nodeType)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return this.each(m.isFunction(a)?function(b){m(this).wrapInner(a.call(this,b))}:function(){var b=m(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=m.isFunction(a);return this.each(function(c){m(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){m.nodeName(this,"body")||m(this).replaceWith(this.childNodes)}).end()}}),m.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0||!k.reliableHiddenOffsets()&&"none"===(a.style&&a.style.display||m.css(a,"display"))},m.expr.filters.visible=function(a){return!m.expr.filters.hidden(a)};var Qb=/%20/g,Rb=/\[\]$/,Sb=/\r?\n/g,Tb=/^(?:submit|button|image|reset|file)$/i,Ub=/^(?:input|select|textarea|keygen)/i;function Vb(a,b,c,d){var e;if(m.isArray(b))m.each(b,function(b,e){c||Rb.test(a)?d(a,e):Vb(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==m.type(b))d(a,b);else for(e in b)Vb(a+"["+e+"]",b[e],c,d)}m.param=function(a,b){var c,d=[],e=function(a,b){b=m.isFunction(b)?b():null==b?"":b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=m.ajaxSettings&&m.ajaxSettings.traditional),m.isArray(a)||a.jquery&&!m.isPlainObject(a))m.each(a,function(){e(this.name,this.value)});else for(c in a)Vb(c,a[c],b,e);return d.join("&").replace(Qb,"+")},m.fn.extend({serialize:function(){return m.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=m.prop(this,"elements");return a?m.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!m(this).is(":disabled")&&Ub.test(this.nodeName)&&!Tb.test(a)&&(this.checked||!W.test(a))}).map(function(a,b){var c=m(this).val();return null==c?null:m.isArray(c)?m.map(c,function(a){return{name:b.name,value:a.replace(Sb,"\r\n")}}):{name:b.name,value:c.replace(Sb,"\r\n")}}).get()}}),m.ajaxSettings.xhr=void 0!==a.ActiveXObject?function(){return!this.isLocal&&/^(get|post|head|put|delete|options)$/i.test(this.type)&&Zb()||$b()}:Zb;var Wb=0,Xb={},Yb=m.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Xb)Xb[a](void 0,!0)}),k.cors=!!Yb&&"withCredentials"in Yb,Yb=k.ajax=!!Yb,Yb&&m.ajaxTransport(function(a){if(!a.crossDomain||k.cors){var b;return{send:function(c,d){var e,f=a.xhr(),g=++Wb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)void 0!==c[e]&&f.setRequestHeader(e,c[e]+"");f.send(a.hasContent&&a.data||null),b=function(c,e){var h,i,j;if(b&&(e||4===f.readyState))if(delete Xb[g],b=void 0,f.onreadystatechange=m.noop,e)4!==f.readyState&&f.abort();else{j={},h=f.status,"string"==typeof f.responseText&&(j.text=f.responseText);try{i=f.statusText}catch(k){i=""}h||!a.isLocal||a.crossDomain?1223===h&&(h=204):h=j.text?200:404}j&&d(h,i,j,f.getAllResponseHeaders())},a.async?4===f.readyState?setTimeout(b):f.onreadystatechange=Xb[g]=b:b()},abort:function(){b&&b(void 0,!0)}}}});function Zb(){try{return new a.XMLHttpRequest}catch(b){}}function $b(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}m.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return m.globalEval(a),a}}}),m.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),m.ajaxTransport("script",function(a){if(a.crossDomain){var b,c=y.head||m("head")[0]||y.documentElement;return{send:function(d,e){b=y.createElement("script"),b.async=!0,a.scriptCharset&&(b.charset=a.scriptCharset),b.src=a.url,b.onload=b.onreadystatechange=function(a,c){(c||!b.readyState||/loaded|complete/.test(b.readyState))&&(b.onload=b.onreadystatechange=null,b.parentNode&&b.parentNode.removeChild(b),b=null,c||e(200,"success"))},c.insertBefore(b,c.firstChild)},abort:function(){b&&b.onload(void 0,!0)}}}});var _b=[],ac=/(=)\?(?=&|$)|\?\?/;m.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=_b.pop()||m.expando+"_"+vb++;return this[a]=!0,a}}),m.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(ac.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&ac.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=m.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(ac,"$1"+e):b.jsonp!==!1&&(b.url+=(wb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||m.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,_b.push(e)),g&&m.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),m.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||y;var d=u.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=m.buildFragment([a],b,e),e&&e.length&&m(e).remove(),m.merge([],d.childNodes))};var bc=m.fn.load;m.fn.load=function(a,b,c){if("string"!=typeof a&&bc)return bc.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=m.trim(a.slice(h,a.length)),a=a.slice(0,h)),m.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(f="POST"),g.length>0&&m.ajax({url:a,type:f,dataType:"html",data:b}).done(function(a){e=arguments,g.html(d?m("
"}),b},a.models.candlestickBarChart=function(){var b=a.models.historicalBarChart(a.models.candlestickBar());return b.useInteractiveGuideline(!0),b.interactiveLayer.tooltip.contentGenerator(function(a){var c=a.series[0].data,d=c.openopen: "+b.yAxis.tickFormat()(c.open)+" close: "+b.yAxis.tickFormat()(c.close)+" high "+b.yAxis.tickFormat()(c.high)+" low: "+b.yAxis.tickFormat()(c.low)+"
"}),b},a.models.legend=function(){"use strict";function b(p){function q(a,b){return"furious"!=o?"#000":m?a.disengaged?"#000":"#fff":m?void 0:(a.color||(a.color=g(a,b)),a.disabled?a.color:"#fff")}function r(a,b){return m&&"furious"==o&&a.disengaged?"#eee":a.color||g(a,b)}function s(a){return m&&"furious"==o?1:a.disabled?0:1}return p.each(function(b){var g=d-c.left-c.right,p=d3.select(this);a.utils.initSVG(p);var t=p.selectAll("g.nv-legend").data([b]),u=t.enter().append("g").attr("class","nvd3 nv-legend").append("g"),v=t.select("g");t.attr("transform","translate("+c.left+","+c.top+")");var w,x,y=v.selectAll(".nv-series").data(function(a){return"furious"!=o?a:a.filter(function(a){return m?!0:!a.disengaged})}),z=y.enter().append("g").attr("class","nv-series");switch(o){case"furious":x=23;break;case"classic":x=20}if("classic"==o)z.append("circle").style("stroke-width",2).attr("class","nv-legend-symbol").attr("r",5),w=y.select("circle");else if("furious"==o){z.append("rect").style("stroke-width",2).attr("class","nv-legend-symbol").attr("rx",3).attr("ry",3),w=y.select(".nv-legend-symbol"),z.append("g").attr("class","nv-check-box").property("innerHTML",'open: "+b.yAxis.tickFormat()(c.open)+" close: "+b.yAxis.tickFormat()(c.close)+" high "+b.yAxis.tickFormat()(c.high)+" low: "+b.yAxis.tickFormat()(c.low)+"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+ CRAP
+
+
+
+
+
+
+ MedecinRepo
+
+
+
+
+
+
+ 7
+
+
+
+
+
+
+ getById
+
+
+
+ 1
+
+
+
+
+
+
+ add
+
+
+
+ 2.02
+
+
+
+
+
+
+ delete
+
+
+
+ 1
+
+
+
+
+
+
+ search
+
+
+
+ 1
+
+
+
+
+
+
+ getPatients
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ getAll
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ <?php
+
+ /**
+ * Created by PhpStorm.
+ * User: seekdasky
+ * Date: 02/12/15
+ * Time: 12:36
+ */
+ class MedecinRepo
+ {
+
+ public static function getById($id){
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM Medecin WHERE Id = :id');
+ $req->execute(['id' => $id]);
+ return StaticRepo::delNumeric( $req->fetch(), true );
+
+ }
+
+ public static function add($civilite,$prenom,$nom){
+ $req = StaticRepo::getConnexion()->prepare('INSERT INTO Medecin VALUES (DEFAULT,:civilite,:prenom,:nom)');
+ $result = $req->execute(['civilite' => $civilite,
+ 'nom' => $nom,
+ 'prenom' => $prenom]);
+ if($result != false){return StaticRepo::getConnexion()->lastInsertId();}
+ else{return false;}
+ }
+
+ public static function delete($idMedecin){
+ $req = StaticRepo::getConnexion()->prepare('DELETE FROM Medecin WHERE Id = :id');
+ return $req->execute(['id' => $idMedecin]);
+ }
+
+ public static function search($nom,$prenom){
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM Medecin WHERE Nom LIKE :nom AND Prenom LIKE :prenom');
+ $req->execute(['nom' => $nom,
+ 'prenom' => $prenom]);
+
+ return StaticRepo::delNumeric($req->fetchAll());
+ }
+
+ public static function getPatients($idMedecin){
+
+ $req = StaticRepo::getConnexion()->prepare('SELECT Patient.* FROM Patient,Medecin
+ WHERE Medecin.Id = :id
+ AND Medecin.Id = Patient.MedecinTraitant');
+
+ $req->execute(['id' => $idMedecin]);
+ return StaticRepo::delNumeric($req->fetchAll());
+ }
+
+ public static function getAll(){
+
+ $req = StaticRepo::getConnexion()->query('SELECT * FROM Medecin ORDER BY nom, prenom ASC');
+
+ return StaticRepo::delNumeric( $req->fetchAll() );
+
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+ CRAP
+
+
+
+
+
+
+ PatientRepo
+
+
+
+
+
+
+ 7
+
+
+
+
+
+
+ getById
+
+
+
+ 1
+
+
+
+
+
+
+ add
+
+
+
+ 2.00
+
+
+
+
+
+
+ delete
+
+
+
+ 1
+
+
+
+
+
+
+ updateMedecinTraitant
+
+
+
+ 1
+
+
+
+
+
+
+ search
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ getAll
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ <?php
+
+ /**
+ * Created by PhpStorm.
+ * User: seekdasky
+ * Date: 02/12/15
+ * Time: 12:36
+ */
+ class PatientRepo
+ {
+ // private $connexion;
+
+ // public function __construct(){
+ // StaticRepo::getConnexion() = StaticRepo::getConnexion();
+ // }
+
+ public static function getById($id){
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM Patient WHERE Id = :id');
+ $req->execute(['id' => $id]);
+ return StaticRepo::delNumeric( $req->fetch(), true );
+
+ }
+
+ public static function add($civilite,$prenom,$nom,$adresse,$adresse2,$ville,$codePostal,$dateNaissance,$lieuNaissance,$numSecu,$medecinTraitant = null){
+
+ $dateNaissance = strtotime($dateNaissance);
+ $dateNaissance = Date('o-m-d',$dateNaissance);
+
+ $req = StaticRepo::getConnexion()->prepare('INSERT INTO Patient VALUES (:civilite,:nom,:prenom,:adresse,:adresse2,:ville,:codePostal,:dateNaissance,:lieuNaissance,:numSecu,DEFAULT,:medecin)');
+ $result = $req->execute(['civilite' => $civilite,
+ 'nom' => $nom,
+ 'prenom' => $prenom,
+ 'adresse' => $adresse,
+ 'adresse2' => $adresse2,
+ 'ville' => $ville,
+ 'codePostal' => $codePostal,
+ 'dateNaissance' => $dateNaissance,
+ 'lieuNaissance' => $lieuNaissance,
+ 'numSecu' => $numSecu,
+ 'medecin' => $medecinTraitant ]);
+ if($result){return StaticRepo::getConnexion()->lastInsertId();}
+ else{return false;}
+
+ }
+
+ public static function delete($idPatient){
+
+ $req = StaticRepo::getConnexion()->prepare('DELETE FROM Patient WHERE Patient.Id = :id');
+ return $req->execute(['id' => $idPatient]);
+
+ }
+
+ public static function updateMedecinTraitant($idPatient,$idMedecin){
+
+ $req = StaticRepo::getConnexion()->prepare('UPDATE Patient SET MedecinTraitant = :medecin WHERE Id = :id');
+ return $req->execute(['medecin' => $idMedecin, 'id' => $idPatient]);
+
+ }
+
+ public static function search($nom,$prenom){
+
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM Patient WHERE Nom LIKE :nom AND Prenom LIKE :prenom');
+ $req->execute(['nom' => $nom, 'prenom' => $prenom]);
+ return StaticRepo::delNumeric($req->fetchAll());
+
+ }
+
+ public static function getAll(){
+
+ $req = StaticRepo::getConnexion()->query('SELECT * FROM Patient ORDER BY nom, prenom ASC');
+
+ return StaticRepo::delNumeric( $req->fetchAll() );
+
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+ CRAP
+
+
+
+
+
+
+ RDVRepo
+
+
+
+
+
+
+ 11.05
+
+
+
+
+
+
+ getById
+
+
+
+ 1
+
+
+
+
+
+
+ getByDate
+
+
+
+ 1
+
+
+
+
+
+
+ delete
+
+
+
+ 1
+
+
+
+
+
+
+ add
+
+
+
+ 2.01
+
+
+
+
+
+
+ updateDateTime
+
+
+
+ 1
+
+
+
+
+
+
+ getByPatientAndDate
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ getAll
+
+
+
+ 4.05
+
+
+
+
+
+
+
+
+ <?php
+
+ /**
+ * Created by PhpStorm.
+ * User: seekdasky
+ * Date: 02/12/15
+ * Time: 12:36
+ */
+ class RDVRepo
+ {
+
+ public static function getById($id){
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE RDV.id = :id');
+ $req->execute(['id' => $id]);
+ return StaticRepo::delNumeric( $req->fetch(), true );
+
+ }
+
+ public static function getByDate($date){
+ $date = date('Y-m-d',strtotime($date));
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE DATE(DateRDV) = :date ORDER BY DateRDV ASC');
+ $req->execute(['date' => $date]);
+ return StaticRepo::delNumeric($req->fetchAll());
+ }
+
+ public static function delete($idRDV){
+ $req = StaticRepo::getConnexion()->prepare('DELETE FROM RDV WHERE RDV.id = :id');
+ return $req->execute(['id' => $idRDV]);
+ }
+
+ public static function add($date,$duree,$idPatient,$idMedecin){
+ $date = date('Y-m-d H:i:s',strtotime($date));
+ $duree = date('H:i:s',$duree*60);
+ $req = StaticRepo::getConnexion()->prepare('INSERT INTO RDV VALUES (DEFAULT,:date,:duree,:patient,:medecin)');
+ $result = $req->execute(['date' => $date,
+ 'duree' => $duree,
+ 'patient' => $idPatient,
+ 'medecin' => $idMedecin]);
+
+ if($result != false){return StaticRepo::getConnexion()->lastInsertId();}
+ else{return false;}
+ }
+
+ public static function updateDateTime($idRDV,$dateTime){
+ $date = date('Y-m-d H:i:s',strtotime($dateTime));
+ $req = StaticRepo::getConnexion()->prepare('UPDATE RDV SET DateRDV = :date WHERE id = :id');
+ return $req->execute(['date' => $date,
+ 'id' => $idRDV]);
+ }
+
+ public static function getByPatientAndDate($idPatient,$date){
+ $date = date('Y-m-d',strtotime($date));
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE Patient_Id=:patient AND DATE(DateRDV)=:date');
+ $req->execute(['patient' => $idPatient,
+ 'date' => $date]);
+ return StaticRepo::delNumeric($req->fetchAll());
+ }
+
+ public static function getAll($date = 0){
+ $dateTime = date('Y-m-d',time());
+ switch($date){
+ case -1:
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE DATE(DateRDV) <= :date ORDER BY DateRDV ASC');
+ $req->execute(['date' => $dateTime]);
+ break;
+ case 0:
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV ORDER BY DateRDV ASC');
+ $req->execute();
+ break;
+ case 1:
+ $req = StaticRepo::getConnexion()->prepare('SELECT * FROM RDV WHERE DATE(DateRDV) >= :date ORDER BY DateRDV ASC');
+ $req->execute(['date' => $dateTime]);
+ break;
+ }
+ return StaticRepo::delNumeric($req->fetchAll());
+ }
+
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+ CRAP
+
+
+
+
+
+
+ StatsRepo
+
+
+
+
+
+
+ 8.04
+
+
+
+
+
+
+
+
+ getAgePatient
+
+
+
+ 8.04
+
+
+
+
+
+
+
+
+ <?php
+
+ /**
+ * Created by PhpStorm.
+ * User: seekdasky
+ * Date: 02/12/15
+ * Time: 12:36
+ */
+ class StatsRepo
+ {
+
+ public static function getAgePatient(){
+ $patients = PatientRepo::getAll();
+
+ $homme = ['25-'=>0,'25-50'=>0,'50+'=>0];
+ $femme = ['25-'=>0,'25-50'=>0,'50+'=>0];
+
+ foreach($patients as $key=>$patient){
+ $dateNaissance = strtotime($patient['DateNaissance']);
+ $age = date('Y',time()-$dateNaissance);
+ $patient['age'] = $age - 1970;
+
+ switch($patient['Civilite']){
+ case 'M':
+ if($patient['age']<25){
+ $homme['25-']++;
+ }elseif($patient['age']<50){
+ $homme['25-50']++;
+ }else{
+ $homme['50+']++;
+ }
+ break;
+ case 'F':
+ if($patient['age']<25){
+ $femme['25-']++;
+ }elseif($patient['age']<50){
+ $femme['25-50']++;
+ }else{
+ $femme['50+']++;
+ }
+ break;
+ }
+ }
+
+ return ['H'=>$homme,'F'=>$femme];
+ }
+
+
+
+
+ } Classes
+ Coverage Distribution
+ Complexity
+ Insufficient Coverage
+
+
+
+
+
+
+
+
+
+ Class
+ Coverage
+ Project Risks
+
+
+
+
+
+
+
+
+
+ Class
+ CRAP
+ Methods
+ Coverage Distribution
+ Complexity
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Total
+
+
+
+
+
+
+
+
+
+
+
+
+ MedecinRepo.php
+
+
+
+
+
+
+
+
+
+
+
+
+ PatientRepo.php
+
+
+
+
+
+
+
+
+
+
+
+
+ RDVRepo.php
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ StatsRepo.php
+
+
+
+
+
+
+
+
+
+