Merge branch '2.8'
Conflicts: CHANGELOG-2.3.md CHANGELOG-2.7.md composer.json src/Symfony/Bridge/Twig/composer.json src/Symfony/Bundle/FrameworkBundle/composer.json src/Symfony/Bundle/SecurityBundle/composer.json src/Symfony/Component/Console/Tests/Helper/LegacyProgressHelperTest.php src/Symfony/Component/Console/Tests/Helper/LegacyTableHelperTest.php src/Symfony/Component/Console/composer.json src/Symfony/Component/DomCrawler/composer.json src/Symfony/Component/Form/Tests/FormRegistryTest.php src/Symfony/Component/Form/composer.json src/Symfony/Component/HttpFoundation/composer.json src/Symfony/Component/HttpKernel/Tests/Profiler/MongoDbProfilerStorageTest.php src/Symfony/Component/Intl/composer.json src/Symfony/Component/Ldap/composer.json src/Symfony/Component/Security/Core/composer.json src/Symfony/Component/Security/Csrf/composer.json src/Symfony/Component/Security/Http/composer.json src/Symfony/Component/Security/composer.json src/Symfony/Component/Serializer/Encoder/JsonEncoder.php src/Symfony/Component/Serializer/composer.json src/Symfony/Component/Templating/PhpEngine.php src/Symfony/Component/Translation/composer.json src/Symfony/Component/VarDumper/Tests/HtmlDumperTest.php src/Symfony/Component/VarDumper/composer.json
This commit is contained in:
commit
d0acda84f2
|
@ -10,8 +10,8 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Tobias Schultze (tobion)
|
||||
- Victor Berchet (victor)
|
||||
- Jordi Boggiano (seldaek)
|
||||
- Johannes S (johannes)
|
||||
- Christophe Coevoet (stof)
|
||||
- Johannes S (johannes)
|
||||
- Kris Wallsmith (kriswallsmith)
|
||||
- Jakub Zalas (jakubzalas)
|
||||
- Christian Flothmann (xabbuh)
|
||||
|
@ -28,12 +28,12 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Benjamin Eberlei (beberlei)
|
||||
- Igor Wiedler (igorw)
|
||||
- Martin Hasoň (hason)
|
||||
- Wouter De Jong (wouterj)
|
||||
- Eriksen Costa (eriksencosta)
|
||||
- Grégoire Pineau (lyrixx)
|
||||
- Wouter De Jong (wouterj)
|
||||
- Javier Eguiluz (javier.eguiluz)
|
||||
- Jonathan Wage (jwage)
|
||||
- Kévin Dunglas (dunglas)
|
||||
- Jonathan Wage (jwage)
|
||||
- Alexandre Salomé (alexandresalome)
|
||||
- William Durand (couac)
|
||||
- ornicar
|
||||
|
@ -52,16 +52,18 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Eric Clemmons (ericclemmons)
|
||||
- Andrej Hudec (pulzarraider)
|
||||
- Deni
|
||||
- Maxime Steinhausser (ogizanagi)
|
||||
- Henrik Westphal (snc)
|
||||
- Dariusz Górecki (canni)
|
||||
- Arnout Boks (aboks)
|
||||
- Gábor Egyed (1ed)
|
||||
- Christian Raue
|
||||
- Arnout Boks (aboks)
|
||||
- Michel Weimerskirch (mweimerskirch)
|
||||
- Kevin Bond (kbond)
|
||||
- Lee McDermott
|
||||
- Brandon Turner
|
||||
- Luis Cordova (cordoval)
|
||||
- Douglas Greenshields (shieldo)
|
||||
- Kevin Bond (kbond)
|
||||
- Daniel Holmes (dholmes)
|
||||
- Bart van den Burg (burgov)
|
||||
- Jordan Alliot (jalliot)
|
||||
|
@ -69,18 +71,16 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Fran Moreno (franmomu)
|
||||
- Antoine Hérault (herzult)
|
||||
- Toni Uebernickel (havvg)
|
||||
- Gábor Egyed (1ed)
|
||||
- Matthias Pigulla (mpdude)
|
||||
- Arnaud Le Blanc (arnaud-lb)
|
||||
- Maxime Steinhausser (ogizanagi)
|
||||
- Tim Nagel (merk)
|
||||
- Brice BERNARD (brikou)
|
||||
- Jérôme Tamarelle (gromnan)
|
||||
- marc.weistroff
|
||||
- lenar
|
||||
- Graham Campbell (graham)
|
||||
- Włodzimierz Gajda (gajdaw)
|
||||
- Jérôme Tamarelle (gromnan)
|
||||
- Florian Voutzinos (florianv)
|
||||
- Matthias Pigulla (mpdude)
|
||||
- Colin Frei
|
||||
- Adrien Brault (adrienbrault)
|
||||
- excelwebzone
|
||||
|
@ -88,6 +88,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Fabien Pennequin (fabienpennequin)
|
||||
- Peter Rehm (rpet)
|
||||
- Peter Kokot (maastermedia)
|
||||
- Alexander Schwenn (xelaris)
|
||||
- Gordon Franke (gimler)
|
||||
- Robert Schönthal (digitalkaoz)
|
||||
- Jérémy DERUSSÉ (jderusse)
|
||||
|
@ -95,26 +96,26 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Michal Piotrowski (eventhorizon)
|
||||
- Stefano Sala (stefano.sala)
|
||||
- David Buchmann (dbu)
|
||||
- Alexander Schwenn (xelaris)
|
||||
- Issei Murasawa (issei_m)
|
||||
- Iltar van der Berg (kjarli)
|
||||
- Juti Noppornpitak (shiroyuki)
|
||||
- Eric GELOEN (gelo)
|
||||
- Sebastian Hörl (blogsh)
|
||||
- Daniel Gomes (danielcsgomes)
|
||||
- Hidenori Goto (hidenorigoto)
|
||||
- Joshua Thijssen
|
||||
- Guilherme Blanco (guilhermeblanco)
|
||||
- Iltar van der Berg (kjarli)
|
||||
- Pablo Godel (pgodel)
|
||||
- Vladimir Reznichenko (kalessil)
|
||||
- Jérémie Augustin (jaugustin)
|
||||
- Sebastiaan Stok (sstok)
|
||||
- Issei Murasawa (issei_m)
|
||||
- Rafael Dohms (rdohms)
|
||||
- Arnaud Kleinpeter (nanocom)
|
||||
- Joshua Thijssen
|
||||
- Tigran Azatyan (tigranazatyan)
|
||||
- Richard Shank (iampersistent)
|
||||
- Clemens Tolboom
|
||||
- Helmer Aaviksoo
|
||||
- Baptiste Clavié (talus)
|
||||
- Hiromi Hishida (77web)
|
||||
- Matthieu Ouellette-Vachon (maoueh)
|
||||
- Michał Pipa (michal.pipa)
|
||||
|
@ -122,6 +123,9 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Jonathan Ingram (jonathaningram)
|
||||
- Artur Kotyrba
|
||||
- Rouven Weßling (realityking)
|
||||
- Charles Sarrazin (csarrazi)
|
||||
- Pierre du Plessis (pierredup)
|
||||
- Tugdual Saunier (tucksaun)
|
||||
- Andréia Bohner (andreia)
|
||||
- Dmitrii Chekaliuk (lazyhammer)
|
||||
- Clément JOBEILI (dator)
|
||||
|
@ -131,11 +135,13 @@ Symfony is the result of the work of many people who made the code better
|
|||
- hacfi (hifi)
|
||||
- Mario A. Alvarez Garcia (nomack84)
|
||||
- Dennis Benkert (denderello)
|
||||
- Alexander M. Turek (derrabus)
|
||||
- Konstantin Myakshin (koc)
|
||||
- Benjamin Dulau (dbenjamin)
|
||||
- Andreas Hucks (meandmymonkey)
|
||||
- Mikael Pajunen
|
||||
- Noel Guilbert (noel)
|
||||
- Joel Wurtz (brouznouf)
|
||||
- Charles Sarrazin (csarrazi)
|
||||
- bronze1man
|
||||
- sun (sun)
|
||||
- Larry Garfield (crell)
|
||||
|
@ -146,19 +152,19 @@ Symfony is the result of the work of many people who made the code better
|
|||
- fivestar
|
||||
- Dominique Bongiraud
|
||||
- Leszek Prabucki (l3l0)
|
||||
- Alexander M. Turek (derrabus)
|
||||
- François Zaninotto (fzaninotto)
|
||||
- Dustin Whittle (dustinwhittle)
|
||||
- jeff
|
||||
- John Kary (johnkary)
|
||||
- Justin Hileman (bobthecow)
|
||||
- Michele Orselli (orso)
|
||||
- Sven Paulus (subsven)
|
||||
- Warnar Boekkooi (boekkooi)
|
||||
- Lars Strojny (lstrojny)
|
||||
- Rui Marinho (ruimarinho)
|
||||
- Mikael Pajunen
|
||||
- Julien Brochet (mewt)
|
||||
- Tugdual Saunier (tucksaun)
|
||||
- Sergey Linnik (linniksa)
|
||||
- Jáchym Toušek
|
||||
- Marcel Beerta (mazen)
|
||||
- Vincent AUBERT (vincent)
|
||||
- julien pauli (jpauli)
|
||||
|
@ -166,12 +172,10 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Alexander Kotynia (olden)
|
||||
- Daniel Tschinder
|
||||
- Elnur Abdurrakhimov (elnur)
|
||||
- John Kary (johnkary)
|
||||
- Manuel Reinhard (sprain)
|
||||
- Danny Berger (dpb587)
|
||||
- Roman Marintšenko (inori)
|
||||
- Xavier Montaña Carreras (xmontana)
|
||||
- Michele Orselli (orso)
|
||||
- Chris Wilkinson (thewilkybarkid)
|
||||
- Xavier Perez
|
||||
- Arjen Brouwer (arjenjb)
|
||||
|
@ -192,10 +196,10 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Nikita Konstantinov
|
||||
- Wodor Wodorski
|
||||
- Matthieu Auger (matthieuauger)
|
||||
- Michael Lee (zerustech)
|
||||
- Sébastien Lavoie (lavoiesl)
|
||||
- Beau Simensen (simensen)
|
||||
- Robert Kiss (kepten)
|
||||
- Konstantin Myakshin (koc)
|
||||
- Ruben Gonzalez (rubenrua)
|
||||
- Kim Hemsø Rasmussen (kimhemsoe)
|
||||
- Diego Saint Esteben (dosten)
|
||||
|
@ -205,6 +209,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Peter Kruithof (pkruithof)
|
||||
- Michael Holm (hollo)
|
||||
- Marc Weistroff (futurecat)
|
||||
- Dawid Nowak
|
||||
- Kristen Gilden (kgilden)
|
||||
- Chris Smith (cs278)
|
||||
- Florian Klein (docteurklein)
|
||||
|
@ -220,6 +225,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Thomas Tourlourat (armetiz)
|
||||
- Andrey Esaulov (andremaha)
|
||||
- Grégoire Passault (gregwar)
|
||||
- Ismael Ambrosi (iambrosi)
|
||||
- Uwe Jäger (uwej711)
|
||||
- Aurelijus Valeiša (aurelijus)
|
||||
- Jan Decavele (jandc)
|
||||
|
@ -248,6 +254,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Inal DJAFAR (inalgnu)
|
||||
- Christian Gärtner (dagardner)
|
||||
- Tomasz Kowalczyk (thunderer)
|
||||
- François-Xavier de Guillebon (de-gui_f)
|
||||
- Daniel Wehner
|
||||
- Felix Labrecque
|
||||
- Yaroslav Kiliba
|
||||
|
@ -256,7 +263,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Evgeniy (ewgraf)
|
||||
- Robbert Klarenbeek (robbertkl)
|
||||
- Blanchon Vincent (blanchonvincent)
|
||||
- Dawid Nowak
|
||||
- hossein zolfi (ocean)
|
||||
- Clément Gautier (clementgautier)
|
||||
- Eduardo Gulias (egulias)
|
||||
|
@ -265,7 +271,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Philipp Kräutli (pkraeutli)
|
||||
- Kirill chEbba Chebunin (chebba)
|
||||
- Greg Thornton (xdissent)
|
||||
- Baptiste Clavié (talus)
|
||||
- Costin Bereveanu (schniper)
|
||||
- Loïc Chardonnet (gnusat)
|
||||
- Marek Kalnik (marekkalnik)
|
||||
|
@ -277,7 +282,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Pavel Volokitin (pvolok)
|
||||
- Endre Fejes
|
||||
- Tobias Naumann (tna)
|
||||
- Ismael Ambrosi (iambrosi)
|
||||
- Shein Alexey
|
||||
- Joe Lencioni
|
||||
- Daniel Tschinder
|
||||
|
@ -298,7 +302,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Christophe L. (christophelau)
|
||||
- Massimiliano Arione (garak)
|
||||
- Anthon Pang (robocoder)
|
||||
- Jáchym Toušek
|
||||
- Jannik Zschiesche (apfelbox)
|
||||
- Emanuele Gaspari (inmarelibero)
|
||||
- Dariusz Rumiński
|
||||
|
@ -308,12 +311,10 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Jeanmonod David (jeanmonod)
|
||||
- Berny Cantos (xphere81)
|
||||
- Thomas Lallement (raziel057)
|
||||
- Michael Lee (zerustech)
|
||||
- Jan Schumann
|
||||
- Niklas Fiekas
|
||||
- lancergr
|
||||
- Antonio J. García Lagar (ajgarlag)
|
||||
- Pierre du Plessis (pierredup)
|
||||
- Olivier Dolbeau (odolbeau)
|
||||
- Roumen Damianoff (roumen)
|
||||
- vagrant
|
||||
|
@ -329,11 +330,11 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Christian Schmidt
|
||||
- Marcin Sikoń (marphi)
|
||||
- Dominik Zogg (dominik.zogg)
|
||||
- Mathieu Lemoine
|
||||
- franek (franek)
|
||||
- Damien Alexandre (damienalexandre)
|
||||
- Adam Harvey
|
||||
- Alex Bakhturin
|
||||
- François-Xavier de Guillebon (de-gui_f)
|
||||
- boombatower
|
||||
- Fabrice Bernhard (fabriceb)
|
||||
- Jérôme Macias (jeromemacias)
|
||||
|
@ -364,6 +365,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Daniel Beyer
|
||||
- Andrew Udvare (audvare)
|
||||
- alexpods
|
||||
- Richard van Laak (rvanlaak)
|
||||
- Erik Trapman (eriktrapman)
|
||||
- De Cock Xavier (xdecock)
|
||||
- Scott Arciszewski
|
||||
|
@ -379,12 +381,15 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Dawid Pakuła (zulusx)
|
||||
- Florian Rey (nervo)
|
||||
- Rodrigo Borrego Bernabé (rodrigobb)
|
||||
- MatTheCat
|
||||
- John Bafford (jbafford)
|
||||
- Denis Gorbachev (starfall)
|
||||
- Titouan Galopin (tgalopin)
|
||||
- Steven Surowiec
|
||||
- Kevin Saliou (kbsali)
|
||||
- Ryan
|
||||
- Alexander Deruwe (aderuwe)
|
||||
- Alain Hippolyte (aloneh)
|
||||
- Dave Hulbert (dave1010)
|
||||
- François Pluchino (francoispluchino)
|
||||
- Ivan Rey (ivanrey)
|
||||
|
@ -445,6 +450,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- umpirski
|
||||
- Chris Heng (gigablah)
|
||||
- Ulumuddin Yunus (joenoez)
|
||||
- Florian Pfitzer (marmelatze)
|
||||
- Luc Vieillescazes (iamluc)
|
||||
- Johann Saunier (prophet777)
|
||||
- Antoine Corcy
|
||||
|
@ -471,7 +477,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- develop
|
||||
- Mark Sonnabaum
|
||||
- Alexander Obuhovich (aik099)
|
||||
- Mathieu Lemoine
|
||||
- jochenvdv
|
||||
- Filippo Tessarotto
|
||||
- Arturas Smorgun (asarturas)
|
||||
|
@ -538,7 +543,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Abhoryo
|
||||
- Fabian Vogler (fabian)
|
||||
- Korvin Szanto
|
||||
- MatTheCat
|
||||
- Alaattin Kahramanlar (alaattin)
|
||||
- Maksim Kotlyar (makasim)
|
||||
- Neil Ferreira
|
||||
- Dmitry Parnas (parnas)
|
||||
|
@ -555,21 +560,19 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Matt Robinson (inanimatt)
|
||||
- Tristan Darricau (nicofuma)
|
||||
- Aleksey Podskrebyshev
|
||||
- Steffen Roßkamp
|
||||
- David Marín Carreño (davefx)
|
||||
- Jörn Lang (j.lang)
|
||||
- Leo Feyer
|
||||
- John Bafford (jbafford)
|
||||
- mwsaz
|
||||
- Benoît Bourgeois
|
||||
- corphi
|
||||
- grizlik
|
||||
- Derek ROTH
|
||||
- Alain Hippolyte (aloneh)
|
||||
- Shin Ohno (ganchiku)
|
||||
- Geert De Deckere (geertdd)
|
||||
- Jan Kramer (jankramer)
|
||||
- Jean-Baptiste GOMOND (mjbgo)
|
||||
- Richard van Laak (rvanlaak)
|
||||
- abdul malik ikhsan (samsonasik)
|
||||
- Henry Snoek (snoek09)
|
||||
- Timothée Barray (tyx)
|
||||
|
@ -596,6 +599,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Daniel Cestari
|
||||
- Brunet Laurent (lbrunet)
|
||||
- Magnus Nordlander (magnusnordlander)
|
||||
- Michiel Boeckaert (milio)
|
||||
- Mikhail Yurasov (mym)
|
||||
- LOUARDI Abdeltif (ouardisoft)
|
||||
- Robert Gruendler (pulse00)
|
||||
|
@ -620,6 +624,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Chris Jones (leek)
|
||||
- Colin O'Dell (colinodell)
|
||||
- xaav
|
||||
- Jean-Christophe Cuvelier [Artack]
|
||||
- Mahmoud Mostafa (mahmoud)
|
||||
- Michael Tibben
|
||||
- Sander Marechal
|
||||
|
@ -628,6 +633,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Mei Gwilym (meigwilym)
|
||||
- Michael H. Arieli (excelwebzone)
|
||||
- Luciano Mammino (loige)
|
||||
- Michael Hirschler (mvhirsch)
|
||||
- fabios
|
||||
- Jérôme Vasseur
|
||||
- Sander Coolen (scoolen)
|
||||
|
@ -668,15 +674,18 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Ville Mattila
|
||||
- Boris Vujicic (boris.vujicic)
|
||||
- Max Beutel
|
||||
- Michal Trojanowski
|
||||
- Catalin Dan
|
||||
- nacho
|
||||
- Piotr Antosik (antek88)
|
||||
- Artem Lopata
|
||||
- Samuel ROZE (sroze)
|
||||
- Sergey Novikov (s12v)
|
||||
- Marcos Quesada (marcos_quesada)
|
||||
- Matthew Vickery (mattvick)
|
||||
- Dan Finnie
|
||||
- Ken Marfilla (marfillaster)
|
||||
- Max Grigorian (maxakawizard)
|
||||
- benatespina (benatespina)
|
||||
- Denis Kop
|
||||
- jfcixmedia
|
||||
|
@ -709,9 +718,11 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Jochen Bayer (jocl)
|
||||
- Jeremy Bush
|
||||
- wizhippo
|
||||
- Viacheslav Sychov
|
||||
- rpg600
|
||||
- Péter Buri (burci)
|
||||
- Davide Borsatto (davide.borsatto)
|
||||
- Teoh Han Hui (teohhanhui)
|
||||
- kaiwa
|
||||
- Charles Sanquer (csanquer)
|
||||
- Albert Ganiev (helios-ag)
|
||||
|
@ -723,9 +734,11 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Artem Kolesnikov (tyomo4ka)
|
||||
- Gustavo Adrian
|
||||
- Yannick
|
||||
- spdionis
|
||||
- Eduardo García Sanz (coma)
|
||||
- James Gilliland
|
||||
- Roy Van Ginneken
|
||||
- Stephan Vock
|
||||
- David de Boer (ddeboer)
|
||||
- Gilles Doge (gido)
|
||||
- abulford
|
||||
|
@ -768,7 +781,9 @@ Symfony is the result of the work of many people who made the code better
|
|||
- ConneXNL
|
||||
- Aharon Perkel
|
||||
- Abdul.Mohsen B. A. A
|
||||
- Gintautas Miselis
|
||||
- Benoît Burnichon
|
||||
- Remi Collet
|
||||
- pthompson
|
||||
- Malaney J. Hill
|
||||
- Christian Flach (cmfcmf)
|
||||
|
@ -806,6 +821,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Berat Doğan
|
||||
- twifty
|
||||
- Anthony Ferrara
|
||||
- Klaas Cuvelier (kcuvelier)
|
||||
- ShiraNai7
|
||||
- Janusz Jabłoński (yanoosh)
|
||||
- George Giannoulopoulos
|
||||
|
@ -868,6 +884,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Thomas Chmielowiec (chmielot)
|
||||
- Jānis Lukss
|
||||
- rkerner
|
||||
- Alex Silcock
|
||||
- Rob Bast
|
||||
- Matthew J Mucklo
|
||||
- fdgdfg (psampaz)
|
||||
|
@ -964,12 +981,14 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Botond Dani (picur)
|
||||
- Thierry Marianne (thierrymarianne)
|
||||
- Nick Stemerdink
|
||||
- David Stone
|
||||
- jjanvier
|
||||
- Julius Beckmann
|
||||
- Romain Dorgueil
|
||||
- Grayson Koonce (breerly)
|
||||
- Karim Cassam Chenaï (ka)
|
||||
- Nicolas Bastien (nicolas_bastien)
|
||||
- Denis (yethee)
|
||||
- Andrew Zhilin (zhil)
|
||||
- Andy Stanberry
|
||||
- Luiz “Felds” Liscia
|
||||
|
@ -977,6 +996,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- alefranz
|
||||
- avi123
|
||||
- alsar
|
||||
- Aarón Nieves Fernández
|
||||
- Mike Meier
|
||||
- Kirill Saksin
|
||||
- michalmarcinkowski
|
||||
|
@ -1025,6 +1045,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- J Bruni
|
||||
- Alexey Prilipko
|
||||
- bertillon
|
||||
- Victor Bocharsky (bocharsky_bw)
|
||||
- Luca Genuzio (genuzio)
|
||||
- Hans Nilsson (hansnilsson)
|
||||
- Andrew Marcinkevičius (ifdattic)
|
||||
|
@ -1037,6 +1058,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- tante kinast (tante)
|
||||
- Vincent LEFORT (vlefort)
|
||||
- Sadicov Vladimir (xtech)
|
||||
- Peter van Dommelen
|
||||
- Alexander Zogheb
|
||||
- Rémi Blaise
|
||||
- Joel Marcey
|
||||
|
@ -1053,7 +1075,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Grégory Pelletier (ip512)
|
||||
- John Nickell (jrnickell)
|
||||
- Julien DIDIER (juliendidier)
|
||||
- Florian Pfitzer (marmelatze)
|
||||
- Martin Mayer (martin)
|
||||
- Grzegorz Łukaszewicz (newicz)
|
||||
- Omar Yepez (oyepez003)
|
||||
|
@ -1068,6 +1089,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Joseph Maarek
|
||||
- Alexander Menk
|
||||
- Alex Pods
|
||||
- hadriengem
|
||||
- timaschew
|
||||
- Ian Phillips
|
||||
- Haritz
|
||||
|
@ -1080,12 +1102,12 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Per Modin
|
||||
- David Windell
|
||||
- Gabriel Birke
|
||||
- Steffen Roßkamp
|
||||
- skafandri
|
||||
- Alan Chen
|
||||
- Maerlyn
|
||||
- Even André Fiskvik
|
||||
- Diego Agulló
|
||||
- Dane Powell
|
||||
- Gerrit Drost
|
||||
- Lenar Lõhmus
|
||||
- Cristian Gonzalez
|
||||
|
@ -1141,6 +1163,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Alexey Popkov
|
||||
- Joseph Deray
|
||||
- Damian Sromek
|
||||
- Ben
|
||||
- Arnaud Buathier (arnapou)
|
||||
- chesteroni (chesteroni)
|
||||
- Mauricio Lopez (diaspar)
|
||||
|
@ -1205,6 +1228,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Brian Freytag
|
||||
- Skorney
|
||||
- mieszko4
|
||||
- Steve Preston
|
||||
- Neophy7e
|
||||
- bokonet
|
||||
- Arrilot
|
||||
|
@ -1235,6 +1259,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- DanSync
|
||||
- Peter Zwosta
|
||||
- parhs
|
||||
- Diego Campoy
|
||||
- TeLiXj
|
||||
- Oncle Tom
|
||||
- Christian Stocker
|
||||
|
@ -1247,11 +1272,12 @@ Symfony is the result of the work of many people who made the code better
|
|||
- ilyes kooli
|
||||
- Matthias Althaus
|
||||
- Michaël VEROUX
|
||||
- Julia
|
||||
- arduanov
|
||||
- sualko
|
||||
- Nicolas Roudaire
|
||||
- Alfonso (afgar)
|
||||
- Andreas Forsblom (aforsblo)
|
||||
- Alaattin Kahramanlar (alaattin)
|
||||
- Alex Olmos (alexolmos)
|
||||
- Antonio Mansilla (amansilla)
|
||||
- Juan Ases García (ases)
|
||||
|
@ -1305,6 +1331,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Philipp Hoffmann (philipphoffmann)
|
||||
- Alex Carol (picard89)
|
||||
- Daniel Perez Pinazo (pitiflautico)
|
||||
- Brayden Williams (redstar504)
|
||||
- Rich Sage (richsage)
|
||||
- Ruud Kamphuis (ruudk)
|
||||
- Bart Ruysseveldt (ruyss)
|
||||
|
@ -1325,6 +1352,7 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Vincent (vincent1870)
|
||||
- Eugene Babushkin (warl)
|
||||
- Xavier Amado (xamado)
|
||||
- Yonel Ceruto González (yonelceruto)
|
||||
- Jesper Søndergaard Pedersen (zerrvox)
|
||||
- Florent Cailhol
|
||||
- szymek
|
||||
|
@ -1349,7 +1377,6 @@ Symfony is the result of the work of many people who made the code better
|
|||
- Maxime COLIN (maximecolin)
|
||||
- Muharrem Demirci (mdemirci)
|
||||
- Evgeny Z (meze)
|
||||
- Michiel Boeckaert (milio)
|
||||
- Nicolas de Marqué (nicola)
|
||||
- Kevin (oxfouzer)
|
||||
- Pierre Geyer (ptheg)
|
||||
|
|
|
@ -20,7 +20,14 @@
|
|||
"doctrine/common": "~2.4",
|
||||
"twig/twig": "~1.20|~2.0",
|
||||
"psr/log": "~1.0",
|
||||
"paragonie/random_compat": "~1.0"
|
||||
"symfony/security-acl": "~2.7",
|
||||
"symfony/polyfill-intl-icu": "~1.0",
|
||||
"symfony/polyfill-mbstring": "~1.0",
|
||||
"symfony/polyfill-php54": "~1.0",
|
||||
"symfony/polyfill-php55": "~1.0",
|
||||
"symfony/polyfill-php56": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0",
|
||||
"symfony/polyfill-util": "~1.0"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/asset": "self.version",
|
||||
|
@ -93,10 +100,8 @@
|
|||
"Symfony\\Component\\": "src/Symfony/Component/"
|
||||
},
|
||||
"classmap": [
|
||||
"src/Symfony/Component/HttpFoundation/Resources/stubs",
|
||||
"src/Symfony/Component/Intl/Resources/stubs"
|
||||
],
|
||||
"files": [ "src/Symfony/Component/Intl/Resources/stubs/functions.php" ]
|
||||
]
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
|
|
|
@ -117,6 +117,9 @@ class DoctrineDataCollector extends DataCollector
|
|||
private function sanitizeQuery($connectionName, $query)
|
||||
{
|
||||
$query['explainable'] = true;
|
||||
if (null === $query['params']) {
|
||||
$query['params'] = array();
|
||||
}
|
||||
if (!is_array($query['params'])) {
|
||||
$query['params'] = array($query['params']);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,7 @@ class DoctrineOrmTypeGuesser implements FormTypeGuesserInterface
|
|||
public function guessType($class, $property)
|
||||
{
|
||||
if (!$ret = $this->getMetadata($class)) {
|
||||
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
|
||||
}
|
||||
|
||||
list($metadata, $name) = $ret;
|
||||
|
@ -48,35 +48,35 @@ class DoctrineOrmTypeGuesser implements FormTypeGuesserInterface
|
|||
$multiple = $metadata->isCollectionValuedAssociation($property);
|
||||
$mapping = $metadata->getAssociationMapping($property);
|
||||
|
||||
return new TypeGuess('entity', array('em' => $name, 'class' => $mapping['targetEntity'], 'multiple' => $multiple), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Bridge\Doctrine\Form\Type\EntityType', array('em' => $name, 'class' => $mapping['targetEntity'], 'multiple' => $multiple), Guess::HIGH_CONFIDENCE);
|
||||
}
|
||||
|
||||
switch ($metadata->getTypeOfField($property)) {
|
||||
case Type::TARRAY:
|
||||
return new TypeGuess('collection', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
case Type::BOOLEAN:
|
||||
return new TypeGuess('checkbox', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', array(), Guess::HIGH_CONFIDENCE);
|
||||
case Type::DATETIME:
|
||||
case Type::DATETIMETZ:
|
||||
case 'vardatetime':
|
||||
return new TypeGuess('datetime', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', array(), Guess::HIGH_CONFIDENCE);
|
||||
case Type::DATE:
|
||||
return new TypeGuess('date', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', array(), Guess::HIGH_CONFIDENCE);
|
||||
case Type::TIME:
|
||||
return new TypeGuess('time', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', array(), Guess::HIGH_CONFIDENCE);
|
||||
case Type::DECIMAL:
|
||||
case Type::FLOAT:
|
||||
return new TypeGuess('number', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
case Type::INTEGER:
|
||||
case Type::BIGINT:
|
||||
case Type::SMALLINT:
|
||||
return new TypeGuess('integer', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\IntegerType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
case Type::STRING:
|
||||
return new TypeGuess('text', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
case Type::TEXT:
|
||||
return new TypeGuess('textarea', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextareaType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
default:
|
||||
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -99,16 +99,9 @@ class DbalLogger implements SQLLogger
|
|||
}
|
||||
|
||||
// detect if the too long string must be shorten
|
||||
if (function_exists('mb_strlen')) {
|
||||
if (self::MAX_STRING_LENGTH < mb_strlen($params[$index], 'UTF-8')) {
|
||||
$params[$index] = mb_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]';
|
||||
continue;
|
||||
}
|
||||
} else {
|
||||
if (self::MAX_STRING_LENGTH < strlen($params[$index])) {
|
||||
$params[$index] = substr($params[$index], 0, self::MAX_STRING_LENGTH - 6).' [...]';
|
||||
continue;
|
||||
}
|
||||
if (self::MAX_STRING_LENGTH < iconv_strlen($params[$index], 'UTF-8')) {
|
||||
$params[$index] = iconv_substr($params[$index], 0, self::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]';
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -79,9 +79,25 @@ class DoctrineDataCollectorTest extends \PHPUnit_Framework_TestCase
|
|||
$c = $this->createCollector($queries);
|
||||
$c->collect(new Request(), new Response());
|
||||
|
||||
$collected_queries = $c->getQueries();
|
||||
$this->assertEquals($expected, $collected_queries['default'][0]['params'][0]);
|
||||
$this->assertEquals($explainable, $collected_queries['default'][0]['explainable']);
|
||||
$collectedQueries = $c->getQueries();
|
||||
$this->assertEquals($expected, $collectedQueries['default'][0]['params'][0]);
|
||||
$this->assertEquals($explainable, $collectedQueries['default'][0]['explainable']);
|
||||
}
|
||||
|
||||
public function testCollectQueryWithNoParams()
|
||||
{
|
||||
$queries = array(
|
||||
array('sql' => 'SELECT * FROM table1', 'params' => array(), 'types' => array(), 'executionMS' => 1),
|
||||
array('sql' => 'SELECT * FROM table1', 'params' => null, 'types' => null, 'executionMS' => 1),
|
||||
);
|
||||
$c = $this->createCollector($queries);
|
||||
$c->collect(new Request(), new Response());
|
||||
|
||||
$collectedQueries = $c->getQueries();
|
||||
$this->assertEquals(array(), $collectedQueries['default'][0]['params']);
|
||||
$this->assertTrue($collectedQueries['default'][0]['explainable']);
|
||||
$this->assertEquals(array(), $collectedQueries['default'][1]['params']);
|
||||
$this->assertTrue($collectedQueries['default'][1]['explainable']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -96,9 +112,9 @@ class DoctrineDataCollectorTest extends \PHPUnit_Framework_TestCase
|
|||
$c->collect(new Request(), new Response());
|
||||
$c = unserialize(serialize($c));
|
||||
|
||||
$collected_queries = $c->getQueries();
|
||||
$this->assertEquals($expected, $collected_queries['default'][0]['params'][0]);
|
||||
$this->assertEquals($explainable, $collected_queries['default'][0]['explainable']);
|
||||
$collectedQueries = $c->getQueries();
|
||||
$this->assertEquals($expected, $collectedQueries['default'][0]['params'][0]);
|
||||
$this->assertEquals($explainable, $collectedQueries['default'][0]['explainable']);
|
||||
}
|
||||
|
||||
public function paramProvider()
|
||||
|
|
|
@ -132,9 +132,6 @@ class DbalLoggerTest extends \PHPUnit_Framework_TestCase
|
|||
));
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testLogUTF8LongString()
|
||||
{
|
||||
$logger = $this->getMock('Psr\\Log\\LoggerInterface');
|
||||
|
@ -160,7 +157,7 @@ class DbalLoggerTest extends \PHPUnit_Framework_TestCase
|
|||
$dbalLogger
|
||||
->expects($this->once())
|
||||
->method('log')
|
||||
->with('SQL', array('short' => $shortString, 'long' => mb_substr($longString, 0, DbalLogger::MAX_STRING_LENGTH - 6, mb_detect_encoding($longString)).' [...]'))
|
||||
->with('SQL', array('short' => $shortString, 'long' => mb_substr($longString, 0, DbalLogger::MAX_STRING_LENGTH - 6, 'UTF-8').' [...]'))
|
||||
;
|
||||
|
||||
$dbalLogger->startQuery('SQL', array(
|
||||
|
|
|
@ -24,7 +24,6 @@ class SymfonyTestsListener extends \PHPUnit_Framework_BaseTestListener
|
|||
private $skippedFile = false;
|
||||
private $wasSkipped = array();
|
||||
private $isSkipped = array();
|
||||
private $testsStack = array();
|
||||
|
||||
public function __destruct()
|
||||
{
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
"symfony/finder": "~2.8|~3.0",
|
||||
"symfony/form": "~2.8|~3.0",
|
||||
"symfony/http-kernel": "~2.8|~3.0",
|
||||
"symfony/intl": "~2.8|~3.0",
|
||||
"symfony/polyfill-intl-icu": "~1.0",
|
||||
"symfony/routing": "~2.8|~3.0",
|
||||
"symfony/templating": "~2.8|~3.0",
|
||||
"symfony/translation": "~2.8|~3.0",
|
||||
|
|
|
@ -34,6 +34,10 @@ class ClassCacheCacheWarmer implements CacheWarmerInterface
|
|||
return;
|
||||
}
|
||||
|
||||
if (file_exists($cacheDir.'/classes.php')) {
|
||||
return;
|
||||
}
|
||||
|
||||
ClassCollectionLoader::load(include($classmap), $cacheDir, 'classes', false);
|
||||
}
|
||||
|
||||
|
|
|
@ -234,7 +234,7 @@ EOF
|
|||
{
|
||||
$string = trim(preg_replace('/\s+/', ' ', $string));
|
||||
|
||||
if (function_exists('mb_strlen') && false !== $encoding = mb_detect_encoding($string)) {
|
||||
if (false !== $encoding = mb_detect_encoding($string, null, true)) {
|
||||
if (mb_strlen($string, $encoding) > $length) {
|
||||
return mb_substr($string, 0, $length - 3, $encoding).'...';
|
||||
}
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
_fragmenttest_bundle:
|
||||
resource: @TestBundle/Resources/config/routing.yml
|
||||
resource: '@TestBundle/Resources/config/routing.yml'
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
_sessiontest_bundle:
|
||||
resource: @TestBundle/Resources/config/routing.yml
|
||||
resource: '@TestBundle/Resources/config/routing.yml'
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
_sessiontest_bundle:
|
||||
resource: @TestBundle/Resources/config/routing.yml
|
||||
resource: '@TestBundle/Resources/config/routing.yml'
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
"symfony/event-dispatcher": "~2.8|~3.0",
|
||||
"symfony/http-foundation": "~2.8|~3.0",
|
||||
"symfony/http-kernel": "~2.8|~3.0",
|
||||
"symfony/polyfill-mbstring": "~1.0",
|
||||
"symfony/filesystem": "~2.8|~3.0",
|
||||
"symfony/routing": "~3.0",
|
||||
"symfony/security-core": "~2.8|~3.0",
|
||||
|
@ -40,7 +41,7 @@
|
|||
"symfony/css-selector": "~2.8|~3.0",
|
||||
"symfony/dom-crawler": "~2.8|~3.0",
|
||||
"symfony/finder": "~2.8|~3.0",
|
||||
"symfony/intl": "~2.8|~3.0",
|
||||
"symfony/polyfill-intl-icu": "~1.0",
|
||||
"symfony/security": "~2.8|~3.0",
|
||||
"symfony/form": "~2.8|~3.0",
|
||||
"symfony/expression-language": "~2.8|~3.0",
|
||||
|
|
|
@ -5,7 +5,7 @@ services:
|
|||
csrf_form_login.form.type:
|
||||
class: Symfony\Bundle\SecurityBundle\Tests\Functional\Bundle\CsrfFormLoginBundle\Form\UserLoginType
|
||||
arguments:
|
||||
- @request_stack
|
||||
- '@request_stack'
|
||||
tags:
|
||||
- { name: form.type }
|
||||
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
_csrf_form_login_bundle:
|
||||
resource: @CsrfFormLoginBundle/Resources/config/routing.yml
|
||||
resource: '@CsrfFormLoginBundle/Resources/config/routing.yml'
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
_form_login_bundle:
|
||||
resource: @FormLoginBundle/Resources/config/routing.yml
|
||||
resource: '@FormLoginBundle/Resources/config/routing.yml'
|
||||
|
||||
_form_login_localized:
|
||||
resource: @FormLoginBundle/Resources/config/localized_routing.yml
|
||||
resource: '@FormLoginBundle/Resources/config/localized_routing.yml'
|
||||
|
|
|
@ -19,11 +19,11 @@
|
|||
"php": ">=5.5.9",
|
||||
"symfony/security": "~2.8|~3.0",
|
||||
"symfony/security-acl": "~2.8|~3.0",
|
||||
"symfony/http-kernel": "~2.8|~3.0"
|
||||
"symfony/http-kernel": "~2.8|~3.0",
|
||||
"symfony/polyfill-php70": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/browser-kit": "~2.8|~3.0",
|
||||
"symfony/config": "~2.8|~3.0",
|
||||
"symfony/console": "~2.8|~3.0",
|
||||
"symfony/css-selector": "~2.8|~3.0",
|
||||
"symfony/dom-crawler": "~2.8|~3.0",
|
||||
|
|
|
@ -186,6 +186,7 @@ class ProfilerController
|
|||
}
|
||||
|
||||
return new Response($this->twig->render('@WebProfiler/Profiler/toolbar.html.twig', array(
|
||||
'request' => $request,
|
||||
'position' => $position,
|
||||
'profile' => $profile,
|
||||
'templates' => $this->getTemplateManager()->getTemplates($profile),
|
||||
|
@ -221,13 +222,13 @@ class ProfilerController
|
|||
$limit =
|
||||
$token = null;
|
||||
} else {
|
||||
$ip = $session->get('_profiler_search_ip');
|
||||
$method = $session->get('_profiler_search_method');
|
||||
$url = $session->get('_profiler_search_url');
|
||||
$start = $session->get('_profiler_search_start');
|
||||
$end = $session->get('_profiler_search_end');
|
||||
$limit = $session->get('_profiler_search_limit');
|
||||
$token = $session->get('_profiler_search_token');
|
||||
$ip = $request->query->get('ip', $session->get('_profiler_search_ip'));
|
||||
$method = $request->query->get('method', $session->get('_profiler_search_method'));
|
||||
$url = $request->query->get('url', $session->get('_profiler_search_url'));
|
||||
$start = $request->query->get('start', $session->get('_profiler_search_start'));
|
||||
$end = $request->query->get('end', $session->get('_profiler_search_end'));
|
||||
$limit = $request->query->get('limit', $session->get('_profiler_search_limit'));
|
||||
$token = $request->query->get('token', $session->get('_profiler_search_token'));
|
||||
}
|
||||
|
||||
return new Response(
|
||||
|
@ -274,6 +275,7 @@ class ProfilerController
|
|||
$limit = $request->query->get('limit');
|
||||
|
||||
return new Response($this->twig->render('@WebProfiler/Profiler/results.html.twig', array(
|
||||
'request' => $request,
|
||||
'token' => $token,
|
||||
'profile' => $profile,
|
||||
'tokens' => $this->profiler->find($ip, $url, $limit, $method, $start, $end),
|
||||
|
@ -330,6 +332,7 @@ class ProfilerController
|
|||
$tokens = $this->profiler->find($ip, $url, $limit, $method, $start, $end);
|
||||
|
||||
return new RedirectResponse($this->generator->generate('_profiler_search_results', array(
|
||||
'request' => $request,
|
||||
'token' => $tokens ? $tokens[0]['token'] : 'empty',
|
||||
'ip' => $ip,
|
||||
'method' => $method,
|
||||
|
|
|
@ -171,6 +171,8 @@
|
|||
var text = requestStack.length + ' AJAX request' + (requestStack.length > 1 ? 's' : '');
|
||||
infoSpan.textContent = text;
|
||||
}
|
||||
|
||||
ajaxToolbarPanel.style.display = 'block';
|
||||
} else {
|
||||
ajaxToolbarPanel.style.display = 'none';
|
||||
}
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
{{ include('@WebProfiler/Icon/search.svg') }} <span class="hidden-small">Search</span>
|
||||
</a>
|
||||
|
||||
{{ render(path('_profiler_search_bar')) }}
|
||||
{{ render(path('_profiler_search_bar', request.query.all)) }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
|
|
@ -365,6 +365,32 @@ tr.status-warning td {
|
|||
.highlight .number { color: #F5871F; font-weight: bold; }
|
||||
.highlight .error { color: #C82829; }
|
||||
|
||||
{# Icons
|
||||
========================================================================= #}
|
||||
.sf-icon {
|
||||
vertical-align: middle;
|
||||
background-repeat: no-repeat;
|
||||
background-size: contain;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
display: inline-block;
|
||||
}
|
||||
.sf-icon svg {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
.sf-icon.sf-medium,
|
||||
.sf-icon.sf-medium svg {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
.sf-icon.sf-large,
|
||||
.sf-icon.sf-large svg {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
|
||||
{# Layout
|
||||
========================================================================= #}
|
||||
.container {
|
||||
|
@ -849,6 +875,14 @@ table.logs .metadata strong {
|
|||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#search-results .sf-search {
|
||||
visibility: hidden;
|
||||
margin-left: 2px;
|
||||
}
|
||||
#search-results tr:hover .sf-search {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
{# Small screens
|
||||
========================================================================= #}
|
||||
|
||||
|
|
|
@ -31,9 +31,30 @@
|
|||
<td class="text-center">
|
||||
<span class="label {{ css_class }}">{{ result.status_code|default('n/a') }}</span>
|
||||
</td>
|
||||
<td class="nowrap">{{ result.ip }}</td>
|
||||
<td>{{ result.method }}</td>
|
||||
<td class="break-long-words">{{ result.url }}</td>
|
||||
<td>
|
||||
<span class="nowrap">{{ result.ip }}</span>
|
||||
{% if request.session is not null %}
|
||||
<a href="{{ path('_profiler_search_results', request.query.all|merge({'ip': result.ip, 'token': result.token})) }}" title="Search">
|
||||
<span title="Search" class="sf-icon sf-search">{{ include('@WebProfiler/Icon/search.svg') }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td>
|
||||
{{ result.method }}
|
||||
{% if request.session is not null %}
|
||||
<a href="{{ path('_profiler_search_results', request.query.all|merge({'method': result.method, 'token': result.token})) }}" title="Search">
|
||||
<span title="Search" class="sf-icon sf-search">{{ include('@WebProfiler/Icon/search.svg') }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="break-long-words">
|
||||
{{ result.url }}
|
||||
{% if request.session is not null %}
|
||||
<a href="{{ path('_profiler_search_results', request.query.all|merge({'url': result.url, 'token': result.token})) }}" title="Search">
|
||||
<span title="Search" class="sf-icon sf-search">{{ include('@WebProfiler/Icon/search.svg') }}</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="text-small">
|
||||
<span class="nowrap">{{ result.time|date('d-M-Y') }}</span>
|
||||
<span class="nowrap newline">{{ result.time|date('H:i:s') }}</span>
|
||||
|
|
|
@ -1021,11 +1021,7 @@ class Application
|
|||
|
||||
private function stringWidth($string)
|
||||
{
|
||||
if (!function_exists('mb_strwidth')) {
|
||||
return strlen($string);
|
||||
}
|
||||
|
||||
if (false === $encoding = mb_detect_encoding($string)) {
|
||||
if (false === $encoding = mb_detect_encoding($string, null, true)) {
|
||||
return strlen($string);
|
||||
}
|
||||
|
||||
|
@ -1037,12 +1033,7 @@ class Application
|
|||
// str_split is not suitable for multi-byte characters, we should use preg_split to get char array properly.
|
||||
// additionally, array_slice() is not enough as some character has doubled width.
|
||||
// we need a function to split string not by character count but by string width
|
||||
|
||||
if (!function_exists('mb_strwidth')) {
|
||||
return str_split($string, $width);
|
||||
}
|
||||
|
||||
if (false === $encoding = mb_detect_encoding($string)) {
|
||||
if (false === $encoding = mb_detect_encoding($string, null, true)) {
|
||||
return str_split($string, $width);
|
||||
}
|
||||
|
||||
|
|
|
@ -51,11 +51,7 @@ abstract class Helper implements HelperInterface
|
|||
*/
|
||||
public static function strlen($string)
|
||||
{
|
||||
if (!function_exists('mb_strwidth')) {
|
||||
return strlen($string);
|
||||
}
|
||||
|
||||
if (false === $encoding = mb_detect_encoding($string)) {
|
||||
if (false === $encoding = mb_detect_encoding($string, null, true)) {
|
||||
return strlen($string);
|
||||
}
|
||||
|
||||
|
|
|
@ -351,7 +351,7 @@ class Table
|
|||
}
|
||||
|
||||
// str_pad won't work properly with multi-byte strings, we need to fix the padding
|
||||
if (function_exists('mb_strwidth') && false !== $encoding = mb_detect_encoding($cell)) {
|
||||
if (false !== $encoding = mb_detect_encoding($cell, null, true)) {
|
||||
$width += strlen($cell) - mb_strwidth($cell, $encoding);
|
||||
}
|
||||
|
||||
|
|
|
@ -534,9 +534,6 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertStringEqualsFile(self::$fixturesPath.'/application_renderexception4.txt', $tester->getDisplay(true), '->renderException() wraps messages when they are bigger than the terminal');
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testRenderExceptionWithDoubleWidthCharacters()
|
||||
{
|
||||
$application = $this->getMock('Symfony\Component\Console\Application', array('getTerminalWidth'));
|
||||
|
|
|
@ -52,9 +52,6 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testFormatBlockWithDiacriticLetters()
|
||||
{
|
||||
$formatter = new FormatterHelper();
|
||||
|
@ -68,9 +65,6 @@ class FormatterHelperTest extends \PHPUnit_Framework_TestCase
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testFormatBlockWithDoubleWidthDiacriticLetters()
|
||||
{
|
||||
$formatter = new FormatterHelper();
|
||||
|
|
|
@ -307,9 +307,6 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
|
|||
$bar->advance(1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testMultiByteSupport()
|
||||
{
|
||||
$bar = new ProgressBar($output = $this->getOutputStream());
|
||||
|
@ -541,9 +538,6 @@ class ProgressBarTest extends \PHPUnit_Framework_TestCase
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testAnsiColorsAndEmojis()
|
||||
{
|
||||
$bar = new ProgressBar($output = $this->getOutputStream(), 15);
|
||||
|
|
|
@ -464,9 +464,6 @@ TABLE
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testRenderMultiByte()
|
||||
{
|
||||
$table = new Table($output = $this->getOutputStream());
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-mbstring": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/event-dispatcher": "~2.8|~3.0",
|
||||
|
|
|
@ -153,10 +153,10 @@ class YamlDumper extends Dumper
|
|||
private function addServiceAlias($alias, $id)
|
||||
{
|
||||
if ($id->isPublic()) {
|
||||
return sprintf(" %s: @%s\n", $alias, $id);
|
||||
} else {
|
||||
return sprintf(" %s:\n alias: %s\n public: false", $alias, $id);
|
||||
return sprintf(" %s: '@%s'\n", $alias, $id);
|
||||
}
|
||||
|
||||
return sprintf(" %s:\n alias: %s\n public: false", $alias, $id);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -6,7 +6,7 @@ parameters:
|
|||
- 0
|
||||
- 1000.3
|
||||
bar: foo
|
||||
escape: @@escapeme
|
||||
foo_bar: @foo_bar
|
||||
escape: '@@escapeme'
|
||||
foo_bar: '@foo_bar'
|
||||
MixedCase:
|
||||
MixedCaseKey: value
|
||||
|
|
|
@ -6,7 +6,7 @@ services:
|
|||
calls:
|
||||
- method: setLogger
|
||||
arguments:
|
||||
- @logger
|
||||
- '@logger'
|
||||
- method: setClass
|
||||
arguments:
|
||||
- User
|
||||
|
|
|
@ -3,9 +3,9 @@ services:
|
|||
baz: { class: BazClass }
|
||||
not_shared: { class: FooClass, shared: false }
|
||||
file: { class: FooClass, file: %path%/foo.php }
|
||||
arguments: { class: FooClass, arguments: [foo, @foo, [true, false]] }
|
||||
arguments: { class: FooClass, arguments: [foo, '@foo', [true, false]] }
|
||||
configurator1: { class: FooClass, configurator: sc_configure }
|
||||
configurator2: { class: FooClass, configurator: [@baz, configure] }
|
||||
configurator2: { class: FooClass, configurator: ['@baz', configure] }
|
||||
configurator3: { class: FooClass, configurator: [BazClass, configureStatic] }
|
||||
method_call1:
|
||||
class: FooClass
|
||||
|
@ -16,8 +16,8 @@ services:
|
|||
method_call2:
|
||||
class: FooClass
|
||||
calls:
|
||||
- [ setBar, [ foo, @foo, [true, false] ] ]
|
||||
alias_for_foo: @foo
|
||||
- [ setBar, [ foo, '@foo', [true, false] ] ]
|
||||
alias_for_foo: '@foo'
|
||||
another_alias_for_foo:
|
||||
alias: foo
|
||||
public: false
|
||||
|
@ -35,5 +35,5 @@ services:
|
|||
decoration_inner_name: decorated.pif-pouf
|
||||
decoration_priority: 5
|
||||
new_factory1: { class: FooBarClass, factory: factory}
|
||||
new_factory2: { class: FooBarClass, factory: [@baz, getClass]}
|
||||
new_factory2: { class: FooBarClass, factory: ['@baz', getClass]}
|
||||
new_factory3: { class: FooBarClass, factory: [BazClass, getInstance]}
|
||||
|
|
|
@ -93,5 +93,5 @@ services:
|
|||
service_from_static_method:
|
||||
class: Bar\FooClass
|
||||
factory: [Bar\FooClass, getInstance]
|
||||
alias_for_foo: @foo
|
||||
alias_for_alias: @foo
|
||||
alias_for_foo: '@foo'
|
||||
alias_for_alias: '@foo'
|
||||
|
|
|
@ -178,34 +178,7 @@ class Crawler implements \Countable, \IteratorAggregate
|
|||
|
||||
try {
|
||||
// Convert charset to HTML-entities to work around bugs in DOMDocument::loadHTML()
|
||||
|
||||
if (function_exists('mb_convert_encoding')) {
|
||||
$content = mb_convert_encoding($content, 'HTML-ENTITIES', $charset);
|
||||
} elseif (function_exists('iconv')) {
|
||||
$content = preg_replace_callback(
|
||||
'/[\x80-\xFF]+/',
|
||||
function ($m) {
|
||||
$m = unpack('C*', $m[0]);
|
||||
$i = 1;
|
||||
$entities = '';
|
||||
|
||||
while (isset($m[$i])) {
|
||||
if (0xF0 <= $m[$i]) {
|
||||
$c = (($m[$i++] - 0xF0) << 18) + (($m[$i++] - 0x80) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
|
||||
} elseif (0xE0 <= $m[$i]) {
|
||||
$c = (($m[$i++] - 0xE0) << 12) + (($m[$i++] - 0x80) << 6) + $m[$i++] - 0x80;
|
||||
} else {
|
||||
$c = (($m[$i++] - 0xC0) << 6) + $m[$i++] - 0x80;
|
||||
}
|
||||
|
||||
$entities .= '&#'.$c.';';
|
||||
}
|
||||
|
||||
return $entities;
|
||||
},
|
||||
iconv($charset, 'UTF-8', $content)
|
||||
);
|
||||
}
|
||||
$content = mb_convert_encoding($content, 'HTML-ENTITIES', $charset);
|
||||
} catch (\Exception $e) {
|
||||
}
|
||||
|
||||
|
|
|
@ -112,7 +112,6 @@ class CrawlerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testAddHtmlContentCharset()
|
||||
{
|
||||
|
@ -147,7 +146,6 @@ class CrawlerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @covers Symfony\Component\DomCrawler\Crawler::addHtmlContent
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testAddHtmlContentCharsetGbk()
|
||||
{
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-mbstring": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/css-selector": "~2.8|~3.0"
|
||||
|
|
|
@ -173,7 +173,7 @@ class NumberToLocalizedStringTransformer implements DataTransformerInterface
|
|||
throw new TransformationFailedException('I don\'t have a clear idea what infinity looks like');
|
||||
}
|
||||
|
||||
if (function_exists('mb_detect_encoding') && false !== $encoding = mb_detect_encoding($value)) {
|
||||
if (false !== $encoding = mb_detect_encoding($value, null, true)) {
|
||||
$length = mb_strlen($value, $encoding);
|
||||
$remainder = mb_substr($value, $position, $length, $encoding);
|
||||
} else {
|
||||
|
|
|
@ -83,79 +83,79 @@ class ValidatorTypeGuesser implements FormTypeGuesserInterface
|
|||
case 'Symfony\Component\Validator\Constraints\Type':
|
||||
switch ($constraint->type) {
|
||||
case 'array':
|
||||
return new TypeGuess('collection', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
case 'boolean':
|
||||
case 'bool':
|
||||
return new TypeGuess('checkbox', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
|
||||
case 'double':
|
||||
case 'float':
|
||||
case 'numeric':
|
||||
case 'real':
|
||||
return new TypeGuess('number', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
|
||||
case 'integer':
|
||||
case 'int':
|
||||
case 'long':
|
||||
return new TypeGuess('integer', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\IntegerType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
|
||||
case '\DateTime':
|
||||
return new TypeGuess('date', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
|
||||
case 'string':
|
||||
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Country':
|
||||
return new TypeGuess('country', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CountryType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Currency':
|
||||
return new TypeGuess('currency', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CurrencyType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Date':
|
||||
return new TypeGuess('date', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateType', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\DateTime':
|
||||
return new TypeGuess('datetime', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\DateTimeType', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Email':
|
||||
return new TypeGuess('email', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\EmailType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\File':
|
||||
case 'Symfony\Component\Validator\Constraints\Image':
|
||||
return new TypeGuess('file', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\FileType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Language':
|
||||
return new TypeGuess('language', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\LanguageType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Locale':
|
||||
return new TypeGuess('locale', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\LocaleType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Time':
|
||||
return new TypeGuess('time', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TimeType', array('input' => 'string'), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Url':
|
||||
return new TypeGuess('url', array(), Guess::HIGH_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\UrlType', array(), Guess::HIGH_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Ip':
|
||||
return new TypeGuess('text', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Length':
|
||||
case 'Symfony\Component\Validator\Constraints\Regex':
|
||||
return new TypeGuess('text', array(), Guess::LOW_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\TextType', array(), Guess::LOW_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Range':
|
||||
return new TypeGuess('number', array(), Guess::LOW_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\NumberType', array(), Guess::LOW_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\Count':
|
||||
return new TypeGuess('collection', array(), Guess::LOW_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CollectionType', array(), Guess::LOW_CONFIDENCE);
|
||||
|
||||
case 'Symfony\Component\Validator\Constraints\True':
|
||||
case 'Symfony\Component\Validator\Constraints\False':
|
||||
case 'Symfony\Component\Validator\Constraints\IsTrue':
|
||||
case 'Symfony\Component\Validator\Constraints\IsFalse':
|
||||
return new TypeGuess('checkbox', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
return new TypeGuess('Symfony\Component\Form\Extension\Core\Type\CheckboxType', array(), Guess::MEDIUM_CONFIDENCE);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -69,10 +69,6 @@ class FormRegistry implements FormRegistryInterface
|
|||
*/
|
||||
public function getType($name)
|
||||
{
|
||||
if (!is_string($name)) {
|
||||
throw new UnexpectedTypeException($name, 'string');
|
||||
}
|
||||
|
||||
if (!isset($this->types[$name])) {
|
||||
$type = null;
|
||||
|
||||
|
|
|
@ -27,7 +27,6 @@ interface FormRegistryInterface
|
|||
*
|
||||
* @return ResolvedFormTypeInterface The type
|
||||
*
|
||||
* @throws Exception\UnexpectedTypeException if the passed name is not a string
|
||||
* @throws Exception\InvalidArgumentException if the type can not be retrieved from any extension
|
||||
*/
|
||||
public function getType($name);
|
||||
|
|
|
@ -238,8 +238,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @see https://github.com/symfony/symfony/issues/7609
|
||||
*
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testReverseTransformWithGroupingAndFixedSpaces()
|
||||
{
|
||||
|
@ -583,7 +581,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
|
|||
/**
|
||||
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
|
||||
* @expectedExceptionMessage The number contains unrecognized characters: "foo8"
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testReverseTransformDisallowsCenteredExtraCharactersMultibyte()
|
||||
{
|
||||
|
@ -600,7 +597,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
|
|||
/**
|
||||
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
|
||||
* @expectedExceptionMessage The number contains unrecognized characters: "foo8"
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testReverseTransformIgnoresTrailingSpacesInExceptionMessage()
|
||||
{
|
||||
|
@ -628,7 +624,6 @@ class NumberToLocalizedStringTransformerTest extends \PHPUnit_Framework_TestCase
|
|||
/**
|
||||
* @expectedException \Symfony\Component\Form\Exception\TransformationFailedException
|
||||
* @expectedExceptionMessage The number contains unrecognized characters: "foo"
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testReverseTransformDisallowsTrailingExtraCharactersMultibyte()
|
||||
{
|
||||
|
|
|
@ -388,7 +388,7 @@ class FormFactoryTest extends \PHPUnit_Framework_TestCase
|
|||
->method('guessType')
|
||||
->with('Application\Author', 'firstName')
|
||||
->will($this->returnValue(new TypeGuess(
|
||||
'password',
|
||||
'Symfony\Component\Form\Extension\Core\Type\PasswordType',
|
||||
array('attr' => array('maxlength' => 7)),
|
||||
Guess::HIGH_CONFIDENCE
|
||||
)));
|
||||
|
@ -397,7 +397,7 @@ class FormFactoryTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$factory->expects($this->once())
|
||||
->method('createNamedBuilder')
|
||||
->with('firstName', 'password', null, array('attr' => array('maxlength' => 7)))
|
||||
->with('firstName', 'Symfony\Component\Form\Extension\Core\Type\PasswordType', null, array('attr' => array('maxlength' => 7)))
|
||||
->will($this->returnValue('builderInstance'));
|
||||
|
||||
$this->builder = $factory->createBuilderForProperty('Application\Author', 'firstName');
|
||||
|
|
|
@ -155,18 +155,6 @@ class FormRegistryTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertSame($resolvedType, $this->registry->getType(get_class($type)));
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Form\Exception\UnexpectedTypeException
|
||||
*/
|
||||
public function testGetTypeThrowsExceptionIfParentNotFound()
|
||||
{
|
||||
$type = new FooSubType();
|
||||
|
||||
$this->extension1->addType($type);
|
||||
|
||||
$this->registry->getType($type);
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Form\Exception\InvalidArgumentException
|
||||
*/
|
||||
|
@ -175,14 +163,6 @@ class FormRegistryTest extends \PHPUnit_Framework_TestCase
|
|||
$this->registry->getType('bar');
|
||||
}
|
||||
|
||||
/**
|
||||
* @expectedException \Symfony\Component\Form\Exception\UnexpectedTypeException
|
||||
*/
|
||||
public function testGetTypeThrowsExceptionIfNoString()
|
||||
{
|
||||
$this->registry->getType(array());
|
||||
}
|
||||
|
||||
public function testHasTypeAfterLoadingFromExtension()
|
||||
{
|
||||
$type = new FooType();
|
||||
|
|
|
@ -24,7 +24,6 @@ class StringUtilTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
/**
|
||||
* @dataProvider spaceProvider
|
||||
* @requires extension mbstring
|
||||
*/
|
||||
public function testTrimUtf8Separators($hex)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
"symfony/event-dispatcher": "~2.8|~3.0",
|
||||
"symfony/intl": "~2.8|~3.0",
|
||||
"symfony/options-resolver": "~2.8|~3.0",
|
||||
"symfony/polyfill-mbstring": "~1.0",
|
||||
"symfony/property-access": "~2.8|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
|
|
|
@ -34,18 +34,6 @@ $response->send();
|
|||
The Request and the Response classes have many other methods that implement
|
||||
the HTTP specification.
|
||||
|
||||
Loading
|
||||
-------
|
||||
|
||||
If you are not using Composer but are using PHP 5.3.x, you must add the following to your autoloader:
|
||||
|
||||
```php
|
||||
// SessionHandlerInterface
|
||||
if (!interface_exists('SessionHandlerInterface')) {
|
||||
$loader->registerPrefixFallback(__DIR__.'/../vendor/symfony/src/Symfony/Component/HttpFoundation/Resources/stubs');
|
||||
}
|
||||
```
|
||||
|
||||
Resources
|
||||
---------
|
||||
|
||||
|
|
|
@ -1,102 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
/**
|
||||
* SessionHandlerInterface for PHP < 5.4.
|
||||
*
|
||||
* The order in which these methods are invoked by PHP are:
|
||||
* 1. open [session_start]
|
||||
* 2. read
|
||||
* 3. gc [optional depending on probability settings: gc_probability / gc_divisor]
|
||||
* 4. destroy [optional when session_regenerate_id(true) is used]
|
||||
* 5. write [session_write_close] or destroy [session_destroy]
|
||||
* 6. close
|
||||
*
|
||||
* Extensive documentation can be found at php.net, see links:
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface
|
||||
* @see http://php.net/session.customhandler
|
||||
* @see http://php.net/session-set-save-handler
|
||||
*
|
||||
* @author Drak <drak@zikula.org>
|
||||
* @author Tobias Schultze <http://tobion.de>
|
||||
*/
|
||||
interface SessionHandlerInterface
|
||||
{
|
||||
/**
|
||||
* Re-initializes existing session, or creates a new one.
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface.open
|
||||
*
|
||||
* @param string $savePath Save path
|
||||
* @param string $sessionName Session name, see http://php.net/function.session-name.php
|
||||
*
|
||||
* @return bool true on success, false on failure
|
||||
*/
|
||||
public function open($savePath, $sessionName);
|
||||
|
||||
/**
|
||||
* Closes the current session.
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface.close
|
||||
*
|
||||
* @return bool true on success, false on failure
|
||||
*/
|
||||
public function close();
|
||||
|
||||
/**
|
||||
* Reads the session data.
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface.read
|
||||
*
|
||||
* @param string $sessionId Session ID, see http://php.net/function.session-id
|
||||
*
|
||||
* @return string Same session data as passed in write() or empty string when non-existent or on failure
|
||||
*/
|
||||
public function read($sessionId);
|
||||
|
||||
/**
|
||||
* Writes the session data to the storage.
|
||||
*
|
||||
* Care, the session ID passed to write() can be different from the one previously
|
||||
* received in read() when the session ID changed due to session_regenerate_id().
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface.write
|
||||
*
|
||||
* @param string $sessionId Session ID , see http://php.net/function.session-id
|
||||
* @param string $data Serialized session data to save
|
||||
*
|
||||
* @return bool true on success, false on failure
|
||||
*/
|
||||
public function write($sessionId, $data);
|
||||
|
||||
/**
|
||||
* Destroys a session.
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface.destroy
|
||||
*
|
||||
* @param string $sessionId Session ID, see http://php.net/function.session-id
|
||||
*
|
||||
* @return bool true on success, false on failure
|
||||
*/
|
||||
public function destroy($sessionId);
|
||||
|
||||
/**
|
||||
* Cleans up expired sessions (garbage collection).
|
||||
*
|
||||
* @see http://php.net/sessionhandlerinterface.gc
|
||||
*
|
||||
* @param string|int $maxlifetime Sessions that have not updated for the last maxlifetime seconds will be removed
|
||||
*
|
||||
* @return bool true on success, false on failure
|
||||
*/
|
||||
public function gc($maxlifetime);
|
||||
}
|
|
@ -34,6 +34,7 @@ class MongoDbSessionHandlerTest extends \PHPUnit_Framework_TestCase
|
|||
$mongoClass = version_compare(phpversion('mongo'), '1.3.0', '<') ? 'Mongo' : 'MongoClient';
|
||||
|
||||
$this->mongo = $this->getMockBuilder($mongoClass)
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
$this->options = array(
|
||||
|
@ -245,13 +246,8 @@ class MongoDbSessionHandlerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
private function createMongoCollectionMock()
|
||||
{
|
||||
$mongoClient = $this->getMockBuilder('MongoClient')
|
||||
->getMock();
|
||||
$mongoDb = $this->getMockBuilder('MongoDB')
|
||||
->setConstructorArgs(array($mongoClient, 'database-name'))
|
||||
->getMock();
|
||||
$collection = $this->getMockBuilder('MongoCollection')
|
||||
->setConstructorArgs(array($mongoDb, 'collection-name'))
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
|
||||
return $collection;
|
||||
|
|
|
@ -16,14 +16,14 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-php54": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/expression-language": "~2.8|~3.0"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\HttpFoundation\\": "" },
|
||||
"classmap": [ "Resources/stubs" ]
|
||||
"psr-4": { "Symfony\\Component\\HttpFoundation\\": "" }
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
|
|
|
@ -15,6 +15,9 @@ use Symfony\Component\HttpKernel\DataCollector\TimeDataCollector;
|
|||
use Symfony\Component\HttpFoundation\Request;
|
||||
use Symfony\Component\HttpFoundation\Response;
|
||||
|
||||
/**
|
||||
* @group time-sensitive
|
||||
*/
|
||||
class TimeDataCollectorTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
public function testCollect()
|
||||
|
|
|
@ -23,6 +23,8 @@ use Symfony\Component\HttpKernel\Tests\Logger;
|
|||
* ExceptionListenerTest.
|
||||
*
|
||||
* @author Robert Schönthal <seroscho@googlemail.com>
|
||||
*
|
||||
* @group time-sensitive
|
||||
*/
|
||||
class ExceptionListenerTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
|
|
@ -30,6 +30,8 @@ use Symfony\Component\Intl\Locale\Locale;
|
|||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Collator
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for AM/PM markers format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class AmPmTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for day of week format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class DayOfWeekTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for day of year format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class DayOfYearTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for day format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class DayTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -18,6 +18,8 @@ use Symfony\Component\Intl\Globals\IntlGlobals;
|
|||
* Parser and formatter for date formats.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class FullTransformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for 12 hour format (0-11).
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Hour1200Transformer extends HourTransformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for 12 hour format (1-12).
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Hour1201Transformer extends HourTransformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for 24 hour format (0-23).
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Hour2400Transformer extends HourTransformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for 24 hour format (1-24).
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Hour2401Transformer extends HourTransformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Base class for hour transformers.
|
||||
*
|
||||
* @author Eriksen Costa <eriksen.costa@infranology.com.br>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract class HourTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for minute format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class MinuteTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for month format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class MonthTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for quarter format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class QuarterTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for the second format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class SecondTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -17,6 +17,8 @@ use Symfony\Component\Intl\Exception\NotImplementedException;
|
|||
* Parser and formatter for time zone format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class TimeZoneTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for date formats.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract class Transformer
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\DateFormatter\DateFormat;
|
|||
* Parser and formatter for year format.
|
||||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class YearTransformer extends Transformer
|
||||
{
|
||||
|
|
|
@ -43,6 +43,8 @@ use Symfony\Component\Intl\Locale\Locale;
|
|||
*
|
||||
* @author Igor Wiedler <igor@wiedler.ch>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class IntlDateFormatter
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Intl\Globals;
|
|||
* Provides fake static versions of the global functions in the intl extension.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
abstract class IntlGlobals
|
||||
{
|
||||
|
|
|
@ -21,6 +21,8 @@ use Symfony\Component\Intl\Exception\MethodNotImplementedException;
|
|||
*
|
||||
* @author Eriksen Costa <eriksen.costa@infranology.com.br>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class Locale
|
||||
{
|
||||
|
|
|
@ -37,6 +37,8 @@ use Symfony\Component\Intl\Locale\Locale;
|
|||
*
|
||||
* @author Eriksen Costa <eriksen.costa@infranology.com.br>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class NumberFormatter
|
||||
{
|
||||
|
|
|
@ -1,78 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
use Symfony\Component\Intl\Globals\IntlGlobals;
|
||||
|
||||
if (!function_exists('intl_is_failure')) {
|
||||
/**
|
||||
* Stub implementation for the {@link intl_is_failure()} function of the intl
|
||||
* extension.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @param int $errorCode The error code returned by intl_get_error_code().
|
||||
*
|
||||
* @return bool Whether the error code indicates an error.
|
||||
*
|
||||
* @see IntlGlobals::isFailure()
|
||||
*/
|
||||
function intl_is_failure($errorCode)
|
||||
{
|
||||
return IntlGlobals::isFailure($errorCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub implementation for the {@link intl_get_error_code()} function of the
|
||||
* intl extension.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @return bool The error code of the last intl function call or
|
||||
* IntlGlobals::U_ZERO_ERROR if no error occurred.
|
||||
*
|
||||
* @see IntlGlobals::getErrorCode()
|
||||
*/
|
||||
function intl_get_error_code()
|
||||
{
|
||||
return IntlGlobals::getErrorCode();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub implementation for the {@link intl_get_error_code()} function of the
|
||||
* intl extension.
|
||||
*
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
*
|
||||
* @return bool The error message of the last intl function call or
|
||||
* "U_ZERO_ERROR" if no error occurred.
|
||||
*
|
||||
* @see IntlGlobals::getErrorMessage()
|
||||
*/
|
||||
function intl_get_error_message()
|
||||
{
|
||||
return IntlGlobals::getErrorMessage();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub implementation for the {@link intl_error_name()} function of the intl
|
||||
* extension.
|
||||
*
|
||||
* @param int $errorCode The error code.
|
||||
*
|
||||
* @return string The name of the error code constant.
|
||||
*
|
||||
* @see IntlGlobals::getErrorName()
|
||||
*/
|
||||
function intl_error_name($errorCode)
|
||||
{
|
||||
return IntlGlobals::getErrorName($errorCode);
|
||||
}
|
||||
}
|
|
@ -24,7 +24,9 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-intl-icu": "~1.0",
|
||||
"symfony/polyfill-php54": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/filesystem": "~2.8|~3.0"
|
||||
|
@ -34,8 +36,7 @@
|
|||
},
|
||||
"autoload": {
|
||||
"psr-4": { "Symfony\\Component\\Intl\\": "" },
|
||||
"classmap": [ "Resources/stubs" ],
|
||||
"files": [ "Resources/stubs/functions.php" ]
|
||||
"classmap": [ "Resources/stubs" ]
|
||||
},
|
||||
"minimum-stability": "dev",
|
||||
"extra": {
|
||||
|
|
|
@ -97,11 +97,7 @@ class LdapClient implements LdapClientInterface
|
|||
*/
|
||||
public function escape($subject, $ignore = '', $flags = 0)
|
||||
{
|
||||
if (function_exists('ldap_escape')) {
|
||||
return ldap_escape($subject, $ignore, $flags);
|
||||
}
|
||||
|
||||
return $this->doEscape($subject, $ignore, $flags);
|
||||
return ldap_escape($subject, $ignore, $flags);
|
||||
}
|
||||
|
||||
private function connect()
|
||||
|
@ -132,98 +128,4 @@ class LdapClient implements LdapClientInterface
|
|||
|
||||
$this->connection = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stub implementation of the {@link ldap_escape()} function of the ldap
|
||||
* extension.
|
||||
*
|
||||
* Escape strings for safe use in LDAP filters and DNs.
|
||||
*
|
||||
* @author Chris Wright <ldapi@daverandom.com>
|
||||
*
|
||||
* @param string $subject
|
||||
* @param string $ignore
|
||||
* @param int $flags
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @see http://stackoverflow.com/a/8561604
|
||||
*/
|
||||
private function doEscape($subject, $ignore = '', $flags = 0)
|
||||
{
|
||||
$charMaps = $this->getCharmaps();
|
||||
|
||||
// Create the base char map to escape
|
||||
$flags = (int) $flags;
|
||||
$charMap = array();
|
||||
|
||||
if ($flags & self::LDAP_ESCAPE_FILTER) {
|
||||
$charMap += $charMaps[self::LDAP_ESCAPE_FILTER];
|
||||
}
|
||||
|
||||
if ($flags & self::LDAP_ESCAPE_DN) {
|
||||
$charMap += $charMaps[self::LDAP_ESCAPE_DN];
|
||||
}
|
||||
|
||||
if (!$charMap) {
|
||||
$charMap = $charMaps[0];
|
||||
}
|
||||
|
||||
// Remove any chars to ignore from the list
|
||||
$ignore = (string) $ignore;
|
||||
|
||||
for ($i = 0, $l = strlen($ignore); $i < $l; ++$i) {
|
||||
unset($charMap[$ignore[$i]]);
|
||||
}
|
||||
|
||||
// Do the main replacement
|
||||
$result = strtr($subject, $charMap);
|
||||
|
||||
// Encode leading/trailing spaces if LDAP_ESCAPE_DN is passed
|
||||
if ($flags & self::LDAP_ESCAPE_DN) {
|
||||
if ($result[0] === ' ') {
|
||||
$result = '\\20'.substr($result, 1);
|
||||
}
|
||||
|
||||
if ($result[strlen($result) - 1] === ' ') {
|
||||
$result = substr($result, 0, -1).'\\20';
|
||||
}
|
||||
}
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
private function getCharmaps()
|
||||
{
|
||||
if (null !== $this->charmaps) {
|
||||
return $this->charmaps;
|
||||
}
|
||||
|
||||
$charMaps = array(
|
||||
self::LDAP_ESCAPE_FILTER => array('\\', '*', '(', ')', "\x00"),
|
||||
self::LDAP_ESCAPE_DN => array('\\', ',', '=', '+', '<', '>', ';', '"', '#'),
|
||||
);
|
||||
|
||||
$charMaps[0] = array();
|
||||
|
||||
for ($i = 0; $i < 256; ++$i) {
|
||||
$charMaps[0][chr($i)] = sprintf('\\%02x', $i);
|
||||
}
|
||||
|
||||
for ($i = 0, $l = count($charMaps[self::LDAP_ESCAPE_FILTER]); $i < $l; ++$i) {
|
||||
$chr = $charMaps[self::LDAP_ESCAPE_FILTER][$i];
|
||||
unset($charMaps[self::LDAP_ESCAPE_FILTER][$i]);
|
||||
$charMaps[self::LDAP_ESCAPE_FILTER][$chr] = $charMaps[0][$chr];
|
||||
}
|
||||
|
||||
for ($i = 0, $l = count($charMaps[self::LDAP_ESCAPE_DN]); $i < $l; ++$i) {
|
||||
$chr = $charMaps[self::LDAP_ESCAPE_DN][$i];
|
||||
unset($charMaps[self::LDAP_ESCAPE_DN][$i]);
|
||||
$charMaps[self::LDAP_ESCAPE_DN][$chr] = $charMaps[0][$chr];
|
||||
}
|
||||
|
||||
$this->charmaps = $charMaps;
|
||||
|
||||
return $this->charmaps;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,52 +0,0 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Security\Core\Tests\Authentication\Provider;
|
||||
|
||||
use Symfony\Component\Ldap\LdapClient;
|
||||
|
||||
/**
|
||||
* @requires extension ldap
|
||||
*/
|
||||
class LdapClientTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* @dataProvider provideLdapEscapeValues
|
||||
*/
|
||||
public function testLdapEscape($subject, $ignore, $flags, $expected)
|
||||
{
|
||||
$ldap = new LdapClient();
|
||||
$this->assertSame($expected, $ldap->escape($subject, $ignore, $flags));
|
||||
}
|
||||
|
||||
/**
|
||||
* Provides values for the ldap_escape shim. These tests come from the official
|
||||
* extension.
|
||||
*
|
||||
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_dn.phpt
|
||||
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_all.phpt
|
||||
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_both.phpt
|
||||
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_filter.phpt
|
||||
* @see https://github.com/php/php-src/blob/master/ext/ldap/tests/ldap_escape_ignore.phpt
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provideLdapEscapeValues()
|
||||
{
|
||||
return array(
|
||||
array('foo=bar(baz)*', null, LdapClient::LDAP_ESCAPE_DN, 'foo\3dbar(baz)*'),
|
||||
array('foo=bar(baz)*', null, null, '\66\6f\6f\3d\62\61\72\28\62\61\7a\29\2a'),
|
||||
array('foo=bar(baz)*', null, LdapClient::LDAP_ESCAPE_DN | LdapClient::LDAP_ESCAPE_FILTER, 'foo\3dbar\28baz\29\2a'),
|
||||
array('foo=bar(baz)*', null, LdapClient::LDAP_ESCAPE_FILTER, 'foo=bar\28baz\29\2a'),
|
||||
array('foo=bar(baz)*', 'ao', null, '\66oo\3d\62a\72\28\62a\7a\29\2a'),
|
||||
);
|
||||
}
|
||||
}
|
|
@ -17,6 +17,7 @@
|
|||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-php56": "~1.0",
|
||||
"ext-ldap": "*"
|
||||
},
|
||||
"autoload": {
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Routing\Matcher\Dumper;
|
|||
* Collection of routes.
|
||||
*
|
||||
* @author Arnaud Le Blanc <arnaud.lb@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class DumperCollection implements \IteratorAggregate
|
||||
{
|
||||
|
|
|
@ -15,6 +15,8 @@ namespace Symfony\Component\Routing\Matcher\Dumper;
|
|||
* Prefix tree of routes preserving routes order.
|
||||
*
|
||||
* @author Arnaud Le Blanc <arnaud.lb@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class DumperPrefixCollection extends DumperCollection
|
||||
{
|
||||
|
|
|
@ -17,6 +17,8 @@ use Symfony\Component\Routing\Route;
|
|||
* Container for a Route.
|
||||
*
|
||||
* @author Arnaud Le Blanc <arnaud.lb@gmail.com>
|
||||
*
|
||||
* @internal
|
||||
*/
|
||||
class DumperRoute
|
||||
{
|
||||
|
|
|
@ -11,8 +11,6 @@
|
|||
|
||||
namespace Symfony\Component\Security\Core\Encoder;
|
||||
|
||||
use Symfony\Component\Security\Core\Util\StringUtils;
|
||||
|
||||
/**
|
||||
* BasePasswordEncoder is the base class for all password encoders.
|
||||
*
|
||||
|
@ -83,7 +81,7 @@ abstract class BasePasswordEncoder implements PasswordEncoderInterface
|
|||
*/
|
||||
protected function comparePasswords($password1, $password2)
|
||||
{
|
||||
return StringUtils::equals($password1, $password2);
|
||||
return hash_equals($password1, $password2);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -15,6 +15,8 @@ use Symfony\Component\Security\Core\Util\StringUtils;
|
|||
|
||||
/**
|
||||
* Data from PHP.net's hash_equals tests.
|
||||
*
|
||||
* @group legacy
|
||||
*/
|
||||
class StringUtilsTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
|
|
|
@ -11,10 +11,16 @@
|
|||
|
||||
namespace Symfony\Component\Security\Core\Util;
|
||||
|
||||
@trigger_error('The '.__NAMESPACE__.'\\StringUtils class is deprecated since version 2.8 and will be removed in 3.0. Use hash_equals() instead.', E_USER_DEPRECATED);
|
||||
|
||||
use Symfony\Component\Polyfill\Util\Binary;
|
||||
|
||||
/**
|
||||
* String utility functions.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* @deprecated since 2.8, to be removed in 3.0.
|
||||
*/
|
||||
class StringUtils
|
||||
{
|
||||
|
@ -47,25 +53,7 @@ class StringUtils
|
|||
$userInput = (string) $userInput;
|
||||
}
|
||||
|
||||
if (function_exists('hash_equals')) {
|
||||
return hash_equals($knownString, $userInput);
|
||||
}
|
||||
|
||||
$knownLen = self::safeStrlen($knownString);
|
||||
$userLen = self::safeStrlen($userInput);
|
||||
|
||||
if ($userLen !== $knownLen) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$result = 0;
|
||||
|
||||
for ($i = 0; $i < $knownLen; ++$i) {
|
||||
$result |= (ord($knownString[$i]) ^ ord($userInput[$i]));
|
||||
}
|
||||
|
||||
// They are only identical strings if $result is exactly 0...
|
||||
return 0 === $result;
|
||||
return hash_equals($knownString, $userInput);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -77,17 +65,6 @@ class StringUtils
|
|||
*/
|
||||
public static function safeStrlen($string)
|
||||
{
|
||||
// Premature optimization
|
||||
// Since this cannot be changed at runtime, we can cache it
|
||||
static $funcExists = null;
|
||||
if (null === $funcExists) {
|
||||
$funcExists = function_exists('mb_strlen');
|
||||
}
|
||||
|
||||
if ($funcExists) {
|
||||
return mb_strlen($string, '8bit');
|
||||
}
|
||||
|
||||
return strlen($string);
|
||||
return Binary::strlen($string);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,15 +17,18 @@
|
|||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"paragonie/random_compat": "~1.0"
|
||||
"symfony/polyfill-php55": "~1.0",
|
||||
"symfony/polyfill-php56": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0",
|
||||
"symfony/polyfill-util": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/event-dispatcher": "~2.8|~3.0",
|
||||
"symfony/expression-language": "~2.8|~3.0",
|
||||
"symfony/http-foundation": "~2.8|~3.0",
|
||||
"symfony/ldap": "~2.8|~3.0",
|
||||
"symfony/translation": "~2.8|~3.0",
|
||||
"symfony/validator": "~2.8|~3.0",
|
||||
"symfony/ldap": "~2.8|~3.0",
|
||||
"psr/log": "~1.0"
|
||||
},
|
||||
"suggest": {
|
||||
|
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
namespace Symfony\Component\Security\Csrf;
|
||||
|
||||
use Symfony\Component\Security\Core\Util\StringUtils;
|
||||
use Symfony\Component\Security\Csrf\TokenGenerator\UriSafeTokenGenerator;
|
||||
use Symfony\Component\Security\Csrf\TokenGenerator\TokenGeneratorInterface;
|
||||
use Symfony\Component\Security\Csrf\TokenStorage\NativeSessionTokenStorage;
|
||||
|
@ -92,6 +91,6 @@ class CsrfTokenManager implements CsrfTokenManagerInterface
|
|||
return false;
|
||||
}
|
||||
|
||||
return StringUtils::equals($this->storage->getToken($token->getId()), $token->getValue());
|
||||
return hash_equals($this->storage->getToken($token->getId()), $token->getValue());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -17,8 +17,9 @@
|
|||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9",
|
||||
"symfony/security-core": "~2.8|~3.0",
|
||||
"paragonie/random_compat": "~1.0"
|
||||
"symfony/polyfill-php56": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0",
|
||||
"symfony/security-core": "~2.8|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/http-foundation": "~2.8|~3.0"
|
||||
|
|
|
@ -17,7 +17,6 @@ use Symfony\Component\HttpFoundation\Response;
|
|||
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
|
||||
use Symfony\Component\Security\Core\Exception\AuthenticationException;
|
||||
use Symfony\Component\Security\Core\User\UserInterface;
|
||||
use Symfony\Component\Security\Core\Util\StringUtils;
|
||||
|
||||
/**
|
||||
* Concrete implementation of the RememberMeServicesInterface providing
|
||||
|
@ -54,7 +53,7 @@ class TokenBasedRememberMeServices extends AbstractRememberMeServices
|
|||
throw new \RuntimeException(sprintf('The UserProviderInterface implementation must return an instance of UserInterface, but returned "%s".', get_class($user)));
|
||||
}
|
||||
|
||||
if (true !== StringUtils::equals($this->generateCookieHash($class, $username, $expires, $user->getPassword()), $hash)) {
|
||||
if (true !== hash_equals($this->generateCookieHash($class, $username, $expires, $user->getPassword()), $hash)) {
|
||||
throw new AuthenticationException('The cookie\'s hash is invalid.');
|
||||
}
|
||||
|
||||
|
|
|
@ -21,8 +21,9 @@
|
|||
"symfony/event-dispatcher": "~2.8|~3.0",
|
||||
"symfony/http-foundation": "~2.8|~3.0",
|
||||
"symfony/http-kernel": "~2.8|~3.0",
|
||||
"symfony/property-access": "~2.8|~3.0",
|
||||
"paragonie/random_compat": "~1.0"
|
||||
"symfony/polyfill-php56": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0",
|
||||
"symfony/property-access": "~2.8|~3.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/routing": "~2.8|~3.0",
|
||||
|
|
|
@ -20,8 +20,11 @@
|
|||
"symfony/event-dispatcher": "~2.8|~3.0",
|
||||
"symfony/http-foundation": "~2.8|~3.0",
|
||||
"symfony/http-kernel": "~2.8|~3.0",
|
||||
"symfony/polyfill-php55": "~1.0",
|
||||
"symfony/polyfill-php56": "~1.0",
|
||||
"symfony/polyfill-php70": "~1.0",
|
||||
"symfony/polyfill-util": "~1.0",
|
||||
"symfony/property-access": "~2.8|~3.0",
|
||||
"paragonie/random_compat": "~1.0"
|
||||
},
|
||||
"replace": {
|
||||
"symfony/security-core": "self.version",
|
||||
|
@ -31,7 +34,7 @@
|
|||
},
|
||||
"require-dev": {
|
||||
"symfony/finder": "~2.8|~3.0",
|
||||
"symfony/intl": "~2.8|~3.0",
|
||||
"symfony/polyfill-intl-icu": "~1.0",
|
||||
"symfony/routing": "~2.8|~3.0",
|
||||
"symfony/translation": "~2.8|~3.0",
|
||||
"symfony/validator": "~2.8|~3.0",
|
||||
|
|
|
@ -88,7 +88,7 @@ class JsonDecode implements DecoderInterface
|
|||
$decodedData = json_decode($data, $associative, $recursionDepth, $options);
|
||||
|
||||
if (JSON_ERROR_NONE !== $this->lastError = json_last_error()) {
|
||||
throw new UnexpectedValueException(JsonEncoder::getLastErrorMessage());
|
||||
throw new UnexpectedValueException(json_last_error_message());
|
||||
}
|
||||
|
||||
return $decodedData;
|
||||
|
|
|
@ -40,7 +40,7 @@ class JsonEncode implements EncoderInterface
|
|||
$encodedJson = json_encode($data, $context['json_encode_options']);
|
||||
|
||||
if (JSON_ERROR_NONE !== $this->lastError = json_last_error()) {
|
||||
throw new UnexpectedValueException(JsonEncoder::getLastErrorMessage());
|
||||
throw new UnexpectedValueException(json_last_error_message());
|
||||
}
|
||||
|
||||
return $encodedJson;
|
||||
|
|
|
@ -72,9 +72,13 @@ class JsonEncoder implements EncoderInterface, DecoderInterface
|
|||
* Resolves json_last_error message.
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @deprecated since 2.8, to be removed in 3.0. Use json_last_error_msg() instead.
|
||||
*/
|
||||
public static function getLastErrorMessage()
|
||||
{
|
||||
@trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0. Use json_last_error_msg() instead.', E_USER_DEPRECATED);
|
||||
|
||||
return json_last_error_msg();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,7 +16,8 @@
|
|||
}
|
||||
],
|
||||
"require": {
|
||||
"php": ">=5.5.9"
|
||||
"php": ">=5.5.9",
|
||||
"symfony/polyfill-php54": "~1.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"symfony/yaml": "~2.8|~3.0",
|
||||
|
|
|
@ -330,6 +330,9 @@ class PhpEngine implements EngineInterface, \ArrayAccess
|
|||
*/
|
||||
public function setCharset($charset)
|
||||
{
|
||||
if ('UTF8' === $charset = strtoupper($charset)) {
|
||||
$charset = 'UTF-8'; // iconv on Windows requires "UTF-8" instead of "UTF8"
|
||||
}
|
||||
$this->charset = $charset;
|
||||
|
||||
foreach ($this->helpers as $helper) {
|
||||
|
@ -443,7 +446,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
|
|||
*/
|
||||
function ($value) {
|
||||
if ('UTF-8' != $this->getCharset()) {
|
||||
$value = $this->convertEncoding($value, 'UTF-8', $this->getCharset());
|
||||
$value = iconv($this->getCharset(), 'UTF-8', $value);
|
||||
}
|
||||
|
||||
$callback = function ($matches) {
|
||||
|
@ -455,7 +458,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
|
|||
}
|
||||
|
||||
// \uHHHH
|
||||
$char = $this->convertEncoding($char, 'UTF-16BE', 'UTF-8');
|
||||
$char = iconv('UTF-8', 'UTF-16BE', $char);
|
||||
|
||||
return '\\u'.substr('0000'.bin2hex($char), -4);
|
||||
};
|
||||
|
@ -465,7 +468,7 @@ class PhpEngine implements EngineInterface, \ArrayAccess
|
|||
}
|
||||
|
||||
if ('UTF-8' != $this->getCharset()) {
|
||||
$value = $this->convertEncoding($value, $this->getCharset(), 'UTF-8');
|
||||
$value = iconv('UTF-8', $this->getCharset(), $value);
|
||||
}
|
||||
|
||||
return $value;
|
||||
|
@ -484,17 +487,13 @@ class PhpEngine implements EngineInterface, \ArrayAccess
|
|||
*
|
||||
* @return string The string with the new encoding
|
||||
*
|
||||
* @throws \RuntimeException if no suitable encoding function is found (iconv or mbstring)
|
||||
* @deprecated since 2.8, to be removed in 3.0. Use iconv() instead.
|
||||
*/
|
||||
public function convertEncoding($string, $to, $from)
|
||||
{
|
||||
if (function_exists('mb_convert_encoding')) {
|
||||
return mb_convert_encoding($string, $to, $from);
|
||||
} elseif (function_exists('iconv')) {
|
||||
return iconv($from, $to, $string);
|
||||
}
|
||||
@trigger_error('The '.__METHOD__.' method is deprecated since version 2.8 and will be removed in 3.0. Use iconv() instead.', E_USER_DEPRECATED);
|
||||
|
||||
throw new \RuntimeException('No suitable convert encoding function (use UTF-8 as your encoding or install the iconv or mbstring extension).');
|
||||
return iconv($from, $to, $string);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -137,7 +137,7 @@ class TranslationDataCollector extends DataCollector implements LateDataCollecto
|
|||
{
|
||||
$string = trim(preg_replace('/\s+/', ' ', $string));
|
||||
|
||||
if (function_exists('mb_strlen') && false !== $encoding = mb_detect_encoding($string)) {
|
||||
if (false !== $encoding = mb_detect_encoding($string, null, true)) {
|
||||
if (mb_strlen($string, $encoding) > $length) {
|
||||
return mb_substr($string, 0, $length - 3, $encoding).'...';
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue