Shariff Wrapper - Version 2.4.3

Version Description

  • fix proxy settings
  • fix PHP error notice caused by a race condition around concurrent requests in Zend_Cache
  • fix PHP notice and error in backend on multisite
Download this release

Release Info

Developer 3UU
Plugin Icon 128x128 Shariff Wrapper
Version 2.4.3
Comparing to
See all releases

Code changes from version 1.9.9 to 2.4.3

Files changed (480) hide show
  1. LICENSE.txt +26 -3
  2. backend/index.php +111 -62
  3. backend/{shariff.json.example → shariff.json} +3 -3
  4. backend/src/Backend.php +18 -43
  5. backend/src/Backend/BackendManager.php +25 -4
  6. backend/src/Backend/Facebook.php +23 -5
  7. backend/src/Backend/Flattr.php +17 -1
  8. backend/src/Backend/GooglePlus.php +17 -1
  9. backend/src/Backend/LinkedIn.php +17 -1
  10. backend/src/Backend/Pinterest.php +17 -1
  11. backend/src/Backend/Reddit.php +17 -1
  12. backend/src/Backend/Request.php +17 -0
  13. backend/src/Backend/ServiceFactory.php +28 -7
  14. backend/src/Backend/ServiceInterface.php +24 -1
  15. backend/src/Backend/StumbleUpon.php +17 -2
  16. backend/src/Backend/Tumblr.php +38 -0
  17. backend/src/Backend/Twitter.php +17 -1
  18. backend/src/Backend/Xing.php +23 -2
  19. backend/src/CacheInterface.php +38 -0
  20. backend/src/ZendCache.php +102 -0
  21. backend/vendor/autoload.php +1 -1
  22. backend/vendor/composer/ClassLoader.php +4 -4
  23. backend/vendor/composer/autoload_classmap.php +458 -0
  24. backend/vendor/composer/autoload_namespaces.php +0 -8
  25. backend/vendor/composer/autoload_psr4.php +8 -0
  26. backend/vendor/composer/autoload_real.php +5 -5
  27. backend/vendor/composer/installed.json +194 -171
  28. backend/vendor/guzzlehttp/guzzle/docs/Makefile +0 -153
  29. backend/vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png +0 -0
  30. backend/vendor/guzzlehttp/guzzle/docs/_static/logo.png +0 -0
  31. backend/vendor/guzzlehttp/guzzle/docs/_templates/nav_links.html +0 -3
  32. backend/vendor/guzzlehttp/guzzle/docs/clients.rst +0 -1315
  33. backend/vendor/guzzlehttp/guzzle/docs/conf.py +0 -28
  34. backend/vendor/guzzlehttp/guzzle/docs/events.rst +0 -520
  35. backend/vendor/guzzlehttp/guzzle/docs/faq.rst +0 -199
  36. backend/vendor/guzzlehttp/guzzle/docs/handlers.rst +0 -43
  37. backend/vendor/guzzlehttp/guzzle/docs/http-messages.rst +0 -483
  38. backend/vendor/guzzlehttp/guzzle/docs/index.rst +0 -98
  39. backend/vendor/guzzlehttp/guzzle/docs/overview.rst +0 -150
  40. backend/vendor/guzzlehttp/guzzle/docs/quickstart.rst +0 -448
  41. backend/vendor/guzzlehttp/guzzle/docs/requirements.txt +0 -2
  42. backend/vendor/guzzlehttp/guzzle/docs/streams.rst +0 -213
  43. backend/vendor/guzzlehttp/guzzle/docs/testing.rst +0 -232
  44. backend/vendor/guzzlehttp/ringphp/.travis.yml +1 -0
  45. backend/vendor/guzzlehttp/ringphp/CHANGELOG.md +10 -0
  46. backend/vendor/guzzlehttp/ringphp/composer.json +1 -0
  47. backend/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php +1 -0
  48. backend/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php +26 -15
  49. backend/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php +15 -15
  50. backend/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php +1 -17
  51. backend/vendor/guzzlehttp/ringphp/tests/Client/server.js +12 -1
  52. backend/vendor/zendframework/zend-cache/.coveralls.yml +3 -0
  53. backend/vendor/zendframework/zend-cache/CONTRIBUTING.md +229 -0
  54. backend/vendor/zendframework/zend-cache/LICENSE.txt +27 -0
  55. backend/vendor/zendframework/zend-cache/README.md +9 -0
  56. backend/vendor/zendframework/zend-cache/Zend/Cache/CONTRIBUTING.md +0 -3
  57. backend/vendor/zendframework/zend-cache/Zend/Cache/README.md +0 -14
  58. backend/vendor/zendframework/zend-cache/{Zend/Cache/composer.json → composer.json} +18 -9
  59. backend/vendor/zendframework/zend-cache/phpunit.xml.dist +62 -0
  60. backend/vendor/zendframework/zend-cache/phpunit.xml.travis +64 -0
  61. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/BadMethodCallException.php +0 -0
  62. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/ExceptionInterface.php +0 -0
  63. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/ExtensionNotLoadedException.php +0 -0
  64. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/InvalidArgumentException.php +0 -0
  65. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/LogicException.php +0 -0
  66. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/MissingDependencyException.php +0 -0
  67. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/MissingKeyException.php +0 -0
  68. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/OutOfSpaceException.php +0 -0
  69. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/RuntimeException.php +0 -0
  70. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/UnexpectedValueException.php +0 -0
  71. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/UnsupportedMethodCallException.php +0 -0
  72. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/AbstractPattern.php +0 -0
  73. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/CallbackCache.php +5 -3
  74. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/CaptureCache.php +1 -1
  75. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/ClassCache.php +0 -0
  76. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/ObjectCache.php +0 -0
  77. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/OutputCache.php +1 -1
  78. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/PatternInterface.php +0 -0
  79. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/PatternOptions.php +2 -2
  80. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/PatternFactory.php +0 -0
  81. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/PatternPluginManager.php +0 -0
  82. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Service/StorageCacheAbstractServiceFactory.php +0 -0
  83. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Service/StorageCacheFactory.php +0 -0
  84. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/AbstractAdapter.php +97 -99
  85. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/AbstractZendServer.php +0 -0
  86. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/AdapterOptions.php +0 -0
  87. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Apc.php +6 -3
  88. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ApcIterator.php +0 -0
  89. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ApcOptions.php +0 -0
  90. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/BlackHole.php +1 -1
  91. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Dba.php +9 -6
  92. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/DbaIterator.php +0 -0
  93. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/DbaOptions.php +6 -0
  94. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Filesystem.php +21 -21
  95. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/FilesystemIterator.php +0 -0
  96. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/FilesystemOptions.php +0 -0
  97. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/KeyListIterator.php +0 -0
  98. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Memcache.php +2 -2
  99. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcacheOptions.php +0 -0
  100. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcacheResourceManager.php +5 -2
  101. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Memcached.php +1 -1
  102. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcachedOptions.php +0 -0
  103. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcachedResourceManager.php +0 -0
  104. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Memory.php +2 -2
  105. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemoryOptions.php +0 -0
  106. backend/vendor/zendframework/zend-cache/src/Storage/Adapter/MongoDb.php +285 -0
  107. backend/vendor/zendframework/zend-cache/src/Storage/Adapter/MongoDbOptions.php +158 -0
  108. backend/vendor/zendframework/zend-cache/src/Storage/Adapter/MongoDbResourceManager.php +204 -0
  109. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Redis.php +30 -2
  110. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/RedisOptions.php +0 -0
  111. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/RedisResourceManager.php +4 -4
  112. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Session.php +2 -2
  113. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/SessionOptions.php +0 -0
  114. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/WinCache.php +0 -0
  115. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/WinCacheOptions.php +0 -0
  116. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/XCache.php +0 -0
  117. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/XCacheOptions.php +0 -0
  118. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ZendServerDisk.php +0 -0
  119. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ZendServerShm.php +0 -0
  120. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/AdapterPluginManager.php +1 -0
  121. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/AvailableSpaceCapableInterface.php +0 -0
  122. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Capabilities.php +0 -0
  123. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ClearByNamespaceInterface.php +0 -0
  124. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ClearByPrefixInterface.php +0 -0
  125. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ClearExpiredInterface.php +0 -0
  126. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Event.php +0 -0
  127. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ExceptionEvent.php +0 -0
  128. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/FlushableInterface.php +0 -0
  129. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/IterableInterface.php +0 -0
  130. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/IteratorInterface.php +0 -0
  131. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/OptimizableInterface.php +0 -0
  132. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/AbstractPlugin.php +0 -0
  133. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/ClearExpiredByFactor.php +0 -0
  134. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/ExceptionHandler.php +0 -0
  135. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/IgnoreUserAbort.php +0 -0
  136. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/OptimizeByFactor.php +0 -0
  137. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/PluginInterface.php +0 -0
  138. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/PluginOptions.php +3 -3
  139. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/Serializer.php +0 -0
  140. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/PluginManager.php +0 -0
  141. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/PostEvent.php +0 -0
  142. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/StorageInterface.php +0 -0
  143. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/TaggableInterface.php +0 -0
  144. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/TotalSpaceCapableInterface.php +0 -0
  145. backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/StorageFactory.php +0 -0
  146. backend/vendor/zendframework/zend-config/.coveralls.yml +3 -0
  147. backend/vendor/zendframework/zend-config/CONTRIBUTING.md +229 -0
  148. backend/vendor/zendframework/zend-config/LICENSE.txt +27 -0
  149. backend/vendor/zendframework/zend-config/README.md +10 -0
  150. backend/vendor/zendframework/zend-config/Zend/Config/CONTRIBUTING.md +0 -3
  151. backend/vendor/zendframework/zend-config/Zend/Config/README.md +0 -15
  152. backend/vendor/zendframework/zend-config/{Zend/Config/composer.json → composer.json} +15 -8
  153. backend/vendor/zendframework/zend-config/phpunit.xml.dist +42 -0
  154. backend/vendor/zendframework/zend-config/phpunit.xml.travis +45 -0
  155. backend/vendor/zendframework/zend-config/{Zend/Config → src}/AbstractConfigFactory.php +2 -2
  156. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Config.php +1 -15
  157. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Exception/ExceptionInterface.php +0 -0
  158. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Exception/InvalidArgumentException.php +0 -0
  159. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Exception/RuntimeException.php +0 -0
  160. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Factory.php +0 -0
  161. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Constant.php +0 -0
  162. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Filter.php +0 -0
  163. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/ProcessorInterface.php +0 -0
  164. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Queue.php +0 -0
  165. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Token.php +1 -1
  166. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Translator.php +0 -0
  167. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Ini.php +2 -2
  168. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/JavaProperties.php +0 -0
  169. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Json.php +0 -0
  170. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/ReaderInterface.php +0 -0
  171. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Xml.php +3 -3
  172. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Yaml.php +0 -0
  173. backend/vendor/zendframework/zend-config/{Zend/Config → src}/ReaderPluginManager.php +0 -0
  174. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/AbstractWriter.php +1 -1
  175. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Ini.php +0 -0
  176. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Json.php +0 -0
  177. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/PhpArray.php +1 -1
  178. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/WriterInterface.php +0 -0
  179. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Xml.php +0 -0
  180. backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Yaml.php +0 -0
  181. backend/vendor/zendframework/zend-config/{Zend/Config → src}/WriterPluginManager.php +0 -0
  182. backend/vendor/zendframework/zend-eventmanager/.coveralls.yml +3 -0
  183. backend/vendor/zendframework/zend-eventmanager/CONTRIBUTING.md +229 -0
  184. backend/vendor/zendframework/zend-eventmanager/LICENSE.txt +27 -0
  185. backend/vendor/zendframework/zend-eventmanager/README.md +15 -0
  186. backend/vendor/zendframework/zend-eventmanager/Zend/EventManager/CONTRIBUTING.md +0 -3
  187. backend/vendor/zendframework/zend-eventmanager/Zend/EventManager/README.md +0 -15
  188. backend/vendor/zendframework/zend-eventmanager/Zend/EventManager/composer.json +0 -26
  189. backend/vendor/zendframework/zend-eventmanager/composer.json +35 -0
  190. backend/vendor/zendframework/zend-eventmanager/phpunit.xml.dist +35 -0
  191. backend/vendor/zendframework/zend-eventmanager/phpunit.xml.travis +35 -0
  192. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/AbstractListenerAggregate.php +0 -0
  193. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Event.php +0 -0
  194. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventInterface.php +0 -0
  195. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManager.php +13 -37
  196. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManagerAwareInterface.php +0 -0
  197. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManagerAwareTrait.php +0 -0
  198. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManagerInterface.php +4 -4
  199. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventsCapableInterface.php +0 -0
  200. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/DomainException.php +0 -0
  201. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/ExceptionInterface.php +0 -0
  202. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/InvalidArgumentException.php +0 -0
  203. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/InvalidCallbackException.php +0 -0
  204. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Filter/FilterInterface.php +0 -0
  205. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Filter/FilterIterator.php +0 -0
  206. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/FilterChain.php +1 -1
  207. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/GlobalEventManager.php +11 -5
  208. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ListenerAggregateInterface.php +0 -0
  209. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ListenerAggregateTrait.php +0 -0
  210. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ProvidesEvents.php +0 -0
  211. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ResponseCollection.php +1 -1
  212. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventAggregateAwareInterface.php +0 -0
  213. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventManager.php +0 -0
  214. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventManagerAwareInterface.php +0 -0
  215. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventManagerInterface.php +0 -0
  216. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedListenerAggregateInterface.php +0 -0
  217. backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/StaticEventManager.php +1 -1
  218. backend/vendor/zendframework/zend-json/.coveralls.yml +3 -0
  219. backend/vendor/zendframework/zend-json/CONTRIBUTING.md +229 -0
  220. backend/vendor/zendframework/zend-json/LICENSE.txt +27 -0
  221. backend/vendor/zendframework/zend-json/README.md +9 -0
  222. backend/vendor/zendframework/zend-json/Zend/Json/CONTRIBUTING.md +0 -3
  223. backend/vendor/zendframework/zend-json/Zend/Json/README.md +0 -15
  224. backend/vendor/zendframework/zend-json/{Zend/Json/composer.json → composer.json} +15 -8
  225. backend/vendor/zendframework/zend-json/phpunit.xml.dist +34 -0
  226. backend/vendor/zendframework/zend-json/phpunit.xml.travis +34 -0
  227. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Decoder.php +1 -5
  228. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Encoder.php +1 -1
  229. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/BadMethodCallException.php +0 -0
  230. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/ExceptionInterface.php +0 -0
  231. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/InvalidArgumentException.php +0 -0
  232. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/RecursionException.php +0 -0
  233. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/RuntimeException.php +0 -0
  234. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Expr.php +0 -0
  235. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Json.php +21 -5
  236. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Cache.php +0 -0
  237. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Client.php +0 -0
  238. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Error.php +0 -0
  239. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/ErrorException.php +0 -0
  240. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/ExceptionInterface.php +0 -0
  241. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/HttpException.php +0 -0
  242. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/InvalidArgumentException.php +0 -0
  243. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/RuntimeException.php +0 -0
  244. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Request.php +1 -1
  245. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Request/Http.php +0 -0
  246. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Response.php +0 -0
  247. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Response/Http.php +0 -0
  248. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Server.php +2 -2
  249. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Smd.php +0 -0
  250. backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Smd/Service.php +0 -0
  251. backend/vendor/zendframework/zend-math/.coveralls.yml +3 -0
  252. backend/vendor/zendframework/zend-math/CONTRIBUTING.md +229 -0
  253. backend/vendor/zendframework/zend-math/LICENSE.txt +27 -0
  254. backend/vendor/zendframework/zend-math/README.md +11 -0
  255. backend/vendor/zendframework/zend-math/Zend/Math/CONTRIBUTING.md +0 -3
  256. backend/vendor/zendframework/zend-math/Zend/Math/README.md +0 -15
  257. backend/vendor/zendframework/zend-math/{Zend/Math/composer.json → composer.json} +16 -7
  258. backend/vendor/zendframework/zend-math/phpunit.xml.dist +34 -0
  259. backend/vendor/zendframework/zend-math/phpunit.xml.travis +34 -0
  260. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Adapter/AdapterInterface.php +0 -0
  261. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Adapter/Bcmath.php +1 -1
  262. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Adapter/Gmp.php +1 -1
  263. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/AdapterPluginManager.php +0 -0
  264. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/BigInteger.php +0 -0
  265. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/DivisionByZeroException.php +0 -0
  266. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/ExceptionInterface.php +0 -0
  267. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/InvalidArgumentException.php +0 -0
  268. backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/RuntimeException.php +0 -0
  269. backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/DomainException.php +0 -0
  270. backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/ExceptionInterface.php +0 -0
  271. backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/InvalidArgumentException.php +0 -0
  272. backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/RuntimeException.php +0 -0
  273. backend/vendor/zendframework/zend-math/{Zend/Math → src}/Rand.php +1 -1
  274. backend/vendor/zendframework/zend-math/{Zend/Math → src}/Source/HashTiming.php +0 -0
  275. backend/vendor/zendframework/zend-serializer/.coveralls.yml +3 -0
  276. backend/vendor/zendframework/zend-serializer/CONTRIBUTING.md +229 -0
  277. backend/vendor/zendframework/zend-serializer/LICENSE.txt +27 -0
  278. backend/vendor/zendframework/zend-serializer/README.md +9 -0
  279. backend/vendor/zendframework/zend-serializer/Zend/Serializer/CONTRIBUTING.md +0 -3
  280. backend/vendor/zendframework/zend-serializer/Zend/Serializer/README.md +0 -15
  281. backend/vendor/zendframework/zend-serializer/{Zend/Serializer/composer.json → composer.json} +15 -8
  282. backend/vendor/zendframework/zend-serializer/phpunit.xml.dist +34 -0
  283. backend/vendor/zendframework/zend-serializer/phpunit.xml.travis +34 -0
  284. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/AbstractAdapter.php +0 -0
  285. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/AdapterInterface.php +0 -0
  286. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/AdapterOptions.php +0 -0
  287. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/IgBinary.php +1 -1
  288. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/Json.php +0 -0
  289. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/JsonOptions.php +0 -0
  290. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/MsgPack.php +0 -0
  291. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PhpCode.php +0 -0
  292. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PhpSerialize.php +0 -0
  293. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PythonPickle.php +0 -0
  294. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PythonPickleOptions.php +0 -0
  295. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/Wddx.php +1 -1
  296. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/WddxOptions.php +0 -0
  297. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/AdapterPluginManager.php +0 -0
  298. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/ExceptionInterface.php +0 -0
  299. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/ExtensionNotLoadedException.php +0 -0
  300. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/InvalidArgumentException.php +0 -0
  301. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/RuntimeException.php +0 -0
  302. backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Serializer.php +0 -0
  303. backend/vendor/zendframework/zend-servicemanager/.coveralls.yml +3 -0
  304. backend/vendor/zendframework/zend-servicemanager/CONTRIBUTING.md +229 -0
  305. backend/vendor/zendframework/zend-servicemanager/LICENSE.txt +27 -0
  306. backend/vendor/zendframework/zend-servicemanager/README.md +9 -0
  307. backend/vendor/zendframework/zend-servicemanager/Zend/ServiceManager/CONTRIBUTING.md +0 -3
  308. backend/vendor/zendframework/zend-servicemanager/Zend/ServiceManager/README.md +0 -15
  309. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager/composer.json → composer.json} +15 -8
  310. backend/vendor/zendframework/zend-servicemanager/phpunit.xml.dist +34 -0
  311. backend/vendor/zendframework/zend-servicemanager/phpunit.xml.travis +34 -0
  312. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/AbstractFactoryInterface.php +0 -0
  313. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/AbstractPluginManager.php +80 -24
  314. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Config.php +0 -0
  315. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ConfigInterface.php +0 -0
  316. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/DelegatorFactoryInterface.php +0 -0
  317. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiAbstractServiceFactory.php +0 -0
  318. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiInstanceManagerProxy.php +0 -0
  319. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiServiceFactory.php +0 -0
  320. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiServiceInitializer.php +0 -1
  321. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/CircularDependencyFoundException.php +0 -0
  322. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/CircularReferenceException.php +0 -0
  323. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/ExceptionInterface.php +0 -0
  324. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/InvalidArgumentException.php +0 -0
  325. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/InvalidServiceNameException.php +0 -0
  326. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/RuntimeException.php +0 -0
  327. backend/vendor/zendframework/zend-servicemanager/src/Exception/ServiceLocatorUsageException.php +50 -0
  328. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/ServiceNotCreatedException.php +0 -0
  329. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/ServiceNotFoundException.php +0 -0
  330. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/FactoryInterface.php +0 -0
  331. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/InitializerInterface.php +0 -0
  332. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/MutableCreationOptionsInterface.php +0 -0
  333. backend/vendor/zendframework/zend-servicemanager/src/MutableCreationOptionsTrait.php +42 -0
  334. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Proxy/LazyServiceFactory.php +0 -1
  335. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Proxy/LazyServiceFactoryFactory.php +0 -0
  336. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceLocatorAwareInterface.php +0 -0
  337. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceLocatorAwareTrait.php +0 -0
  338. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceLocatorInterface.php +0 -0
  339. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceManager.php +51 -9
  340. backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceManagerAwareInterface.php +0 -0
  341. backend/vendor/zendframework/zend-stdlib/.coveralls.yml +3 -0
  342. backend/vendor/zendframework/zend-stdlib/CONTRIBUTING.md +229 -0
  343. backend/vendor/zendframework/zend-stdlib/LICENSE.txt +27 -0
  344. backend/vendor/zendframework/zend-stdlib/README.md +15 -0
  345. backend/vendor/zendframework/zend-stdlib/Zend/Stdlib/CONTRIBUTING.md +0 -3
  346. backend/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ClassMethods.php +0 -186
  347. backend/vendor/zendframework/zend-stdlib/Zend/Stdlib/README.md +0 -15
  348. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib/composer.json → composer.json} +15 -8
  349. backend/vendor/zendframework/zend-stdlib/phpunit.xml.dist +34 -0
  350. backend/vendor/zendframework/zend-stdlib/phpunit.xml.travis +34 -0
  351. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/AbstractOptions.php +9 -6
  352. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArrayObject.php +0 -0
  353. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArraySerializableInterface.php +0 -0
  354. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArrayStack.php +0 -0
  355. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArrayUtils.php +63 -3
  356. backend/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php +14 -0
  357. backend/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php +34 -0
  358. backend/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php +21 -0
  359. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/CallbackHandler.php +1 -1
  360. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/DateTime.php +0 -0
  361. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/DispatchableInterface.php +0 -0
  362. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ErrorHandler.php +0 -0
  363. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/BadMethodCallException.php +0 -0
  364. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/DomainException.php +0 -0
  365. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/ExceptionInterface.php +0 -0
  366. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/ExtensionNotLoadedException.php +0 -0
  367. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/InvalidArgumentException.php +0 -0
  368. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/InvalidCallbackException.php +0 -0
  369. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/LogicException.php +0 -0
  370. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/RuntimeException.php +0 -0
  371. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Extractor/ExtractionInterface.php +0 -0
  372. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Glob.php +0 -0
  373. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/AllGuardsTrait.php +0 -0
  374. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/ArrayOrTraversableGuardTrait.php +0 -0
  375. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/EmptyGuardTrait.php +0 -0
  376. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/GuardUtils.php +0 -0
  377. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/NullGuardTrait.php +0 -0
  378. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/AbstractHydrator.php +0 -0
  379. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/AggregateHydrator.php +0 -0
  380. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/ExtractEvent.php +0 -0
  381. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/HydrateEvent.php +0 -0
  382. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/HydratorListener.php +0 -0
  383. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/ArraySerializable.php +0 -0
  384. backend/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php +274 -0
  385. backend/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php +57 -0
  386. backend/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php +29 -0
  387. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/FilterComposite.php +2 -0
  388. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/FilterInterface.php +0 -0
  389. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/FilterProviderInterface.php +0 -0
  390. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/GetFilter.php +0 -0
  391. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/HasFilter.php +0 -0
  392. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/IsFilter.php +0 -0
  393. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/MethodMatchFilter.php +2 -2
  394. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/NumberOfParameterFilter.php +0 -0
  395. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/OptionalParametersFilter.php +0 -0
  396. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/FilterEnabledInterface.php +0 -0
  397. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydrationInterface.php +0 -0
  398. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorAwareInterface.php +0 -0
  399. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorAwareTrait.php +0 -0
  400. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorInterface.php +0 -0
  401. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorOptionsInterface.php +0 -0
  402. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorPluginManager.php +18 -0
  403. backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php +51 -0
  404. backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php +64 -0
  405. backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php +29 -0
  406. backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php +89 -0
  407. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/NamingStrategy/NamingStrategyInterface.php +0 -0
  408. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php +18 -10
  409. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/NamingStrategyEnabledInterface.php +0 -0
  410. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/ObjectProperty.php +0 -0
  411. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Reflection.php +0 -0
  412. backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php +106 -0
  413. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/ClosureStrategy.php +0 -0
  414. backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php +80 -0
  415. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/DefaultStrategy.php +0 -0
  416. backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php +14 -0
  417. backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php +14 -0
  418. backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php +113 -0
  419. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/SerializableStrategy.php +0 -0
  420. backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php +73 -0
  421. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/StrategyInterface.php +0 -0
  422. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/StrategyEnabledInterface.php +0 -0
  423. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/InitializableInterface.php +0 -0
  424. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/JsonSerializable.php +0 -0
  425. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/JsonSerializable/PhpLegacyCompatibility.php +0 -0
  426. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Message.php +0 -0
  427. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/MessageInterface.php +0 -0
  428. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ParameterObjectInterface.php +0 -0
  429. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Parameters.php +1 -1
  430. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ParametersInterface.php +0 -0
  431. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/PriorityList.php +11 -1
  432. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/PriorityQueue.php +0 -1
  433. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Request.php +0 -0
  434. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/RequestInterface.php +0 -0
  435. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Response.php +0 -0
  436. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ResponseInterface.php +0 -0
  437. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/SplPriorityQueue.php +0 -0
  438. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/SplQueue.php +0 -0
  439. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/SplStack.php +0 -0
  440. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringUtils.php +0 -0
  441. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/AbstractStringWrapper.php +0 -0
  442. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/Iconv.php +0 -0
  443. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/Intl.php +0 -0
  444. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/MbString.php +0 -0
  445. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/Native.php +0 -0
  446. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/StringWrapperInterface.php +0 -0
  447. backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/compatibility/autoload.php +0 -0
  448. bitcoin.php +17 -0
  449. css/shariff.min.local.css +6 -0
  450. css/shariff_admin-notice.css +3 -0
  451. css/shariff_options.css +121 -0
  452. fonts/shariff3uu.eot +0 -0
  453. fonts/shariff3uu.svg +19 -15
  454. fonts/shariff3uu.ttf +0 -0
  455. fonts/shariff3uu.woff +0 -0
  456. locale/mailform-DE.php +36 -0
  457. locale/mailform-EN.php +36 -0
  458. locale/mailform-FR.php +37 -0
  459. locale/mailform-IT.php +36 -0
  460. locale/shariff3UU-de_DE.mo +0 -0
  461. locale/shariff3UU-de_DE.po +764 -174
  462. locale/shariff3UU-fr_FR.mo +0 -0
  463. locale/shariff3UU-fr_FR.po +709 -117
  464. locale/shariff3UU-it_IT.mo +0 -0
  465. locale/shariff3UU-it_IT.po +676 -0
  466. phpqrcode.php +3624 -0
  467. pictos/colorBtns.png +0 -0
  468. pictos/defaultBtns.png +0 -0
  469. pictos/defaultHint.jpg +0 -0
  470. pictos/defaultHint.png +0 -0
  471. pictos/greyBtns.png +0 -0
  472. pictos/roundBtns.png +0 -0
  473. pictos/smallBtns.png +0 -0
  474. pictos/stretchBtns.png +0 -0
  475. pictos/verticalBtns.png +0 -0
  476. pictos/whiteBtns.png +0 -0
  477. readme.txt +223 -123
  478. shariff.js +37 -21
  479. shariff.min.local.css +0 -6
  480. shariff.php +485 -304
LICENSE.txt CHANGED
@@ -1,6 +1,8 @@
 
 
1
  The MIT License (MIT)
2
 
3
- Copyright (c) 2014 Heise Zeitschriften Verlag GmbH & Co. KG and other contributors.
4
 
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
  of this software and associated documentation files (the "Software"), to deal
@@ -20,5 +22,26 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
  THE SOFTWARE.
22
 
23
- Copyright (c) 2014 by 3UU productions ("Ritze")
24
- Same as above for my Wordpress plugin.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Shariff
2
+
3
  The MIT License (MIT)
4
 
5
+ Copyright (c) 2015 Heise Medien GmbH & Co. KG and other contributors.
6
 
7
  Permission is hereby granted, free of charge, to any person obtaining a copy
8
  of this software and associated documentation files (the "Software"), to deal
22
  OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
23
  THE SOFTWARE.
24
 
25
+ Shariff Wrapper (WordPress Plugin)
26
+
27
+ The MIT License (MIT)
28
+
29
+ Copyright (c) 2015 3UU productions ("Ritze") and other contributors.
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining a copy
32
+ of this software and associated documentation files (the "Software"), to deal
33
+ in the Software without restriction, including without limitation the rights
34
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
35
+ copies of the Software, and to permit persons to whom the Software is
36
+ furnished to do so, subject to the following conditions:
37
+
38
+ The above copyright notice and this permission notice shall be included in
39
+ all copies or substantial portions of the Software.
40
+
41
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
42
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
43
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
44
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
45
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
46
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
47
+ THE SOFTWARE.
backend/index.php CHANGED
@@ -1,73 +1,122 @@
1
  <?php
2
- define('WP_DEBUG', false);
 
 
 
 
 
3
 
4
- // CACHEN untersagen
5
- // Datum aus Vergangenheit
6
- header("Expires: Sat, 24 Jan 1970 04:10:00 GMT"); // Datum aus Vergangenheit
7
- header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); // Immer geaendert
8
- header("Cache-Control: no-store, no-cache, must-revalidate");
9
- header("Cache-Control: post-check=0, pre-check=0", false); // Speziell fuer MSIE 5
10
- header("Pragma: no-cache");
11
-
12
- require_once __DIR__.'/vendor/autoload.php';
13
 
14
  use Heise\Shariff\Backend;
15
  use Zend\Config\Reader\Json;
16
 
17
- class Application{
18
- public static function run(){
19
- header('Content-type: application/json');
20
- // exit if now host is given
21
- if (!isset($_GET["url"])) { echo json_encode(null); return; }
 
 
22
 
23
- // if we have a json config file
24
- if(is_readable(dirname( __FILE__ ).'/shariff.json')){
25
- $reader = new \Zend\Config\Reader\Json();
26
- $tmp=$reader->fromFile(dirname( __FILE__ ).'/shariff.json');
27
- }
28
-
29
- // check, if user has changed it to his domain
30
- if(($tmp['domain']=='www.example.com') || ($tmp['domain']=='www.heise.de') || empty($tmp['domain'])) $tmp['domain']=$_SERVER['HTTP_HOST'];
31
- // check mandatory services array
32
- if(!is_array($tmp["services"])) $tmp["services"]=array("0"=>"GooglePlus",
33
- "1"=>"Twitter",
34
- "2"=>"Facebook",
35
- "3"=>"LinkedIn",
36
- "4"=>"Reddit",
37
- "5"=>"Flattr",
38
- "6"=>"StumbleUpon",
39
- "7"=>"Pinterest",
40
- "8"=>"Xing");
41
- // force a short init because we only need WP core
42
- define( 'SHORTINIT', true );
43
- // build the wp-load/-config.php path
44
- $wp_root_path = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) );
45
- // include the config
46
- include ( $wp_root_path . '/wp-config.php' );
47
- // include wp-load.php file (that loads wp-config.php and bootstraps WP)
48
- require( $wp_root_path . '/wp-load.php' );
49
- // include for needed untrailingslashit()
50
- require( $wp_root_path . '/wp-includes/formatting.php');
51
- // if we have a constant for the ttl (default is 60 s)
52
- if(defined('SHARIFF_BACKEND_TTL'))$tmp["cache"]["ttl"]=SHARIFF_BACKEND_TTL;
53
- // if we have a constant for the tmp-dir
54
- if(defined('SHARIFF_BACKEND_TMPDIR'))$tmp["cache"]["cacheDir"]=SHARIFF_BACKEND_TMPDIR;
55
- // if we do not have a tmp-dir, we use the content dir of WP
56
- if( empty($tmp["cache"]["cacheDir"]) ){
57
- // to avoid conficts with other plugins and actual uploads we use a fixed date in the past
58
- // month of my birthday would be great ;-) The wp_upload_dir() create the dir if not exists.
59
- $upload_dir = @wp_upload_dir('1970/01');
60
- $tmp["cache"]["cacheDir"]=$upload_dir['basedir'].'/1970/01';
61
- }
62
 
63
- // final check that temp dir is usuable
64
- if(!is_writable($tmp["cache"]["cacheDir"]))die("No usable tmp dir found. Please check ". $tmp["cache"]["cacheDir"]);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
- // start backend
67
- $shariff = new Backend($tmp);
68
- // draw result
69
- echo json_encode($shariff->get($_GET["url"]));
70
- }
 
 
 
 
 
 
 
71
  }
72
 
73
- Application::run();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <?php
2
+ // prevent caching
3
+ header( "Expires: Sat, 24 Jan 1970 04:10:00 GMT" ); // date from the past
4
+ header( "Last-Modified: " . gmdate("D, d M Y H:i:s" ) . " GMT" ); // always changed
5
+ header( "Cache-Control: no-store, no-cache, must-revalidate" );
6
+ header( "Cache-Control: post-check=0, pre-check=0", false ); // just for MSIE 5
7
+ header( "Pragma: no-cache" );
8
 
9
+ require_once __DIR__ . '/vendor/autoload.php';
 
 
 
 
 
 
 
 
10
 
11
  use Heise\Shariff\Backend;
12
  use Zend\Config\Reader\Json;
13
 
14
+ header('Content-type: application/json');
15
+
16
+ // exit if no url is provided
17
+ if ( ! isset( $_GET["url"] ) ) {
18
+ echo 'No URL provided!';
19
+ return;
20
+ }
21
 
22
+ // if we have a json config file
23
+ if ( is_readable( dirname( __FILE__ ) . '/shariff.json' ) ) {
24
+ $reader = new \Zend\Config\Reader\Json();
25
+ $tmp = $reader->fromFile( dirname( __FILE__ ) . '/shariff.json' );
26
+ }
27
+
28
+ // check, if user has changed it to his domain
29
+ if ( ( $tmp['domain'] == 'www.example.com' ) || ( $tmp['domain'] == 'www.heise.de' ) || empty( $tmp['domain'] ) ) $tmp['domain'] = $_SERVER['HTTP_HOST'];
30
+
31
+ // check mandatory services array
32
+ if ( ! is_array( $tmp["services"] ) ) $tmp["services"] = array("0"=>"GooglePlus",
33
+ "1"=>"Twitter",
34
+ "2"=>"Facebook",
35
+ "3"=>"LinkedIn",
36
+ "4"=>"Reddit",
37
+ "5"=>"Flattr",
38
+ "6"=>"StumbleUpon",
39
+ "7"=>"Pinterest",
40
+ "8"=>"Xing",
41
+ "9"=>"Tumblr");
42
+
43
+ // force a short init because we only need WP core
44
+ define( 'SHORTINIT', true );
45
+
46
+ // build the wp-load.php path
47
+ $wp_root_path = dirname( dirname( dirname( dirname( dirname( __FILE__ ) ) ) ) );
48
+
49
+ // include ms-functions.php for MS
50
+ require ( $wp_root_path . '/wp-includes/ms-functions.php' );
51
+
52
+ // include formatting.php for untrailingslashit()
53
+ require ( $wp_root_path . '/wp-includes/formatting.php' );
54
+
55
+ // include wp-load.php file (that loads wp-config.php and bootstraps WP)
56
+ require ( $wp_root_path . '/wp-load.php' );
57
+
58
+ // include link-template.php for site_url()
59
+ require ( $wp_root_path . '/wp-includes/link-template.php' );
 
60
 
61
+ // set WP_CONTENT_URL
62
+ if ( ! defined( 'WP_CONTENT_URL' ) ) define( 'WP_CONTENT_URL', site_url( 'wp-content') );
63
+
64
+ // get fb app id and secret and ttl
65
+ $shariff3UU_advanced = (array) get_option( 'shariff3UU_advanced' );
66
+
67
+ // set fb api and secret
68
+ if ( isset( $shariff3UU_advanced['fb_id'] ) && isset( $shariff3UU_advanced['fb_secret'] ) ) {
69
+ $tmp["Facebook"]["app_id"] = absint( $shariff3UU_advanced['fb_id'] );
70
+ $tmp["Facebook"]["secret"] = sanitize_text_field( $shariff3UU_advanced['fb_secret'] );
71
+ }
72
+
73
+ // if we have a constant for the ttl (default is 60 seconds)
74
+ if ( defined( 'SHARIFF_BACKEND_TTL' ) ) $tmp["cache"]["ttl"] = SHARIFF_BACKEND_TTL;
75
+ // elseif check for option from the WordPress plugin, must be between 60 and 7200 seconds
76
+ else {
77
+ if ( isset( $shariff3UU_advanced['ttl'] ) ) {
78
+ $ttl = absint( $shariff3UU_advanced['ttl'] );
79
+ if ( $ttl < '61' ) $ttl = '60';
80
+ elseif ( $ttl > '7200' ) $ttl = '7200';
81
+ else $tmp["cache"]["ttl"] = $ttl;
82
+ }
83
+ }
84
 
85
+ // if we have a constant for the tmp-dir
86
+ if ( defined( 'SHARIFF_BACKEND_TMPDIR' ) ) $tmp["cache"]["cacheDir"] = SHARIFF_BACKEND_TMPDIR;
87
+
88
+ // if we do not have a tmp-dir, we use the content dir of WP
89
+ if ( empty( $tmp["cache"]["cacheDir"] ) ) {
90
+ $upload_dir = wp_upload_dir('/');
91
+ $cache_dir = $upload_dir['basedir'] . '/shariff3uu_cache';
92
+ // if it doesn't exit, try to create it
93
+ if( ! file_exists( $cache_dir ) ) {
94
+ wp_mkdir_p( $cache_dir );
95
+ }
96
+ $tmp["cache"]["cacheDir"] = $cache_dir;
97
  }
98
 
99
+ // final check that temp dir is usuable
100
+ if ( ! is_writable( $tmp["cache"]["cacheDir"] ) ) die( "No usable tmp dir found. Please check " . $tmp["cache"]["cacheDir"] );
101
+
102
+ // use proxy if set in wp_config.php
103
+ if ( defined( 'WP_PROXY_HOST' ) && defined( 'WP_PROXY_PORT' ) ) {
104
+ $proxy = WP_PROXY_HOST . ':' . WP_PROXY_PORT;
105
+ $tmp["client"]["proxy"] = $proxy;
106
+ }
107
+
108
+ // start backend
109
+ $shariff = new Backend( $tmp );
110
+
111
+ // draw results, if we have some
112
+ $share_counts = $shariff->get( $_GET["url"] );
113
+ if ( isset( $share_counts ) && $share_counts != null ) {
114
+ echo json_encode( $share_counts );
115
+ }
116
+ else {
117
+ // it's actually just a guess, but very likely
118
+ echo 'Invalid URL (e.g. wrong domain)! ';
119
+ // in case we have some usefull information, but most likley will be "null"
120
+ echo 'Message: ' . json_encode( $share_counts );
121
+ }
122
+ ?>
backend/{shariff.json.example → shariff.json} RENAMED
@@ -1,7 +1,6 @@
1
  {
2
  "cache": {
3
- "ttl": 60,
4
- "cacheDir": "/tmp"
5
  },
6
  "domain": "www.example.com",
7
  "services": [
@@ -13,6 +12,7 @@
13
  "StumbleUpon",
14
  "Flattr",
15
  "Pinterest",
16
- "Xing"
 
17
  ]
18
  }
1
  {
2
  "cache": {
3
+ "ttl": 60
 
4
  },
5
  "domain": "www.example.com",
6
  "services": [
12
  "StumbleUpon",
13
  "Flattr",
14
  "Pinterest",
15
+ "Xing",
16
+ "Tumblr"
17
  ]
18
  }
backend/src/Backend.php CHANGED
@@ -5,19 +5,23 @@ namespace Heise\Shariff;
5
  use GuzzleHttp\Client;
6
  use Heise\Shariff\Backend\BackendManager;
7
  use Heise\Shariff\Backend\ServiceFactory;
8
- use Zend\Cache\Storage\Adapter\Filesystem;
9
- use Zend\Cache\Storage\Adapter\FilesystemOptions;
10
- use Zend\Cache\Storage\ClearExpiredInterface;
11
- use Zend\Cache\StorageFactory;
12
 
 
 
 
 
 
13
  class Backend
14
  {
15
  /** @var BackendManager */
16
  protected $backendManager;
17
 
 
 
 
18
  public function __construct($config)
19
  {
20
- $domain = $config["domain"];
21
  $clientOptions = [];
22
  if (isset($config['client'])) {
23
  $clientOptions = $config['client'];
@@ -25,44 +29,12 @@ class Backend
25
  $client = new Client(['defaults' => $clientOptions]);
26
  $baseCacheKey = md5(json_encode($config));
27
 
28
- if (!isset($config['cache']['adapter'])) {
29
- $config['cache']['adapter'] = 'Filesystem';
30
- }
31
-
32
- if (!isset($config['cache']['adapterOptions'])) {
33
- $config['cache']['adapterOptions'] = [];
34
- }
35
-
36
- $cache = StorageFactory::factory([
37
- 'adapter' => [
38
- 'name' => $config['cache']['adapter'],
39
- 'options' => $config['cache']['adapterOptions']
40
- ]
41
- ]);
42
-
43
- $options = $cache->getOptions();
44
- $options->setNamespace('Shariff');
45
- $options->setTtl($config["cache"]["ttl"]);
46
-
47
- if ($options instanceof FilesystemOptions) {
48
- $options->setCacheDir(
49
- array_key_exists("cacheDir", $config["cache"])
50
- ? $config["cache"]["cacheDir"]
51
- : sys_get_temp_dir()
52
- );
53
- }
54
-
55
- if ($cache instanceof ClearExpiredInterface) {
56
- if (function_exists('register_postsend_function')) {
57
- // for hhvm installations: executing after response / session close
58
- register_postsend_function(function () use ($cache) {
59
- $cache->clearExpired();
60
- });
61
- } else {
62
- // default
63
- $cache->clearExpired();
64
- }
65
  }
 
66
 
67
  $serviceFactory = new ServiceFactory($client);
68
  $this->backendManager = new BackendManager(
@@ -74,7 +46,10 @@ class Backend
74
  );
75
  }
76
 
77
-
 
 
 
78
  public function get($url)
79
  {
80
  return $this->backendManager->get($url);
5
  use GuzzleHttp\Client;
6
  use Heise\Shariff\Backend\BackendManager;
7
  use Heise\Shariff\Backend\ServiceFactory;
 
 
 
 
8
 
9
+ /**
10
+ * Class Backend
11
+ *
12
+ * @package Heise\Shariff
13
+ */
14
  class Backend
15
  {
16
  /** @var BackendManager */
17
  protected $backendManager;
18
 
19
+ /**
20
+ * @param array $config
21
+ */
22
  public function __construct($config)
23
  {
24
+ $domain = $config['domain'];
25
  $clientOptions = [];
26
  if (isset($config['client'])) {
27
  $clientOptions = $config['client'];
29
  $client = new Client(['defaults' => $clientOptions]);
30
  $baseCacheKey = md5(json_encode($config));
31
 
32
+ if (isset($config['cacheClass'])) {
33
+ $cacheClass = $config['cacheClass'];
34
+ } else {
35
+ $cacheClass = 'Heise\\Shariff\\ZendCache';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
36
  }
37
+ $cache = new $cacheClass($config['cache']);
38
 
39
  $serviceFactory = new ServiceFactory($client);
40
  $this->backendManager = new BackendManager(
46
  );
47
  }
48
 
49
+ /**
50
+ * @param string $url
51
+ * @return array
52
+ */
53
  public function get($url)
54
  {
55
  return $this->backendManager->get($url);
backend/src/Backend/BackendManager.php CHANGED
@@ -4,14 +4,19 @@ namespace Heise\Shariff\Backend;
4
 
5
  use GuzzleHttp\Client;
6
  use GuzzleHttp\Pool;
7
- use Zend\Cache\Storage\StorageInterface;
8
 
 
 
 
 
 
9
  class BackendManager
10
  {
11
  /** @var string */
12
  protected $baseCacheKey;
13
 
14
- /** @var StorageInterface */
15
  protected $cache;
16
 
17
  /** @var Client */
@@ -23,7 +28,14 @@ class BackendManager
23
  /** @var ServiceInterface[] */
24
  protected $services;
25
 
26
- public function __construct($baseCacheKey, $cache, $client, $domain, $services)
 
 
 
 
 
 
 
27
  {
28
  $this->baseCacheKey = $baseCacheKey;
29
  $this->cache = $cache;
@@ -32,6 +44,10 @@ class BackendManager
32
  $this->services = $services;
33
  }
34
 
 
 
 
 
35
  private function isValidDomain($url)
36
  {
37
  if ($this->domain) {
@@ -43,6 +59,10 @@ class BackendManager
43
  return true;
44
  }
45
 
 
 
 
 
46
  public function get($url)
47
  {
48
 
@@ -63,6 +83,7 @@ class BackendManager
63
 
64
  $requests = array_map(
65
  function ($service) use ($url) {
 
66
  return $service->getRequest($url);
67
  },
68
  $this->services
@@ -75,7 +96,7 @@ class BackendManager
75
  foreach ($this->services as $service) {
76
  if (method_exists($results[$i], "json")) {
77
  try {
78
- $counts[ $service->getName() ] = intval($service->extractCount($results[$i]->json()));
79
  } catch (\Exception $e) {
80
  // Skip service if broken
81
  }
4
 
5
  use GuzzleHttp\Client;
6
  use GuzzleHttp\Pool;
7
+ use Heise\Shariff\CacheInterface;
8
 
9
+ /**
10
+ * Class BackendManager
11
+ *
12
+ * @package Heise\Shariff\Backend
13
+ */
14
  class BackendManager
15
  {
16
  /** @var string */
17
  protected $baseCacheKey;
18
 
19
+ /** @var CacheInterface */
20
  protected $cache;
21
 
22
  /** @var Client */
28
  /** @var ServiceInterface[] */
29
  protected $services;
30
 
31
+ /**
32
+ * @param string $baseCacheKey
33
+ * @param CacheInterface $cache
34
+ * @param Client $client
35
+ * @param string $domain
36
+ * @param ServiceInterface[] $services
37
+ */
38
+ public function __construct($baseCacheKey, CacheInterface $cache, Client $client, $domain, array $services)
39
  {
40
  $this->baseCacheKey = $baseCacheKey;
41
  $this->cache = $cache;
44
  $this->services = $services;
45
  }
46
 
47
+ /**
48
+ * @param string $url
49
+ * @return bool
50
+ */
51
  private function isValidDomain($url)
52
  {
53
  if ($this->domain) {
59
  return true;
60
  }
61
 
62
+ /**
63
+ * @param string $url
64
+ * @return array|mixed|null
65
+ */
66
  public function get($url)
67
  {
68
 
83
 
84
  $requests = array_map(
85
  function ($service) use ($url) {
86
+ /** @var ServiceInterface $service */
87
  return $service->getRequest($url);
88
  },
89
  $this->services
96
  foreach ($this->services as $service) {
97
  if (method_exists($results[$i], "json")) {
98
  try {
99
+ $counts[ $service->getName() ] = (int)$service->extractCount($results[$i]->json());
100
  } catch (\Exception $e) {
101
  // Skip service if broken
102
  }
backend/src/Backend/Facebook.php CHANGED
@@ -2,17 +2,28 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class Facebook extends Request implements ServiceInterface
6
  {
7
-
 
 
8
  public function getName()
9
  {
10
  return 'facebook';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
- $accessToken = $this->getAccesToken();
16
  if (null !== $accessToken) {
17
  $query = 'https://graph.facebook.com/v2.2/?id=' . $url . '&' . $accessToken;
18
  } else {
@@ -21,7 +32,11 @@ class Facebook extends Request implements ServiceInterface
21
  return $this->createRequest($query);
22
  }
23
 
24
- public function extractCount($data)
 
 
 
 
25
  {
26
  if (isset($data['data']) && isset($data['data'][0]) && isset($data['data'][0]['total_count'])) {
27
  return $data['data'][0]['total_count'];
@@ -30,10 +45,13 @@ class Facebook extends Request implements ServiceInterface
30
  return $data['share']['share_count'];
31
  }
32
 
33
- return null;
34
  }
35
 
36
- protected function getAccesToken()
 
 
 
37
  {
38
  if (isset($this->config['app_id']) && isset($this->config['secret'])) {
39
  try {
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class Facebook
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class Facebook extends Request implements ServiceInterface
11
  {
12
+ /**
13
+ * @return string
14
+ */
15
  public function getName()
16
  {
17
  return 'facebook';
18
  }
19
 
20
+ /**
21
+ * @param string $url
22
+ * @return \GuzzleHttp\Message\Request
23
+ */
24
  public function getRequest($url)
25
  {
26
+ $accessToken = $this->getAccessToken();
27
  if (null !== $accessToken) {
28
  $query = 'https://graph.facebook.com/v2.2/?id=' . $url . '&' . $accessToken;
29
  } else {
32
  return $this->createRequest($query);
33
  }
34
 
35
+ /**
36
+ * @param array $data
37
+ * @return int
38
+ */
39
+ public function extractCount(array $data)
40
  {
41
  if (isset($data['data']) && isset($data['data'][0]) && isset($data['data'][0]['total_count'])) {
42
  return $data['data'][0]['total_count'];
45
  return $data['share']['share_count'];
46
  }
47
 
48
+ return 0;
49
  }
50
 
51
+ /**
52
+ * @return \GuzzleHttp\Stream\StreamInterface|null
53
+ */
54
+ protected function getAccessToken()
55
  {
56
  if (isset($this->config['app_id']) && isset($this->config['secret'])) {
57
  try {
backend/src/Backend/Flattr.php CHANGED
@@ -2,21 +2,37 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class Flattr extends Request implements ServiceInterface
6
  {
7
 
 
 
 
8
  public function getName()
9
  {
10
  return 'flattr';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  $url = 'https://api.flattr.com/rest/v2/things/lookup/?url='.urlencode($url);
16
  return $this->createRequest($url);
17
  }
18
 
19
- public function extractCount($data)
 
 
 
 
20
  {
21
  return (isset($data['flattrs'])) ? $data['flattrs'] : 0;
22
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class Flattr
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class Flattr extends Request implements ServiceInterface
11
  {
12
 
13
+ /**
14
+ * @return string
15
+ */
16
  public function getName()
17
  {
18
  return 'flattr';
19
  }
20
 
21
+ /**
22
+ * @param string $url
23
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
24
+ */
25
  public function getRequest($url)
26
  {
27
  $url = 'https://api.flattr.com/rest/v2/things/lookup/?url='.urlencode($url);
28
  return $this->createRequest($url);
29
  }
30
 
31
+ /**
32
+ * @param array $data
33
+ * @return int
34
+ */
35
+ public function extractCount(array $data)
36
  {
37
  return (isset($data['flattrs'])) ? $data['flattrs'] : 0;
38
  }
backend/src/Backend/GooglePlus.php CHANGED
@@ -2,14 +2,26 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class GooglePlus extends Request implements ServiceInterface
6
  {
7
 
 
 
 
8
  public function getName()
9
  {
10
  return 'googleplus';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  $gPlusUrl = 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ';
@@ -30,7 +42,11 @@ class GooglePlus extends Request implements ServiceInterface
30
  return $this->createRequest($gPlusUrl, 'POST', array('json' => $json));
31
  }
32
 
33
- public function extractCount($data)
 
 
 
 
34
  {
35
  return $data['result']['metadata']['globalCounts']['count'];
36
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class GooglePlus
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class GooglePlus extends Request implements ServiceInterface
11
  {
12
 
13
+ /**
14
+ * @return string
15
+ */
16
  public function getName()
17
  {
18
  return 'googleplus';
19
  }
20
 
21
+ /**
22
+ * @param string $url
23
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
24
+ */
25
  public function getRequest($url)
26
  {
27
  $gPlusUrl = 'https://clients6.google.com/rpc?key=AIzaSyCKSbrvQasunBoV16zDH9R33D88CeLr9gQ';
42
  return $this->createRequest($gPlusUrl, 'POST', array('json' => $json));
43
  }
44
 
45
+ /**
46
+ * @param array $data
47
+ * @return int
48
+ */
49
+ public function extractCount(array $data)
50
  {
51
  return $data['result']['metadata']['globalCounts']['count'];
52
  }
backend/src/Backend/LinkedIn.php CHANGED
@@ -2,21 +2,37 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class LinkedIn extends Request implements ServiceInterface
6
  {
7
 
 
 
 
8
  public function getName()
9
  {
10
  return 'linkedin';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  $url = 'https://www.linkedin.com/countserv/count/share?url='.urlencode($url).'&lang=de_DE&format=json';
16
  return $this->createRequest($url);
17
  }
18
 
19
- public function extractCount($data)
 
 
 
 
20
  {
21
  return $data['count'];
22
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class LinkedIn
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class LinkedIn extends Request implements ServiceInterface
11
  {
12
 
13
+ /**
14
+ * @return string
15
+ */
16
  public function getName()
17
  {
18
  return 'linkedin';
19
  }
20
 
21
+ /**
22
+ * @param string $url
23
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
24
+ */
25
  public function getRequest($url)
26
  {
27
  $url = 'https://www.linkedin.com/countserv/count/share?url='.urlencode($url).'&lang=de_DE&format=json';
28
  return $this->createRequest($url);
29
  }
30
 
31
+ /**
32
+ * @param array $data
33
+ * @return int
34
+ */
35
+ public function extractCount(array $data)
36
  {
37
  return $data['count'];
38
  }
backend/src/Backend/Pinterest.php CHANGED
@@ -6,14 +6,26 @@ use GuzzleHttp\Event\CompleteEvent;
6
  use GuzzleHttp\Stream\Stream;
7
  use GuzzleHttp\Message\Response;
8
 
 
 
 
 
 
9
  class Pinterest extends Request implements ServiceInterface
10
  {
11
 
 
 
 
12
  public function getName()
13
  {
14
  return 'pinterest';
15
  }
16
 
 
 
 
 
17
  public function getRequest($url)
18
  {
19
  $url = 'http://api.pinterest.com/v1/urls/count.json?callback=x&url='.urlencode($url);
@@ -26,7 +38,11 @@ class Pinterest extends Request implements ServiceInterface
26
  return $request;
27
  }
28
 
29
- public function extractCount($data)
 
 
 
 
30
  {
31
  return $data['count'];
32
  }
6
  use GuzzleHttp\Stream\Stream;
7
  use GuzzleHttp\Message\Response;
8
 
9
+ /**
10
+ * Class Pinterest
11
+ *
12
+ * @package Heise\Shariff\Backend
13
+ */
14
  class Pinterest extends Request implements ServiceInterface
15
  {
16
 
17
+ /**
18
+ * @return string
19
+ */
20
  public function getName()
21
  {
22
  return 'pinterest';
23
  }
24
 
25
+ /**
26
+ * @param string $url
27
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
28
+ */
29
  public function getRequest($url)
30
  {
31
  $url = 'http://api.pinterest.com/v1/urls/count.json?callback=x&url='.urlencode($url);
38
  return $request;
39
  }
40
 
41
+ /**
42
+ * @param array $data
43
+ * @return int
44
+ */
45
+ public function extractCount(array $data)
46
  {
47
  return $data['count'];
48
  }
backend/src/Backend/Reddit.php CHANGED
@@ -2,20 +2,36 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class Reddit extends Request implements ServiceInterface
6
  {
7
 
 
 
 
8
  public function getName()
9
  {
10
  return 'reddit';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  return $this->createRequest('https://www.reddit.com/api/info.json?url='.urlencode($url));
16
  }
17
 
18
- public function extractCount($data)
 
 
 
 
19
  {
20
  $count = 0;
21
  foreach ($data['data']['children'] as $child) {
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class Reddit
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class Reddit extends Request implements ServiceInterface
11
  {
12
 
13
+ /**
14
+ * @return string
15
+ */
16
  public function getName()
17
  {
18
  return 'reddit';
19
  }
20
 
21
+ /**
22
+ * @param string $url
23
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
24
+ */
25
  public function getRequest($url)
26
  {
27
  return $this->createRequest('https://www.reddit.com/api/info.json?url='.urlencode($url));
28
  }
29
 
30
+ /**
31
+ * @param array $data
32
+ * @return int
33
+ */
34
+ public function extractCount(array $data)
35
  {
36
  $count = 0;
37
  foreach ($data['data']['children'] as $child) {
backend/src/Backend/Request.php CHANGED
@@ -4,6 +4,11 @@ namespace Heise\Shariff\Backend;
4
 
5
  use GuzzleHttp\Client;
6
 
 
 
 
 
 
7
  abstract class Request
8
  {
9
  /** @var Client */
@@ -12,11 +17,20 @@ abstract class Request
12
  /** @var array */
13
  protected $config;
14
 
 
 
 
15
  public function __construct(Client $client)
16
  {
17
  $this->client = $client;
18
  }
19
 
 
 
 
 
 
 
20
  protected function createRequest($url, $method = 'GET', $options = array())
21
  {
22
  // $defaults = array('future' => true, 'debug' => true);
@@ -31,6 +45,9 @@ abstract class Request
31
  return $req;
32
  }
33
 
 
 
 
34
  public function setConfig(array $config)
35
  {
36
  $this->config = $config;
4
 
5
  use GuzzleHttp\Client;
6
 
7
+ /**
8
+ * Class Request
9
+ *
10
+ * @package Heise\Shariff\Backend
11
+ */
12
  abstract class Request
13
  {
14
  /** @var Client */
17
  /** @var array */
18
  protected $config;
19
 
20
+ /**
21
+ * @param Client $client
22
+ */
23
  public function __construct(Client $client)
24
  {
25
  $this->client = $client;
26
  }
27
 
28
+ /**
29
+ * @param string $url
30
+ * @param string $method
31
+ * @param array $options
32
+ * @return \GuzzleHttp\Message\Request
33
+ */
34
  protected function createRequest($url, $method = 'GET', $options = array())
35
  {
36
  // $defaults = array('future' => true, 'debug' => true);
45
  return $req;
46
  }
47
 
48
+ /**
49
+ * @param array $config
50
+ */
51
  public function setConfig(array $config)
52
  {
53
  $this->config = $config;
backend/src/Backend/ServiceFactory.php CHANGED
@@ -4,26 +4,42 @@ namespace Heise\Shariff\Backend;
4
 
5
  use GuzzleHttp\Client;
6
 
 
 
 
 
 
7
  class ServiceFactory
8
  {
9
  /** @var Client */
10
  protected $client;
11
 
12
- /** @var array */
13
- protected $serviceMap;
14
 
 
 
 
15
  public function __construct(Client $client)
16
  {
17
  $this->client = $client;
18
- $this->serviceMap = array();
19
  }
20
 
21
- public function registerService($name, $service)
 
 
 
 
22
  {
23
  $this->serviceMap[$name] = $service;
24
  }
25
 
26
- public function getServicesByName($serviceNames, $config)
 
 
 
 
 
27
  {
28
  $services = array();
29
  foreach ($serviceNames as $serviceName) {
@@ -32,12 +48,17 @@ class ServiceFactory
32
  return $services;
33
  }
34
 
35
- protected function createService($serviceName, $config)
 
 
 
 
 
36
  {
37
  if (isset($this->serviceMap[$serviceName])) {
38
  $service = $this->serviceMap[$serviceName];
39
  } else {
40
- $serviceClass = 'Heise\Shariff\Backend\\'.$serviceName;
41
  $service = new $serviceClass($this->client);
42
  }
43
 
4
 
5
  use GuzzleHttp\Client;
6
 
7
+ /**
8
+ * Class ServiceFactory
9
+ *
10
+ * @package Heise\Shariff\Backend
11
+ */
12
  class ServiceFactory
13
  {
14
  /** @var Client */
15
  protected $client;
16
 
17
+ /** @var ServiceInterface[] */
18
+ protected $serviceMap = array();
19
 
20
+ /**
21
+ * @param Client $client
22
+ */
23
  public function __construct(Client $client)
24
  {
25
  $this->client = $client;
 
26
  }
27
 
28
+ /**
29
+ * @param string $name
30
+ * @param ServiceInterface $service
31
+ */
32
+ public function registerService($name, ServiceInterface $service)
33
  {
34
  $this->serviceMap[$name] = $service;
35
  }
36
 
37
+ /**
38
+ * @param array $serviceNames
39
+ * @param array $config
40
+ * @return array
41
+ */
42
+ public function getServicesByName(array $serviceNames, array $config)
43
  {
44
  $services = array();
45
  foreach ($serviceNames as $serviceName) {
48
  return $services;
49
  }
50
 
51
+ /**
52
+ * @param string $serviceName
53
+ * @param array $config
54
+ * @return ServiceInterface
55
+ */
56
+ protected function createService($serviceName, array $config)
57
  {
58
  if (isset($this->serviceMap[$serviceName])) {
59
  $service = $this->serviceMap[$serviceName];
60
  } else {
61
+ $serviceClass = 'Heise\\Shariff\\Backend\\' . $serviceName;
62
  $service = new $serviceClass($this->client);
63
  }
64
 
backend/src/Backend/ServiceInterface.php CHANGED
@@ -2,10 +2,33 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  interface ServiceInterface
6
  {
 
 
 
 
7
  public function getRequest($url);
8
- public function extractCount($data);
 
 
 
 
 
 
 
 
 
9
  public function getName();
 
 
 
 
 
10
  public function setConfig(array $config);
11
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Interface ServiceInterface
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  interface ServiceInterface
11
  {
12
+ /**
13
+ * @param string $url
14
+ * @return \GuzzleHttp\Message\Request
15
+ */
16
  public function getRequest($url);
17
+
18
+ /**
19
+ * @param array $data
20
+ * @return int
21
+ */
22
+ public function extractCount(array $data);
23
+
24
+ /**
25
+ * @return string
26
+ */
27
  public function getName();
28
+
29
+ /**
30
+ * @param array $config
31
+ * @return void
32
+ */
33
  public function setConfig(array $config);
34
  }
backend/src/Backend/StumbleUpon.php CHANGED
@@ -2,20 +2,35 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class StumbleUpon extends Request implements ServiceInterface
6
  {
7
-
 
 
8
  public function getName()
9
  {
10
  return 'stumbleupon';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  return $this->createRequest('https://www.stumbleupon.com/services/1.01/badge.getinfo?url='.urlencode($url));
16
  }
17
 
18
- public function extractCount($data)
 
 
 
 
19
  {
20
  return (isset($data['result']['views'])) ? $data['result']['views']+0 : 0;
21
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class StumbleUpon
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class StumbleUpon extends Request implements ServiceInterface
11
  {
12
+ /**
13
+ * @return string
14
+ */
15
  public function getName()
16
  {
17
  return 'stumbleupon';
18
  }
19
 
20
+ /**
21
+ * @param string $url
22
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
23
+ */
24
  public function getRequest($url)
25
  {
26
  return $this->createRequest('https://www.stumbleupon.com/services/1.01/badge.getinfo?url='.urlencode($url));
27
  }
28
 
29
+ /**
30
+ * @param array $data
31
+ * @return int
32
+ */
33
+ public function extractCount(array $data)
34
  {
35
  return (isset($data['result']['views'])) ? $data['result']['views']+0 : 0;
36
  }
backend/src/Backend/Tumblr.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Heise\Shariff\Backend;
4
+
5
+ /**
6
+ * Class Tumblr
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
+ class Tumblr extends Request implements ServiceInterface
11
+ {
12
+
13
+ /**
14
+ * @return string
15
+ */
16
+ public function getName()
17
+ {
18
+ return 'tumblr';
19
+ }
20
+
21
+ /**
22
+ * @param string $url
23
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
24
+ */
25
+ public function getRequest($url)
26
+ {
27
+ return $this->createRequest('https://api.tumblr.com/v2/share/stats?url='.urlencode($url));
28
+ }
29
+
30
+ /**
31
+ * @param array $data
32
+ * @return int
33
+ */
34
+ public function extractCount(array $data)
35
+ {
36
+ return $data['response']['note_count'];
37
+ }
38
+ }
backend/src/Backend/Twitter.php CHANGED
@@ -2,20 +2,36 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
5
  class Twitter extends Request implements ServiceInterface
6
  {
7
 
 
 
 
8
  public function getName()
9
  {
10
  return 'twitter';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  return $this->createRequest('https://cdn.api.twitter.com/1/urls/count.json?url='.urlencode($url));
16
  }
17
 
18
- public function extractCount($data)
 
 
 
 
19
  {
20
  return $data['count'];
21
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ /**
6
+ * Class Twitter
7
+ *
8
+ * @package Heise\Shariff\Backend
9
+ */
10
  class Twitter extends Request implements ServiceInterface
11
  {
12
 
13
+ /**
14
+ * @return string
15
+ */
16
  public function getName()
17
  {
18
  return 'twitter';
19
  }
20
 
21
+ /**
22
+ * @param string $url
23
+ * @return \GuzzleHttp\Message\Request|\GuzzleHttp\Message\RequestInterface
24
+ */
25
  public function getRequest($url)
26
  {
27
  return $this->createRequest('https://cdn.api.twitter.com/1/urls/count.json?url='.urlencode($url));
28
  }
29
 
30
+ /**
31
+ * @param array $data
32
+ * @return int
33
+ */
34
+ public function extractCount(array $data)
35
  {
36
  return $data['count'];
37
  }
backend/src/Backend/Xing.php CHANGED
@@ -2,22 +2,43 @@
2
 
3
  namespace Heise\Shariff\Backend;
4
 
 
 
 
 
 
 
 
5
  class Xing extends Request implements ServiceInterface
6
  {
7
 
 
 
 
8
  public function getName()
9
  {
10
  return 'xing';
11
  }
12
 
 
 
 
 
13
  public function getRequest($url)
14
  {
15
  $request = $this->createRequest('https://www.xing-share.com/spi/shares/statistics', 'POST');
16
- $request->getBody()->setField('url', $url);
 
 
 
17
  return $request;
18
  }
19
 
20
- public function extractCount($data)
 
 
 
 
21
  {
22
  return $data['share_counter'];
23
  }
2
 
3
  namespace Heise\Shariff\Backend;
4
 
5
+ use GuzzleHttp\Post\PostBodyInterface;
6
+
7
+ /**
8
+ * Class Xing
9
+ *
10
+ * @package Heise\Shariff\Backend
11
+ */
12
  class Xing extends Request implements ServiceInterface
13
  {
14
 
15
+ /**
16
+ * @return string
17
+ */
18
  public function getName()
19
  {
20
  return 'xing';
21
  }
22
 
23
+ /**
24
+ * @param string $url
25
+ * @return \GuzzleHttp\Message\Request
26
+ */
27
  public function getRequest($url)
28
  {
29
  $request = $this->createRequest('https://www.xing-share.com/spi/shares/statistics', 'POST');
30
+ $stream = $request->getBody();
31
+ if ($stream instanceof PostBodyInterface) {
32
+ $stream->setField('url', $url);
33
+ }
34
  return $request;
35
  }
36
 
37
+ /**
38
+ * @param array $data
39
+ * @return int
40
+ */
41
+ public function extractCount(array $data)
42
  {
43
  return $data['share_counter'];
44
  }
backend/src/CacheInterface.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Heise\Shariff;
4
+
5
+ /**
6
+ * Generic Cache Interface
7
+ *
8
+ * @package Heise\Shariff
9
+ * @author Markus Klein <markus.klein@typo3.org>
10
+ */
11
+ interface CacheInterface
12
+ {
13
+
14
+ /**
15
+ * Set cache entry
16
+ *
17
+ * @param string $key
18
+ * @param string $content
19
+ * @return void
20
+ */
21
+ public function setItem($key, $content);
22
+
23
+ /**
24
+ * Get cache entry
25
+ *
26
+ * @param string $key
27
+ * @return string
28
+ */
29
+ public function getItem($key);
30
+
31
+ /**
32
+ * Check if cache entry exists
33
+ *
34
+ * @param string $key
35
+ * @return bool
36
+ */
37
+ public function hasItem($key);
38
+ }
backend/src/ZendCache.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Heise\Shariff;
4
+
5
+ use Zend\Cache\Storage\Adapter\FilesystemOptions;
6
+ use Zend\Cache\Storage\ClearExpiredInterface;
7
+ use Zend\Cache\Storage\StorageInterface;
8
+ use Zend\Cache\StorageFactory;
9
+
10
+ /**
11
+ * Implement ZendCache
12
+ *
13
+ * @package Heise\Shariff
14
+ */
15
+ class ZendCache implements CacheInterface
16
+ {
17
+
18
+ /**
19
+ * @var StorageInterface
20
+ */
21
+ protected $cache;
22
+
23
+ /**
24
+ * @param array $configuration
25
+ * @throws \Zend\Cache\Exception\InvalidArgumentException
26
+ * @throws \Zend\Cache\Exception\RuntimeException
27
+ */
28
+ public function __construct(array $configuration)
29
+ {
30
+
31
+ if (!isset($configuration['adapter'])) {
32
+ $configuration['adapter'] = 'Filesystem';
33
+ }
34
+
35
+ if (!isset($configuration['adapterOptions'])) {
36
+ $configuration['adapterOptions'] = [];
37
+ }
38
+
39
+ $cache = StorageFactory::factory([
40
+ 'adapter' => [
41
+ 'name' => $configuration['adapter'],
42
+ 'options' => $configuration['adapterOptions']
43
+ ]
44
+ ]);
45
+
46
+ $options = $cache->getOptions();
47
+ $options->setNamespace('Shariff');
48
+ $options->setTtl($configuration['ttl']);
49
+
50
+ if ($options instanceof FilesystemOptions) {
51
+ $options->setCacheDir(isset($configuration['cacheDir']) ? $configuration['cacheDir'] : sys_get_temp_dir());
52
+ }
53
+
54
+ if ($cache instanceof ClearExpiredInterface) {
55
+ if (function_exists('register_postsend_function')) {
56
+ // for hhvm installations: executing after response / session close
57
+ register_postsend_function(function () use ($cache) {
58
+ $cache->clearExpired();
59
+ });
60
+ } else {
61
+ // default
62
+ $cache->clearExpired();
63
+ }
64
+ }
65
+
66
+ $this->cache = $cache;
67
+ }
68
+
69
+ /**
70
+ * Set cache entry
71
+ *
72
+ * @param string $key
73
+ * @param string $content
74
+ * @return void
75
+ */
76
+ public function setItem($key, $content)
77
+ {
78
+ $this->cache->setItem($key, $content);
79
+ }
80
+
81
+ /**
82
+ * Get cache entry
83
+ *
84
+ * @param string $key
85
+ * @return string
86
+ */
87
+ public function getItem($key)
88
+ {
89
+ return $this->cache->getItem($key);
90
+ }
91
+
92
+ /**
93
+ * Check if cache entry exists
94
+ *
95
+ * @param string $key
96
+ * @return bool
97
+ */
98
+ public function hasItem($key)
99
+ {
100
+ return $this->cache->hasItem($key);
101
+ }
102
+ }
backend/vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
- return ComposerAutoloaderInitbfcd8973f252782d8f308b3dd140a9c7::getLoader();
4
 
5
  require_once __DIR__ . '/composer' . '/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit55bb699f0a2edae31fc22518156fadb3::getLoader();
backend/vendor/composer/ClassLoader.php CHANGED
@@ -351,7 +351,7 @@ class ClassLoader
351
  foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
  if (0 === strpos($class, $prefix)) {
353
  foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
  return $file;
356
  }
357
  }
@@ -361,7 +361,7 @@ class ClassLoader
361
 
362
  // PSR-4 fallback dirs
363
  foreach ($this->fallbackDirsPsr4 as $dir) {
364
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
  return $file;
366
  }
367
  }
@@ -380,7 +380,7 @@ class ClassLoader
380
  foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
  if (0 === strpos($class, $prefix)) {
382
  foreach ($dirs as $dir) {
383
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
  return $file;
385
  }
386
  }
@@ -390,7 +390,7 @@ class ClassLoader
390
 
391
  // PSR-0 fallback dirs
392
  foreach ($this->fallbackDirsPsr0 as $dir) {
393
- if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
  return $file;
395
  }
396
  }
351
  foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
352
  if (0 === strpos($class, $prefix)) {
353
  foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
354
+ if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
355
  return $file;
356
  }
357
  }
361
 
362
  // PSR-4 fallback dirs
363
  foreach ($this->fallbackDirsPsr4 as $dir) {
364
+ if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
365
  return $file;
366
  }
367
  }
380
  foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
381
  if (0 === strpos($class, $prefix)) {
382
  foreach ($dirs as $dir) {
383
+ if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
384
  return $file;
385
  }
386
  }
390
 
391
  // PSR-0 fallback dirs
392
  foreach ($this->fallbackDirsPsr0 as $dir) {
393
+ if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
394
  return $file;
395
  }
396
  }
backend/vendor/composer/autoload_classmap.php CHANGED
@@ -6,4 +6,462 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'GuzzleHttp\\BatchResults' => $vendorDir . '/guzzlehttp/guzzle/src/BatchResults.php',
10
+ 'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
11
+ 'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
12
+ 'GuzzleHttp\\Collection' => $vendorDir . '/guzzlehttp/guzzle/src/Collection.php',
13
+ 'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
14
+ 'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
15
+ 'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
16
+ 'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
17
+ 'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
18
+ 'GuzzleHttp\\Event\\AbstractEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/AbstractEvent.php',
19
+ 'GuzzleHttp\\Event\\AbstractRequestEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/AbstractRequestEvent.php',
20
+ 'GuzzleHttp\\Event\\AbstractRetryableEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/AbstractRetryableEvent.php',
21
+ 'GuzzleHttp\\Event\\AbstractTransferEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/AbstractTransferEvent.php',
22
+ 'GuzzleHttp\\Event\\BeforeEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/BeforeEvent.php',
23
+ 'GuzzleHttp\\Event\\CompleteEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/CompleteEvent.php',
24
+ 'GuzzleHttp\\Event\\Emitter' => $vendorDir . '/guzzlehttp/guzzle/src/Event/Emitter.php',
25
+ 'GuzzleHttp\\Event\\EmitterInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Event/EmitterInterface.php',
26
+ 'GuzzleHttp\\Event\\EndEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/EndEvent.php',
27
+ 'GuzzleHttp\\Event\\ErrorEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/ErrorEvent.php',
28
+ 'GuzzleHttp\\Event\\EventInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Event/EventInterface.php',
29
+ 'GuzzleHttp\\Event\\HasEmitterInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Event/HasEmitterInterface.php',
30
+ 'GuzzleHttp\\Event\\HasEmitterTrait' => $vendorDir . '/guzzlehttp/guzzle/src/Event/HasEmitterTrait.php',
31
+ 'GuzzleHttp\\Event\\ListenerAttacherTrait' => $vendorDir . '/guzzlehttp/guzzle/src/Event/ListenerAttacherTrait.php',
32
+ 'GuzzleHttp\\Event\\ProgressEvent' => $vendorDir . '/guzzlehttp/guzzle/src/Event/ProgressEvent.php',
33
+ 'GuzzleHttp\\Event\\RequestEvents' => $vendorDir . '/guzzlehttp/guzzle/src/Event/RequestEvents.php',
34
+ 'GuzzleHttp\\Event\\SubscriberInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Event/SubscriberInterface.php',
35
+ 'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
36
+ 'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
37
+ 'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
38
+ 'GuzzleHttp\\Exception\\CouldNotRewindStreamException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/CouldNotRewindStreamException.php',
39
+ 'GuzzleHttp\\Exception\\ParseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ParseException.php',
40
+ 'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
41
+ 'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
42
+ 'GuzzleHttp\\Exception\\StateException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/StateException.php',
43
+ 'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
44
+ 'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
45
+ 'GuzzleHttp\\Exception\\XmlParseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/XmlParseException.php',
46
+ 'GuzzleHttp\\HasDataTrait' => $vendorDir . '/guzzlehttp/guzzle/src/HasDataTrait.php',
47
+ 'GuzzleHttp\\Message\\AbstractMessage' => $vendorDir . '/guzzlehttp/guzzle/src/Message/AbstractMessage.php',
48
+ 'GuzzleHttp\\Message\\AppliesHeadersInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Message/AppliesHeadersInterface.php',
49
+ 'GuzzleHttp\\Message\\FutureResponse' => $vendorDir . '/guzzlehttp/guzzle/src/Message/FutureResponse.php',
50
+ 'GuzzleHttp\\Message\\MessageFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Message/MessageFactory.php',
51
+ 'GuzzleHttp\\Message\\MessageFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Message/MessageFactoryInterface.php',
52
+ 'GuzzleHttp\\Message\\MessageInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Message/MessageInterface.php',
53
+ 'GuzzleHttp\\Message\\MessageParser' => $vendorDir . '/guzzlehttp/guzzle/src/Message/MessageParser.php',
54
+ 'GuzzleHttp\\Message\\Request' => $vendorDir . '/guzzlehttp/guzzle/src/Message/Request.php',
55
+ 'GuzzleHttp\\Message\\RequestInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Message/RequestInterface.php',
56
+ 'GuzzleHttp\\Message\\Response' => $vendorDir . '/guzzlehttp/guzzle/src/Message/Response.php',
57
+ 'GuzzleHttp\\Message\\ResponseInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Message/ResponseInterface.php',
58
+ 'GuzzleHttp\\Mimetypes' => $vendorDir . '/guzzlehttp/guzzle/src/Mimetypes.php',
59
+ 'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
60
+ 'GuzzleHttp\\Post\\MultipartBody' => $vendorDir . '/guzzlehttp/guzzle/src/Post/MultipartBody.php',
61
+ 'GuzzleHttp\\Post\\PostBody' => $vendorDir . '/guzzlehttp/guzzle/src/Post/PostBody.php',
62
+ 'GuzzleHttp\\Post\\PostBodyInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Post/PostBodyInterface.php',
63
+ 'GuzzleHttp\\Post\\PostFile' => $vendorDir . '/guzzlehttp/guzzle/src/Post/PostFile.php',
64
+ 'GuzzleHttp\\Post\\PostFileInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Post/PostFileInterface.php',
65
+ 'GuzzleHttp\\Query' => $vendorDir . '/guzzlehttp/guzzle/src/Query.php',
66
+ 'GuzzleHttp\\QueryParser' => $vendorDir . '/guzzlehttp/guzzle/src/QueryParser.php',
67
+ 'GuzzleHttp\\RequestFsm' => $vendorDir . '/guzzlehttp/guzzle/src/RequestFsm.php',
68
+ 'GuzzleHttp\\RingBridge' => $vendorDir . '/guzzlehttp/guzzle/src/RingBridge.php',
69
+ 'GuzzleHttp\\Ring\\Client\\ClientUtils' => $vendorDir . '/guzzlehttp/ringphp/src/Client/ClientUtils.php',
70
+ 'GuzzleHttp\\Ring\\Client\\CurlFactory' => $vendorDir . '/guzzlehttp/ringphp/src/Client/CurlFactory.php',
71
+ 'GuzzleHttp\\Ring\\Client\\CurlHandler' => $vendorDir . '/guzzlehttp/ringphp/src/Client/CurlHandler.php',
72
+ 'GuzzleHttp\\Ring\\Client\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php',
73
+ 'GuzzleHttp\\Ring\\Client\\Middleware' => $vendorDir . '/guzzlehttp/ringphp/src/Client/Middleware.php',
74
+ 'GuzzleHttp\\Ring\\Client\\MockHandler' => $vendorDir . '/guzzlehttp/ringphp/src/Client/MockHandler.php',
75
+ 'GuzzleHttp\\Ring\\Client\\StreamHandler' => $vendorDir . '/guzzlehttp/ringphp/src/Client/StreamHandler.php',
76
+ 'GuzzleHttp\\Ring\\Core' => $vendorDir . '/guzzlehttp/ringphp/src/Core.php',
77
+ 'GuzzleHttp\\Ring\\Exception\\CancelledException' => $vendorDir . '/guzzlehttp/ringphp/src/Exception/CancelledException.php',
78
+ 'GuzzleHttp\\Ring\\Exception\\CancelledFutureAccessException' => $vendorDir . '/guzzlehttp/ringphp/src/Exception/CancelledFutureAccessException.php',
79
+ 'GuzzleHttp\\Ring\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/ringphp/src/Exception/ConnectException.php',
80
+ 'GuzzleHttp\\Ring\\Exception\\RingException' => $vendorDir . '/guzzlehttp/ringphp/src/Exception/RingException.php',
81
+ 'GuzzleHttp\\Ring\\Future\\BaseFutureTrait' => $vendorDir . '/guzzlehttp/ringphp/src/Future/BaseFutureTrait.php',
82
+ 'GuzzleHttp\\Ring\\Future\\CompletedFutureArray' => $vendorDir . '/guzzlehttp/ringphp/src/Future/CompletedFutureArray.php',
83
+ 'GuzzleHttp\\Ring\\Future\\CompletedFutureValue' => $vendorDir . '/guzzlehttp/ringphp/src/Future/CompletedFutureValue.php',
84
+ 'GuzzleHttp\\Ring\\Future\\FutureArray' => $vendorDir . '/guzzlehttp/ringphp/src/Future/FutureArray.php',
85
+ 'GuzzleHttp\\Ring\\Future\\FutureArrayInterface' => $vendorDir . '/guzzlehttp/ringphp/src/Future/FutureArrayInterface.php',
86
+ 'GuzzleHttp\\Ring\\Future\\FutureInterface' => $vendorDir . '/guzzlehttp/ringphp/src/Future/FutureInterface.php',
87
+ 'GuzzleHttp\\Ring\\Future\\FutureValue' => $vendorDir . '/guzzlehttp/ringphp/src/Future/FutureValue.php',
88
+ 'GuzzleHttp\\Ring\\Future\\MagicFutureTrait' => $vendorDir . '/guzzlehttp/ringphp/src/Future/MagicFutureTrait.php',
89
+ 'GuzzleHttp\\Stream\\AppendStream' => $vendorDir . '/guzzlehttp/streams/src/AppendStream.php',
90
+ 'GuzzleHttp\\Stream\\AsyncReadStream' => $vendorDir . '/guzzlehttp/streams/src/AsyncReadStream.php',
91
+ 'GuzzleHttp\\Stream\\BufferStream' => $vendorDir . '/guzzlehttp/streams/src/BufferStream.php',
92
+ 'GuzzleHttp\\Stream\\CachingStream' => $vendorDir . '/guzzlehttp/streams/src/CachingStream.php',
93
+ 'GuzzleHttp\\Stream\\DroppingStream' => $vendorDir . '/guzzlehttp/streams/src/DroppingStream.php',
94
+ 'GuzzleHttp\\Stream\\Exception\\CannotAttachException' => $vendorDir . '/guzzlehttp/streams/src/Exception/CannotAttachException.php',
95
+ 'GuzzleHttp\\Stream\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/streams/src/Exception/SeekException.php',
96
+ 'GuzzleHttp\\Stream\\FnStream' => $vendorDir . '/guzzlehttp/streams/src/FnStream.php',
97
+ 'GuzzleHttp\\Stream\\GuzzleStreamWrapper' => $vendorDir . '/guzzlehttp/streams/src/GuzzleStreamWrapper.php',
98
+ 'GuzzleHttp\\Stream\\InflateStream' => $vendorDir . '/guzzlehttp/streams/src/InflateStream.php',
99
+ 'GuzzleHttp\\Stream\\LazyOpenStream' => $vendorDir . '/guzzlehttp/streams/src/LazyOpenStream.php',
100
+ 'GuzzleHttp\\Stream\\LimitStream' => $vendorDir . '/guzzlehttp/streams/src/LimitStream.php',
101
+ 'GuzzleHttp\\Stream\\MetadataStreamInterface' => $vendorDir . '/guzzlehttp/streams/src/MetadataStreamInterface.php',
102
+ 'GuzzleHttp\\Stream\\NoSeekStream' => $vendorDir . '/guzzlehttp/streams/src/NoSeekStream.php',
103
+ 'GuzzleHttp\\Stream\\NullStream' => $vendorDir . '/guzzlehttp/streams/src/NullStream.php',
104
+ 'GuzzleHttp\\Stream\\PumpStream' => $vendorDir . '/guzzlehttp/streams/src/PumpStream.php',
105
+ 'GuzzleHttp\\Stream\\Stream' => $vendorDir . '/guzzlehttp/streams/src/Stream.php',
106
+ 'GuzzleHttp\\Stream\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/streams/src/StreamDecoratorTrait.php',
107
+ 'GuzzleHttp\\Stream\\StreamInterface' => $vendorDir . '/guzzlehttp/streams/src/StreamInterface.php',
108
+ 'GuzzleHttp\\Stream\\Utils' => $vendorDir . '/guzzlehttp/streams/src/Utils.php',
109
+ 'GuzzleHttp\\Subscriber\\Cookie' => $vendorDir . '/guzzlehttp/guzzle/src/Subscriber/Cookie.php',
110
+ 'GuzzleHttp\\Subscriber\\History' => $vendorDir . '/guzzlehttp/guzzle/src/Subscriber/History.php',
111
+ 'GuzzleHttp\\Subscriber\\HttpError' => $vendorDir . '/guzzlehttp/guzzle/src/Subscriber/HttpError.php',
112
+ 'GuzzleHttp\\Subscriber\\Mock' => $vendorDir . '/guzzlehttp/guzzle/src/Subscriber/Mock.php',
113
+ 'GuzzleHttp\\Subscriber\\Prepare' => $vendorDir . '/guzzlehttp/guzzle/src/Subscriber/Prepare.php',
114
+ 'GuzzleHttp\\Subscriber\\Redirect' => $vendorDir . '/guzzlehttp/guzzle/src/Subscriber/Redirect.php',
115
+ 'GuzzleHttp\\ToArrayInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ToArrayInterface.php',
116
+ 'GuzzleHttp\\Transaction' => $vendorDir . '/guzzlehttp/guzzle/src/Transaction.php',
117
+ 'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
118
+ 'GuzzleHttp\\Url' => $vendorDir . '/guzzlehttp/guzzle/src/Url.php',
119
+ 'GuzzleHttp\\Utils' => $vendorDir . '/guzzlehttp/guzzle/src/Utils.php',
120
+ 'Heise\\Shariff\\Backend' => $baseDir . '/src/Backend.php',
121
+ 'Heise\\Shariff\\Backend\\BackendManager' => $baseDir . '/src/Backend/BackendManager.php',
122
+ 'Heise\\Shariff\\Backend\\Facebook' => $baseDir . '/src/Backend/Facebook.php',
123
+ 'Heise\\Shariff\\Backend\\Flattr' => $baseDir . '/src/Backend/Flattr.php',
124
+ 'Heise\\Shariff\\Backend\\GooglePlus' => $baseDir . '/src/Backend/GooglePlus.php',
125
+ 'Heise\\Shariff\\Backend\\LinkedIn' => $baseDir . '/src/Backend/LinkedIn.php',
126
+ 'Heise\\Shariff\\Backend\\Pinterest' => $baseDir . '/src/Backend/Pinterest.php',
127
+ 'Heise\\Shariff\\Backend\\Reddit' => $baseDir . '/src/Backend/Reddit.php',
128
+ 'Heise\\Shariff\\Backend\\Request' => $baseDir . '/src/Backend/Request.php',
129
+ 'Heise\\Shariff\\Backend\\ServiceFactory' => $baseDir . '/src/Backend/ServiceFactory.php',
130
+ 'Heise\\Shariff\\Backend\\ServiceInterface' => $baseDir . '/src/Backend/ServiceInterface.php',
131
+ 'Heise\\Shariff\\Backend\\StumbleUpon' => $baseDir . '/src/Backend/StumbleUpon.php',
132
+ 'Heise\\Shariff\\Backend\\Twitter' => $baseDir . '/src/Backend/Twitter.php',
133
+ 'Heise\\Shariff\\Backend\\Xing' => $baseDir . '/src/Backend/Xing.php',
134
+ 'Heise\\Shariff\\CacheInterface' => $baseDir . '/src/CacheInterface.php',
135
+ 'Heise\\Shariff\\ZendCache' => $baseDir . '/src/ZendCache.php',
136
+ 'React\\Promise\\CancellablePromiseInterface' => $vendorDir . '/react/promise/src/CancellablePromiseInterface.php',
137
+ 'React\\Promise\\Deferred' => $vendorDir . '/react/promise/src/Deferred.php',
138
+ 'React\\Promise\\ExtendedPromiseInterface' => $vendorDir . '/react/promise/src/ExtendedPromiseInterface.php',
139
+ 'React\\Promise\\FulfilledPromise' => $vendorDir . '/react/promise/src/FulfilledPromise.php',
140
+ 'React\\Promise\\LazyPromise' => $vendorDir . '/react/promise/src/LazyPromise.php',
141
+ 'React\\Promise\\Promise' => $vendorDir . '/react/promise/src/Promise.php',
142
+ 'React\\Promise\\PromiseInterface' => $vendorDir . '/react/promise/src/PromiseInterface.php',
143
+ 'React\\Promise\\PromisorInterface' => $vendorDir . '/react/promise/src/PromisorInterface.php',
144
+ 'React\\Promise\\RejectedPromise' => $vendorDir . '/react/promise/src/RejectedPromise.php',
145
+ 'React\\Promise\\UnhandledRejectionException' => $vendorDir . '/react/promise/src/UnhandledRejectionException.php',
146
+ 'Zend\\Cache\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-cache/src/Exception/BadMethodCallException.php',
147
+ 'Zend\\Cache\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-cache/src/Exception/ExceptionInterface.php',
148
+ 'Zend\\Cache\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-cache/src/Exception/ExtensionNotLoadedException.php',
149
+ 'Zend\\Cache\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-cache/src/Exception/InvalidArgumentException.php',
150
+ 'Zend\\Cache\\Exception\\LogicException' => $vendorDir . '/zendframework/zend-cache/src/Exception/LogicException.php',
151
+ 'Zend\\Cache\\Exception\\MissingDependencyException' => $vendorDir . '/zendframework/zend-cache/src/Exception/MissingDependencyException.php',
152
+ 'Zend\\Cache\\Exception\\MissingKeyException' => $vendorDir . '/zendframework/zend-cache/src/Exception/MissingKeyException.php',
153
+ 'Zend\\Cache\\Exception\\OutOfSpaceException' => $vendorDir . '/zendframework/zend-cache/src/Exception/OutOfSpaceException.php',
154
+ 'Zend\\Cache\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-cache/src/Exception/RuntimeException.php',
155
+ 'Zend\\Cache\\Exception\\UnexpectedValueException' => $vendorDir . '/zendframework/zend-cache/src/Exception/UnexpectedValueException.php',
156
+ 'Zend\\Cache\\Exception\\UnsupportedMethodCallException' => $vendorDir . '/zendframework/zend-cache/src/Exception/UnsupportedMethodCallException.php',
157
+ 'Zend\\Cache\\PatternFactory' => $vendorDir . '/zendframework/zend-cache/src/PatternFactory.php',
158
+ 'Zend\\Cache\\PatternPluginManager' => $vendorDir . '/zendframework/zend-cache/src/PatternPluginManager.php',
159
+ 'Zend\\Cache\\Pattern\\AbstractPattern' => $vendorDir . '/zendframework/zend-cache/src/Pattern/AbstractPattern.php',
160
+ 'Zend\\Cache\\Pattern\\CallbackCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/CallbackCache.php',
161
+ 'Zend\\Cache\\Pattern\\CaptureCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/CaptureCache.php',
162
+ 'Zend\\Cache\\Pattern\\ClassCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/ClassCache.php',
163
+ 'Zend\\Cache\\Pattern\\ObjectCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/ObjectCache.php',
164
+ 'Zend\\Cache\\Pattern\\OutputCache' => $vendorDir . '/zendframework/zend-cache/src/Pattern/OutputCache.php',
165
+ 'Zend\\Cache\\Pattern\\PatternInterface' => $vendorDir . '/zendframework/zend-cache/src/Pattern/PatternInterface.php',
166
+ 'Zend\\Cache\\Pattern\\PatternOptions' => $vendorDir . '/zendframework/zend-cache/src/Pattern/PatternOptions.php',
167
+ 'Zend\\Cache\\Service\\StorageCacheAbstractServiceFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/StorageCacheAbstractServiceFactory.php',
168
+ 'Zend\\Cache\\Service\\StorageCacheFactory' => $vendorDir . '/zendframework/zend-cache/src/Service/StorageCacheFactory.php',
169
+ 'Zend\\Cache\\StorageFactory' => $vendorDir . '/zendframework/zend-cache/src/StorageFactory.php',
170
+ 'Zend\\Cache\\Storage\\AdapterPluginManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/AdapterPluginManager.php',
171
+ 'Zend\\Cache\\Storage\\Adapter\\AbstractAdapter' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/AbstractAdapter.php',
172
+ 'Zend\\Cache\\Storage\\Adapter\\AbstractZendServer' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/AbstractZendServer.php',
173
+ 'Zend\\Cache\\Storage\\Adapter\\AdapterOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/AdapterOptions.php',
174
+ 'Zend\\Cache\\Storage\\Adapter\\Apc' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Apc.php',
175
+ 'Zend\\Cache\\Storage\\Adapter\\ApcIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ApcIterator.php',
176
+ 'Zend\\Cache\\Storage\\Adapter\\ApcOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ApcOptions.php',
177
+ 'Zend\\Cache\\Storage\\Adapter\\BlackHole' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/BlackHole.php',
178
+ 'Zend\\Cache\\Storage\\Adapter\\Dba' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Dba.php',
179
+ 'Zend\\Cache\\Storage\\Adapter\\DbaIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/DbaIterator.php',
180
+ 'Zend\\Cache\\Storage\\Adapter\\DbaOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/DbaOptions.php',
181
+ 'Zend\\Cache\\Storage\\Adapter\\Filesystem' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Filesystem.php',
182
+ 'Zend\\Cache\\Storage\\Adapter\\FilesystemIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/FilesystemIterator.php',
183
+ 'Zend\\Cache\\Storage\\Adapter\\FilesystemOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/FilesystemOptions.php',
184
+ 'Zend\\Cache\\Storage\\Adapter\\KeyListIterator' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/KeyListIterator.php',
185
+ 'Zend\\Cache\\Storage\\Adapter\\Memcache' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Memcache.php',
186
+ 'Zend\\Cache\\Storage\\Adapter\\MemcacheOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcacheOptions.php',
187
+ 'Zend\\Cache\\Storage\\Adapter\\MemcacheResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcacheResourceManager.php',
188
+ 'Zend\\Cache\\Storage\\Adapter\\Memcached' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Memcached.php',
189
+ 'Zend\\Cache\\Storage\\Adapter\\MemcachedOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcachedOptions.php',
190
+ 'Zend\\Cache\\Storage\\Adapter\\MemcachedResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemcachedResourceManager.php',
191
+ 'Zend\\Cache\\Storage\\Adapter\\Memory' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Memory.php',
192
+ 'Zend\\Cache\\Storage\\Adapter\\MemoryOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MemoryOptions.php',
193
+ 'Zend\\Cache\\Storage\\Adapter\\MongoDb' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MongoDb.php',
194
+ 'Zend\\Cache\\Storage\\Adapter\\MongoDbOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MongoDbOptions.php',
195
+ 'Zend\\Cache\\Storage\\Adapter\\MongoDbResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/MongoDbResourceManager.php',
196
+ 'Zend\\Cache\\Storage\\Adapter\\Redis' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Redis.php',
197
+ 'Zend\\Cache\\Storage\\Adapter\\RedisOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/RedisOptions.php',
198
+ 'Zend\\Cache\\Storage\\Adapter\\RedisResourceManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/RedisResourceManager.php',
199
+ 'Zend\\Cache\\Storage\\Adapter\\Session' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/Session.php',
200
+ 'Zend\\Cache\\Storage\\Adapter\\SessionOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/SessionOptions.php',
201
+ 'Zend\\Cache\\Storage\\Adapter\\WinCache' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/WinCache.php',
202
+ 'Zend\\Cache\\Storage\\Adapter\\WinCacheOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/WinCacheOptions.php',
203
+ 'Zend\\Cache\\Storage\\Adapter\\XCache' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/XCache.php',
204
+ 'Zend\\Cache\\Storage\\Adapter\\XCacheOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/XCacheOptions.php',
205
+ 'Zend\\Cache\\Storage\\Adapter\\ZendServerDisk' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ZendServerDisk.php',
206
+ 'Zend\\Cache\\Storage\\Adapter\\ZendServerShm' => $vendorDir . '/zendframework/zend-cache/src/Storage/Adapter/ZendServerShm.php',
207
+ 'Zend\\Cache\\Storage\\AvailableSpaceCapableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/AvailableSpaceCapableInterface.php',
208
+ 'Zend\\Cache\\Storage\\Capabilities' => $vendorDir . '/zendframework/zend-cache/src/Storage/Capabilities.php',
209
+ 'Zend\\Cache\\Storage\\ClearByNamespaceInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/ClearByNamespaceInterface.php',
210
+ 'Zend\\Cache\\Storage\\ClearByPrefixInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/ClearByPrefixInterface.php',
211
+ 'Zend\\Cache\\Storage\\ClearExpiredInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/ClearExpiredInterface.php',
212
+ 'Zend\\Cache\\Storage\\Event' => $vendorDir . '/zendframework/zend-cache/src/Storage/Event.php',
213
+ 'Zend\\Cache\\Storage\\ExceptionEvent' => $vendorDir . '/zendframework/zend-cache/src/Storage/ExceptionEvent.php',
214
+ 'Zend\\Cache\\Storage\\FlushableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/FlushableInterface.php',
215
+ 'Zend\\Cache\\Storage\\IterableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/IterableInterface.php',
216
+ 'Zend\\Cache\\Storage\\IteratorInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/IteratorInterface.php',
217
+ 'Zend\\Cache\\Storage\\OptimizableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/OptimizableInterface.php',
218
+ 'Zend\\Cache\\Storage\\PluginManager' => $vendorDir . '/zendframework/zend-cache/src/Storage/PluginManager.php',
219
+ 'Zend\\Cache\\Storage\\Plugin\\AbstractPlugin' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/AbstractPlugin.php',
220
+ 'Zend\\Cache\\Storage\\Plugin\\ClearExpiredByFactor' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/ClearExpiredByFactor.php',
221
+ 'Zend\\Cache\\Storage\\Plugin\\ExceptionHandler' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/ExceptionHandler.php',
222
+ 'Zend\\Cache\\Storage\\Plugin\\IgnoreUserAbort' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/IgnoreUserAbort.php',
223
+ 'Zend\\Cache\\Storage\\Plugin\\OptimizeByFactor' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/OptimizeByFactor.php',
224
+ 'Zend\\Cache\\Storage\\Plugin\\PluginInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/PluginInterface.php',
225
+ 'Zend\\Cache\\Storage\\Plugin\\PluginOptions' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/PluginOptions.php',
226
+ 'Zend\\Cache\\Storage\\Plugin\\Serializer' => $vendorDir . '/zendframework/zend-cache/src/Storage/Plugin/Serializer.php',
227
+ 'Zend\\Cache\\Storage\\PostEvent' => $vendorDir . '/zendframework/zend-cache/src/Storage/PostEvent.php',
228
+ 'Zend\\Cache\\Storage\\StorageInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/StorageInterface.php',
229
+ 'Zend\\Cache\\Storage\\TaggableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/TaggableInterface.php',
230
+ 'Zend\\Cache\\Storage\\TotalSpaceCapableInterface' => $vendorDir . '/zendframework/zend-cache/src/Storage/TotalSpaceCapableInterface.php',
231
+ 'Zend\\Config\\AbstractConfigFactory' => $vendorDir . '/zendframework/zend-config/src/AbstractConfigFactory.php',
232
+ 'Zend\\Config\\Config' => $vendorDir . '/zendframework/zend-config/src/Config.php',
233
+ 'Zend\\Config\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-config/src/Exception/ExceptionInterface.php',
234
+ 'Zend\\Config\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-config/src/Exception/InvalidArgumentException.php',
235
+ 'Zend\\Config\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-config/src/Exception/RuntimeException.php',
236
+ 'Zend\\Config\\Factory' => $vendorDir . '/zendframework/zend-config/src/Factory.php',
237
+ 'Zend\\Config\\Processor\\Constant' => $vendorDir . '/zendframework/zend-config/src/Processor/Constant.php',
238
+ 'Zend\\Config\\Processor\\Filter' => $vendorDir . '/zendframework/zend-config/src/Processor/Filter.php',
239
+ 'Zend\\Config\\Processor\\ProcessorInterface' => $vendorDir . '/zendframework/zend-config/src/Processor/ProcessorInterface.php',
240
+ 'Zend\\Config\\Processor\\Queue' => $vendorDir . '/zendframework/zend-config/src/Processor/Queue.php',
241
+ 'Zend\\Config\\Processor\\Token' => $vendorDir . '/zendframework/zend-config/src/Processor/Token.php',
242
+ 'Zend\\Config\\Processor\\Translator' => $vendorDir . '/zendframework/zend-config/src/Processor/Translator.php',
243
+ 'Zend\\Config\\ReaderPluginManager' => $vendorDir . '/zendframework/zend-config/src/ReaderPluginManager.php',
244
+ 'Zend\\Config\\Reader\\Ini' => $vendorDir . '/zendframework/zend-config/src/Reader/Ini.php',
245
+ 'Zend\\Config\\Reader\\JavaProperties' => $vendorDir . '/zendframework/zend-config/src/Reader/JavaProperties.php',
246
+ 'Zend\\Config\\Reader\\Json' => $vendorDir . '/zendframework/zend-config/src/Reader/Json.php',
247
+ 'Zend\\Config\\Reader\\ReaderInterface' => $vendorDir . '/zendframework/zend-config/src/Reader/ReaderInterface.php',
248
+ 'Zend\\Config\\Reader\\Xml' => $vendorDir . '/zendframework/zend-config/src/Reader/Xml.php',
249
+ 'Zend\\Config\\Reader\\Yaml' => $vendorDir . '/zendframework/zend-config/src/Reader/Yaml.php',
250
+ 'Zend\\Config\\WriterPluginManager' => $vendorDir . '/zendframework/zend-config/src/WriterPluginManager.php',
251
+ 'Zend\\Config\\Writer\\AbstractWriter' => $vendorDir . '/zendframework/zend-config/src/Writer/AbstractWriter.php',
252
+ 'Zend\\Config\\Writer\\Ini' => $vendorDir . '/zendframework/zend-config/src/Writer/Ini.php',
253
+ 'Zend\\Config\\Writer\\Json' => $vendorDir . '/zendframework/zend-config/src/Writer/Json.php',
254
+ 'Zend\\Config\\Writer\\PhpArray' => $vendorDir . '/zendframework/zend-config/src/Writer/PhpArray.php',
255
+ 'Zend\\Config\\Writer\\WriterInterface' => $vendorDir . '/zendframework/zend-config/src/Writer/WriterInterface.php',
256
+ 'Zend\\Config\\Writer\\Xml' => $vendorDir . '/zendframework/zend-config/src/Writer/Xml.php',
257
+ 'Zend\\Config\\Writer\\Yaml' => $vendorDir . '/zendframework/zend-config/src/Writer/Yaml.php',
258
+ 'Zend\\EventManager\\AbstractListenerAggregate' => $vendorDir . '/zendframework/zend-eventmanager/src/AbstractListenerAggregate.php',
259
+ 'Zend\\EventManager\\Event' => $vendorDir . '/zendframework/zend-eventmanager/src/Event.php',
260
+ 'Zend\\EventManager\\EventInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventInterface.php',
261
+ 'Zend\\EventManager\\EventManager' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManager.php',
262
+ 'Zend\\EventManager\\EventManagerAwareInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManagerAwareInterface.php',
263
+ 'Zend\\EventManager\\EventManagerAwareTrait' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManagerAwareTrait.php',
264
+ 'Zend\\EventManager\\EventManagerInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventManagerInterface.php',
265
+ 'Zend\\EventManager\\EventsCapableInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/EventsCapableInterface.php',
266
+ 'Zend\\EventManager\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/DomainException.php',
267
+ 'Zend\\EventManager\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/ExceptionInterface.php',
268
+ 'Zend\\EventManager\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/InvalidArgumentException.php',
269
+ 'Zend\\EventManager\\Exception\\InvalidCallbackException' => $vendorDir . '/zendframework/zend-eventmanager/src/Exception/InvalidCallbackException.php',
270
+ 'Zend\\EventManager\\FilterChain' => $vendorDir . '/zendframework/zend-eventmanager/src/FilterChain.php',
271
+ 'Zend\\EventManager\\Filter\\FilterInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/Filter/FilterInterface.php',
272
+ 'Zend\\EventManager\\Filter\\FilterIterator' => $vendorDir . '/zendframework/zend-eventmanager/src/Filter/FilterIterator.php',
273
+ 'Zend\\EventManager\\GlobalEventManager' => $vendorDir . '/zendframework/zend-eventmanager/src/GlobalEventManager.php',
274
+ 'Zend\\EventManager\\ListenerAggregateInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/ListenerAggregateInterface.php',
275
+ 'Zend\\EventManager\\ListenerAggregateTrait' => $vendorDir . '/zendframework/zend-eventmanager/src/ListenerAggregateTrait.php',
276
+ 'Zend\\EventManager\\ProvidesEvents' => $vendorDir . '/zendframework/zend-eventmanager/src/ProvidesEvents.php',
277
+ 'Zend\\EventManager\\ResponseCollection' => $vendorDir . '/zendframework/zend-eventmanager/src/ResponseCollection.php',
278
+ 'Zend\\EventManager\\SharedEventAggregateAwareInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventAggregateAwareInterface.php',
279
+ 'Zend\\EventManager\\SharedEventManager' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventManager.php',
280
+ 'Zend\\EventManager\\SharedEventManagerAwareInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventManagerAwareInterface.php',
281
+ 'Zend\\EventManager\\SharedEventManagerInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedEventManagerInterface.php',
282
+ 'Zend\\EventManager\\SharedListenerAggregateInterface' => $vendorDir . '/zendframework/zend-eventmanager/src/SharedListenerAggregateInterface.php',
283
+ 'Zend\\EventManager\\StaticEventManager' => $vendorDir . '/zendframework/zend-eventmanager/src/StaticEventManager.php',
284
+ 'Zend\\Json\\Decoder' => $vendorDir . '/zendframework/zend-json/src/Decoder.php',
285
+ 'Zend\\Json\\Encoder' => $vendorDir . '/zendframework/zend-json/src/Encoder.php',
286
+ 'Zend\\Json\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-json/src/Exception/BadMethodCallException.php',
287
+ 'Zend\\Json\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-json/src/Exception/ExceptionInterface.php',
288
+ 'Zend\\Json\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-json/src/Exception/InvalidArgumentException.php',
289
+ 'Zend\\Json\\Exception\\RecursionException' => $vendorDir . '/zendframework/zend-json/src/Exception/RecursionException.php',
290
+ 'Zend\\Json\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-json/src/Exception/RuntimeException.php',
291
+ 'Zend\\Json\\Expr' => $vendorDir . '/zendframework/zend-json/src/Expr.php',
292
+ 'Zend\\Json\\Json' => $vendorDir . '/zendframework/zend-json/src/Json.php',
293
+ 'Zend\\Json\\Server\\Cache' => $vendorDir . '/zendframework/zend-json/src/Server/Cache.php',
294
+ 'Zend\\Json\\Server\\Client' => $vendorDir . '/zendframework/zend-json/src/Server/Client.php',
295
+ 'Zend\\Json\\Server\\Error' => $vendorDir . '/zendframework/zend-json/src/Server/Error.php',
296
+ 'Zend\\Json\\Server\\Exception\\ErrorException' => $vendorDir . '/zendframework/zend-json/src/Server/Exception/ErrorException.php',
297
+ 'Zend\\Json\\Server\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-json/src/Server/Exception/ExceptionInterface.php',
298
+ 'Zend\\Json\\Server\\Exception\\HttpException' => $vendorDir . '/zendframework/zend-json/src/Server/Exception/HttpException.php',
299
+ 'Zend\\Json\\Server\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-json/src/Server/Exception/InvalidArgumentException.php',
300
+ 'Zend\\Json\\Server\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-json/src/Server/Exception/RuntimeException.php',
301
+ 'Zend\\Json\\Server\\Request' => $vendorDir . '/zendframework/zend-json/src/Server/Request.php',
302
+ 'Zend\\Json\\Server\\Request\\Http' => $vendorDir . '/zendframework/zend-json/src/Server/Request/Http.php',
303
+ 'Zend\\Json\\Server\\Response' => $vendorDir . '/zendframework/zend-json/src/Server/Response.php',
304
+ 'Zend\\Json\\Server\\Response\\Http' => $vendorDir . '/zendframework/zend-json/src/Server/Response/Http.php',
305
+ 'Zend\\Json\\Server\\Server' => $vendorDir . '/zendframework/zend-json/src/Server/Server.php',
306
+ 'Zend\\Json\\Server\\Smd' => $vendorDir . '/zendframework/zend-json/src/Server/Smd.php',
307
+ 'Zend\\Json\\Server\\Smd\\Service' => $vendorDir . '/zendframework/zend-json/src/Server/Smd/Service.php',
308
+ 'Zend\\Math\\BigInteger\\AdapterPluginManager' => $vendorDir . '/zendframework/zend-math/src/BigInteger/AdapterPluginManager.php',
309
+ 'Zend\\Math\\BigInteger\\Adapter\\AdapterInterface' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Adapter/AdapterInterface.php',
310
+ 'Zend\\Math\\BigInteger\\Adapter\\Bcmath' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Adapter/Bcmath.php',
311
+ 'Zend\\Math\\BigInteger\\Adapter\\Gmp' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Adapter/Gmp.php',
312
+ 'Zend\\Math\\BigInteger\\BigInteger' => $vendorDir . '/zendframework/zend-math/src/BigInteger/BigInteger.php',
313
+ 'Zend\\Math\\BigInteger\\Exception\\DivisionByZeroException' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Exception/DivisionByZeroException.php',
314
+ 'Zend\\Math\\BigInteger\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Exception/ExceptionInterface.php',
315
+ 'Zend\\Math\\BigInteger\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Exception/InvalidArgumentException.php',
316
+ 'Zend\\Math\\BigInteger\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-math/src/BigInteger/Exception/RuntimeException.php',
317
+ 'Zend\\Math\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-math/src/Exception/DomainException.php',
318
+ 'Zend\\Math\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-math/src/Exception/ExceptionInterface.php',
319
+ 'Zend\\Math\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-math/src/Exception/InvalidArgumentException.php',
320
+ 'Zend\\Math\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-math/src/Exception/RuntimeException.php',
321
+ 'Zend\\Math\\Rand' => $vendorDir . '/zendframework/zend-math/src/Rand.php',
322
+ 'Zend\\Math\\Source\\HashTiming' => $vendorDir . '/zendframework/zend-math/src/Source/HashTiming.php',
323
+ 'Zend\\Serializer\\AdapterPluginManager' => $vendorDir . '/zendframework/zend-serializer/src/AdapterPluginManager.php',
324
+ 'Zend\\Serializer\\Adapter\\AbstractAdapter' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/AbstractAdapter.php',
325
+ 'Zend\\Serializer\\Adapter\\AdapterInterface' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/AdapterInterface.php',
326
+ 'Zend\\Serializer\\Adapter\\AdapterOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/AdapterOptions.php',
327
+ 'Zend\\Serializer\\Adapter\\IgBinary' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/IgBinary.php',
328
+ 'Zend\\Serializer\\Adapter\\Json' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/Json.php',
329
+ 'Zend\\Serializer\\Adapter\\JsonOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/JsonOptions.php',
330
+ 'Zend\\Serializer\\Adapter\\MsgPack' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/MsgPack.php',
331
+ 'Zend\\Serializer\\Adapter\\PhpCode' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PhpCode.php',
332
+ 'Zend\\Serializer\\Adapter\\PhpSerialize' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PhpSerialize.php',
333
+ 'Zend\\Serializer\\Adapter\\PythonPickle' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PythonPickle.php',
334
+ 'Zend\\Serializer\\Adapter\\PythonPickleOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/PythonPickleOptions.php',
335
+ 'Zend\\Serializer\\Adapter\\Wddx' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/Wddx.php',
336
+ 'Zend\\Serializer\\Adapter\\WddxOptions' => $vendorDir . '/zendframework/zend-serializer/src/Adapter/WddxOptions.php',
337
+ 'Zend\\Serializer\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-serializer/src/Exception/ExceptionInterface.php',
338
+ 'Zend\\Serializer\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-serializer/src/Exception/ExtensionNotLoadedException.php',
339
+ 'Zend\\Serializer\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-serializer/src/Exception/InvalidArgumentException.php',
340
+ 'Zend\\Serializer\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-serializer/src/Exception/RuntimeException.php',
341
+ 'Zend\\Serializer\\Serializer' => $vendorDir . '/zendframework/zend-serializer/src/Serializer.php',
342
+ 'Zend\\ServiceManager\\AbstractFactoryInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/AbstractFactoryInterface.php',
343
+ 'Zend\\ServiceManager\\AbstractPluginManager' => $vendorDir . '/zendframework/zend-servicemanager/src/AbstractPluginManager.php',
344
+ 'Zend\\ServiceManager\\Config' => $vendorDir . '/zendframework/zend-servicemanager/src/Config.php',
345
+ 'Zend\\ServiceManager\\ConfigInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ConfigInterface.php',
346
+ 'Zend\\ServiceManager\\DelegatorFactoryInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/DelegatorFactoryInterface.php',
347
+ 'Zend\\ServiceManager\\Di\\DiAbstractServiceFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiAbstractServiceFactory.php',
348
+ 'Zend\\ServiceManager\\Di\\DiInstanceManagerProxy' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiInstanceManagerProxy.php',
349
+ 'Zend\\ServiceManager\\Di\\DiServiceFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiServiceFactory.php',
350
+ 'Zend\\ServiceManager\\Di\\DiServiceInitializer' => $vendorDir . '/zendframework/zend-servicemanager/src/Di/DiServiceInitializer.php',
351
+ 'Zend\\ServiceManager\\Exception\\CircularDependencyFoundException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/CircularDependencyFoundException.php',
352
+ 'Zend\\ServiceManager\\Exception\\CircularReferenceException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/CircularReferenceException.php',
353
+ 'Zend\\ServiceManager\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ExceptionInterface.php',
354
+ 'Zend\\ServiceManager\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/InvalidArgumentException.php',
355
+ 'Zend\\ServiceManager\\Exception\\InvalidServiceNameException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/InvalidServiceNameException.php',
356
+ 'Zend\\ServiceManager\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/RuntimeException.php',
357
+ 'Zend\\ServiceManager\\Exception\\ServiceLocatorUsageException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ServiceLocatorUsageException.php',
358
+ 'Zend\\ServiceManager\\Exception\\ServiceNotCreatedException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ServiceNotCreatedException.php',
359
+ 'Zend\\ServiceManager\\Exception\\ServiceNotFoundException' => $vendorDir . '/zendframework/zend-servicemanager/src/Exception/ServiceNotFoundException.php',
360
+ 'Zend\\ServiceManager\\FactoryInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/FactoryInterface.php',
361
+ 'Zend\\ServiceManager\\InitializerInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/InitializerInterface.php',
362
+ 'Zend\\ServiceManager\\MutableCreationOptionsInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/MutableCreationOptionsInterface.php',
363
+ 'Zend\\ServiceManager\\MutableCreationOptionsTrait' => $vendorDir . '/zendframework/zend-servicemanager/src/MutableCreationOptionsTrait.php',
364
+ 'Zend\\ServiceManager\\Proxy\\LazyServiceFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactory.php',
365
+ 'Zend\\ServiceManager\\Proxy\\LazyServiceFactoryFactory' => $vendorDir . '/zendframework/zend-servicemanager/src/Proxy/LazyServiceFactoryFactory.php',
366
+ 'Zend\\ServiceManager\\ServiceLocatorAwareInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceLocatorAwareInterface.php',
367
+ 'Zend\\ServiceManager\\ServiceLocatorAwareTrait' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceLocatorAwareTrait.php',
368
+ 'Zend\\ServiceManager\\ServiceLocatorInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceLocatorInterface.php',
369
+ 'Zend\\ServiceManager\\ServiceManager' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceManager.php',
370
+ 'Zend\\ServiceManager\\ServiceManagerAwareInterface' => $vendorDir . '/zendframework/zend-servicemanager/src/ServiceManagerAwareInterface.php',
371
+ 'Zend\\Stdlib\\AbstractOptions' => $vendorDir . '/zendframework/zend-stdlib/src/AbstractOptions.php',
372
+ 'Zend\\Stdlib\\ArrayObject' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayObject.php',
373
+ 'Zend\\Stdlib\\ArraySerializableInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ArraySerializableInterface.php',
374
+ 'Zend\\Stdlib\\ArrayStack' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayStack.php',
375
+ 'Zend\\Stdlib\\ArrayUtils' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils.php',
376
+ 'Zend\\Stdlib\\ArrayUtils\\MergeRemoveKey' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php',
377
+ 'Zend\\Stdlib\\ArrayUtils\\MergeReplaceKey' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php',
378
+ 'Zend\\Stdlib\\ArrayUtils\\MergeReplaceKeyInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php',
379
+ 'Zend\\Stdlib\\CallbackHandler' => $vendorDir . '/zendframework/zend-stdlib/src/CallbackHandler.php',
380
+ 'Zend\\Stdlib\\DateTime' => $vendorDir . '/zendframework/zend-stdlib/src/DateTime.php',
381
+ 'Zend\\Stdlib\\DispatchableInterface' => $vendorDir . '/zendframework/zend-stdlib/src/DispatchableInterface.php',
382
+ 'Zend\\Stdlib\\ErrorHandler' => $vendorDir . '/zendframework/zend-stdlib/src/ErrorHandler.php',
383
+ 'Zend\\Stdlib\\Exception\\BadMethodCallException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/BadMethodCallException.php',
384
+ 'Zend\\Stdlib\\Exception\\DomainException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/DomainException.php',
385
+ 'Zend\\Stdlib\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/ExceptionInterface.php',
386
+ 'Zend\\Stdlib\\Exception\\ExtensionNotLoadedException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/ExtensionNotLoadedException.php',
387
+ 'Zend\\Stdlib\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/InvalidArgumentException.php',
388
+ 'Zend\\Stdlib\\Exception\\InvalidCallbackException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/InvalidCallbackException.php',
389
+ 'Zend\\Stdlib\\Exception\\LogicException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/LogicException.php',
390
+ 'Zend\\Stdlib\\Exception\\RuntimeException' => $vendorDir . '/zendframework/zend-stdlib/src/Exception/RuntimeException.php',
391
+ 'Zend\\Stdlib\\Extractor\\ExtractionInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Extractor/ExtractionInterface.php',
392
+ 'Zend\\Stdlib\\Glob' => $vendorDir . '/zendframework/zend-stdlib/src/Glob.php',
393
+ 'Zend\\Stdlib\\Guard\\AllGuardsTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/AllGuardsTrait.php',
394
+ 'Zend\\Stdlib\\Guard\\ArrayOrTraversableGuardTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/ArrayOrTraversableGuardTrait.php',
395
+ 'Zend\\Stdlib\\Guard\\EmptyGuardTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/EmptyGuardTrait.php',
396
+ 'Zend\\Stdlib\\Guard\\GuardUtils' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/GuardUtils.php',
397
+ 'Zend\\Stdlib\\Guard\\NullGuardTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Guard/NullGuardTrait.php',
398
+ 'Zend\\Stdlib\\Hydrator\\AbstractHydrator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/AbstractHydrator.php',
399
+ 'Zend\\Stdlib\\Hydrator\\Aggregate\\AggregateHydrator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/AggregateHydrator.php',
400
+ 'Zend\\Stdlib\\Hydrator\\Aggregate\\ExtractEvent' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/ExtractEvent.php',
401
+ 'Zend\\Stdlib\\Hydrator\\Aggregate\\HydrateEvent' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydrateEvent.php',
402
+ 'Zend\\Stdlib\\Hydrator\\Aggregate\\HydratorListener' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Aggregate/HydratorListener.php',
403
+ 'Zend\\Stdlib\\Hydrator\\ArraySerializable' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/ArraySerializable.php',
404
+ 'Zend\\Stdlib\\Hydrator\\ClassMethods' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php',
405
+ 'Zend\\Stdlib\\Hydrator\\DelegatingHydrator' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php',
406
+ 'Zend\\Stdlib\\Hydrator\\DelegatingHydratorFactory' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php',
407
+ 'Zend\\Stdlib\\Hydrator\\FilterEnabledInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/FilterEnabledInterface.php',
408
+ 'Zend\\Stdlib\\Hydrator\\Filter\\FilterComposite' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterComposite.php',
409
+ 'Zend\\Stdlib\\Hydrator\\Filter\\FilterInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterInterface.php',
410
+ 'Zend\\Stdlib\\Hydrator\\Filter\\FilterProviderInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/FilterProviderInterface.php',
411
+ 'Zend\\Stdlib\\Hydrator\\Filter\\GetFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/GetFilter.php',
412
+ 'Zend\\Stdlib\\Hydrator\\Filter\\HasFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/HasFilter.php',
413
+ 'Zend\\Stdlib\\Hydrator\\Filter\\IsFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/IsFilter.php',
414
+ 'Zend\\Stdlib\\Hydrator\\Filter\\MethodMatchFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/MethodMatchFilter.php',
415
+ 'Zend\\Stdlib\\Hydrator\\Filter\\NumberOfParameterFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/NumberOfParameterFilter.php',
416
+ 'Zend\\Stdlib\\Hydrator\\Filter\\OptionalParametersFilter' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Filter/OptionalParametersFilter.php',
417
+ 'Zend\\Stdlib\\Hydrator\\HydrationInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydrationInterface.php',
418
+ 'Zend\\Stdlib\\Hydrator\\HydratorAwareInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorAwareInterface.php',
419
+ 'Zend\\Stdlib\\Hydrator\\HydratorAwareTrait' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorAwareTrait.php',
420
+ 'Zend\\Stdlib\\Hydrator\\HydratorInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorInterface.php',
421
+ 'Zend\\Stdlib\\Hydrator\\HydratorOptionsInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorOptionsInterface.php',
422
+ 'Zend\\Stdlib\\Hydrator\\HydratorPluginManager' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/HydratorPluginManager.php',
423
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategyEnabledInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategyEnabledInterface.php',
424
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\ArrayMapNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php',
425
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\CompositeNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php',
426
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\IdentityNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php',
427
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\MapNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php',
428
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\NamingStrategyInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/NamingStrategyInterface.php',
429
+ 'Zend\\Stdlib\\Hydrator\\NamingStrategy\\UnderscoreNamingStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php',
430
+ 'Zend\\Stdlib\\Hydrator\\ObjectProperty' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/ObjectProperty.php',
431
+ 'Zend\\Stdlib\\Hydrator\\Reflection' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Reflection.php',
432
+ 'Zend\\Stdlib\\Hydrator\\StrategyEnabledInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/StrategyEnabledInterface.php',
433
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\BooleanStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php',
434
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\ClosureStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/ClosureStrategy.php',
435
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\DateTimeFormatterStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php',
436
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\DefaultStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/DefaultStrategy.php',
437
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\Exception\\ExceptionInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php',
438
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\Exception\\InvalidArgumentException' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php',
439
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\ExplodeStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php',
440
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\SerializableStrategy' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/SerializableStrategy.php',
441
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\StrategyChain' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php',
442
+ 'Zend\\Stdlib\\Hydrator\\Strategy\\StrategyInterface' => $vendorDir . '/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyInterface.php',
443
+ 'Zend\\Stdlib\\InitializableInterface' => $vendorDir . '/zendframework/zend-stdlib/src/InitializableInterface.php',
444
+ 'Zend\\Stdlib\\JsonSerializable' => $vendorDir . '/zendframework/zend-stdlib/src/JsonSerializable.php',
445
+ 'Zend\\Stdlib\\JsonSerializable\\PhpLegacyCompatibility' => $vendorDir . '/zendframework/zend-stdlib/src/JsonSerializable/PhpLegacyCompatibility.php',
446
+ 'Zend\\Stdlib\\Message' => $vendorDir . '/zendframework/zend-stdlib/src/Message.php',
447
+ 'Zend\\Stdlib\\MessageInterface' => $vendorDir . '/zendframework/zend-stdlib/src/MessageInterface.php',
448
+ 'Zend\\Stdlib\\ParameterObjectInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ParameterObjectInterface.php',
449
+ 'Zend\\Stdlib\\Parameters' => $vendorDir . '/zendframework/zend-stdlib/src/Parameters.php',
450
+ 'Zend\\Stdlib\\ParametersInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ParametersInterface.php',
451
+ 'Zend\\Stdlib\\PriorityList' => $vendorDir . '/zendframework/zend-stdlib/src/PriorityList.php',
452
+ 'Zend\\Stdlib\\PriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/src/PriorityQueue.php',
453
+ 'Zend\\Stdlib\\Request' => $vendorDir . '/zendframework/zend-stdlib/src/Request.php',
454
+ 'Zend\\Stdlib\\RequestInterface' => $vendorDir . '/zendframework/zend-stdlib/src/RequestInterface.php',
455
+ 'Zend\\Stdlib\\Response' => $vendorDir . '/zendframework/zend-stdlib/src/Response.php',
456
+ 'Zend\\Stdlib\\ResponseInterface' => $vendorDir . '/zendframework/zend-stdlib/src/ResponseInterface.php',
457
+ 'Zend\\Stdlib\\SplPriorityQueue' => $vendorDir . '/zendframework/zend-stdlib/src/SplPriorityQueue.php',
458
+ 'Zend\\Stdlib\\SplQueue' => $vendorDir . '/zendframework/zend-stdlib/src/SplQueue.php',
459
+ 'Zend\\Stdlib\\SplStack' => $vendorDir . '/zendframework/zend-stdlib/src/SplStack.php',
460
+ 'Zend\\Stdlib\\StringUtils' => $vendorDir . '/zendframework/zend-stdlib/src/StringUtils.php',
461
+ 'Zend\\Stdlib\\StringWrapper\\AbstractStringWrapper' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/AbstractStringWrapper.php',
462
+ 'Zend\\Stdlib\\StringWrapper\\Iconv' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/Iconv.php',
463
+ 'Zend\\Stdlib\\StringWrapper\\Intl' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/Intl.php',
464
+ 'Zend\\Stdlib\\StringWrapper\\MbString' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/MbString.php',
465
+ 'Zend\\Stdlib\\StringWrapper\\Native' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/Native.php',
466
+ 'Zend\\Stdlib\\StringWrapper\\StringWrapperInterface' => $vendorDir . '/zendframework/zend-stdlib/src/StringWrapper/StringWrapperInterface.php',
467
  );
backend/vendor/composer/autoload_namespaces.php CHANGED
@@ -6,12 +6,4 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
- 'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib'),
10
- 'Zend\\ServiceManager\\' => array($vendorDir . '/zendframework/zend-servicemanager'),
11
- 'Zend\\Serializer\\' => array($vendorDir . '/zendframework/zend-serializer'),
12
- 'Zend\\Math\\' => array($vendorDir . '/zendframework/zend-math'),
13
- 'Zend\\Json\\' => array($vendorDir . '/zendframework/zend-json'),
14
- 'Zend\\EventManager\\' => array($vendorDir . '/zendframework/zend-eventmanager'),
15
- 'Zend\\Config\\' => array($vendorDir . '/zendframework/zend-config'),
16
- 'Zend\\Cache\\' => array($vendorDir . '/zendframework/zend-cache'),
17
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
 
 
 
 
 
 
 
9
  );
backend/vendor/composer/autoload_psr4.php CHANGED
@@ -6,6 +6,14 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
 
 
 
 
 
 
 
9
  'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
10
  'Heise\\Shariff\\' => array($baseDir . '/src'),
11
  'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Zend\\Stdlib\\' => array($vendorDir . '/zendframework/zend-stdlib/src'),
10
+ 'Zend\\ServiceManager\\' => array($vendorDir . '/zendframework/zend-servicemanager/src'),
11
+ 'Zend\\Serializer\\' => array($vendorDir . '/zendframework/zend-serializer/src'),
12
+ 'Zend\\Math\\' => array($vendorDir . '/zendframework/zend-math/src'),
13
+ 'Zend\\Json\\' => array($vendorDir . '/zendframework/zend-json/src'),
14
+ 'Zend\\EventManager\\' => array($vendorDir . '/zendframework/zend-eventmanager/src'),
15
+ 'Zend\\Config\\' => array($vendorDir . '/zendframework/zend-config/src'),
16
+ 'Zend\\Cache\\' => array($vendorDir . '/zendframework/zend-cache/src'),
17
  'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
18
  'Heise\\Shariff\\' => array($baseDir . '/src'),
19
  'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
backend/vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInitbfcd8973f252782d8f308b3dd140a9c7
6
  {
7
  private static $loader;
8
 
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitbfcd8973f252782d8f308b3dd140a9c7
19
  return self::$loader;
20
  }
21
 
22
- spl_autoload_register(array('ComposerAutoloaderInitbfcd8973f252782d8f308b3dd140a9c7', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
- spl_autoload_unregister(array('ComposerAutoloaderInitbfcd8973f252782d8f308b3dd140a9c7', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
@@ -42,14 +42,14 @@ class ComposerAutoloaderInitbfcd8973f252782d8f308b3dd140a9c7
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $file) {
45
- composerRequirebfcd8973f252782d8f308b3dd140a9c7($file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
- function composerRequirebfcd8973f252782d8f308b3dd140a9c7($file)
53
  {
54
  require $file;
55
  }
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit55bb699f0a2edae31fc22518156fadb3
6
  {
7
  private static $loader;
8
 
19
  return self::$loader;
20
  }
21
 
22
+ spl_autoload_register(array('ComposerAutoloaderInit55bb699f0a2edae31fc22518156fadb3', 'loadClassLoader'), true, true);
23
  self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInit55bb699f0a2edae31fc22518156fadb3', 'loadClassLoader'));
25
 
26
  $map = require __DIR__ . '/autoload_namespaces.php';
27
  foreach ($map as $namespace => $path) {
42
 
43
  $includeFiles = require __DIR__ . '/autoload_files.php';
44
  foreach ($includeFiles as $file) {
45
+ composerRequire55bb699f0a2edae31fc22518156fadb3($file);
46
  }
47
 
48
  return $loader;
49
  }
50
  }
51
 
52
+ function composerRequire55bb699f0a2edae31fc22518156fadb3($file)
53
  {
54
  require $file;
55
  }
backend/vendor/composer/installed.json CHANGED
@@ -1,37 +1,37 @@
1
  [
2
  {
3
- "name": "guzzlehttp/streams",
4
- "version": "3.0.0",
5
- "version_normalized": "3.0.0.0",
6
  "source": {
7
  "type": "git",
8
- "url": "https://github.com/guzzle/streams.git",
9
- "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
10
  },
11
  "dist": {
12
  "type": "zip",
13
- "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
14
- "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
15
  "shasum": ""
16
  },
17
  "require": {
18
  "php": ">=5.4.0"
19
  },
20
- "require-dev": {
21
- "phpunit/phpunit": "~4.0"
22
- },
23
- "time": "2014-10-12 19:18:40",
24
  "type": "library",
25
  "extra": {
26
  "branch-alias": {
27
- "dev-master": "3.0-dev"
28
  }
29
  },
30
  "installation-source": "dist",
31
  "autoload": {
32
  "psr-4": {
33
- "GuzzleHttp\\Stream\\": "src/"
34
- }
 
 
 
35
  },
36
  "notification-url": "https://packagist.org/downloads/",
37
  "license": [
@@ -39,51 +39,45 @@
39
  ],
40
  "authors": [
41
  {
42
- "name": "Michael Dowling",
43
- "email": "mtdowling@gmail.com",
44
- "homepage": "https://github.com/mtdowling"
45
  }
46
  ],
47
- "description": "Provides a simple abstraction over streams of data",
48
- "homepage": "http://guzzlephp.org/",
49
- "keywords": [
50
- "Guzzle",
51
- "stream"
52
- ]
53
  },
54
  {
55
- "name": "react/promise",
56
- "version": "v2.2.0",
57
- "version_normalized": "2.2.0.0",
58
  "source": {
59
  "type": "git",
60
- "url": "https://github.com/reactphp/promise.git",
61
- "reference": "365fcee430dfa4ace1fbc75737ca60ceea7eeeef"
62
  },
63
  "dist": {
64
  "type": "zip",
65
- "url": "https://api.github.com/repos/reactphp/promise/zipball/365fcee430dfa4ace1fbc75737ca60ceea7eeeef",
66
- "reference": "365fcee430dfa4ace1fbc75737ca60ceea7eeeef",
67
  "shasum": ""
68
  },
69
  "require": {
70
  "php": ">=5.4.0"
71
  },
72
- "time": "2014-12-30 13:32:42",
 
 
 
73
  "type": "library",
74
  "extra": {
75
  "branch-alias": {
76
- "dev-master": "2.0-dev"
77
  }
78
  },
79
  "installation-source": "dist",
80
  "autoload": {
81
  "psr-4": {
82
- "React\\Promise\\": "src/"
83
- },
84
- "files": [
85
- "src/functions_include.php"
86
- ]
87
  },
88
  "notification-url": "https://packagist.org/downloads/",
89
  "license": [
@@ -91,25 +85,31 @@
91
  ],
92
  "authors": [
93
  {
94
- "name": "Jan Sorgalla",
95
- "email": "jsorgalla@googlemail.com"
 
96
  }
97
  ],
98
- "description": "A lightweight implementation of CommonJS Promises/A for PHP"
 
 
 
 
 
99
  },
100
  {
101
  "name": "guzzlehttp/ringphp",
102
- "version": "1.0.5",
103
- "version_normalized": "1.0.5.0",
104
  "source": {
105
  "type": "git",
106
  "url": "https://github.com/guzzle/RingPHP.git",
107
- "reference": "a903f51b692427318bc813217c0e6505287e79a4"
108
  },
109
  "dist": {
110
  "type": "zip",
111
- "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/a903f51b692427318bc813217c0e6505287e79a4",
112
- "reference": "a903f51b692427318bc813217c0e6505287e79a4",
113
  "shasum": ""
114
  },
115
  "require": {
@@ -124,7 +124,7 @@
124
  "suggest": {
125
  "ext-curl": "Guzzle will use specific adapters if cURL is present"
126
  },
127
- "time": "2014-12-11 05:50:32",
128
  "type": "library",
129
  "extra": {
130
  "branch-alias": {
@@ -147,7 +147,8 @@
147
  "email": "mtdowling@gmail.com",
148
  "homepage": "https://github.com/mtdowling"
149
  }
150
- ]
 
151
  },
152
  {
153
  "name": "guzzlehttp/guzzle",
@@ -211,24 +212,26 @@
211
  },
212
  {
213
  "name": "zendframework/zend-stdlib",
214
- "version": "2.3.4",
215
- "version_normalized": "2.3.4.0",
216
- "target-dir": "Zend/Stdlib",
217
  "source": {
218
  "type": "git",
219
- "url": "https://github.com/zendframework/Component_ZendStdlib.git",
220
- "reference": "280e4ee6a8fea96b3de00a39174758b4002a7358"
221
  },
222
  "dist": {
223
  "type": "zip",
224
- "url": "https://api.github.com/repos/zendframework/Component_ZendStdlib/zipball/280e4ee6a8fea96b3de00a39174758b4002a7358",
225
- "reference": "280e4ee6a8fea96b3de00a39174758b4002a7358",
226
  "shasum": ""
227
  },
228
  "require": {
229
  "php": ">=5.3.23"
230
  },
231
  "require-dev": {
 
 
 
232
  "zendframework/zend-eventmanager": "self.version",
233
  "zendframework/zend-filter": "self.version",
234
  "zendframework/zend-serializer": "self.version",
@@ -240,191 +243,200 @@
240
  "zendframework/zend-serializer": "Zend\\Serializer component",
241
  "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
242
  },
243
- "time": "2015-01-14 16:44:17",
244
  "type": "library",
245
  "extra": {
246
  "branch-alias": {
247
- "dev-master": "2.3-dev",
248
- "dev-develop": "2.4-dev"
249
  }
250
  },
251
  "installation-source": "dist",
252
  "autoload": {
253
- "psr-0": {
254
- "Zend\\Stdlib\\": ""
255
  }
256
  },
257
  "notification-url": "https://packagist.org/downloads/",
258
  "license": [
259
  "BSD-3-Clause"
260
  ],
261
- "homepage": "https://github.com/zendframework/zf2",
262
  "keywords": [
263
  "stdlib",
264
  "zf2"
265
  ]
266
  },
267
  {
268
- "name": "zendframework/zend-eventmanager",
269
- "version": "2.3.4",
270
- "version_normalized": "2.3.4.0",
271
- "target-dir": "Zend/EventManager",
272
  "source": {
273
  "type": "git",
274
- "url": "https://github.com/zendframework/Component_ZendEventManager.git",
275
- "reference": "5992c202f13292415501aed41beba76404197866"
276
  },
277
  "dist": {
278
  "type": "zip",
279
- "url": "https://api.github.com/repos/zendframework/Component_ZendEventManager/zipball/5992c202f13292415501aed41beba76404197866",
280
- "reference": "5992c202f13292415501aed41beba76404197866",
281
  "shasum": ""
282
  },
283
  "require": {
284
  "php": ">=5.3.23",
285
  "zendframework/zend-stdlib": "self.version"
286
  },
287
- "time": "2015-01-14 16:44:17",
 
 
 
 
 
 
 
 
 
 
 
 
288
  "type": "library",
289
  "extra": {
290
  "branch-alias": {
291
- "dev-master": "2.3-dev",
292
- "dev-develop": "2.4-dev"
293
  }
294
  },
295
  "installation-source": "dist",
296
  "autoload": {
297
- "psr-0": {
298
- "Zend\\EventManager\\": ""
299
  }
300
  },
301
  "notification-url": "https://packagist.org/downloads/",
302
  "license": [
303
  "BSD-3-Clause"
304
  ],
305
- "homepage": "https://github.com/zendframework/zf2",
 
306
  "keywords": [
307
- "eventmanager",
308
  "zf2"
309
  ]
310
  },
311
  {
312
- "name": "zendframework/zend-math",
313
- "version": "2.3.4",
314
- "version_normalized": "2.3.4.0",
315
- "target-dir": "Zend/Math",
316
  "source": {
317
  "type": "git",
318
- "url": "https://github.com/zendframework/Component_ZendMath.git",
319
- "reference": "45e7544d499a11c97d8b8fec00597f646e105ffb"
320
  },
321
  "dist": {
322
  "type": "zip",
323
- "url": "https://api.github.com/repos/zendframework/Component_ZendMath/zipball/45e7544d499a11c97d8b8fec00597f646e105ffb",
324
- "reference": "45e7544d499a11c97d8b8fec00597f646e105ffb",
325
  "shasum": ""
326
  },
327
  "require": {
328
- "php": ">=5.3.23"
 
329
  },
330
- "suggest": {
331
- "ext-bcmath": "If using the bcmath functionality",
332
- "ext-gmp": "If using the gmp functionality",
333
- "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable",
334
- "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality"
335
  },
336
- "time": "2015-01-14 16:44:17",
337
  "type": "library",
338
  "extra": {
339
  "branch-alias": {
340
- "dev-master": "2.3-dev",
341
- "dev-develop": "2.4-dev"
342
  }
343
  },
344
  "installation-source": "dist",
345
  "autoload": {
346
- "psr-0": {
347
- "Zend\\Math\\": ""
348
  }
349
  },
350
  "notification-url": "https://packagist.org/downloads/",
351
  "license": [
352
  "BSD-3-Clause"
353
  ],
354
- "homepage": "https://github.com/zendframework/zf2",
355
  "keywords": [
356
- "math",
357
  "zf2"
358
  ]
359
  },
360
  {
361
- "name": "zendframework/zend-json",
362
- "version": "2.3.4",
363
- "version_normalized": "2.3.4.0",
364
- "target-dir": "Zend/Json",
365
  "source": {
366
  "type": "git",
367
- "url": "https://github.com/zendframework/Component_ZendJson.git",
368
- "reference": "24b072788f42a025e479901e0c6e5c0bf0dcd960"
369
  },
370
  "dist": {
371
  "type": "zip",
372
- "url": "https://api.github.com/repos/zendframework/Component_ZendJson/zipball/24b072788f42a025e479901e0c6e5c0bf0dcd960",
373
- "reference": "24b072788f42a025e479901e0c6e5c0bf0dcd960",
374
  "shasum": ""
375
  },
376
  "require": {
377
- "php": ">=5.3.23",
378
- "zendframework/zend-stdlib": "self.version"
379
  },
380
  "require-dev": {
381
- "zendframework/zend-http": "self.version",
382
- "zendframework/zend-server": "self.version"
 
383
  },
384
  "suggest": {
385
- "zendframework/zend-http": "Zend\\Http component",
386
- "zendframework/zend-server": "Zend\\Server component",
387
- "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage"
 
388
  },
389
- "time": "2015-01-14 16:44:17",
390
  "type": "library",
391
  "extra": {
392
  "branch-alias": {
393
- "dev-master": "2.3-dev",
394
- "dev-develop": "2.4-dev"
395
  }
396
  },
397
  "installation-source": "dist",
398
  "autoload": {
399
- "psr-0": {
400
- "Zend\\Json\\": ""
401
  }
402
  },
403
  "notification-url": "https://packagist.org/downloads/",
404
  "license": [
405
  "BSD-3-Clause"
406
  ],
407
- "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
408
- "homepage": "https://github.com/zendframework/zf2",
409
  "keywords": [
410
- "json",
411
  "zf2"
412
  ]
413
  },
414
  {
415
  "name": "zendframework/zend-serializer",
416
- "version": "2.3.4",
417
- "version_normalized": "2.3.4.0",
418
- "target-dir": "Zend/Serializer",
419
  "source": {
420
  "type": "git",
421
- "url": "https://github.com/zendframework/Component_ZendSerializer.git",
422
- "reference": "8cc08516ff69b275f22d2378cba0e0b482ba33a1"
423
  },
424
  "dist": {
425
  "type": "zip",
426
- "url": "https://api.github.com/repos/zendframework/Component_ZendSerializer/zipball/8cc08516ff69b275f22d2378cba0e0b482ba33a1",
427
- "reference": "8cc08516ff69b275f22d2378cba0e0b482ba33a1",
428
  "shasum": ""
429
  },
430
  "require": {
@@ -434,23 +446,26 @@
434
  "zendframework/zend-stdlib": "self.version"
435
  },
436
  "require-dev": {
 
 
 
437
  "zendframework/zend-servicemanager": "self.version"
438
  },
439
  "suggest": {
440
  "zendframework/zend-servicemanager": "To support plugin manager support"
441
  },
442
- "time": "2015-01-14 16:44:17",
443
  "type": "library",
444
  "extra": {
445
  "branch-alias": {
446
- "dev-master": "2.3-dev",
447
- "dev-develop": "2.4-dev"
448
  }
449
  },
450
  "installation-source": "dist",
451
  "autoload": {
452
- "psr-0": {
453
- "Zend\\Serializer\\": ""
454
  }
455
  },
456
  "notification-url": "https://packagist.org/downloads/",
@@ -458,7 +473,7 @@
458
  "BSD-3-Clause"
459
  ],
460
  "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover",
461
- "homepage": "https://github.com/zendframework/zf2",
462
  "keywords": [
463
  "serializer",
464
  "zf2"
@@ -466,49 +481,51 @@
466
  },
467
  {
468
  "name": "zendframework/zend-servicemanager",
469
- "version": "2.3.4",
470
- "version_normalized": "2.3.4.0",
471
- "target-dir": "Zend/ServiceManager",
472
  "source": {
473
  "type": "git",
474
- "url": "https://github.com/zendframework/Component_ZendServiceManager.git",
475
- "reference": "148b1ce06fa0ac7fe58e3bd396df57f1ee0e9e82"
476
  },
477
  "dist": {
478
  "type": "zip",
479
- "url": "https://api.github.com/repos/zendframework/Component_ZendServiceManager/zipball/148b1ce06fa0ac7fe58e3bd396df57f1ee0e9e82",
480
- "reference": "148b1ce06fa0ac7fe58e3bd396df57f1ee0e9e82",
481
  "shasum": ""
482
  },
483
  "require": {
484
  "php": ">=5.3.23"
485
  },
486
  "require-dev": {
 
 
 
487
  "zendframework/zend-di": "self.version"
488
  },
489
  "suggest": {
490
  "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
491
  "zendframework/zend-di": "Zend\\Di component"
492
  },
493
- "time": "2015-01-14 16:44:17",
494
  "type": "library",
495
  "extra": {
496
  "branch-alias": {
497
- "dev-master": "2.3-dev",
498
- "dev-develop": "2.4-dev"
499
  }
500
  },
501
  "installation-source": "dist",
502
  "autoload": {
503
- "psr-0": {
504
- "Zend\\ServiceManager\\": ""
505
  }
506
  },
507
  "notification-url": "https://packagist.org/downloads/",
508
  "license": [
509
  "BSD-3-Clause"
510
  ],
511
- "homepage": "https://github.com/zendframework/zf2",
512
  "keywords": [
513
  "servicemanager",
514
  "zf2"
@@ -516,18 +533,17 @@
516
  },
517
  {
518
  "name": "zendframework/zend-cache",
519
- "version": "2.3.4",
520
- "version_normalized": "2.3.4.0",
521
- "target-dir": "Zend/Cache",
522
  "source": {
523
  "type": "git",
524
- "url": "https://github.com/zendframework/Component_ZendCache.git",
525
- "reference": "03cf30de6aa60ff9fb1a9f473202559a18b9f2f5"
526
  },
527
  "dist": {
528
  "type": "zip",
529
- "url": "https://api.github.com/repos/zendframework/Component_ZendCache/zipball/03cf30de6aa60ff9fb1a9f473202559a18b9f2f5",
530
- "reference": "03cf30de6aa60ff9fb1a9f473202559a18b9f2f5",
531
  "shasum": ""
532
  },
533
  "require": {
@@ -538,28 +554,33 @@
538
  "zendframework/zend-stdlib": "self.version"
539
  },
540
  "require-dev": {
 
 
 
541
  "zendframework/zend-session": "self.version"
542
  },
543
  "suggest": {
544
  "ext-apc": "APC >= 3.1.6 to use the APC storage adapter",
545
  "ext-dba": "DBA, to use the DBA storage adapter",
546
  "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
 
547
  "ext-wincache": "WinCache, to use the WinCache storage adapter",
 
548
  "zendframework/zend-serializer": "Zend\\Serializer component",
549
  "zendframework/zend-session": "Zend\\Session component"
550
  },
551
- "time": "2015-01-14 16:44:17",
552
  "type": "library",
553
  "extra": {
554
  "branch-alias": {
555
- "dev-master": "2.3-dev",
556
- "dev-develop": "2.4-dev"
557
  }
558
  },
559
  "installation-source": "dist",
560
  "autoload": {
561
- "psr-0": {
562
- "Zend\\Cache\\": ""
563
  }
564
  },
565
  "notification-url": "https://packagist.org/downloads/",
@@ -567,7 +588,7 @@
567
  "BSD-3-Clause"
568
  ],
569
  "description": "provides a generic way to cache any data",
570
- "homepage": "https://github.com/zendframework/zf2",
571
  "keywords": [
572
  "cache",
573
  "zf2"
@@ -575,18 +596,17 @@
575
  },
576
  {
577
  "name": "zendframework/zend-config",
578
- "version": "2.3.4",
579
- "version_normalized": "2.3.4.0",
580
- "target-dir": "Zend/Config",
581
  "source": {
582
  "type": "git",
583
- "url": "https://github.com/zendframework/Component_ZendConfig.git",
584
- "reference": "c07bbcfd6c32e9eaf3de457cb880349f8c18885d"
585
  },
586
  "dist": {
587
  "type": "zip",
588
- "url": "https://api.github.com/repos/zendframework/Component_ZendConfig/zipball/c07bbcfd6c32e9eaf3de457cb880349f8c18885d",
589
- "reference": "c07bbcfd6c32e9eaf3de457cb880349f8c18885d",
590
  "shasum": ""
591
  },
592
  "require": {
@@ -594,6 +614,9 @@
594
  "zendframework/zend-stdlib": "self.version"
595
  },
596
  "require-dev": {
 
 
 
597
  "zendframework/zend-filter": "self.version",
598
  "zendframework/zend-i18n": "self.version",
599
  "zendframework/zend-json": "self.version",
@@ -605,18 +628,18 @@
605
  "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes",
606
  "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances"
607
  },
608
- "time": "2015-01-14 16:44:17",
609
  "type": "library",
610
  "extra": {
611
  "branch-alias": {
612
- "dev-master": "2.3-dev",
613
- "dev-develop": "2.4-dev"
614
  }
615
  },
616
  "installation-source": "dist",
617
  "autoload": {
618
- "psr-0": {
619
- "Zend\\Config\\": ""
620
  }
621
  },
622
  "notification-url": "https://packagist.org/downloads/",
@@ -624,7 +647,7 @@
624
  "BSD-3-Clause"
625
  ],
626
  "description": "provides a nested object property based user interface for accessing this configuration data within application code",
627
- "homepage": "https://github.com/zendframework/zf2",
628
  "keywords": [
629
  "config",
630
  "zf2"
1
  [
2
  {
3
+ "name": "react/promise",
4
+ "version": "v2.2.0",
5
+ "version_normalized": "2.2.0.0",
6
  "source": {
7
  "type": "git",
8
+ "url": "https://github.com/reactphp/promise.git",
9
+ "reference": "365fcee430dfa4ace1fbc75737ca60ceea7eeeef"
10
  },
11
  "dist": {
12
  "type": "zip",
13
+ "url": "https://api.github.com/repos/reactphp/promise/zipball/365fcee430dfa4ace1fbc75737ca60ceea7eeeef",
14
+ "reference": "365fcee430dfa4ace1fbc75737ca60ceea7eeeef",
15
  "shasum": ""
16
  },
17
  "require": {
18
  "php": ">=5.4.0"
19
  },
20
+ "time": "2014-12-30 13:32:42",
 
 
 
21
  "type": "library",
22
  "extra": {
23
  "branch-alias": {
24
+ "dev-master": "2.0-dev"
25
  }
26
  },
27
  "installation-source": "dist",
28
  "autoload": {
29
  "psr-4": {
30
+ "React\\Promise\\": "src/"
31
+ },
32
+ "files": [
33
+ "src/functions_include.php"
34
+ ]
35
  },
36
  "notification-url": "https://packagist.org/downloads/",
37
  "license": [
39
  ],
40
  "authors": [
41
  {
42
+ "name": "Jan Sorgalla",
43
+ "email": "jsorgalla@googlemail.com"
 
44
  }
45
  ],
46
+ "description": "A lightweight implementation of CommonJS Promises/A for PHP"
 
 
 
 
 
47
  },
48
  {
49
+ "name": "guzzlehttp/streams",
50
+ "version": "3.0.0",
51
+ "version_normalized": "3.0.0.0",
52
  "source": {
53
  "type": "git",
54
+ "url": "https://github.com/guzzle/streams.git",
55
+ "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5"
56
  },
57
  "dist": {
58
  "type": "zip",
59
+ "url": "https://api.github.com/repos/guzzle/streams/zipball/47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
60
+ "reference": "47aaa48e27dae43d39fc1cea0ccf0d84ac1a2ba5",
61
  "shasum": ""
62
  },
63
  "require": {
64
  "php": ">=5.4.0"
65
  },
66
+ "require-dev": {
67
+ "phpunit/phpunit": "~4.0"
68
+ },
69
+ "time": "2014-10-12 19:18:40",
70
  "type": "library",
71
  "extra": {
72
  "branch-alias": {
73
+ "dev-master": "3.0-dev"
74
  }
75
  },
76
  "installation-source": "dist",
77
  "autoload": {
78
  "psr-4": {
79
+ "GuzzleHttp\\Stream\\": "src/"
80
+ }
 
 
 
81
  },
82
  "notification-url": "https://packagist.org/downloads/",
83
  "license": [
85
  ],
86
  "authors": [
87
  {
88
+ "name": "Michael Dowling",
89
+ "email": "mtdowling@gmail.com",
90
+ "homepage": "https://github.com/mtdowling"
91
  }
92
  ],
93
+ "description": "Provides a simple abstraction over streams of data",
94
+ "homepage": "http://guzzlephp.org/",
95
+ "keywords": [
96
+ "Guzzle",
97
+ "stream"
98
+ ]
99
  },
100
  {
101
  "name": "guzzlehttp/ringphp",
102
+ "version": "1.0.7",
103
+ "version_normalized": "1.0.7.0",
104
  "source": {
105
  "type": "git",
106
  "url": "https://github.com/guzzle/RingPHP.git",
107
+ "reference": "52d868f13570a9a56e5fce6614e0ec75d0f13ac2"
108
  },
109
  "dist": {
110
  "type": "zip",
111
+ "url": "https://api.github.com/repos/guzzle/RingPHP/zipball/52d868f13570a9a56e5fce6614e0ec75d0f13ac2",
112
+ "reference": "52d868f13570a9a56e5fce6614e0ec75d0f13ac2",
113
  "shasum": ""
114
  },
115
  "require": {
124
  "suggest": {
125
  "ext-curl": "Guzzle will use specific adapters if cURL is present"
126
  },
127
+ "time": "2015-03-30 01:43:20",
128
  "type": "library",
129
  "extra": {
130
  "branch-alias": {
147
  "email": "mtdowling@gmail.com",
148
  "homepage": "https://github.com/mtdowling"
149
  }
150
+ ],
151
+ "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function."
152
  },
153
  {
154
  "name": "guzzlehttp/guzzle",
212
  },
213
  {
214
  "name": "zendframework/zend-stdlib",
215
+ "version": "2.4.2",
216
+ "version_normalized": "2.4.2.0",
 
217
  "source": {
218
  "type": "git",
219
+ "url": "https://github.com/zendframework/zend-stdlib.git",
220
+ "reference": "a5dd7fd2ba6e8f6c6ea5a12db0605d3aa48af1e7"
221
  },
222
  "dist": {
223
  "type": "zip",
224
+ "url": "https://api.github.com/repos/zendframework/zend-stdlib/zipball/a5dd7fd2ba6e8f6c6ea5a12db0605d3aa48af1e7",
225
+ "reference": "a5dd7fd2ba6e8f6c6ea5a12db0605d3aa48af1e7",
226
  "shasum": ""
227
  },
228
  "require": {
229
  "php": ">=5.3.23"
230
  },
231
  "require-dev": {
232
+ "fabpot/php-cs-fixer": "1.7.*",
233
+ "phpunit/phpunit": "~4.0",
234
+ "satooshi/php-coveralls": "dev-master",
235
  "zendframework/zend-eventmanager": "self.version",
236
  "zendframework/zend-filter": "self.version",
237
  "zendframework/zend-serializer": "self.version",
243
  "zendframework/zend-serializer": "Zend\\Serializer component",
244
  "zendframework/zend-servicemanager": "To support hydrator plugin manager usage"
245
  },
246
+ "time": "2015-05-07 14:55:31",
247
  "type": "library",
248
  "extra": {
249
  "branch-alias": {
250
+ "dev-master": "2.4-dev",
251
+ "dev-develop": "2.5-dev"
252
  }
253
  },
254
  "installation-source": "dist",
255
  "autoload": {
256
+ "psr-4": {
257
+ "Zend\\Stdlib\\": "src/"
258
  }
259
  },
260
  "notification-url": "https://packagist.org/downloads/",
261
  "license": [
262
  "BSD-3-Clause"
263
  ],
264
+ "homepage": "https://github.com/zendframework/zend-stdlib",
265
  "keywords": [
266
  "stdlib",
267
  "zf2"
268
  ]
269
  },
270
  {
271
+ "name": "zendframework/zend-json",
272
+ "version": "2.4.2",
273
+ "version_normalized": "2.4.2.0",
 
274
  "source": {
275
  "type": "git",
276
+ "url": "https://github.com/zendframework/zend-json.git",
277
+ "reference": "1db4b878846520e619fbcdc7ce826c8563f8e839"
278
  },
279
  "dist": {
280
  "type": "zip",
281
+ "url": "https://api.github.com/repos/zendframework/zend-json/zipball/1db4b878846520e619fbcdc7ce826c8563f8e839",
282
+ "reference": "1db4b878846520e619fbcdc7ce826c8563f8e839",
283
  "shasum": ""
284
  },
285
  "require": {
286
  "php": ">=5.3.23",
287
  "zendframework/zend-stdlib": "self.version"
288
  },
289
+ "require-dev": {
290
+ "fabpot/php-cs-fixer": "1.7.*",
291
+ "phpunit/phpunit": "~4.0",
292
+ "satooshi/php-coveralls": "dev-master",
293
+ "zendframework/zend-http": "self.version",
294
+ "zendframework/zend-server": "self.version"
295
+ },
296
+ "suggest": {
297
+ "zendframework/zend-http": "Zend\\Http component",
298
+ "zendframework/zend-server": "Zend\\Server component",
299
+ "zendframework/zendxml": "To support Zend\\Json\\Json::fromXml() usage"
300
+ },
301
+ "time": "2015-05-07 14:55:31",
302
  "type": "library",
303
  "extra": {
304
  "branch-alias": {
305
+ "dev-master": "2.4-dev",
306
+ "dev-develop": "2.5-dev"
307
  }
308
  },
309
  "installation-source": "dist",
310
  "autoload": {
311
+ "psr-4": {
312
+ "Zend\\Json\\": "src/"
313
  }
314
  },
315
  "notification-url": "https://packagist.org/downloads/",
316
  "license": [
317
  "BSD-3-Clause"
318
  ],
319
+ "description": "provides convenience methods for serializing native PHP to JSON and decoding JSON to native PHP",
320
+ "homepage": "https://github.com/zendframework/zend-json",
321
  "keywords": [
322
+ "json",
323
  "zf2"
324
  ]
325
  },
326
  {
327
+ "name": "zendframework/zend-eventmanager",
328
+ "version": "2.4.2",
329
+ "version_normalized": "2.4.2.0",
 
330
  "source": {
331
  "type": "git",
332
+ "url": "https://github.com/zendframework/zend-eventmanager.git",
333
+ "reference": "c2c46a7a2809b74ceb66fd79f66d43f97e1747b4"
334
  },
335
  "dist": {
336
  "type": "zip",
337
+ "url": "https://api.github.com/repos/zendframework/zend-eventmanager/zipball/c2c46a7a2809b74ceb66fd79f66d43f97e1747b4",
338
+ "reference": "c2c46a7a2809b74ceb66fd79f66d43f97e1747b4",
339
  "shasum": ""
340
  },
341
  "require": {
342
+ "php": ">=5.3.23",
343
+ "zendframework/zend-stdlib": "self.version"
344
  },
345
+ "require-dev": {
346
+ "fabpot/php-cs-fixer": "1.7.*",
347
+ "phpunit/phpunit": "~4.0",
348
+ "satooshi/php-coveralls": "dev-master"
 
349
  },
350
+ "time": "2015-05-07 14:55:31",
351
  "type": "library",
352
  "extra": {
353
  "branch-alias": {
354
+ "dev-master": "2.4-dev",
355
+ "dev-develop": "2.5-dev"
356
  }
357
  },
358
  "installation-source": "dist",
359
  "autoload": {
360
+ "psr-4": {
361
+ "Zend\\EventManager\\": "src/"
362
  }
363
  },
364
  "notification-url": "https://packagist.org/downloads/",
365
  "license": [
366
  "BSD-3-Clause"
367
  ],
368
+ "homepage": "https://github.com/zendframework/zend-event-manager",
369
  "keywords": [
370
+ "eventmanager",
371
  "zf2"
372
  ]
373
  },
374
  {
375
+ "name": "zendframework/zend-math",
376
+ "version": "2.4.2",
377
+ "version_normalized": "2.4.2.0",
 
378
  "source": {
379
  "type": "git",
380
+ "url": "https://github.com/zendframework/zend-math.git",
381
+ "reference": "1e7e803366fc7618a8668ce2403c932196174faa"
382
  },
383
  "dist": {
384
  "type": "zip",
385
+ "url": "https://api.github.com/repos/zendframework/zend-math/zipball/1e7e803366fc7618a8668ce2403c932196174faa",
386
+ "reference": "1e7e803366fc7618a8668ce2403c932196174faa",
387
  "shasum": ""
388
  },
389
  "require": {
390
+ "php": ">=5.3.23"
 
391
  },
392
  "require-dev": {
393
+ "fabpot/php-cs-fixer": "1.7.*",
394
+ "phpunit/phpunit": "~4.0",
395
+ "satooshi/php-coveralls": "dev-master"
396
  },
397
  "suggest": {
398
+ "ext-bcmath": "If using the bcmath functionality",
399
+ "ext-gmp": "If using the gmp functionality",
400
+ "ircmaxell/random-lib": "Fallback random byte generator for Zend\\Math\\Rand if OpenSSL/Mcrypt extensions are unavailable",
401
+ "zendframework/zend-servicemanager": ">= current version, if using the BigInteger::factory functionality"
402
  },
403
+ "time": "2015-05-07 14:55:31",
404
  "type": "library",
405
  "extra": {
406
  "branch-alias": {
407
+ "dev-master": "2.4-dev",
408
+ "dev-develop": "2.5-dev"
409
  }
410
  },
411
  "installation-source": "dist",
412
  "autoload": {
413
+ "psr-4": {
414
+ "Zend\\Math\\": "src/"
415
  }
416
  },
417
  "notification-url": "https://packagist.org/downloads/",
418
  "license": [
419
  "BSD-3-Clause"
420
  ],
421
+ "homepage": "https://github.com/zendframework/zend-math",
 
422
  "keywords": [
423
+ "math",
424
  "zf2"
425
  ]
426
  },
427
  {
428
  "name": "zendframework/zend-serializer",
429
+ "version": "2.4.2",
430
+ "version_normalized": "2.4.2.0",
 
431
  "source": {
432
  "type": "git",
433
+ "url": "https://github.com/zendframework/zend-serializer.git",
434
+ "reference": "31a0da5c09f54fe76bc4e145e348b0d3d277aaf0"
435
  },
436
  "dist": {
437
  "type": "zip",
438
+ "url": "https://api.github.com/repos/zendframework/zend-serializer/zipball/31a0da5c09f54fe76bc4e145e348b0d3d277aaf0",
439
+ "reference": "31a0da5c09f54fe76bc4e145e348b0d3d277aaf0",
440
  "shasum": ""
441
  },
442
  "require": {
446
  "zendframework/zend-stdlib": "self.version"
447
  },
448
  "require-dev": {
449
+ "fabpot/php-cs-fixer": "1.7.*",
450
+ "phpunit/phpunit": "~4.0",
451
+ "satooshi/php-coveralls": "dev-master",
452
  "zendframework/zend-servicemanager": "self.version"
453
  },
454
  "suggest": {
455
  "zendframework/zend-servicemanager": "To support plugin manager support"
456
  },
457
+ "time": "2015-05-07 14:55:31",
458
  "type": "library",
459
  "extra": {
460
  "branch-alias": {
461
+ "dev-master": "2.4-dev",
462
+ "dev-develop": "2.5-dev"
463
  }
464
  },
465
  "installation-source": "dist",
466
  "autoload": {
467
+ "psr-4": {
468
+ "Zend\\Serializer\\": "src/"
469
  }
470
  },
471
  "notification-url": "https://packagist.org/downloads/",
473
  "BSD-3-Clause"
474
  ],
475
  "description": "provides an adapter based interface to simply generate storable representation of PHP types by different facilities, and recover",
476
+ "homepage": "https://github.com/zendframework/zend-serializer",
477
  "keywords": [
478
  "serializer",
479
  "zf2"
481
  },
482
  {
483
  "name": "zendframework/zend-servicemanager",
484
+ "version": "2.4.2",
485
+ "version_normalized": "2.4.2.0",
 
486
  "source": {
487
  "type": "git",
488
+ "url": "https://github.com/zendframework/zend-servicemanager.git",
489
+ "reference": "855294e12771b4295c26446b6ed2df2f1785f234"
490
  },
491
  "dist": {
492
  "type": "zip",
493
+ "url": "https://api.github.com/repos/zendframework/zend-servicemanager/zipball/855294e12771b4295c26446b6ed2df2f1785f234",
494
+ "reference": "855294e12771b4295c26446b6ed2df2f1785f234",
495
  "shasum": ""
496
  },
497
  "require": {
498
  "php": ">=5.3.23"
499
  },
500
  "require-dev": {
501
+ "fabpot/php-cs-fixer": "1.7.*",
502
+ "phpunit/phpunit": "~4.0",
503
+ "satooshi/php-coveralls": "dev-master",
504
  "zendframework/zend-di": "self.version"
505
  },
506
  "suggest": {
507
  "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
508
  "zendframework/zend-di": "Zend\\Di component"
509
  },
510
+ "time": "2015-05-07 14:55:31",
511
  "type": "library",
512
  "extra": {
513
  "branch-alias": {
514
+ "dev-master": "2.4-dev",
515
+ "dev-develop": "2.5-dev"
516
  }
517
  },
518
  "installation-source": "dist",
519
  "autoload": {
520
+ "psr-4": {
521
+ "Zend\\ServiceManager\\": "src/"
522
  }
523
  },
524
  "notification-url": "https://packagist.org/downloads/",
525
  "license": [
526
  "BSD-3-Clause"
527
  ],
528
+ "homepage": "https://github.com/zendframework/zend-service-manager",
529
  "keywords": [
530
  "servicemanager",
531
  "zf2"
533
  },
534
  {
535
  "name": "zendframework/zend-cache",
536
+ "version": "2.4.2",
537
+ "version_normalized": "2.4.2.0",
 
538
  "source": {
539
  "type": "git",
540
+ "url": "https://github.com/zendframework/zend-cache.git",
541
+ "reference": "e75d3fb0405dd13c77d66b4d139da3d7d07e8f80"
542
  },
543
  "dist": {
544
  "type": "zip",
545
+ "url": "https://api.github.com/repos/zendframework/zend-cache/zipball/e75d3fb0405dd13c77d66b4d139da3d7d07e8f80",
546
+ "reference": "e75d3fb0405dd13c77d66b4d139da3d7d07e8f80",
547
  "shasum": ""
548
  },
549
  "require": {
554
  "zendframework/zend-stdlib": "self.version"
555
  },
556
  "require-dev": {
557
+ "fabpot/php-cs-fixer": "1.7.*",
558
+ "phpunit/phpunit": "~4.0",
559
+ "satooshi/php-coveralls": "dev-master",
560
  "zendframework/zend-session": "self.version"
561
  },
562
  "suggest": {
563
  "ext-apc": "APC >= 3.1.6 to use the APC storage adapter",
564
  "ext-dba": "DBA, to use the DBA storage adapter",
565
  "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
566
+ "ext-mongo": "Mongo, to use MongoDb storage adapter",
567
  "ext-wincache": "WinCache, to use the WinCache storage adapter",
568
+ "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement",
569
  "zendframework/zend-serializer": "Zend\\Serializer component",
570
  "zendframework/zend-session": "Zend\\Session component"
571
  },
572
+ "time": "2015-05-07 14:55:31",
573
  "type": "library",
574
  "extra": {
575
  "branch-alias": {
576
+ "dev-master": "2.4-dev",
577
+ "dev-develop": "2.5-dev"
578
  }
579
  },
580
  "installation-source": "dist",
581
  "autoload": {
582
+ "psr-4": {
583
+ "Zend\\Cache\\": "src/"
584
  }
585
  },
586
  "notification-url": "https://packagist.org/downloads/",
588
  "BSD-3-Clause"
589
  ],
590
  "description": "provides a generic way to cache any data",
591
+ "homepage": "https://github.com/zendframework/zend-cache",
592
  "keywords": [
593
  "cache",
594
  "zf2"
596
  },
597
  {
598
  "name": "zendframework/zend-config",
599
+ "version": "2.4.2",
600
+ "version_normalized": "2.4.2.0",
 
601
  "source": {
602
  "type": "git",
603
+ "url": "https://github.com/zendframework/zend-config.git",
604
+ "reference": "6b879e54096b8e0d2290f7414c38f9a5947cb8ac"
605
  },
606
  "dist": {
607
  "type": "zip",
608
+ "url": "https://api.github.com/repos/zendframework/zend-config/zipball/6b879e54096b8e0d2290f7414c38f9a5947cb8ac",
609
+ "reference": "6b879e54096b8e0d2290f7414c38f9a5947cb8ac",
610
  "shasum": ""
611
  },
612
  "require": {
614
  "zendframework/zend-stdlib": "self.version"
615
  },
616
  "require-dev": {
617
+ "fabpot/php-cs-fixer": "1.7.*",
618
+ "phpunit/phpunit": "~4.0",
619
+ "satooshi/php-coveralls": "dev-master",
620
  "zendframework/zend-filter": "self.version",
621
  "zendframework/zend-i18n": "self.version",
622
  "zendframework/zend-json": "self.version",
628
  "zendframework/zend-json": "Zend\\Json to use the Json reader or writer classes",
629
  "zendframework/zend-servicemanager": "Zend\\ServiceManager for use with the Config Factory to retrieve reader and writer instances"
630
  },
631
+ "time": "2015-05-07 14:55:31",
632
  "type": "library",
633
  "extra": {
634
  "branch-alias": {
635
+ "dev-master": "2.4-dev",
636
+ "dev-develop": "2.5-dev"
637
  }
638
  },
639
  "installation-source": "dist",
640
  "autoload": {
641
+ "psr-4": {
642
+ "Zend\\Config\\": "src/"
643
  }
644
  },
645
  "notification-url": "https://packagist.org/downloads/",
647
  "BSD-3-Clause"
648
  ],
649
  "description": "provides a nested object property based user interface for accessing this configuration data within application code",
650
+ "homepage": "https://github.com/zendframework/zend-config",
651
  "keywords": [
652
  "config",
653
  "zf2"
backend/vendor/guzzlehttp/guzzle/docs/Makefile DELETED
@@ -1,153 +0,0 @@
1
- # Makefile for Sphinx documentation
2
- #
3
-
4
- # You can set these variables from the command line.
5
- SPHINXOPTS =
6
- SPHINXBUILD = sphinx-build
7
- PAPER =
8
- BUILDDIR = _build
9
-
10
- # Internal variables.
11
- PAPEROPT_a4 = -D latex_paper_size=a4
12
- PAPEROPT_letter = -D latex_paper_size=letter
13
- ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
14
- # the i18n builder cannot share the environment and doctrees with the others
15
- I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
16
-
17
- .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
18
-
19
- help:
20
- @echo "Please use \`make <target>' where <target> is one of"
21
- @echo " html to make standalone HTML files"
22
- @echo " dirhtml to make HTML files named index.html in directories"
23
- @echo " singlehtml to make a single large HTML file"
24
- @echo " pickle to make pickle files"
25
- @echo " json to make JSON files"
26
- @echo " htmlhelp to make HTML files and a HTML help project"
27
- @echo " qthelp to make HTML files and a qthelp project"
28
- @echo " devhelp to make HTML files and a Devhelp project"
29
- @echo " epub to make an epub"
30
- @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter"
31
- @echo " latexpdf to make LaTeX files and run them through pdflatex"
32
- @echo " text to make text files"
33
- @echo " man to make manual pages"
34
- @echo " texinfo to make Texinfo files"
35
- @echo " info to make Texinfo files and run them through makeinfo"
36
- @echo " gettext to make PO message catalogs"
37
- @echo " changes to make an overview of all changed/added/deprecated items"
38
- @echo " linkcheck to check all external links for integrity"
39
- @echo " doctest to run all doctests embedded in the documentation (if enabled)"
40
-
41
- clean:
42
- -rm -rf $(BUILDDIR)/*
43
-
44
- html:
45
- $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
46
- @echo
47
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
48
-
49
- dirhtml:
50
- $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
51
- @echo
52
- @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
53
-
54
- singlehtml:
55
- $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
56
- @echo
57
- @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
58
-
59
- pickle:
60
- $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
61
- @echo
62
- @echo "Build finished; now you can process the pickle files."
63
-
64
- json:
65
- $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
66
- @echo
67
- @echo "Build finished; now you can process the JSON files."
68
-
69
- htmlhelp:
70
- $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
71
- @echo
72
- @echo "Build finished; now you can run HTML Help Workshop with the" \
73
- ".hhp project file in $(BUILDDIR)/htmlhelp."
74
-
75
- qthelp:
76
- $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
77
- @echo
78
- @echo "Build finished; now you can run "qcollectiongenerator" with the" \
79
- ".qhcp project file in $(BUILDDIR)/qthelp, like this:"
80
- @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Guzzle.qhcp"
81
- @echo "To view the help file:"
82
- @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Guzzle.qhc"
83
-
84
- devhelp:
85
- $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
86
- @echo
87
- @echo "Build finished."
88
- @echo "To view the help file:"
89
- @echo "# mkdir -p $$HOME/.local/share/devhelp/Guzzle"
90
- @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Guzzle"
91
- @echo "# devhelp"
92
-
93
- epub:
94
- $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
95
- @echo
96
- @echo "Build finished. The epub file is in $(BUILDDIR)/epub."
97
-
98
- latex:
99
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
100
- @echo
101
- @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
102
- @echo "Run \`make' in that directory to run these through (pdf)latex" \
103
- "(use \`make latexpdf' here to do that automatically)."
104
-
105
- latexpdf:
106
- $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
107
- @echo "Running LaTeX files through pdflatex..."
108
- $(MAKE) -C $(BUILDDIR)/latex all-pdf
109
- @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
110
-
111
- text:
112
- $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
113
- @echo
114
- @echo "Build finished. The text files are in $(BUILDDIR)/text."
115
-
116
- man:
117
- $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
118
- @echo
119
- @echo "Build finished. The manual pages are in $(BUILDDIR)/man."
120
-
121
- texinfo:
122
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
123
- @echo
124
- @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
125
- @echo "Run \`make' in that directory to run these through makeinfo" \
126
- "(use \`make info' here to do that automatically)."
127
-
128
- info:
129
- $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
130
- @echo "Running Texinfo files through makeinfo..."
131
- make -C $(BUILDDIR)/texinfo info
132
- @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
133
-
134
- gettext:
135
- $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
136
- @echo
137
- @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
138
-
139
- changes:
140
- $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
141
- @echo
142
- @echo "The overview file is in $(BUILDDIR)/changes."
143
-
144
- linkcheck:
145
- $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
146
- @echo
147
- @echo "Link check complete; look for any errors in the above output " \
148
- "or in $(BUILDDIR)/linkcheck/output.txt."
149
-
150
- doctest:
151
- $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
152
- @echo "Testing of doctests in the sources finished, look at the " \
153
- "results in $(BUILDDIR)/doctest/output.txt."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/_static/guzzle-icon.png DELETED
Binary file
backend/vendor/guzzlehttp/guzzle/docs/_static/logo.png DELETED
Binary file
backend/vendor/guzzlehttp/guzzle/docs/_templates/nav_links.html DELETED
@@ -1,3 +0,0 @@
1
- <li><a href="https://github.com/guzzle/guzzle">GitHub</a></li>
2
- <li><a href="https://groups.google.com/forum/?hl=en#!forum/guzzle">Forum</a></li>
3
- <li><a href="irc:irc.freenode.com/#guzzlephp">IRC</a></li>
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/clients.rst DELETED
@@ -1,1315 +0,0 @@
1
- =======
2
- Clients
3
- =======
4
-
5
- Clients are used to create requests, create transactions, send requests
6
- through an HTTP handler, and return a response. You can add default request
7
- options to a client that are applied to every request (e.g., default headers,
8
- default query string parameters, etc.), and you can add event listeners and
9
- subscribers to every request created by a client.
10
-
11
- Creating a client
12
- =================
13
-
14
- The constructor of a client accepts an associative array of configuration
15
- options.
16
-
17
- base_url
18
- Configures a base URL for the client so that requests created
19
- using a relative URL are combined with the ``base_url`` of the client
20
- according to section `5.2 of RFC 3986 <http://tools.ietf.org/html/rfc3986#section-5.2>`_.
21
-
22
- .. code-block:: php
23
-
24
- // Create a client with a base URL
25
- $client = new GuzzleHttp\Client(['base_url' => 'https://github.com']);
26
- // Send a request to https://github.com/notifications
27
- $response = $client->get('/notifications');
28
-
29
- `Absolute URLs <http://tools.ietf.org/html/rfc3986#section-4.3>`_ sent
30
- through a client will not use the base URL of the client.
31
-
32
- handler
33
- Configures the `RingPHP handler <http://ringphp.readthedocs.org>`_
34
- used to transfer the HTTP requests of a client. Guzzle will, by default,
35
- utilize a stacked handlers that chooses the best handler to use based on the
36
- provided request options and based on the extensions available in the
37
- environment.
38
-
39
- message_factory
40
- Specifies the factory used to create HTTP requests and responses
41
- (``GuzzleHttp\Message\MessageFactoryInterface``).
42
-
43
- defaults
44
- Associative array of :ref:`request-options` that are applied to every
45
- request created by the client. This allows you to specify things like
46
- default headers (e.g., User-Agent), default query string parameters, SSL
47
- configurations, and any other supported request options.
48
-
49
- emitter
50
- Specifies an event emitter (``GuzzleHttp\Event\EmitterInterface``) instance
51
- to be used by the client to emit request events. This option is useful if
52
- you need to inject an emitter with listeners/subscribers already attached.
53
-
54
- Here's an example of creating a client with various options.
55
-
56
- .. code-block:: php
57
-
58
- use GuzzleHttp\Client;
59
-
60
- $client = new Client([
61
- 'base_url' => ['https://api.twitter.com/{version}/', ['version' => 'v1.1']],
62
- 'defaults' => [
63
- 'headers' => ['Foo' => 'Bar'],
64
- 'query' => ['testing' => '123'],
65
- 'auth' => ['username', 'password'],
66
- 'proxy' => 'tcp://localhost:80'
67
- ]
68
- ]);
69
-
70
- Sending Requests
71
- ================
72
-
73
- Requests can be created using various methods of a client. You can create
74
- **and** send requests using one of the following methods:
75
-
76
- - ``GuzzleHttp\Client::get``: Sends a GET request.
77
- - ``GuzzleHttp\Client::head``: Sends a HEAD request
78
- - ``GuzzleHttp\Client::post``: Sends a POST request
79
- - ``GuzzleHttp\Client::put``: Sends a PUT request
80
- - ``GuzzleHttp\Client::delete``: Sends a DELETE request
81
- - ``GuzzleHttp\Client::options``: Sends an OPTIONS request
82
-
83
- Each of the above methods accepts a URL as the first argument and an optional
84
- associative array of :ref:`request-options` as the second argument.
85
-
86
- Synchronous Requests
87
- --------------------
88
-
89
- Guzzle sends synchronous (blocking) requests when the ``future`` request option
90
- is not specified. This means that the request will complete immediately, and if
91
- an error is encountered, a ``GuzzleHttp\Exception\RequestException`` will be
92
- thrown.
93
-
94
- .. code-block:: php
95
-
96
- $client = new GuzzleHttp\Client();
97
-
98
- $client->put('http://httpbin.org', [
99
- 'headers' => ['X-Foo' => 'Bar'],
100
- 'body' => 'this is the body!',
101
- 'save_to' => '/path/to/local/file',
102
- 'allow_redirects' => false,
103
- 'timeout' => 5
104
- ]);
105
-
106
- Synchronous Error Handling
107
- ~~~~~~~~~~~~~~~~~~~~~~~~~~
108
-
109
- When a recoverable error is encountered while calling the ``send()`` method of
110
- a client, a ``GuzzleHttp\Exception\RequestException`` is thrown.
111
-
112
- .. code-block:: php
113
-
114
- use GuzzleHttp\Client;
115
- use GuzzleHttp\Exception\RequestException;
116
-
117
- $client = new Client();
118
-
119
- try {
120
- $client->get('http://httpbin.org');
121
- } catch (RequestException $e) {
122
- echo $e->getRequest() . "\n";
123
- if ($e->hasResponse()) {
124
- echo $e->getResponse() . "\n";
125
- }
126
- }
127
-
128
- ``GuzzleHttp\Exception\RequestException`` always contains a
129
- ``GuzzleHttp\Message\RequestInterface`` object that can be accessed using the
130
- exception's ``getRequest()`` method.
131
-
132
- A response might be present in the exception. In the event of a networking
133
- error, no response will be received. You can check if a ``RequestException``
134
- has a response using the ``hasResponse()`` method. If the exception has a
135
- response, then you can access the associated
136
- ``GuzzleHttp\Message\ResponseInterface`` using the ``getResponse()`` method of
137
- the exception.
138
-
139
- Asynchronous Requests
140
- ---------------------
141
-
142
- You can send asynchronous requests by setting the ``future`` request option
143
- to ``true`` (or a string that your handler understands). This creates a
144
- ``GuzzleHttp\Message\FutureResponse`` object that has not yet completed. Once
145
- you have a future response, you can use a promise object obtained by calling
146
- the ``then`` method of the response to take an action when the response has
147
- completed or encounters an error.
148
-
149
- .. code-block:: php
150
-
151
- $response = $client->put('http://httpbin.org/get', ['future' => true]);
152
-
153
- // Call the function when the response completes
154
- $response->then(function ($response) {
155
- echo $response->getStatusCode();
156
- });
157
-
158
- You can call the ``wait()`` method of a future response to block until it has
159
- completed. You also use a future response object just like a normal response
160
- object by accessing the methods of the response. Using a future response like a
161
- normal response object, also known as *dereferencing*, will block until the
162
- response has completed.
163
-
164
- .. code-block:: php
165
-
166
- $response = $client->put('http://httpbin.org/get', ['future' => true]);
167
-
168
- // Block until the response has completed
169
- echo $response->getStatusCode();
170
-
171
- .. important::
172
-
173
- If an exception occurred while transferring the future response, then the
174
- exception encountered will be thrown when dereferencing.
175
-
176
- .. note::
177
-
178
- It depends on the RingPHP handler used by a client, but you typically need
179
- to use the same RingPHP handler in order to utilize asynchronous requests
180
- across multiple clients.
181
-
182
- Asynchronous Error Handling
183
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~
184
-
185
- Handling errors with future response object promises is a bit different. When
186
- using a promise, exceptions are forwarded to the ``$onError`` function provided
187
- to the second argument of the ``then()`` function.
188
-
189
- .. code-block:: php
190
-
191
- $response = $client->put('http://httpbin.org/get', ['future' => true]);
192
-
193
- $response
194
- ->then(
195
- function ($response) {
196
- // This is called when the request succeeded
197
- echo 'Success: ' . $response->getStatusCode();
198
- // Returning a value will forward the value to the next promise
199
- // in the chain.
200
- return $response;
201
- },
202
- function ($error) {
203
- // This is called when the exception failed.
204
- echo 'Exception: ' . $error->getMessage();
205
- // Throwing will "forward" the exception to the next promise
206
- // in the chain.
207
- throw $error;
208
- }
209
- )
210
- ->then(
211
- function($response) {
212
- // This is called after the first promise in the chain. It
213
- // receives the value returned from the first promise.
214
- echo $response->getReasonPhrase();
215
- },
216
- function ($error) {
217
- // This is called if the first promise error handler in the
218
- // chain rethrows the exception.
219
- echo 'Error: ' . $error->getMessage();
220
- }
221
- );
222
-
223
- Please see the `React/Promises project documentation <https://github.com/reactphp/promise>`_
224
- for more information on how promise resolution and rejection forwarding works.
225
-
226
- HTTP Errors
227
- -----------
228
-
229
- If the ``exceptions`` request option is not set to ``false``, then exceptions
230
- are thrown for HTTP protocol errors as well:
231
- ``GuzzleHttp\Exception\ClientErrorResponseException`` for 4xx level HTTP
232
- responses and ``GuzzleHttp\Exception\ServerException`` for 5xx level responses,
233
- both of which extend from ``GuzzleHttp\Exception\BadResponseException``.
234
-
235
- Creating Requests
236
- -----------------
237
-
238
- You can create a request without sending it. This is useful for building up
239
- requests over time or sending requests in concurrently.
240
-
241
- .. code-block:: php
242
-
243
- $request = $client->createRequest('GET', 'http://httpbin.org', [
244
- 'headers' => ['X-Foo' => 'Bar']
245
- ]);
246
-
247
- // Modify the request as needed
248
- $request->setHeader('Baz', 'bar');
249
-
250
- After creating a request, you can send it with the client's ``send()`` method.
251
-
252
- .. code-block:: php
253
-
254
- $response = $client->send($request);
255
-
256
- Sending Requests With a Pool
257
- ============================
258
-
259
- You can send requests concurrently using a fixed size pool via the
260
- ``GuzzleHttp\Pool`` class. The Pool class is an implementation of
261
- ``GuzzleHttp\Ring\Future\FutureInterface``, meaning it can be dereferenced at a
262
- later time or cancelled before sending. The Pool constructor accepts a client
263
- object, iterator or array that yields ``GuzzleHttp\Message\RequestInterface``
264
- objects, and an optional associative array of options that can be used to
265
- affect the transfer.
266
-
267
- .. code-block:: php
268
-
269
- use GuzzleHttp\Pool;
270
-
271
- $requests = [
272
- $client->createRequest('GET', 'http://httpbin.org'),
273
- $client->createRequest('DELETE', 'http://httpbin.org/delete'),
274
- $client->createRequest('PUT', 'http://httpbin.org/put', ['body' => 'test'])
275
- ];
276
-
277
- $options = [];
278
-
279
- // Create a pool. Note: the options array is optional.
280
- $pool = new Pool($client, $requests, $options);
281
-
282
- // Send the requests
283
- $pool->wait();
284
-
285
- The Pool constructor accepts the following associative array of options:
286
-
287
- - **pool_size**: Integer representing the maximum number of requests that are
288
- allowed to be sent concurrently.
289
- - **before**: Callable or array representing the event listeners to add to
290
- each request's :ref:`before_event` event.
291
- - **complete**: Callable or array representing the event listeners to add to
292
- each request's :ref:`complete_event` event.
293
- - **error**: Callable or array representing the event listeners to add to
294
- each request's :ref:`error_event` event.
295
- - **end**: Callable or array representing the event listeners to add to
296
- each request's :ref:`end_event` event.
297
-
298
- The "before", "complete", "error", and "end" event options accept a callable or
299
- an array of associative arrays where each associative array contains a "fn" key
300
- with a callable value, an optional "priority" key representing the event
301
- priority (with a default value of 0), and an optional "once" key that can be
302
- set to true so that the event listener will be removed from the request after
303
- it is first triggered.
304
-
305
- .. code-block:: php
306
-
307
- use GuzzleHttp\Pool;
308
- use GuzzleHttp\Event\CompleteEvent;
309
-
310
- // Add a single event listener using a callable.
311
- Pool::send($client, $requests, [
312
- 'complete' => function (CompleteEvent $event) {
313
- echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
314
- echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
315
- }
316
- ]);
317
-
318
- // The above is equivalent to the following, but the following structure
319
- // allows you to add multiple event listeners to the same event name.
320
- Pool::send($client, $requests, [
321
- 'complete' => [
322
- [
323
- 'fn' => function (CompleteEvent $event) { /* ... */ },
324
- 'priority' => 0, // Optional
325
- 'once' => false // Optional
326
- ]
327
- ]
328
- ]);
329
-
330
- Asynchronous Response Handling
331
- ------------------------------
332
-
333
- When sending requests concurrently using a pool, the request/response/error
334
- lifecycle must be handled asynchronously. This means that you give the Pool
335
- multiple requests and handle the response or errors that is associated with the
336
- request using event callbacks.
337
-
338
- .. code-block:: php
339
-
340
- use GuzzleHttp\Pool;
341
- use GuzzleHttp\Event\ErrorEvent;
342
-
343
- Pool::send($client, $requests, [
344
- 'complete' => function (CompleteEvent $event) {
345
- echo 'Completed request to ' . $event->getRequest()->getUrl() . "\n";
346
- echo 'Response: ' . $event->getResponse()->getBody() . "\n\n";
347
- // Do something with the completion of the request...
348
- },
349
- 'error' => function (ErrorEvent $event) {
350
- echo 'Request failed: ' . $event->getRequest()->getUrl() . "\n";
351
- echo $event->getException();
352
- // Do something to handle the error...
353
- }
354
- ]);
355
-
356
- The ``GuzzleHttp\Event\ErrorEvent`` event object is emitted when an error
357
- occurs during a transfer. With this event, you have access to the request that
358
- was sent, the response that was received (if one was received), access to
359
- transfer statistics, and the ability to intercept the exception with a
360
- different ``GuzzleHttp\Message\ResponseInterface`` object. See :doc:`events`
361
- for more information.
362
-
363
- Handling Errors After Transferring
364
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
365
-
366
- It sometimes might be easier to handle all of the errors that occurred during a
367
- transfer after all of the requests have been sent. Here we are adding each
368
- failed request to an array that we can use to process errors later.
369
-
370
- .. code-block:: php
371
-
372
- use GuzzleHttp\Pool;
373
- use GuzzleHttp\Event\ErrorEvent;
374
-
375
- $errors = [];
376
- Pool::send($client, $requests, [
377
- 'error' => function (ErrorEvent $event) use (&$errors) {
378
- $errors[] = $event;
379
- }
380
- ]);
381
-
382
- foreach ($errors as $error) {
383
- // Handle the error...
384
- }
385
-
386
- .. _batch-requests:
387
-
388
- Batching Requests
389
- -----------------
390
-
391
- Sometimes you just want to send a few requests concurrently and then process
392
- the results all at once after they've been sent. Guzzle provides a convenience
393
- function ``GuzzleHttp\Pool::batch()`` that makes this very simple:
394
-
395
- .. code-block:: php
396
-
397
- use GuzzleHttp\Pool;
398
- use GuzzleHttp\Client;
399
-
400
- $client = new Client();
401
-
402
- $requests = [
403
- $client->createRequest('GET', 'http://httpbin.org/get'),
404
- $client->createRequest('HEAD', 'http://httpbin.org/get'),
405
- $client->createRequest('PUT', 'http://httpbin.org/put'),
406
- ];
407
-
408
- // Results is a GuzzleHttp\BatchResults object.
409
- $results = Pool::batch($client, $requests);
410
-
411
- // Can be accessed by index.
412
- echo $results[0]->getStatusCode();
413
-
414
- // Can be accessed by request.
415
- echo $results->getResult($requests[0])->getStatusCode();
416
-
417
- // Retrieve all successful responses
418
- foreach ($results->getSuccessful() as $response) {
419
- echo $response->getStatusCode() . "\n";
420
- }
421
-
422
- // Retrieve all failures.
423
- foreach ($results->getFailures() as $requestException) {
424
- echo $requestException->getMessage() . "\n";
425
- }
426
-
427
- ``GuzzleHttp\Pool::batch()`` accepts an optional associative array of options
428
- in the third argument that allows you to specify the 'before', 'complete',
429
- 'error', and 'end' events as well as specify the maximum number of requests to
430
- send concurrently using the 'pool_size' option key.
431
-
432
- .. _request-options:
433
-
434
- Request Options
435
- ===============
436
-
437
- You can customize requests created by a client using **request options**.
438
- Request options control various aspects of a request including, headers,
439
- query string parameters, timeout settings, the body of a request, and much
440
- more.
441
-
442
- All of the following examples use the following client:
443
-
444
- .. code-block:: php
445
-
446
- $client = new GuzzleHttp\Client(['base_url' => 'http://httpbin.org']);
447
-
448
- headers
449
- -------
450
-
451
- :Summary: Associative array of headers to add to the request. Each key is the
452
- name of a header, and each value is a string or array of strings
453
- representing the header field values.
454
- :Types: array
455
- :Defaults: None
456
-
457
- .. code-block:: php
458
-
459
- // Set various headers on a request
460
- $client->get('/get', [
461
- 'headers' => [
462
- 'User-Agent' => 'testing/1.0',
463
- 'Accept' => 'application/json',
464
- 'X-Foo' => ['Bar', 'Baz']
465
- ]
466
- ]);
467
-
468
- body
469
- ----
470
-
471
- :Summary: The ``body`` option is used to control the body of an entity
472
- enclosing request (e.g., PUT, POST, PATCH).
473
- :Types:
474
- - string
475
- - ``fopen()`` resource
476
- - ``GuzzleHttp\Stream\StreamInterface``
477
- - ``GuzzleHttp\Post\PostBodyInterface``
478
- :Default: None
479
-
480
- This setting can be set to any of the following types:
481
-
482
- - string
483
-
484
- .. code-block:: php
485
-
486
- // You can send requests that use a string as the message body.
487
- $client->put('/put', ['body' => 'foo']);
488
-
489
- - resource returned from ``fopen()``
490
-
491
- .. code-block:: php
492
-
493
- // You can send requests that use a stream resource as the body.
494
- $resource = fopen('http://httpbin.org', 'r');
495
- $client->put('/put', ['body' => $resource]);
496
-
497
- - Array
498
-
499
- Use an array to send POST style requests that use a
500
- ``GuzzleHttp\Post\PostBodyInterface`` object as the body.
501
-
502
- .. code-block:: php
503
-
504
- // You can send requests that use a POST body containing fields & files.
505
- $client->post('/post', [
506
- 'body' => [
507
- 'field' => 'abc',
508
- 'other_field' => '123',
509
- 'file_name' => fopen('/path/to/file', 'r')
510
- ]
511
- ]);
512
-
513
- - ``GuzzleHttp\Stream\StreamInterface``
514
-
515
- .. code-block:: php
516
-
517
- // You can send requests that use a Guzzle stream object as the body
518
- $stream = GuzzleHttp\Stream\Stream::factory('contents...');
519
- $client->post('/post', ['body' => $stream]);
520
-
521
- json
522
- ----
523
-
524
- :Summary: The ``json`` option is used to easily upload JSON encoded data as the
525
- body of a request. A Content-Type header of ``application/json`` will be
526
- added if no Content-Type header is already present on the message.
527
- :Types:
528
- Any PHP type that can be operated on by PHP's ``json_encode()`` function.
529
- :Default: None
530
-
531
- .. code-block:: php
532
-
533
- $request = $client->createRequest('PUT', '/put', ['json' => ['foo' => 'bar']]);
534
- echo $request->getHeader('Content-Type');
535
- // application/json
536
- echo $request->getBody();
537
- // {"foo":"bar"}
538
-
539
- .. note::
540
-
541
- This request option does not support customizing the Content-Type header
542
- or any of the options from PHP's `json_encode() <http://www.php.net/manual/en/function.json-encode.php>`_
543
- function. If you need to customize these settings, then you must pass the
544
- JSON encoded data into the request yourself using the ``body`` request
545
- option and you must specify the correct Content-Type header using the
546
- ``headers`` request option.
547
-
548
- query
549
- -----
550
-
551
- :Summary: Associative array of query string values to add to the request.
552
- :Types:
553
- - array
554
- - ``GuzzleHttp\Query``
555
- :Default: None
556
-
557
- .. code-block:: php
558
-
559
- // Send a GET request to /get?foo=bar
560
- $client->get('/get', ['query' => ['foo' => 'bar']]);
561
-
562
- Query strings specified in the ``query`` option are combined with any query
563
- string values that are parsed from the URL.
564
-
565
- .. code-block:: php
566
-
567
- // Send a GET request to /get?abc=123&foo=bar
568
- $client->get('/get?abc=123', ['query' => ['foo' => 'bar']]);
569
-
570
- auth
571
- ----
572
-
573
- :Summary: Pass an array of HTTP authentication parameters to use with the
574
- request. The array must contain the username in index [0], the password in
575
- index [1], and you can optionally provide a built-in authentication type in
576
- index [2]. Pass ``null`` to disable authentication for a request.
577
- :Types:
578
- - array
579
- - string
580
- - null
581
- :Default: None
582
-
583
- The built-in authentication types are as follows:
584
-
585
- basic
586
- Use `basic HTTP authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ in
587
- the ``Authorization`` header (the default setting used if none is
588
- specified).
589
-
590
- .. code-block:: php
591
-
592
- $client->get('/get', ['auth' => ['username', 'password']]);
593
-
594
- digest
595
- Use `digest authentication <http://www.ietf.org/rfc/rfc2069.txt>`_ (must be
596
- supported by the HTTP handler).
597
-
598
- .. code-block:: php
599
-
600
- $client->get('/get', ['auth' => ['username', 'password', 'digest']]);
601
-
602
- *This is currently only supported when using the cURL handler, but creating
603
- a replacement that can be used with any HTTP handler is planned.*
604
-
605
- .. important::
606
-
607
- The authentication type (whether it's provided as a string or as the third
608
- option in an array) is always converted to a lowercase string. Take this
609
- into account when implementing custom authentication types and when
610
- implementing custom message factories.
611
-
612
- Custom Authentication Schemes
613
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
614
-
615
- You can also provide a string representing a custom authentication type name.
616
- When using a custom authentication type string, you will need to implement
617
- the authentication method in an event listener that checks the ``auth`` request
618
- option of a request before it is sent. Authentication listeners that require
619
- a request is not modified after they are signed should have a very low priority
620
- to ensure that they are fired last or near last in the event chain.
621
-
622
- .. code-block:: php
623
-
624
- use GuzzleHttp\Event\BeforeEvent;
625
- use GuzzleHttp\Event\RequestEvents;
626
-
627
- /**
628
- * Custom authentication listener that handles the "foo" auth type.
629
- *
630
- * Listens to the "before" event of a request and only modifies the request
631
- * when the "auth" config setting of the request is "foo".
632
- */
633
- class FooAuth implements GuzzleHttp\Event\SubscriberInterface
634
- {
635
- private $password;
636
-
637
- public function __construct($password)
638
- {
639
- $this->password = $password;
640
- }
641
-
642
- public function getEvents()
643
- {
644
- return ['before' => ['sign', RequestEvents::SIGN_REQUEST]];
645
- }
646
-
647
- public function sign(BeforeEvent $e)
648
- {
649
- if ($e->getRequest()->getConfig()['auth'] == 'foo') {
650
- $e->getRequest()->setHeader('X-Foo', 'Foo ' . $this->password);
651
- }
652
- }
653
- }
654
-
655
- $client->getEmitter()->attach(new FooAuth('password'));
656
- $client->get('/', ['auth' => 'foo']);
657
-
658
- Adapter Specific Authentication Schemes
659
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
660
-
661
- If you need to use authentication methods provided by cURL (e.g., NTLM, GSS,
662
- etc.), then you need to specify a curl handler option in the ``options``
663
- request option array. See :ref:`config-option` for more information.
664
-
665
- .. _cookies-option:
666
-
667
- cookies
668
- -------
669
-
670
- :Summary: Specifies whether or not cookies are used in a request or what cookie
671
- jar to use or what cookies to send.
672
- :Types:
673
- - bool
674
- - array
675
- - ``GuzzleHttp\Cookie\CookieJarInterface``
676
- :Default: None
677
-
678
- Set to ``true`` to use a shared cookie session associated with the client.
679
-
680
- .. code-block:: php
681
-
682
- // Enable cookies using the shared cookie jar of the client.
683
- $client->get('/get', ['cookies' => true]);
684
-
685
- Pass an associative array containing cookies to send in the request and start a
686
- new cookie session.
687
-
688
- .. code-block:: php
689
-
690
- // Enable cookies and send specific cookies
691
- $client->get('/get', ['cookies' => ['foo' => 'bar']]);
692
-
693
- Set to a ``GuzzleHttp\Cookie\CookieJarInterface`` object to use an existing
694
- cookie jar.
695
-
696
- .. code-block:: php
697
-
698
- $jar = new GuzzleHttp\Cookie\CookieJar();
699
- $client->get('/get', ['cookies' => $jar]);
700
-
701
- .. _allow_redirects-option:
702
-
703
- allow_redirects
704
- ---------------
705
-
706
- :Summary: Describes the redirect behavior of a request
707
- :Types:
708
- - bool
709
- - array
710
- :Default:
711
- ::
712
-
713
- [
714
- 'max' => 5,
715
- 'strict' => false,
716
- 'referer' => true,
717
- 'protocols' => ['http', 'https']
718
- ]
719
-
720
- Set to ``false`` to disable redirects.
721
-
722
- .. code-block:: php
723
-
724
- $res = $client->get('/redirect/3', ['allow_redirects' => false]);
725
- echo $res->getStatusCode();
726
- // 302
727
-
728
- Set to ``true`` (the default setting) to enable normal redirects with a maximum
729
- number of 5 redirects.
730
-
731
- .. code-block:: php
732
-
733
- $res = $client->get('/redirect/3');
734
- echo $res->getStatusCode();
735
- // 200
736
-
737
- Pass an associative array containing the 'max' key to specify the maximum
738
- number of redirects, provide a 'strict' key value to specify whether or not to
739
- use strict RFC compliant redirects (meaning redirect POST requests with POST
740
- requests vs. doing what most browsers do which is redirect POST requests with
741
- GET requests), provide a 'referer' key to specify whether or not the "Referer"
742
- header should be added when redirecting, and provide a 'protocols' array that
743
- specifies which protocols are supported for redirects (defaults to
744
- ``['http', 'https']``).
745
-
746
- .. code-block:: php
747
-
748
- $res = $client->get('/redirect/3', [
749
- 'allow_redirects' => [
750
- 'max' => 10, // allow at most 10 redirects.
751
- 'strict' => true, // use "strict" RFC compliant redirects.
752
- 'referer' => true, // add a Referer header
753
- 'protocols' => ['https'] // only allow https URLs
754
- ]
755
- ]);
756
- echo $res->getStatusCode();
757
- // 200
758
-
759
- decode_content
760
- --------------
761
-
762
- :Summary: Specify whether or not ``Content-Encoding`` responses (gzip,
763
- deflate, etc.) are automatically decoded.
764
- :Types:
765
- - string
766
- - bool
767
- :Default: ``true``
768
-
769
- This option can be used to control how content-encoded response bodies are
770
- handled. By default, ``decode_content`` is set to true, meaning any gzipped
771
- or deflated response will be decoded by Guzzle.
772
-
773
- When set to ``false``, the body of a response is never decoded, meaning the
774
- bytes pass through the handler unchanged.
775
-
776
- .. code-block:: php
777
-
778
- // Request gzipped data, but do not decode it while downloading
779
- $client->get('/foo.js', [
780
- 'headers' => ['Accept-Encoding' => 'gzip'],
781
- 'decode_content' => false
782
- ]);
783
-
784
- When set to a string, the bytes of a response are decoded and the string value
785
- provided to the ``decode_content`` option is passed as the ``Accept-Encoding``
786
- header of the request.
787
-
788
- .. code-block:: php
789
-
790
- // Pass "gzip" as the Accept-Encoding header.
791
- $client->get('/foo.js', ['decode_content' => 'gzip']);
792
-
793
- .. _save_to-option:
794
-
795
- save_to
796
- -------
797
-
798
- :Summary: Specify where the body of a response will be saved.
799
- :Types:
800
- - string
801
- - ``fopen()`` resource
802
- - ``GuzzleHttp\Stream\StreamInterface``
803
- :Default: PHP temp stream
804
-
805
- Pass a string to specify the path to a file that will store the contents of the
806
- response body:
807
-
808
- .. code-block:: php
809
-
810
- $client->get('/stream/20', ['save_to' => '/path/to/file']);
811
-
812
- Pass a resource returned from ``fopen()`` to write the response to a PHP stream:
813
-
814
- .. code-block:: php
815
-
816
- $resource = fopen('/path/to/file', 'w');
817
- $client->get('/stream/20', ['save_to' => $resource]);
818
-
819
- Pass a ``GuzzleHttp\Stream\StreamInterface`` object to stream the response body
820
- to an open Guzzle stream:
821
-
822
- .. code-block:: php
823
-
824
- $resource = fopen('/path/to/file', 'w');
825
- $stream = GuzzleHttp\Stream\Stream::factory($resource);
826
- $client->get('/stream/20', ['save_to' => $stream]);
827
-
828
- .. _events-option:
829
-
830
- events
831
- ------
832
-
833
- :Summary: An associative array mapping event names to a callable. Or an
834
- associative array containing the 'fn' key that maps to a callable, an
835
- optional 'priority' key used to specify the event priority, and an optional
836
- 'once' key used to specify if the event should remove itself the first time
837
- it is triggered.
838
- :Types: array
839
- :Default: None
840
-
841
- .. code-block:: php
842
-
843
- use GuzzleHttp\Event\BeforeEvent;
844
- use GuzzleHttp\Event\HeadersEvent;
845
- use GuzzleHttp\Event\CompleteEvent;
846
- use GuzzleHttp\Event\ErrorEvent;
847
-
848
- $client->get('/', [
849
- 'events' => [
850
- 'before' => function (BeforeEvent $e) { echo 'Before'; },
851
- 'complete' => function (CompleteEvent $e) { echo 'Complete'; },
852
- 'error' => function (ErrorEvent $e) { echo 'Error'; },
853
- ]
854
- ]);
855
-
856
- Here's an example of using the associative array format for control over the
857
- priority and whether or not an event should be triggered more than once.
858
-
859
- .. code-block:: php
860
-
861
- $client->get('/', [
862
- 'events' => [
863
- 'before' => [
864
- 'fn' => function (BeforeEvent $e) { echo 'Before'; },
865
- 'priority' => 100,
866
- 'once' => true
867
- ]
868
- ]
869
- ]);
870
-
871
- .. _subscribers-option:
872
-
873
- subscribers
874
- -----------
875
-
876
- :Summary: Array of event subscribers to add to the request. Each value in the
877
- array must be an instance of ``GuzzleHttp\Event\SubscriberInterface``.
878
- :Types: array
879
- :Default: None
880
-
881
- .. code-block:: php
882
-
883
- use GuzzleHttp\Subscriber\History;
884
- use GuzzleHttp\Subscriber\Mock;
885
- use GuzzleHttp\Message\Response;
886
-
887
- $history = new History();
888
- $mock = new Mock([new Response(200)]);
889
- $client->get('/', ['subscribers' => [$history, $mock]]);
890
-
891
- echo $history;
892
- // Outputs the request and response history
893
-
894
- .. _exceptions-option:
895
-
896
- exceptions
897
- ----------
898
-
899
- :Summary: Set to ``false`` to disable throwing exceptions on an HTTP protocol
900
- errors (i.e., 4xx and 5xx responses). Exceptions are thrown by default when
901
- HTTP protocol errors are encountered.
902
- :Types: bool
903
- :Default: ``true``
904
-
905
- .. code-block:: php
906
-
907
- $client->get('/status/500');
908
- // Throws a GuzzleHttp\Exception\ServerException
909
-
910
- $res = $client->get('/status/500', ['exceptions' => false]);
911
- echo $res->getStatusCode();
912
- // 500
913
-
914
- .. _timeout-option:
915
-
916
- timeout
917
- -------
918
-
919
- :Summary: Float describing the timeout of the request in seconds. Use ``0``
920
- to wait indefinitely (the default behavior).
921
- :Types: float
922
- :Default: ``0``
923
-
924
- .. code-block:: php
925
-
926
- // Timeout if a server does not return a response in 3.14 seconds.
927
- $client->get('/delay/5', ['timeout' => 3.14]);
928
- // PHP Fatal error: Uncaught exception 'GuzzleHttp\Exception\RequestException'
929
-
930
- .. _connect_timeout-option:
931
-
932
- connect_timeout
933
- ---------------
934
-
935
- :Summary: Float describing the number of seconds to wait while trying to connect
936
- to a server. Use ``0`` to wait indefinitely (the default behavior).
937
- :Types: float
938
- :Default: ``0``
939
-
940
- .. code-block:: php
941
-
942
- // Timeout if the client fails to connect to the server in 3.14 seconds.
943
- $client->get('/delay/5', ['connect_timeout' => 3.14]);
944
-
945
- .. note::
946
-
947
- This setting must be supported by the HTTP handler used to send a request.
948
- ``connect_timeout`` is currently only supported by the built-in cURL
949
- handler.
950
-
951
- .. _verify-option:
952
-
953
- verify
954
- ------
955
-
956
- :Summary: Describes the SSL certificate verification behavior of a request.
957
-
958
- - Set to ``true`` to enable SSL certificate verification and use the default
959
- CA bundle provided by operating system.
960
- - Set to ``false`` to disable certificate verification (this is insecure!).
961
- - Set to a string to provide the path to a CA bundle to enable verification
962
- using a custom certificate.
963
- :Types:
964
- - bool
965
- - string
966
- :Default: ``true``
967
-
968
- .. code-block:: php
969
-
970
- // Use the system's CA bundle (this is the default setting)
971
- $client->get('/', ['verify' => true]);
972
-
973
- // Use a custom SSL certificate on disk.
974
- $client->get('/', ['verify' => '/path/to/cert.pem']);
975
-
976
- // Disable validation entirely (don't do this!).
977
- $client->get('/', ['verify' => false]);
978
-
979
- Not all system's have a known CA bundle on disk. For example, Windows and
980
- OS X do not have a single common location for CA bundles. When setting
981
- "verify" to ``true``, Guzzle will do its best to find the most appropriate
982
- CA bundle on your system. When using cURL or the PHP stream wrapper on PHP
983
- versions >= 5.6, this happens by default. When using the PHP stream
984
- wrapper on versions < 5.6, Guzzle tries to find your CA bundle in the
985
- following order:
986
-
987
- 1. Check if ``openssl.cafile`` is set in your php.ini file.
988
- 2. Check if ``curl.cainfo`` is set in your php.ini file.
989
- 3. Check if ``/etc/pki/tls/certs/ca-bundle.crt`` exists (Red Hat, CentOS,
990
- Fedora; provided by the ca-certificates package)
991
- 4. Check if ``/etc/ssl/certs/ca-certificates.crt`` exists (Ubuntu, Debian;
992
- provided by the ca-certificates package)
993
- 5. Check if ``/usr/local/share/certs/ca-root-nss.crt`` exists (FreeBSD;
994
- provided by the ca_root_nss package)
995
- 6. Check if ``/usr/local/etc/openssl/cert.pem`` (OS X; provided by homebrew)
996
- 7. Check if ``C:\windows\system32\curl-ca-bundle.crt`` exists (Windows)
997
- 8. Check if ``C:\windows\curl-ca-bundle.crt`` exists (Windows)
998
-
999
- The result of this lookup is cached in memory so that subsequent calls
1000
- in the same process will return very quickly. However, when sending only
1001
- a single request per-process in something like Apache, you should consider
1002
- setting the ``openssl.cafile`` environment variable to the path on disk
1003
- to the file so that this entire process is skipped.
1004
-
1005
- If you do not need a specific certificate bundle, then Mozilla provides a
1006
- commonly used CA bundle which can be downloaded
1007
- `here <https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt>`_
1008
- (provided by the maintainer of cURL). Once you have a CA bundle available on
1009
- disk, you can set the "openssl.cafile" PHP ini setting to point to the path to
1010
- the file, allowing you to omit the "verify" request option. Much more detail on
1011
- SSL certificates can be found on the
1012
- `cURL website <http://curl.haxx.se/docs/sslcerts.html>`_.
1013
-
1014
- .. _cert-option:
1015
-
1016
- cert
1017
- ----
1018
-
1019
- :Summary: Set to a string to specify the path to a file containing a PEM
1020
- formatted client side certificate. If a password is required, then set to
1021
- an array containing the path to the PEM file in the first array element
1022
- followed by the password required for the certificate in the second array
1023
- element.
1024
- :Types:
1025
- - string
1026
- - array
1027
- :Default: None
1028
-
1029
- .. code-block:: php
1030
-
1031
- $client->get('/', ['cert' => ['/path/server.pem', 'password']]);
1032
-
1033
- .. _ssl_key-option:
1034
-
1035
- ssl_key
1036
- -------
1037
-
1038
- :Summary: Specify the path to a file containing a private SSL key in PEM
1039
- format. If a password is required, then set to an array containing the path
1040
- to the SSL key in the first array element followed by the password required
1041
- for the certificate in the second element.
1042
- :Types:
1043
- - string
1044
- - array
1045
- :Default: None
1046
-
1047
- .. note::
1048
-
1049
- ``ssl_key`` is implemented by HTTP handlers. This is currently only
1050
- supported by the cURL handler, but might be supported by other third-part
1051
- handlers.
1052
-
1053
- .. _proxy-option:
1054
-
1055
- proxy
1056
- -----
1057
-
1058
- :Summary: Pass a string to specify an HTTP proxy, or an array to specify
1059
- different proxies for different protocols.
1060
- :Types:
1061
- - string
1062
- - array
1063
- :Default: None
1064
-
1065
- Pass a string to specify a proxy for all protocols.
1066
-
1067
- .. code-block:: php
1068
-
1069
- $client->get('/', ['proxy' => 'tcp://localhost:8125']);
1070
-
1071
- Pass an associative array to specify HTTP proxies for specific URI schemes
1072
- (i.e., "http", "https").
1073
-
1074
- .. code-block:: php
1075
-
1076
- $client->get('/', [
1077
- 'proxy' => [
1078
- 'http' => 'tcp://localhost:8125', // Use this proxy with "http"
1079
- 'https' => 'tcp://localhost:9124' // Use this proxy with "https"
1080
- ]
1081
- ]);
1082
-
1083
- .. note::
1084
-
1085
- You can provide proxy URLs that contain a scheme, username, and password.
1086
- For example, ``"http://username:password@192.168.16.1:10"``.
1087
-
1088
- .. _debug-option:
1089
-
1090
- debug
1091
- -----
1092
-
1093
- :Summary: Set to ``true`` or set to a PHP stream returned by ``fopen()`` to
1094
- enable debug output with the handler used to send a request. For example,
1095
- when using cURL to transfer requests, cURL's verbose of ``CURLOPT_VERBOSE``
1096
- will be emitted. When using the PHP stream wrapper, stream wrapper
1097
- notifications will be emitted. If set to true, the output is written to
1098
- PHP's STDOUT. If a PHP stream is provided, output is written to the stream.
1099
- :Types:
1100
- - bool
1101
- - ``fopen()`` resource
1102
- :Default: None
1103
-
1104
- .. code-block:: php
1105
-
1106
- $client->get('/get', ['debug' => true]);
1107
-
1108
- Running the above example would output something like the following:
1109
-
1110
- ::
1111
-
1112
- * About to connect() to httpbin.org port 80 (#0)
1113
- * Trying 107.21.213.98... * Connected to httpbin.org (107.21.213.98) port 80 (#0)
1114
- > GET /get HTTP/1.1
1115
- Host: httpbin.org
1116
- User-Agent: Guzzle/4.0 curl/7.21.4 PHP/5.5.7
1117
-
1118
- < HTTP/1.1 200 OK
1119
- < Access-Control-Allow-Origin: *
1120
- < Content-Type: application/json
1121
- < Date: Sun, 16 Feb 2014 06:50:09 GMT
1122
- < Server: gunicorn/0.17.4
1123
- < Content-Length: 335
1124
- < Connection: keep-alive
1125
- <
1126
- * Connection #0 to host httpbin.org left intact
1127
-
1128
- .. _stream-option:
1129
-
1130
- stream
1131
- ------
1132
-
1133
- :Summary: Set to ``true`` to stream a response rather than download it all
1134
- up-front.
1135
- :Types: bool
1136
- :Default: ``false``
1137
-
1138
- .. code-block:: php
1139
-
1140
- $response = $client->get('/stream/20', ['stream' => true]);
1141
- // Read bytes off of the stream until the end of the stream is reached
1142
- $body = $response->getBody();
1143
- while (!$body->eof()) {
1144
- echo $body->read(1024);
1145
- }
1146
-
1147
- .. note::
1148
-
1149
- Streaming response support must be implemented by the HTTP handler used by
1150
- a client. This option might not be supported by every HTTP handler, but the
1151
- interface of the response object remains the same regardless of whether or
1152
- not it is supported by the handler.
1153
-
1154
- .. _expect-option:
1155
-
1156
- expect
1157
- ------
1158
-
1159
- :Summary: Controls the behavior of the "Expect: 100-Continue" header.
1160
- :Types:
1161
- - bool
1162
- - integer
1163
- :Default: ``1048576``
1164
-
1165
- Set to ``true`` to enable the "Expect: 100-Continue" header for all requests
1166
- that sends a body. Set to ``false`` to disable the "Expect: 100-Continue"
1167
- header for all requests. Set to a number so that the size of the payload must
1168
- be greater than the number in order to send the Expect header. Setting to a
1169
- number will send the Expect header for all requests in which the size of the
1170
- payload cannot be determined or where the body is not rewindable.
1171
-
1172
- By default, Guzzle will add the "Expect: 100-Continue" header when the size of
1173
- the body of a request is greater than 1 MB and a request is using HTTP/1.1.
1174
-
1175
- .. note::
1176
-
1177
- This option only takes effect when using HTTP/1.1. The HTTP/1.0 and
1178
- HTTP/2.0 protocols do not support the "Expect: 100-Continue" header.
1179
- Support for handling the "Expect: 100-Continue" workflow must be
1180
- implemented by Guzzle HTTP handlers used by a client.
1181
-
1182
- .. _version-option:
1183
-
1184
- version
1185
- -------
1186
-
1187
- :Summary: Protocol version to use with the request.
1188
- :Types: string, float
1189
- :Default: ``1.1``
1190
-
1191
- .. code-block:: php
1192
-
1193
- // Force HTTP/1.0
1194
- $request = $client->createRequest('GET', '/get', ['version' => 1.0]);
1195
- echo $request->getProtocolVersion();
1196
- // 1.0
1197
-
1198
- .. _config-option:
1199
-
1200
- config
1201
- ------
1202
-
1203
- :Summary: Associative array of config options that are forwarded to a request's
1204
- configuration collection. These values are used as configuration options
1205
- that can be consumed by plugins and handlers.
1206
- :Types: array
1207
- :Default: None
1208
-
1209
- .. code-block:: php
1210
-
1211
- $request = $client->createRequest('GET', '/get', ['config' => ['foo' => 'bar']]);
1212
- echo $request->getConfig('foo');
1213
- // 'bar'
1214
-
1215
- Some HTTP handlers allow you to specify custom handler-specific settings. For
1216
- example, you can pass custom cURL options to requests by passing an associative
1217
- array in the ``config`` request option under the ``curl`` key.
1218
-
1219
- .. code-block:: php
1220
-
1221
- // Use custom cURL options with the request. This example uses NTLM auth
1222
- // to authenticate with a server.
1223
- $client->get('/', [
1224
- 'config' => [
1225
- 'curl' => [
1226
- CURLOPT_HTTPAUTH => CURLAUTH_NTLM,
1227
- CURLOPT_USERPWD => 'username:password'
1228
- ]
1229
- ]
1230
- ]);
1231
-
1232
- future
1233
- ------
1234
-
1235
- :Summary: Specifies whether or not a response SHOULD be an instance of a
1236
- ``GuzzleHttp\Message\FutureResponse`` object.
1237
- :Types:
1238
- - bool
1239
- - string
1240
- :Default: ``false``
1241
-
1242
- By default, Guzzle requests should be synchronous. You can create asynchronous
1243
- future responses by passing the ``future`` request option as ``true``. The
1244
- response will only be executed when it is used like a normal response, the
1245
- ``wait()`` method of the response is called, or the corresponding handler that
1246
- created the response is destructing and there are futures that have not been
1247
- resolved.
1248
-
1249
- .. important::
1250
-
1251
- This option only has an effect if your handler can create and return future
1252
- responses. However, even if a response is completed synchronously, Guzzle
1253
- will ensure that a FutureResponse object is returned for API consistency.
1254
-
1255
- .. code-block:: php
1256
-
1257
- $response = $client->get('/foo', ['future' => true])
1258
- ->then(function ($response) {
1259
- echo 'I got a response! ' . $response;
1260
- });
1261
-
1262
- Event Subscribers
1263
- =================
1264
-
1265
- Requests emit lifecycle events when they are transferred. A client object has a
1266
- ``GuzzleHttp\Common\EventEmitter`` object that can be used to add event
1267
- *listeners* and event *subscribers* to all requests created by the client.
1268
-
1269
- .. important::
1270
-
1271
- **Every** event listener or subscriber added to a client will be added to
1272
- every request created by the client.
1273
-
1274
- .. code-block:: php
1275
-
1276
- use GuzzleHttp\Client;
1277
- use GuzzleHttp\Event\BeforeEvent;
1278
-
1279
- $client = new Client();
1280
-
1281
- // Add a listener that will echo out requests before they are sent
1282
- $client->getEmitter()->on('before', function (BeforeEvent $e) {
1283
- echo 'About to send request: ' . $e->getRequest();
1284
- });
1285
-
1286
- $client->get('http://httpbin.org/get');
1287
- // Outputs the request as a string because of the event
1288
-
1289
- See :doc:`events` for more information on the event system used in Guzzle.
1290
-
1291
- Environment Variables
1292
- =====================
1293
-
1294
- Guzzle exposes a few environment variables that can be used to customize the
1295
- behavior of the library.
1296
-
1297
- ``GUZZLE_CURL_SELECT_TIMEOUT``
1298
- Controls the duration in seconds that a curl_multi_* handler will use when
1299
- selecting on curl handles using ``curl_multi_select()``. Some systems
1300
- have issues with PHP's implementation of ``curl_multi_select()`` where
1301
- calling this function always results in waiting for the maximum duration of
1302
- the timeout.
1303
- ``HTTP_PROXY``
1304
- Defines the proxy to use when sending requests using the "http" protocol.
1305
- ``HTTPS_PROXY``
1306
- Defines the proxy to use when sending requests using the "https" protocol.
1307
-
1308
- Relevant ini Settings
1309
- ---------------------
1310
-
1311
- Guzzle can utilize PHP ini settings when configuring clients.
1312
-
1313
- ``openssl.cafile``
1314
- Specifies the path on disk to a CA file in PEM format to use when sending
1315
- requests over "https". See: https://wiki.php.net/rfc/tls-peer-verification#phpini_defaults
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/conf.py DELETED
@@ -1,28 +0,0 @@
1
- import sys, os
2
- from sphinx.highlighting import lexers
3
- from pygments.lexers.web import PhpLexer
4
-
5
-
6
- lexers['php'] = PhpLexer(startinline=True, linenos=1)
7
- lexers['php-annotations'] = PhpLexer(startinline=True, linenos=1)
8
- primary_domain = 'php'
9
-
10
- extensions = []
11
- templates_path = ['_templates']
12
- source_suffix = '.rst'
13
- master_doc = 'index'
14
- project = u'Guzzle'
15
- copyright = u'2014, Michael Dowling'
16
- version = '5.0.0'
17
- html_title = "Guzzle Documentation"
18
- html_short_title = "Guzzle"
19
-
20
- exclude_patterns = ['_build']
21
- html_static_path = ['_static']
22
-
23
- on_rtd = os.environ.get('READTHEDOCS', None) == 'True'
24
-
25
- if not on_rtd: # only import and set the theme if we're building docs locally
26
- import sphinx_rtd_theme
27
- html_theme = 'sphinx_rtd_theme'
28
- html_theme_path = [sphinx_rtd_theme.get_html_theme_path()]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/events.rst DELETED
@@ -1,520 +0,0 @@
1
- ============
2
- Event System
3
- ============
4
-
5
- Guzzle uses an event emitter to allow you to easily extend the behavior of a
6
- request, change the response associated with a request, and implement custom
7
- error handling. All events in Guzzle are managed and emitted by an
8
- **event emitter**.
9
-
10
- Event Emitters
11
- ==============
12
-
13
- Clients, requests, and any other class that implements the
14
- ``GuzzleHttp\Event\HasEmitterInterface`` interface have a
15
- ``GuzzleHttp\Event\Emitter`` object. You can add event *listeners* and
16
- event *subscribers* to an event *emitter*.
17
-
18
- emitter
19
- An object that implements ``GuzzleHttp\Event\EmitterInterface``. This
20
- object emits named events to event listeners. You may register event
21
- listeners on subscribers on an emitter.
22
-
23
- event listeners
24
- Callable functions that are registered on an event emitter for specific
25
- events. Event listeners are registered on an emitter with a *priority*
26
- setting. If no priority is provided, ``0`` is used by default.
27
-
28
- event subscribers
29
- Classes that tell an event emitter what methods to listen to and what
30
- functions on the class to invoke when the event is triggered. Event
31
- subscribers subscribe event listeners to an event emitter. They should be
32
- used when creating more complex event based logic in applications (i.e.,
33
- cookie handling is implemented using an event subscriber because it's
34
- easier to share a subscriber than an anonymous function and because
35
- handling cookies is a complex process).
36
-
37
- priority
38
- Describes the order in which event listeners are invoked when an event is
39
- emitted. The higher a priority value, the earlier the event listener will
40
- be invoked (a higher priority means the listener is more important). If
41
- no priority is provided, the priority is assumed to be ``0``.
42
-
43
- When specifying an event priority, you can pass ``"first"`` or ``"last"`` to
44
- dynamically specify the priority based on the current event priorities
45
- associated with the given event name in the emitter. Use ``"first"`` to set
46
- the priority to the current highest priority plus one. Use ``"last"`` to
47
- set the priority to the current lowest event priority minus one. It is
48
- important to remember that these dynamic priorities are calculated only at
49
- the point of insertion into the emitter and they are not rearranged after
50
- subsequent listeners are added to an emitter.
51
-
52
- propagation
53
- Describes whether or not other event listeners are triggered. Event
54
- emitters will trigger every event listener registered to a specific event
55
- in priority order until all of the listeners have been triggered **or**
56
- until the propagation of an event is stopped.
57
-
58
- Getting an EventEmitter
59
- -----------------------
60
-
61
- You can get the event emitter of ``GuzzleHttp\Event\HasEmitterInterface``
62
- object using the the ``getEmitter()`` method. Here's an example of getting a
63
- client object's event emitter.
64
-
65
- .. code-block:: php
66
-
67
- $client = new GuzzleHttp\Client();
68
- $emitter = $client->getEmitter();
69
-
70
- .. note::
71
-
72
- You'll notice that the event emitter used in Guzzle is very similar to the
73
- `Symfony2 EventDispatcher component <https://github.com/symfony/symfony/tree/master/src/Symfony/Component/EventDispatcher>`_.
74
- This is because the Guzzle event system is based on the Symfony2 event
75
- system with several changes. Guzzle uses its own event emitter to improve
76
- performance, isolate Guzzle from changes to the Symfony, and provide a few
77
- improvements that make it easier to use for an HTTP client (e.g., the
78
- addition of the ``once()`` method).
79
-
80
- Adding Event Listeners
81
- ----------------------
82
-
83
- After you have the emitter, you can register event listeners that listen to
84
- specific events using the ``on()`` method. When registering an event listener,
85
- you must tell the emitter what event to listen to (e.g., "before", "after",
86
- "progress", "complete", "error", etc.), what callable to invoke when the
87
- event is triggered, and optionally provide a priority.
88
-
89
- .. code-block:: php
90
-
91
- use GuzzleHttp\Event\BeforeEvent;
92
-
93
- $emitter->on('before', function (BeforeEvent $event) {
94
- echo $event->getRequest();
95
- });
96
-
97
- When a listener is triggered, it is passed an event that implements the
98
- ``GuzzleHttp\Event\EventInterface`` interface, the name of the event, and the
99
- event emitter itself. The above example could more verbosely be written as
100
- follows:
101
-
102
- .. code-block:: php
103
-
104
- use GuzzleHttp\Event\BeforeEvent;
105
-
106
- $emitter->on('before', function (
107
- BeforeEvent $event,
108
- $name,
109
- EmitterInterface $emitter
110
- ) {
111
- echo $event->getRequest();
112
- });
113
-
114
- You can add an event listener that automatically removes itself after it is
115
- triggered using the ``once()`` method of an event emitter.
116
-
117
- .. code-block:: php
118
-
119
- $client = new GuzzleHttp\Client();
120
- $client->getEmitter()->once('before', function () {
121
- echo 'This will only happen once... per request!';
122
- });
123
-
124
- Event Propagation
125
- -----------------
126
-
127
- Event listeners can prevent other event listeners from being triggered by
128
- stopping an event's propagation.
129
-
130
- Stopping event propagation can be useful, for example, if an event listener has
131
- changed the state of the subject to such an extent that allowing subsequent
132
- event listeners to be triggered could place the subject in an inconsistent
133
- state. This technique is used in Guzzle extensively when intercepting error
134
- events with responses.
135
-
136
- You can stop the propagation of an event using the ``stopPropagation()`` method
137
- of a ``GuzzleHttp\Event\EventInterface`` object:
138
-
139
- .. code-block:: php
140
-
141
- use GuzzleHttp\Event\ErrorEvent;
142
-
143
- $emitter->on('error', function (ErrorEvent $event) {
144
- $event->stopPropagation();
145
- });
146
-
147
- After stopping the propagation of an event, any subsequent event listeners that
148
- have not yet been triggered will not be triggered. You can check to see if the
149
- propagation of an event was stopped using the ``isPropagationStopped()`` method
150
- of the event.
151
-
152
- .. code-block:: php
153
-
154
- $client = new GuzzleHttp\Client();
155
- $emitter = $client->getEmitter();
156
- // Note: assume that the $errorEvent was created
157
- if ($emitter->emit('error', $errorEvent)->isPropagationStopped()) {
158
- echo 'It was stopped!';
159
- }
160
-
161
- .. hint::
162
-
163
- When emitting events, the event that was emitted is returned from the
164
- emitter. This allows you to easily chain calls as shown in the above
165
- example.
166
-
167
- Event Subscribers
168
- -----------------
169
-
170
- Event subscribers are classes that implement the
171
- ``GuzzleHttp\Event\SubscriberInterface`` object. They are used to register
172
- one or more event listeners to methods of the class. Event subscribers tell
173
- event emitters exactly which events to listen to and what method to invoke on
174
- the class when the event is triggered by called the ``getEvents()`` method of
175
- a subscriber.
176
-
177
- The following example registers event listeners to the ``before`` and
178
- ``complete`` event of a request. When the ``before`` event is emitted, the
179
- ``onBefore`` instance method of the subscriber is invoked. When the
180
- ``complete`` event is emitted, the ``onComplete`` event of the subscriber is
181
- invoked. Each array value in the ``getEvents()`` return value MUST
182
- contain the name of the method to invoke and can optionally contain the
183
- priority of the listener (as shown in the ``before`` listener in the example).
184
-
185
- .. code-block:: php
186
-
187
- use GuzzleHttp\Event\EmitterInterface;
188
- use GuzzleHttp\Event\SubscriberInterface;
189
- use GuzzleHttp\Event\BeforeEvent;
190
- use GuzzleHttp\Event\CompleteEvent;
191
-
192
- class SimpleSubscriber implements SubscriberInterface
193
- {
194
- public function getEvents()
195
- {
196
- return [
197
- // Provide name and optional priority
198
- 'before' => ['onBefore', 100],
199
- 'complete' => ['onComplete'],
200
- // You can pass a list of listeners with different priorities
201
- 'error' => [['beforeError', 'first'], ['afterError', 'last']]
202
- ];
203
- }
204
-
205
- public function onBefore(BeforeEvent $event, $name)
206
- {
207
- echo 'Before!';
208
- }
209
-
210
- public function onComplete(CompleteEvent $event, $name)
211
- {
212
- echo 'Complete!';
213
- }
214
- }
215
-
216
- To register the listeners the subscriber needs to be attached to the emitter:
217
-
218
- .. code-block:: php
219
-
220
- $client = new GuzzleHttp\Client();
221
- $emitter = $client->getEmitter();
222
- $subscriber = new SimpleSubscriber();
223
- $emitter->attach($subscriber);
224
-
225
- //to remove the listeners
226
- $emitter->detach($subscriber);
227
-
228
- .. note::
229
-
230
- You can specify event priorities using integers or ``"first"`` and
231
- ``"last"`` to dynamically determine the priority.
232
-
233
- Event Priorities
234
- ================
235
-
236
- When adding event listeners or subscribers, you can provide an optional event
237
- priority. This priority is used to determine how early or late a listener is
238
- triggered. Specifying the correct priority is an important aspect of ensuring
239
- a listener behaves as expected. For example, if you wanted to ensure that
240
- cookies associated with a redirect were added to a cookie jar, you'd need to
241
- make sure that the listener that collects the cookies is triggered before the
242
- listener that performs the redirect.
243
-
244
- In order to help make the process of determining the correct event priority of
245
- a listener easier, Guzzle provides several pre-determined named event
246
- priorities. These priorities are exposed as constants on the
247
- ``GuzzleHttp\Event\RequestEvents`` object.
248
-
249
- last
250
- Use ``"last"`` as an event priority to set the priority to the current
251
- lowest event priority minus one.
252
-
253
- first
254
- Use ``"first"`` as an event priority to set the priority to the current
255
- highest priority plus one.
256
-
257
- ``GuzzleHttp\Event\RequestEvents::EARLY``
258
- Used when you want a listener to be triggered as early as possible in the
259
- event chain.
260
-
261
- ``GuzzleHttp\Event\RequestEvents::LATE``
262
- Used when you want a listener to be to be triggered as late as possible in
263
- the event chain.
264
-
265
- ``GuzzleHttp\Event\RequestEvents::PREPARE_REQUEST``
266
- Used when you want a listener to be trigger while a request is being
267
- prepared during the ``before`` event. This event priority is used by the
268
- ``GuzzleHttp\Subscriber\Prepare`` event subscriber which is responsible for
269
- guessing a Content-Type, Content-Length, and Expect header of a request.
270
- You should subscribe after this event is triggered if you want to ensure
271
- that this subscriber has already been triggered.
272
-
273
- ``GuzzleHttp\Event\RequestEvents::SIGN_REQUEST``
274
- Used when you want a listener to be triggered when a request is about to be
275
- signed. Any listener triggered at this point should expect that the request
276
- object will no longer be mutated. If you are implementing a custom
277
- signature subscriber, then you should use this event priority to sign
278
- requests.
279
-
280
- ``GuzzleHttp\Event\RequestEvents::VERIFY_RESPONSE``
281
- Used when you want a listener to be triggered when a response is being
282
- validated during the ``complete`` event. The
283
- ``GuzzleHttp\Subscriber\HttpError`` event subscriber uses this event
284
- priority to check if an exception should be thrown due to a 4xx or 5xx
285
- level response status code. If you are doing any kind of verification of a
286
- response during the complete event, it should happen at this priority.
287
-
288
- ``GuzzleHttp\Event\RequestEvents::REDIRECT_RESPONSE``
289
- Used when you want a listener to be triggered when a response is being
290
- redirected during the ``complete`` event. The
291
- ``GuzzleHttp\Subscriber\Redirect`` event subscriber uses this event
292
- priority when performing redirects.
293
-
294
- You can use the above event priorities as a guideline for determining the
295
- priority of you event listeners. You can use these constants and add to or
296
- subtract from them to ensure that a listener happens before or after the named
297
- priority.
298
-
299
- .. note::
300
-
301
- "first" and "last" priorities are not adjusted after they added to an
302
- emitter. For example, if you add a listener with a priority of "first",
303
- you can still add subsequent listeners with a higher priority which would
304
- be triggered before the listener added with a priority of "first".
305
-
306
- Working With Request Events
307
- ===========================
308
-
309
- Requests emit lifecycle events when they are transferred.
310
-
311
- .. important::
312
-
313
- Excluding the ``end`` event, request lifecycle events may be triggered
314
- multiple times due to redirects, retries, or reusing a request multiple
315
- times. Use the ``once()`` method want the event to be triggered once. You
316
- can also remove an event listener from an emitter by using the emitter which
317
- is provided to the listener.
318
-
319
- .. _before_event:
320
-
321
- before
322
- ------
323
-
324
- The ``before`` event is emitted before a request is sent. The event emitted is
325
- a ``GuzzleHttp\Event\BeforeEvent``.
326
-
327
- .. code-block:: php
328
-
329
- use GuzzleHttp\Client;
330
- use GuzzleHttp\Event\EmitterInterface;
331
- use GuzzleHttp\Event\BeforeEvent;
332
-
333
- $client = new Client(['base_url' => 'http://httpbin.org']);
334
- $request = $client->createRequest('GET', '/');
335
- $request->getEmitter()->on(
336
- 'before',
337
- function (BeforeEvent $e, $name, EmitterInterface $emitter) {
338
- echo $name . "\n";
339
- // "before"
340
- echo $e->getRequest()->getMethod() . "\n";
341
- // "GET" / "POST" / "PUT" / etc.
342
- echo get_class($e->getClient());
343
- // "GuzzleHttp\Client"
344
- }
345
- );
346
-
347
- You can intercept a request with a response before the request is sent over the
348
- wire. The ``intercept()`` method of the ``BeforeEvent`` accepts a
349
- ``GuzzleHttp\Message\ResponseInterface``. Intercepting the event will prevent
350
- the request from being sent over the wire and stops the propagation of the
351
- ``before`` event, preventing subsequent event listeners from being invoked.
352
-
353
- .. code-block:: php
354
-
355
- use GuzzleHttp\Client;
356
- use GuzzleHttp\Event\BeforeEvent;
357
- use GuzzleHttp\Message\Response;
358
-
359
- $client = new Client(['base_url' => 'http://httpbin.org']);
360
- $request = $client->createRequest('GET', '/status/500');
361
- $request->getEmitter()->on('before', function (BeforeEvent $e) {
362
- $response = new Response(200);
363
- $e->intercept($response);
364
- });
365
-
366
- $response = $client->send($request);
367
- echo $response->getStatusCode();
368
- // 200
369
-
370
- .. attention::
371
-
372
- Any exception encountered while executing the ``before`` event will trigger
373
- the ``error`` event of a request.
374
-
375
- .. _complete_event:
376
-
377
- complete
378
- --------
379
-
380
- The ``complete`` event is emitted after a transaction completes and an entire
381
- response has been received. The event is a ``GuzzleHttp\Event\CompleteEvent``.
382
-
383
- You can intercept the ``complete`` event with a different response if needed
384
- using the ``intercept()`` method of the event. This can be useful, for example,
385
- for changing the response for caching.
386
-
387
- .. code-block:: php
388
-
389
- use GuzzleHttp\Client;
390
- use GuzzleHttp\Event\CompleteEvent;
391
- use GuzzleHttp\Message\Response;
392
-
393
- $client = new Client(['base_url' => 'http://httpbin.org']);
394
- $request = $client->createRequest('GET', '/status/302');
395
- $cachedResponse = new Response(200);
396
-
397
- $request->getEmitter()->on(
398
- 'complete',
399
- function (CompleteEvent $e) use ($cachedResponse) {
400
- if ($e->getResponse()->getStatusCode() == 302) {
401
- // Intercept the original transaction with the new response
402
- $e->intercept($cachedResponse);
403
- }
404
- }
405
- );
406
-
407
- $response = $client->send($request);
408
- echo $response->getStatusCode();
409
- // 200
410
-
411
- .. attention::
412
-
413
- Any ``GuzzleHttp\Exception\RequestException`` encountered while executing
414
- the ``complete`` event will trigger the ``error`` event of a request.
415
-
416
- .. _error_event:
417
-
418
- error
419
- -----
420
-
421
- The ``error`` event is emitted when a request fails (whether it's from a
422
- networking error or an HTTP protocol error). The event emitted is a
423
- ``GuzzleHttp\Event\ErrorEvent``.
424
-
425
- This event is useful for retrying failed requests. Here's an example of
426
- retrying failed basic auth requests by re-sending the original request with
427
- a username and password.
428
-
429
- .. code-block:: php
430
-
431
- use GuzzleHttp\Client;
432
- use GuzzleHttp\Event\ErrorEvent;
433
-
434
- $client = new Client(['base_url' => 'http://httpbin.org']);
435
- $request = $client->createRequest('GET', '/basic-auth/foo/bar');
436
- $request->getEmitter()->on('error', function (ErrorEvent $e) {
437
- if ($e->getResponse()->getStatusCode() == 401) {
438
- // Add authentication stuff as needed and retry the request
439
- $e->getRequest()->setHeader('Authorization', 'Basic ' . base64_encode('foo:bar'));
440
- // Get the client of the event and retry the request
441
- $newResponse = $e->getClient()->send($e->getRequest());
442
- // Intercept the original transaction with the new response
443
- $e->intercept($newResponse);
444
- }
445
- });
446
-
447
- .. attention::
448
-
449
- If an ``error`` event is intercepted with a response, then the ``complete``
450
- event of a request is triggered. If the ``complete`` event fails, then the
451
- ``error`` event is triggered once again.
452
-
453
- .. _progress_event:
454
-
455
- progress
456
- --------
457
-
458
- The ``progress`` event is emitted when data is uploaded or downloaded. The
459
- event emitted is a ``GuzzleHttp\Event\ProgressEvent``.
460
-
461
- You can access the emitted progress values using the corresponding public
462
- properties of the event object:
463
-
464
- - ``$downloadSize``: The number of bytes that will be downloaded (if known)
465
- - ``$downloaded``: The number of bytes that have been downloaded
466
- - ``$uploadSize``: The number of bytes that will be uploaded (if known)
467
- - ``$uploaded``: The number of bytes that have been uploaded
468
-
469
- This event cannot be intercepted.
470
-
471
- .. code-block:: php
472
-
473
- use GuzzleHttp\Client;
474
- use GuzzleHttp\Event\ProgressEvent;
475
-
476
- $client = new Client(['base_url' => 'http://httpbin.org']);
477
- $request = $client->createRequest('PUT', '/put', [
478
- 'body' => str_repeat('.', 100000)
479
- ]);
480
-
481
- $request->getEmitter()->on('progress', function (ProgressEvent $e) {
482
- echo 'Downloaded ' . $e->downloaded . ' of ' . $e->downloadSize . ' '
483
- . 'Uploaded ' . $e->uploaded . ' of ' . $e->uploadSize . "\r";
484
- });
485
-
486
- $client->send($request);
487
- echo "\n";
488
-
489
- .. _end_event:
490
-
491
- end
492
- ---
493
-
494
- The ``end`` event is a terminal event, emitted once per request, that provides
495
- access to the response that was received or the exception that was encountered.
496
- The event emitted is a ``GuzzleHttp\Event\EndEvent``.
497
-
498
- This event can be intercepted, but keep in mind that the ``complete`` event
499
- will not fire after intercepting this event.
500
-
501
- .. code-block:: php
502
-
503
- use GuzzleHttp\Client;
504
- use GuzzleHttp\Event\EndEvent;
505
-
506
- $client = new Client(['base_url' => 'http://httpbin.org']);
507
- $request = $client->createRequest('PUT', '/put', [
508
- 'body' => str_repeat('.', 100000)
509
- ]);
510
-
511
- $request->getEmitter()->on('end', function (EndEvent $e) {
512
- if ($e->getException()) {
513
- echo 'Error: ' . $e->getException()->getMessage();
514
- } else {
515
- echo 'Response: ' . $e->getResponse();
516
- }
517
- });
518
-
519
- $client->send($request);
520
- echo "\n";
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/faq.rst DELETED
@@ -1,199 +0,0 @@
1
- ===
2
- FAQ
3
- ===
4
-
5
- Why should I use Guzzle?
6
- ========================
7
-
8
- Guzzle makes it easy to send HTTP requests and super simple to integrate with
9
- web services. Guzzle manages things like persistent connections, represents
10
- query strings as collections, makes it simple to send streaming POST requests
11
- with fields and files, and abstracts away the underlying HTTP transport layer.
12
- By providing an object oriented interface for HTTP clients, requests, responses,
13
- headers, and message bodies, Guzzle makes it so that you no longer need to fool
14
- around with cURL options, stream contexts, or sockets.
15
-
16
- **Asynchronous and Synchronous Requests**
17
-
18
- Guzzle allows you to send both asynchronous and synchronous requests using the
19
- same interface and no direct dependency on an event loop. This flexibility
20
- allows Guzzle to send an HTTP request using the most appropriate HTTP handler
21
- based on the request being sent. For example, when sending synchronous
22
- requests, Guzzle will by default send requests using cURL easy handles to
23
- ensure you're using the fastest possible method for serially transferring HTTP
24
- requests. When sending asynchronous requests, Guzzle might use cURL's multi
25
- interface or any other asynchronous handler you configure. When you request
26
- streaming data, Guzzle will by default use PHP's stream wrapper.
27
-
28
- **Streams**
29
-
30
- Request and response message bodies use :doc:`Guzzle Streams <streams>`,
31
- allowing you to stream data without needing to load it all into memory.
32
- Guzzle's stream layer provides a large suite of functionality:
33
-
34
- - You can modify streams at runtime using custom or a number of
35
- pre-made decorators.
36
- - You can emit progress events as data is read from a stream.
37
- - You can validate the integrity of a stream using a rolling hash as data is
38
- read from a stream.
39
-
40
- **Event System and Plugins**
41
-
42
- Guzzle's event system allows you to completely modify the behavior of a client
43
- or request at runtime to cater them for any API. You can send a request with a
44
- client, and the client can do things like automatically retry your request if
45
- it fails, automatically redirect, log HTTP messages that are sent over the
46
- wire, emit progress events as data is uploaded and downloaded, sign requests
47
- using OAuth 1.0, verify the integrity of messages before and after they are
48
- sent over the wire, and anything else you might need.
49
-
50
- **Testable**
51
-
52
- Another important aspect of Guzzle is that it's really
53
- :doc:`easy to test clients <testing>`. You can mock HTTP responses and when
54
- testing an handler implementation, Guzzle provides a mock node.js web server.
55
-
56
- **Ecosystem**
57
-
58
- Guzzle has a large `ecosystem of plugins <http://guzzle.readthedocs.org/en/latest/index.html#http-components>`_,
59
- including `service descriptions <https://github.com/guzzle/guzzle-services>`_
60
- which allows you to abstract web services using service descriptions. These
61
- service descriptions define how to serialize an HTTP request and how to parse
62
- an HTTP response into a more meaningful model object.
63
-
64
- - `Guzzle Command <https://github.com/guzzle/command>`_: Provides the building
65
- blocks for service description abstraction.
66
- - `Guzzle Services <https://github.com/guzzle/guzzle-services>`_: Provides an
67
- implementation of "Guzzle Command" that utilizes Guzzle's service description
68
- format.
69
-
70
- Does Guzzle require cURL?
71
- =========================
72
-
73
- No. Guzzle can use any HTTP handler to send requests. This means that Guzzle
74
- can be used with cURL, PHP's stream wrapper, sockets, and non-blocking libraries
75
- like `React <http://reactphp.org/>`_. You just need to configure a
76
- `RingPHP <http://guzzle-ring.readthedocs.org/en/latest/>`_ handler to use a
77
- different method of sending requests.
78
-
79
- .. note::
80
-
81
- Guzzle has historically only utilized cURL to send HTTP requests. cURL is
82
- an amazing HTTP client (arguably the best), and Guzzle will continue to use
83
- it by default when it is available. It is rare, but some developers don't
84
- have cURL installed on their systems or run into version specific issues.
85
- By allowing swappable HTTP handlers, Guzzle is now much more customizable
86
- and able to adapt to fit the needs of more developers.
87
-
88
- Can Guzzle send asynchronous requests?
89
- ======================================
90
-
91
- Yes. Pass the ``future`` true request option to a request to send it
92
- asynchronously. Guzzle will then return a ``GuzzleHttp\Message\FutureResponse``
93
- object that can be used synchronously by accessing the response object like a
94
- normal response, and it can be used asynchronously using a promise that is
95
- notified when the response is resolved with a real response or rejected with an
96
- exception.
97
-
98
- .. code-block:: php
99
-
100
- $request = $client->createRequest('GET', ['future' => true]);
101
- $client->send($request)->then(function ($response) {
102
- echo 'Got a response! ' . $response;
103
- });
104
-
105
- You can force an asynchronous response to complete using the ``wait()`` method
106
- of a response.
107
-
108
- .. code-block:: php
109
-
110
- $request = $client->createRequest('GET', ['future' => true]);
111
- $futureResponse = $client->send($request);
112
- $futureResponse->wait();
113
-
114
- How can I add custom cURL options?
115
- ==================================
116
-
117
- cURL offer a huge number of `customizable options <http://us1.php.net/curl_setopt>`_.
118
- While Guzzle normalizes many of these options across different handlers, there
119
- are times when you need to set custom cURL options. This can be accomplished
120
- by passing an associative array of cURL settings in the **curl** key of the
121
- **config** request option.
122
-
123
- For example, let's say you need to customize the outgoing network interface
124
- used with a client.
125
-
126
- .. code-block:: php
127
-
128
- $client->get('/', [
129
- 'config' => [
130
- 'curl' => [
131
- CURLOPT_INTERFACE => 'xxx.xxx.xxx.xxx'
132
- ]
133
- ]
134
- ]);
135
-
136
- How can I add custom stream context options?
137
- ============================================
138
-
139
- You can pass custom `stream context options <http://www.php.net/manual/en/context.php>`_
140
- using the **stream_context** key of the **config** request option. The
141
- **stream_context** array is an associative array where each key is a PHP
142
- transport, and each value is an associative array of transport options.
143
-
144
- For example, let's say you need to customize the outgoing network interface
145
- used with a client and allow self-signed certificates.
146
-
147
- .. code-block:: php
148
-
149
- $client->get('/', [
150
- 'stream' => true,
151
- 'config' => [
152
- 'stream_context' => [
153
- 'ssl' => [
154
- 'allow_self_signed' => true
155
- ],
156
- 'socket' => [
157
- 'bindto' => 'xxx.xxx.xxx.xxx'
158
- ]
159
- ]
160
- ]
161
- ]);
162
-
163
- Why am I getting an SSL verification error?
164
- ===========================================
165
-
166
- You need to specify the path on disk to the CA bundle used by Guzzle for
167
- verifying the peer certificate. See :ref:`verify-option`.
168
-
169
- What is this Maximum function nesting error?
170
- ============================================
171
-
172
- Maximum function nesting level of '100' reached, aborting
173
-
174
- You could run into this error if you have the XDebug extension installed and
175
- you execute a lot of requests in callbacks. This error message comes
176
- specifically from the XDebug extension. PHP itself does not have a function
177
- nesting limit. Change this setting in your php.ini to increase the limit::
178
-
179
- xdebug.max_nesting_level = 1000
180
-
181
- Why am I getting a 417 error response?
182
- ======================================
183
-
184
- This can occur for a number of reasons, but if you are sending PUT, POST, or
185
- PATCH requests with an ``Expect: 100-Continue`` header, a server that does not
186
- support this header will return a 417 response. You can work around this by
187
- setting the ``expect`` request option to ``false``:
188
-
189
- .. code-block:: php
190
-
191
- $client = new GuzzleHttp\Client();
192
-
193
- // Disable the expect header on a single request
194
- $response = $client->put('/', [], 'the body', [
195
- 'expect' => false
196
- ]);
197
-
198
- // Disable the expect header on all client requests
199
- $client->setDefaultOption('expect', false)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/handlers.rst DELETED
@@ -1,43 +0,0 @@
1
- ================
2
- RingPHP Handlers
3
- ================
4
-
5
- Guzzle uses RingPHP handlers to send HTTP requests over the wire.
6
- RingPHP provides a low-level library that can be used to "glue" Guzzle with
7
- any transport method you choose. By default, Guzzle utilizes cURL and PHP's
8
- stream wrappers to send HTTP requests.
9
-
10
- RingPHP handlers makes it extremely simple to integrate Guzzle with any
11
- HTTP transport. For example, you could quite easily bridge Guzzle and React
12
- to use Guzzle in React's event loop.
13
-
14
- Using a handler
15
- ---------------
16
-
17
- You can change the handler used by a client using the ``handler`` option in the
18
- ``GuzzleHttp\Client`` constructor.
19
-
20
- .. code-block:: php
21
-
22
- use GuzzleHttp\Client;
23
- use GuzzleHttp\Ring\Client\MockHandler;
24
-
25
- // Create a mock handler that always returns a 200 response.
26
- $handler = new MockHandler(['status' => 200]);
27
-
28
- // Configure to client to use the mock handler.
29
- $client = new Client(['handler' => $handler]);
30
-
31
- At its core, handlers are simply PHP callables that accept a request array
32
- and return a ``GuzzleHttp\Ring\Future\FutureArrayInterface``. This future array
33
- can be used just like a normal PHP array, causing it to block, or you can use
34
- the promise interface using the ``then()`` method of the future. Guzzle hooks
35
- up to the RingPHP project using a very simple bridge class
36
- (``GuzzleHttp\RingBridge``).
37
-
38
- Creating a handler
39
- ------------------
40
-
41
- See the `RingPHP <http://ringphp.readthedocs.org>`_ project
42
- documentation for more information on creating custom handlers that can be
43
- used with Guzzle clients.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/http-messages.rst DELETED
@@ -1,483 +0,0 @@
1
- =============================
2
- Request and Response Messages
3
- =============================
4
-
5
- Guzzle is an HTTP client that sends HTTP requests to a server and receives HTTP
6
- responses. Both requests and responses are referred to as messages.
7
-
8
- Headers
9
- =======
10
-
11
- Both request and response messages contain HTTP headers.
12
-
13
- Complex Headers
14
- ---------------
15
-
16
- Some headers contain additional key value pair information. For example, Link
17
- headers contain a link and several key value pairs:
18
-
19
- ::
20
-
21
- <http://foo.com>; rel="thing"; type="image/jpeg"
22
-
23
- Guzzle provides a convenience feature that can be used to parse these types of
24
- headers:
25
-
26
- .. code-block:: php
27
-
28
- use GuzzleHttp\Message\Request;
29
-
30
- $request = new Request('GET', '/', [
31
- 'Link' => '<http:/.../front.jpeg>; rel="front"; type="image/jpeg"'
32
- ]);
33
-
34
- $parsed = Request::parseHeader($request, 'Link');
35
- var_export($parsed);
36
-
37
- Will output:
38
-
39
- .. code-block:: php
40
-
41
- array (
42
- 0 =>
43
- array (
44
- 0 => '<http:/.../front.jpeg>',
45
- 'rel' => 'front',
46
- 'type' => 'image/jpeg',
47
- ),
48
- )
49
-
50
- The result contains a hash of key value pairs. Header values that have no key
51
- (i.e., the link) are indexed numerically while headers parts that form a key
52
- value pair are added as a key value pair.
53
-
54
- See :ref:`headers` for information on how the headers of a request and response
55
- can be accessed and modified.
56
-
57
- Body
58
- ====
59
-
60
- Both request and response messages can contain a body.
61
-
62
- You can check to see if a request or response has a body using the
63
- ``getBody()`` method:
64
-
65
- .. code-block:: php
66
-
67
- $response = GuzzleHttp\get('http://httpbin.org/get');
68
- if ($response->getBody()) {
69
- echo $response->getBody();
70
- // JSON string: { ... }
71
- }
72
-
73
- The body used in request and response objects is a
74
- ``GuzzleHttp\Stream\StreamInterface``. This stream is used for both uploading
75
- data and downloading data. Guzzle will, by default, store the body of a message
76
- in a stream that uses PHP temp streams. When the size of the body exceeds
77
- 2 MB, the stream will automatically switch to storing data on disk rather than
78
- in memory (protecting your application from memory exhaustion).
79
-
80
- You can change the body used in a request or response using the ``setBody()``
81
- method:
82
-
83
- .. code-block:: php
84
-
85
- use GuzzleHttp\Stream\Stream;
86
- $request = $client->createRequest('PUT', 'http://httpbin.org/put');
87
- $request->setBody(Stream::factory('foo'));
88
-
89
- The easiest way to create a body for a request is using the static
90
- ``GuzzleHttp\Stream\Stream::factory()`` method. This method accepts various
91
- inputs like strings, resources returned from ``fopen()``, and other
92
- ``GuzzleHttp\Stream\StreamInterface`` objects.
93
-
94
- The body of a request or response can be cast to a string or you can read and
95
- write bytes off of the stream as needed.
96
-
97
- .. code-block:: php
98
-
99
- use GuzzleHttp\Stream\Stream;
100
- $request = $client->createRequest('PUT', 'http://httpbin.org/put', ['body' => 'testing...']);
101
-
102
- echo $request->getBody()->read(4);
103
- // test
104
- echo $request->getBody()->read(4);
105
- // ing.
106
- echo $request->getBody()->read(1024);
107
- // ..
108
- var_export($request->eof());
109
- // true
110
-
111
- You can find out more about Guzzle stream objects in :doc:`streams`.
112
-
113
- Requests
114
- ========
115
-
116
- Requests are sent from a client to a server. Requests include the method to
117
- be applied to a resource, the identifier of the resource, and the protocol
118
- version to use.
119
-
120
- Clients are used to create request messages. More precisely, clients use
121
- a ``GuzzleHttp\Message\MessageFactoryInterface`` to create request messages.
122
- You create requests with a client using the ``createRequest()`` method.
123
-
124
- .. code-block:: php
125
-
126
- // Create a request but don't send it immediately
127
- $request = $client->createRequest('GET', 'http://httpbin.org/get');
128
-
129
- Request Methods
130
- ---------------
131
-
132
- When creating a request, you are expected to provide the HTTP method you wish
133
- to perform. You can specify any method you'd like, including a custom method
134
- that might not be part of RFC 7231 (like "MOVE").
135
-
136
- .. code-block:: php
137
-
138
- // Create a request using a completely custom HTTP method
139
- $request = $client->createRequest('MOVE', 'http://httpbin.org/move', ['exceptions' => false]);
140
-
141
- echo $request->getMethod();
142
- // MOVE
143
-
144
- $response = $client->send($request);
145
- echo $response->getStatusCode();
146
- // 405
147
-
148
- You can create and send a request using methods on a client that map to the
149
- HTTP method you wish to use.
150
-
151
- :GET: ``$client->get('http://httpbin.org/get', [/** options **/])``
152
- :POST: ``$client->post('http://httpbin.org/post', [/** options **/])``
153
- :HEAD: ``$client->head('http://httpbin.org/get', [/** options **/])``
154
- :PUT: ``$client->put('http://httpbin.org/put', [/** options **/])``
155
- :DELETE: ``$client->delete('http://httpbin.org/delete', [/** options **/])``
156
- :OPTIONS: ``$client->options('http://httpbin.org/get', [/** options **/])``
157
- :PATCH: ``$client->patch('http://httpbin.org/put', [/** options **/])``
158
-
159
- .. code-block:: php
160
-
161
- $response = $client->patch('http://httpbin.org/patch', ['body' => 'content']);
162
-
163
- Request URI
164
- -----------
165
-
166
- The resource you are requesting with an HTTP request is identified by the
167
- path of the request, the query string, and the "Host" header of the request.
168
-
169
- When creating a request, you can provide the entire resource URI as a URL.
170
-
171
- .. code-block:: php
172
-
173
- $response = $client->get('http://httbin.org/get?q=foo');
174
-
175
- Using the above code, you will send a request that uses ``httpbin.org`` as
176
- the Host header, sends the request over port 80, uses ``/get`` as the path,
177
- and sends ``?q=foo`` as the query string. All of this is parsed automatically
178
- from the provided URI.
179
-
180
- Sometimes you don't know what the entire request will be when it is created.
181
- In these cases, you can modify the request as needed before sending it using
182
- the ``createRequest()`` method of the client and methods on the request that
183
- allow you to change it.
184
-
185
- .. code-block:: php
186
-
187
- $request = $client->createRequest('GET', 'http://httbin.org');
188
-
189
- You can change the path of the request using ``setPath()``:
190
-
191
- .. code-block:: php
192
-
193
- $request->setPath('/get');
194
- echo $request->getPath();
195
- // /get
196
- echo $request->getUrl();
197
- // http://httpbin.com/get
198
-
199
- Scheme
200
- ~~~~~~
201
-
202
- The `scheme <http://tools.ietf.org/html/rfc3986#section-3.1>`_ of a request
203
- specifies the protocol to use when sending the request. When using Guzzle, the
204
- scheme can be set to "http" or "https".
205
-
206
- You can change the scheme of the request using the ``setScheme()`` method:
207
-
208
- .. code-block:: php
209
-
210
- $request = $client->createRequest('GET', 'http://httbin.org');
211
- $request->setScheme('https');
212
- echo $request->getScheme();
213
- // https
214
- echo $request->getUrl();
215
- // https://httpbin.com/get
216
-
217
- Port
218
- ~~~~
219
-
220
- No port is necessary when using the "http" or "https" schemes, but you can
221
- override the port using ``setPort()``. If you need to modify the port used with
222
- the specified scheme from the default setting, then you must use the
223
- ``setPort()`` method.
224
-
225
- .. code-block:: php
226
-
227
- $request = $client->createRequest('GET', 'http://httbin.org');
228
- $request->setPort(8080);
229
- echo $request->getPort();
230
- // 8080
231
- echo $request->getUrl();
232
- // https://httpbin.com:8080/get
233
-
234
- // Set the port back to the default value for the scheme
235
- $request->setPort(443);
236
- echo $request->getUrl();
237
- // https://httpbin.com/get
238
-
239
- Query string
240
- ~~~~~~~~~~~~
241
-
242
- You can get the query string of the request using the ``getQuery()`` method.
243
- This method returns a ``GuzzleHttp\Query`` object. A Query object can be
244
- accessed like a PHP array, iterated in a foreach statement like a PHP array,
245
- and cast to a string.
246
-
247
- .. code-block:: php
248
-
249
- $request = $client->createRequest('GET', 'http://httbin.org');
250
- $query = $request->getQuery();
251
- $query['foo'] = 'bar';
252
- $query['baz'] = 'bam';
253
- $query['bam'] = ['test' => 'abc'];
254
-
255
- echo $request->getQuery();
256
- // foo=bar&baz=bam&bam%5Btest%5D=abc
257
-
258
- echo $request->getQuery()['foo'];
259
- // bar
260
- echo $request->getQuery()->get('foo');
261
- // bar
262
- echo $request->getQuery()->get('foo');
263
- // bar
264
-
265
- var_export($request->getQuery()['bam']);
266
- // array('test' => 'abc')
267
-
268
- foreach ($query as $key => $value) {
269
- var_export($value);
270
- }
271
-
272
- echo $request->getUrl();
273
- // https://httpbin.com/get?foo=bar&baz=bam&bam%5Btest%5D=abc
274
-
275
- Query Aggregators
276
- ^^^^^^^^^^^^^^^^^
277
-
278
- Query objects can store scalar values or arrays of values. When an array of
279
- values is added to a query object, the query object uses a query aggregator to
280
- convert the complex structure into a string. Query objects will use
281
- `PHP style query strings <http://www.php.net/http_build_query>`_ when complex
282
- query string parameters are converted to a string. You can customize how
283
- complex query string parameters are aggregated using the ``setAggregator()``
284
- method of a query string object.
285
-
286
- .. code-block:: php
287
-
288
- $query->setAggregator($query::duplicateAggregator());
289
-
290
- In the above example, we've changed the query object to use the
291
- "duplicateAggregator". This aggregator will allow duplicate entries to appear
292
- in a query string rather than appending "[n]" to each value. So if you had a
293
- query string with ``['a' => ['b', 'c']]``, the duplicate aggregator would
294
- convert this to "a=b&a=c" while the default aggregator would convert this to
295
- "a[0]=b&a[1]=c" (with urlencoded brackets).
296
-
297
- The ``setAggregator()`` method accepts a ``callable`` which is used to convert
298
- a deeply nested array of query string variables into a flattened array of key
299
- value pairs. The callable accepts an array of query data and returns a
300
- flattened array of key value pairs where each value is an array of strings.
301
- You can use the ``GuzzleHttp\Query::walkQuery()`` static function to easily
302
- create custom query aggregators.
303
-
304
- Host
305
- ~~~~
306
-
307
- You can change the host header of the request in a predictable way using the
308
- ``setHost()`` method of a request:
309
-
310
- .. code-block:: php
311
-
312
- $request->setHost('www.google.com');
313
- echo $request->getHost();
314
- // www.google.com
315
- echo $request->getUrl();
316
- // https://www.google.com/get?foo=bar&baz=bam
317
-
318
- .. note::
319
-
320
- The Host header can also be changed by modifying the Host header of a
321
- request directly, but modifying the Host header directly could result in
322
- sending a request to a different Host than what is specified in the Host
323
- header (sometimes this is actually the desired behavior).
324
-
325
- Resource
326
- ~~~~~~~~
327
-
328
- You can use the ``getResource()`` method of a request to return the path and
329
- query string of a request in a single string.
330
-
331
- .. code-block:: php
332
-
333
- $request = $client->createRequest('GET', 'http://httpbin.org/get?baz=bar');
334
- echo $request->getResource();
335
- // /get?baz=bar
336
-
337
- Request Config
338
- --------------
339
-
340
- Request messages contain a configuration collection that can be used by
341
- event listeners and HTTP handlers to modify how a request behaves or is
342
- transferred over the wire. For example, many of the request options that are
343
- specified when creating a request are actually set as config options that are
344
- only acted upon by handlers and listeners when the request is sent.
345
-
346
- You can get access to the request's config object using the ``getConfig()``
347
- method of a request.
348
-
349
- .. code-block:: php
350
-
351
- $request = $client->createRequest('GET', '/');
352
- $config = $request->getConfig();
353
-
354
- The config object is a ``GuzzleHttp\Collection`` object that acts like
355
- an associative array. You can grab values from the collection using array like
356
- access. You can also modify and remove values using array like access.
357
-
358
- .. code-block:: php
359
-
360
- $config['foo'] = 'bar';
361
- echo $config['foo'];
362
- // bar
363
-
364
- var_export(isset($config['foo']));
365
- // true
366
-
367
- unset($config['foo']);
368
- var_export(isset($config['foo']));
369
- // false
370
-
371
- var_export($config['foo']);
372
- // NULL
373
-
374
- HTTP handlers and event listeners can expose additional customization options
375
- through request config settings. For example, in order to specify custom cURL
376
- options to the cURL handler, you need to specify an associative array in the
377
- ``curl`` ``config`` request option.
378
-
379
- .. code-block:: php
380
-
381
- $client->get('/', [
382
- 'config' => [
383
- 'curl' => [
384
- CURLOPT_HTTPAUTH => CURLAUTH_NTLM,
385
- CURLOPT_USERPWD => 'username:password'
386
- ]
387
- ]
388
- ]);
389
-
390
- Consult the HTTP handlers and event listeners you are using to see if they
391
- allow customization through request configuration options.
392
-
393
- Event Emitter
394
- -------------
395
-
396
- Request objects implement ``GuzzleHttp\Event\HasEmitterInterface``, so they
397
- have a method called ``getEmitter()`` that can be used to get an event emitter
398
- used by the request. Any listener or subscriber attached to a request will only
399
- be triggered for the lifecycle events of a specific request. Conversely, adding
400
- an event listener or subscriber to a client will listen to all lifecycle events
401
- of all requests created by the client.
402
-
403
- See :doc:`events` for more information.
404
-
405
- Responses
406
- =========
407
-
408
- Responses are the HTTP messages a client receives from a server after sending
409
- an HTTP request message.
410
-
411
- Start-Line
412
- ----------
413
-
414
- The start-line of a response contains the protocol and protocol version,
415
- status code, and reason phrase.
416
-
417
- .. code-block:: php
418
-
419
- $response = GuzzleHttp\get('http://httpbin.org/get');
420
- echo $response->getStatusCode();
421
- // 200
422
- echo $response->getReasonPhrase();
423
- // OK
424
- echo $response->getProtocolVersion();
425
- // 1.1
426
-
427
- Body
428
- ----
429
-
430
- As described earlier, you can get the body of a response using the
431
- ``getBody()`` method.
432
-
433
- .. code-block:: php
434
-
435
- if ($body = $response->getBody()) {
436
- echo $body;
437
- // Cast to a string: { ... }
438
- $body->seek(0);
439
- // Rewind the body
440
- $body->read(1024);
441
- // Read bytes of the body
442
- }
443
-
444
- When working with JSON responses, you can use the ``json()`` method of a
445
- response:
446
-
447
- .. code-block:: php
448
-
449
- $json = $response->json();
450
-
451
- .. note::
452
-
453
- Guzzle uses the ``json_decode()`` method of PHP and uses arrays rather than
454
- ``stdClass`` objects for objects.
455
-
456
- You can use the ``xml()`` method when working with XML data.
457
-
458
- .. code-block:: php
459
-
460
- $xml = $response->xml();
461
-
462
- .. note::
463
-
464
- Guzzle uses the ``SimpleXMLElement`` objects when converting response
465
- bodies to XML.
466
-
467
- Effective URL
468
- -------------
469
-
470
- The URL that was ultimately accessed that returned a response can be accessed
471
- using the ``getEffectiveUrl()`` method of a response. This method will return
472
- the URL of a request or the URL of the last redirected URL if any redirects
473
- occurred while transferring a request.
474
-
475
- .. code-block:: php
476
-
477
- $response = GuzzleHttp\get('http://httpbin.org/get');
478
- echo $response->getEffectiveUrl();
479
- // http://httpbin.org/get
480
-
481
- $response = GuzzleHttp\get('http://httpbin.org/redirect-to?url=http://www.google.com');
482
- echo $response->getEffectiveUrl();
483
- // http://www.google.com
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/index.rst DELETED
@@ -1,98 +0,0 @@
1
- .. title:: Guzzle | PHP HTTP client and framework for consuming RESTful web services
2
-
3
- ======
4
- Guzzle
5
- ======
6
-
7
- Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and
8
- trivial to integrate with web services.
9
-
10
- - Manages things like persistent connections, represents query strings as
11
- collections, simplifies sending streaming POST requests with fields and
12
- files, and abstracts away the underlying HTTP transport layer.
13
- - Can send both synchronous and asynchronous requests using the same interface
14
- without requiring a dependency on a specific event loop.
15
- - Pluggable HTTP handlers allows Guzzle to integrate with any method you choose
16
- for sending HTTP requests over the wire (e.g., cURL, sockets, PHP's stream
17
- wrapper, non-blocking event loops like `React <http://reactphp.org/>`_, etc.).
18
- - Guzzle makes it so that you no longer need to fool around with cURL options,
19
- stream contexts, or sockets.
20
-
21
- .. code-block:: php
22
-
23
- $client = new GuzzleHttp\Client();
24
- $response = $client->get('http://guzzlephp.org');
25
- $res = $client->get('https://api.github.com/user', ['auth' => ['user', 'pass']]);
26
- echo $res->getStatusCode();
27
- // "200"
28
- echo $res->getHeader('content-type');
29
- // 'application/json; charset=utf8'
30
- echo $res->getBody();
31
- // {"type":"User"...'
32
- var_export($res->json());
33
- // Outputs the JSON decoded data
34
-
35
- // Send an asynchronous request.
36
- $req = $client->createRequest('GET', 'http://httpbin.org', ['future' => true]);
37
- $client->send($req)->then(function ($response) {
38
- echo 'I completed! ' . $response;
39
- });
40
-
41
- User guide
42
- ----------
43
-
44
- .. toctree::
45
- :maxdepth: 2
46
-
47
- overview
48
- quickstart
49
- clients
50
- http-messages
51
- events
52
- streams
53
- handlers
54
- testing
55
- faq
56
-
57
- HTTP Components
58
- ---------------
59
-
60
- There are a number of optional libraries you can use along with Guzzle's HTTP
61
- layer to add capabilities to the client.
62
-
63
- `Log Subscriber <https://github.com/guzzle/log-subscriber>`_
64
- Logs HTTP requests and responses sent over the wire using customizable
65
- log message templates.
66
-
67
- `OAuth Subscriber <https://github.com/guzzle/oauth-subscriber>`_
68
- Signs requests using OAuth 1.0.
69
-
70
- `Cache Subscriber <https://github.com/guzzle/cache-subscriber>`_
71
- Implements a private transparent proxy cache that caches HTTP responses.
72
-
73
- `Retry Subscriber <https://github.com/guzzle/retry-subscriber>`_
74
- Retries failed requests using customizable retry strategies (e.g., retry
75
- based on response status code, cURL error codes, etc.)
76
-
77
- `Message Integrity Subscriber <https://github.com/guzzle/message-integrity-subscriber>`_
78
- Verifies the message integrity of HTTP responses using customizable
79
- validators. This plugin can be used, for example, to verify the Content-MD5
80
- headers of responses.
81
-
82
- Service Description Commands
83
- ----------------------------
84
-
85
- You can use the **Guzzle Command** library to encapsulate interaction with a
86
- web service using command objects. Building on top of Guzzle's command
87
- abstraction allows you to easily implement things like service description that
88
- can be used to serialize requests and parse responses using a meta-description
89
- of a web service.
90
-
91
- `Guzzle Command <https://github.com/guzzle/command>`_
92
- Provides the foundational elements used to build high-level, command based,
93
- web service clients with Guzzle.
94
-
95
- `Guzzle Services <https://github.com/guzzle/guzzle-services>`_
96
- Provides an implementation of the *Guzzle Command* library that uses
97
- Guzzle service descriptions to describe web services, serialize requests,
98
- and parse responses into easy to use model structures.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/overview.rst DELETED
@@ -1,150 +0,0 @@
1
- ========
2
- Overview
3
- ========
4
-
5
- Requirements
6
- ============
7
-
8
- #. PHP 5.4.0
9
- #. To use the PHP stream handler, ``allow_url_fopen`` must be enabled in your
10
- system's php.ini.
11
- #. To use the cURL handler, you must have a recent version of cURL >= 7.16.2
12
- compiled with OpenSSL and zlib.
13
-
14
- .. note::
15
-
16
- Guzzle no longer requires cURL in order to send HTTP requests. Guzzle will
17
- use the PHP stream wrapper to send HTTP requests if cURL is not installed.
18
- Alternatively, you can provide your own HTTP handler used to send requests.
19
-
20
- .. _installation:
21
-
22
- Installation
23
- ============
24
-
25
- The recommended way to install Guzzle is with `Composer <http://getcomposer.org>`_. Composer is a dependency
26
- management tool for PHP that allows you to declare the dependencies your project needs and installs them into your
27
- project.
28
-
29
- .. code-block:: bash
30
-
31
- # Install Composer
32
- curl -sS https://getcomposer.org/installer | php
33
-
34
- You can add Guzzle as a dependency using the composer.phar CLI:
35
-
36
- .. code-block:: bash
37
-
38
- php composer.phar require guzzlehttp/guzzle:~5.0
39
-
40
- Alternatively, you can specify Guzzle as a dependency in your project's
41
- existing composer.json file:
42
-
43
- .. code-block:: js
44
-
45
- {
46
- "require": {
47
- "guzzlehttp/guzzle": "~5.0"
48
- }
49
- }
50
-
51
- After installing, you need to require Composer's autoloader:
52
-
53
- .. code-block:: php
54
-
55
- require 'vendor/autoload.php';
56
-
57
- You can find out more on how to install Composer, configure autoloading, and
58
- other best-practices for defining dependencies at `getcomposer.org <http://getcomposer.org>`_.
59
-
60
- Bleeding edge
61
- -------------
62
-
63
- During your development, you can keep up with the latest changes on the master
64
- branch by setting the version requirement for Guzzle to ``~5.0@dev``.
65
-
66
- .. code-block:: js
67
-
68
- {
69
- "require": {
70
- "guzzlehttp/guzzle": "~5.0@dev"
71
- }
72
- }
73
-
74
- License
75
- =======
76
-
77
- Licensed using the `MIT license <http://opensource.org/licenses/MIT>`_.
78
-
79
- Copyright (c) 2014 Michael Dowling <https://github.com/mtdowling>
80
-
81
- Permission is hereby granted, free of charge, to any person obtaining a copy
82
- of this software and associated documentation files (the "Software"), to deal
83
- in the Software without restriction, including without limitation the rights
84
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
85
- copies of the Software, and to permit persons to whom the Software is
86
- furnished to do so, subject to the following conditions:
87
-
88
- The above copyright notice and this permission notice shall be included in
89
- all copies or substantial portions of the Software.
90
-
91
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
92
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
93
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
94
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
95
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
96
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
97
- THE SOFTWARE.
98
-
99
- Contributing
100
- ============
101
-
102
- Guidelines
103
- ----------
104
-
105
- 1. Guzzle follows PSR-0, PSR-1, and PSR-2.
106
- 2. Guzzle is meant to be lean and fast with very few dependencies.
107
- 3. Guzzle has a minimum PHP version requirement of PHP 5.4. Pull requests must
108
- not require a PHP version greater than PHP 5.4.
109
- 4. All pull requests must include unit tests to ensure the change works as
110
- expected and to prevent regressions.
111
-
112
- Running the tests
113
- -----------------
114
-
115
- In order to contribute, you'll need to checkout the source from GitHub and
116
- install Guzzle's dependencies using Composer:
117
-
118
- .. code-block:: bash
119
-
120
- git clone https://github.com/guzzle/guzzle.git
121
- cd guzzle && curl -s http://getcomposer.org/installer | php && ./composer.phar install --dev
122
-
123
- Guzzle is unit tested with PHPUnit. Run the tests using the vendored PHPUnit
124
- binary:
125
-
126
- .. code-block:: bash
127
-
128
- vendor/bin/phpunit
129
-
130
- .. note::
131
-
132
- You'll need to install node.js v0.5.0 or newer in order to perform
133
- integration tests on Guzzle's HTTP handlers.
134
-
135
- Reporting a security vulnerability
136
- ==================================
137
-
138
- We want to ensure that Guzzle is a secure HTTP client library for everyone. If
139
- you've discovered a security vulnerability in Guzzle, we appreciate your help
140
- in disclosing it to us in a `responsible manner <http://en.wikipedia.org/wiki/Responsible_disclosure>`_.
141
-
142
- Publicly disclosing a vulnerability can put the entire community at risk. If
143
- you've discovered a security concern, please email us at
144
- security@guzzlephp.org. We'll work with you to make sure that we understand the
145
- scope of the issue, and that we fully address your concern. We consider
146
- correspondence sent to security@guzzlephp.org our highest priority, and work to
147
- address any issues that arise as quickly as possible.
148
-
149
- After a security vulnerability has been corrected, a security hotfix release will
150
- be deployed as soon as possible.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/quickstart.rst DELETED
@@ -1,448 +0,0 @@
1
- ==========
2
- Quickstart
3
- ==========
4
-
5
- This page provides a quick introduction to Guzzle and introductory examples.
6
- If you have not already installed, Guzzle, head over to the :ref:`installation`
7
- page.
8
-
9
- Make a Request
10
- ==============
11
-
12
- You can send requests with Guzzle using a ``GuzzleHttp\ClientInterface``
13
- object.
14
-
15
- Creating a Client
16
- -----------------
17
-
18
- The procedural API is simple but not very testable; it's best left for quick
19
- prototyping. If you want to use Guzzle in a more flexible and testable way,
20
- then you'll need to use a ``GuzzleHttp\ClientInterface`` object.
21
-
22
- .. code-block:: php
23
-
24
- use GuzzleHttp\Client;
25
-
26
- $client = new Client();
27
- $response = $client->get('http://httpbin.org/get');
28
-
29
- // You can use the same methods you saw in the procedural API
30
- $response = $client->delete('http://httpbin.org/delete');
31
- $response = $client->head('http://httpbin.org/get');
32
- $response = $client->options('http://httpbin.org/get');
33
- $response = $client->patch('http://httpbin.org/patch');
34
- $response = $client->post('http://httpbin.org/post');
35
- $response = $client->put('http://httpbin.org/put');
36
-
37
- You can create a request with a client and then send the request with the
38
- client when you're ready.
39
-
40
- .. code-block:: php
41
-
42
- $request = $client->createRequest('GET', 'http://www.foo.com');
43
- $response = $client->send($request);
44
-
45
- Client objects provide a great deal of flexibility in how request are
46
- transferred including default request options, subscribers that are attached
47
- to each request, and a base URL that allows you to send requests with relative
48
- URLs. You can find out all about clients in the :doc:`clients` page of the
49
- documentation.
50
-
51
- Using Responses
52
- ===============
53
-
54
- In the previous examples, we retrieved a ``$response`` variable. This value is
55
- actually a ``GuzzleHttp\Message\ResponseInterface`` object and contains lots
56
- of helpful information.
57
-
58
- You can get the status code and reason phrase of the response.
59
-
60
- .. code-block:: php
61
-
62
- $code = $response->getStatusCode();
63
- // 200
64
-
65
- $reason = $response->getReasonPhrase();
66
- // OK
67
-
68
- By providing the ``future`` request option to a request, you can send requests
69
- asynchronously using the promise interface of a future response.
70
-
71
- .. code-block:: php
72
-
73
- $client->get('http://httpbin.org', ['future' => true])
74
- ->then(function ($response) {
75
- echo $response->getStatusCode();
76
- });
77
-
78
- Response Body
79
- -------------
80
-
81
- The body of a response can be retrieved and cast to a string.
82
-
83
- .. code-block:: php
84
-
85
- $body = $response->getBody();
86
- echo $body;
87
- // { "some_json_data" ...}
88
-
89
- You can also read read bytes from body of a response like a stream.
90
-
91
- .. code-block:: php
92
-
93
- $body = $response->getBody();
94
-
95
- while (!$body->eof()) {
96
- echo $body->read(1024);
97
- }
98
-
99
- JSON Responses
100
- ~~~~~~~~~~~~~~
101
-
102
- You can more easily work with JSON responses using the ``json()`` method of a
103
- response.
104
-
105
- .. code-block:: php
106
-
107
- $response = $client->get('http://httpbin.org/get');
108
- $json = $response->json();
109
- var_dump($json[0]['origin']);
110
-
111
- Guzzle internally uses PHP's ``json_decode()`` function to parse responses. If
112
- Guzzle is unable to parse the JSON response body, then a
113
- ``GuzzleHttp\Exception\ParseException`` is thrown.
114
-
115
- XML Responses
116
- ~~~~~~~~~~~~~
117
-
118
- You can use a response's ``xml()`` method to more easily work with responses
119
- that contain XML data.
120
-
121
- .. code-block:: php
122
-
123
- $response = $client->get('https://github.com/mtdowling.atom');
124
- $xml = $response->xml();
125
- echo $xml->id;
126
- // tag:github.com,2008:/mtdowling
127
-
128
- Guzzle internally uses a ``SimpleXMLElement`` object to parse responses. If
129
- Guzzle is unable to parse the XML response body, then a
130
- ``GuzzleHttp\Exception\ParseException`` is thrown.
131
-
132
- Query String Parameters
133
- =======================
134
-
135
- Sending query string parameters with a request is easy. You can set query
136
- string parameters in the request's URL.
137
-
138
- .. code-block:: php
139
-
140
- $response = $client->get('http://httpbin.org?foo=bar');
141
-
142
- You can also specify the query string parameters using the ``query`` request
143
- option.
144
-
145
- .. code-block:: php
146
-
147
- $client->get('http://httpbin.org', [
148
- 'query' => ['foo' => 'bar']
149
- ]);
150
-
151
- And finally, you can build up the query string of a request as needed by
152
- calling the ``getQuery()`` method of a request and modifying the request's
153
- ``GuzzleHttp\Query`` object as needed.
154
-
155
- .. code-block:: php
156
-
157
- $request = $client->createRequest('GET', 'http://httpbin.org');
158
- $query = $request->getQuery();
159
- $query->set('foo', 'bar');
160
-
161
- // You can use the query string object like an array
162
- $query['baz'] = 'bam';
163
-
164
- // The query object can be cast to a string
165
- echo $query;
166
- // foo=bar&baz=bam
167
-
168
- // Setting a value to false or null will cause the "=" sign to be omitted
169
- $query['empty'] = null;
170
- echo $query;
171
- // foo=bar&baz=bam&empty
172
-
173
- // Use an empty string to include the "=" sign with an empty value
174
- $query['empty'] = '';
175
- echo $query;
176
- // foo=bar&baz=bam&empty=
177
-
178
- .. _headers:
179
-
180
- Request and Response Headers
181
- ----------------------------
182
-
183
- You can specify request headers when sending or creating requests with a
184
- client. In the following example, we send the ``X-Foo-Header`` with a value of
185
- ``value`` by setting the ``headers`` request option.
186
-
187
- .. code-block:: php
188
-
189
- $response = $client->get('http://httpbin.org/get', [
190
- 'headers' => ['X-Foo-Header' => 'value']
191
- ]);
192
-
193
- You can view the headers of a response using header specific methods of a
194
- response class. Headers work exactly the same way for request and response
195
- object.
196
-
197
- You can retrieve a header from a request or response using the ``getHeader()``
198
- method of the object. This method is case-insensitive and by default will
199
- return a string containing the header field value.
200
-
201
- .. code-block:: php
202
-
203
- $response = $client->get('http://www.yahoo.com');
204
- $length = $response->getHeader('Content-Length');
205
-
206
- Header fields that contain multiple values can be retrieved as a string or as
207
- an array. Retrieving the field values as a string will naively concatenate all
208
- of the header values together with a comma. Because not all header fields
209
- should be represented this way (e.g., ``Set-Cookie``), you can pass an optional
210
- flag to the ``getHeader()`` method to retrieve the header values as an array.
211
-
212
- .. code-block:: php
213
-
214
- $values = $response->getHeader('Set-Cookie', true);
215
- foreach ($values as $value) {
216
- echo $value;
217
- }
218
-
219
- You can test if a request or response has a specific header using the
220
- ``hasHeader()`` method. This method accepts a case-insensitive string and
221
- returns true if the header is present or false if it is not.
222
-
223
- You can retrieve all of the headers of a message using the ``getHeaders()``
224
- method of a request or response. The return value is an associative array where
225
- the keys represent the header name as it will be sent over the wire, and each
226
- value is an array of strings associated with the header.
227
-
228
- .. code-block:: php
229
-
230
- $headers = $response->getHeaders();
231
- foreach ($message->getHeaders() as $name => $values) {
232
- echo $name . ": " . implode(", ", $values);
233
- }
234
-
235
- Modifying headers
236
- -----------------
237
-
238
- The headers of a message can be modified using the ``setHeader()``,
239
- ``addHeader()``, ``setHeaders()``, and ``removeHeader()`` methods of a request
240
- or response object.
241
-
242
- .. code-block:: php
243
-
244
- $request = $client->createRequest('GET', 'http://httpbin.org/get');
245
-
246
- // Set a single value for a header
247
- $request->setHeader('User-Agent', 'Testing!');
248
-
249
- // Set multiple values for a header in one call
250
- $request->setHeader('X-Foo', ['Baz', 'Bar']);
251
-
252
- // Add a header to the message
253
- $request->addHeader('X-Foo', 'Bam');
254
-
255
- echo $request->getHeader('X-Foo');
256
- // Baz, Bar, Bam
257
-
258
- // Remove a specific header using a case-insensitive name
259
- $request->removeHeader('x-foo');
260
- echo $request->getHeader('X-Foo');
261
- // Echoes an empty string: ''
262
-
263
- Uploading Data
264
- ==============
265
-
266
- Guzzle provides several methods of uploading data.
267
-
268
- You can send requests that contain a stream of data by passing a string,
269
- resource returned from ``fopen``, or a ``GuzzleHttp\Stream\StreamInterface``
270
- object to the ``body`` request option.
271
-
272
- .. code-block:: php
273
-
274
- $r = $client->post('http://httpbin.org/post', ['body' => 'raw data']);
275
-
276
- You can easily upload JSON data using the ``json`` request option.
277
-
278
- .. code-block:: php
279
-
280
- $r = $client->put('http://httpbin.org/put', ['json' => ['foo' => 'bar']]);
281
-
282
- POST Requests
283
- -------------
284
-
285
- In addition to specifying the raw data of a request using the ``body`` request
286
- option, Guzzle provides helpful abstractions over sending POST data.
287
-
288
- Sending POST Fields
289
- ~~~~~~~~~~~~~~~~~~~
290
-
291
- Sending ``application/x-www-form-urlencoded`` POST requests requires that you
292
- specify the body of a POST request as an array.
293
-
294
- .. code-block:: php
295
-
296
- $response = $client->post('http://httpbin.org/post', [
297
- 'body' => [
298
- 'field_name' => 'abc',
299
- 'other_field' => '123'
300
- ]
301
- ]);
302
-
303
- You can also build up POST requests before sending them.
304
-
305
- .. code-block:: php
306
-
307
- $request = $client->createRequest('POST', 'http://httpbin.org/post');
308
- $postBody = $request->getBody();
309
-
310
- // $postBody is an instance of GuzzleHttp\Post\PostBodyInterface
311
- $postBody->setField('foo', 'bar');
312
- echo $postBody->getField('foo');
313
- // 'bar'
314
-
315
- echo json_encode($postBody->getFields());
316
- // {"foo": "bar"}
317
-
318
- // Send the POST request
319
- $response = $client->send($request);
320
-
321
- Sending POST Files
322
- ~~~~~~~~~~~~~~~~~~
323
-
324
- Sending ``multipart/form-data`` POST requests (POST requests that contain
325
- files) is the same as sending ``application/x-www-form-urlencoded``, except
326
- some of the array values of the POST fields map to PHP ``fopen`` resources, or
327
- ``GuzzleHttp\Stream\StreamInterface``, or
328
- ``GuzzleHttp\Post\PostFileInterface`` objects.
329
-
330
- .. code-block:: php
331
-
332
- use GuzzleHttp\Post\PostFile;
333
-
334
- $response = $client->post('http://httpbin.org/post', [
335
- 'body' => [
336
- 'field_name' => 'abc',
337
- 'file_filed' => fopen('/path/to/file', 'r'),
338
- 'other_file' => new PostFile('other_file', 'this is the content')
339
- ]
340
- ]);
341
-
342
- Just like when sending POST fields, you can also build up POST requests with
343
- files before sending them.
344
-
345
- .. code-block:: php
346
-
347
- use GuzzleHttp\Post\PostFile;
348
-
349
- $request = $client->createRequest('POST', 'http://httpbin.org/post');
350
- $postBody = $request->getBody();
351
- $postBody->setField('foo', 'bar');
352
- $postBody->addFile(new PostFile('test', fopen('/path/to/file', 'r')));
353
- $response = $client->send($request);
354
-
355
- Cookies
356
- =======
357
-
358
- Guzzle can maintain a cookie session for you if instructed using the
359
- ``cookies`` request option.
360
-
361
- - Set to ``true`` to use a shared cookie session associated with the client.
362
- - Pass an associative array containing cookies to send in the request and start
363
- a new cookie session.
364
- - Set to a ``GuzzleHttp\Subscriber\CookieJar\CookieJarInterface`` object to use
365
- an existing cookie jar.
366
-
367
- Redirects
368
- =========
369
-
370
- Guzzle will automatically follow redirects unless you tell it not to. You can
371
- customize the redirect behavior using the ``allow_redirects`` request option.
372
-
373
- - Set to true to enable normal redirects with a maximum number of 5 redirects.
374
- This is the default setting.
375
- - Set to false to disable redirects.
376
- - Pass an associative array containing the 'max' key to specify the maximum
377
- number of redirects and optionally provide a 'strict' key value to specify
378
- whether or not to use strict RFC compliant redirects (meaning redirect POST
379
- requests with POST requests vs. doing what most browsers do which is
380
- redirect POST requests with GET requests).
381
-
382
- .. code-block:: php
383
-
384
- $response = $client->get('http://github.com');
385
- echo $response->getStatusCode();
386
- // 200
387
- echo $response->getEffectiveUrl();
388
- // 'https://github.com/'
389
-
390
- The following example shows that redirects can be disabled.
391
-
392
- .. code-block:: php
393
-
394
- $response = $client->get('http://github.com', ['allow_redirects' => false]);
395
- echo $response->getStatusCode();
396
- // 301
397
- echo $response->getEffectiveUrl();
398
- // 'http://github.com/'
399
-
400
- Exceptions
401
- ==========
402
-
403
- Guzzle throws exceptions for errors that occur during a transfer.
404
-
405
- - In the event of a networking error (connection timeout, DNS errors, etc.),
406
- a ``GuzzleHttp\Exception\RequestException`` is thrown. This exception
407
- extends from ``GuzzleHttp\Exception\TransferException``. Catching this
408
- exception will catch any exception that can be thrown while transferring
409
- (non-parallel) requests.
410
-
411
- .. code-block:: php
412
-
413
- use GuzzleHttp\Exception\RequestException;
414
-
415
- try {
416
- $client->get('https://github.com/_abc_123_404');
417
- } catch (RequestException $e) {
418
- echo $e->getRequest();
419
- if ($e->hasResponse()) {
420
- echo $e->getResponse();
421
- }
422
- }
423
-
424
- - A ``GuzzleHttp\Exception\ClientException`` is thrown for 400
425
- level errors if the ``exceptions`` request option is set to true. This
426
- exception extends from ``GuzzleHttp\Exception\BadResponseException`` and
427
- ``GuzzleHttp\Exception\BadResponseException`` extends from
428
- ``GuzzleHttp\Exception\RequestException``.
429
-
430
- .. code-block:: php
431
-
432
- use GuzzleHttp\Exception\ClientException;
433
-
434
- try {
435
- $client->get('https://github.com/_abc_123_404');
436
- } catch (ClientException $e) {
437
- echo $e->getRequest();
438
- echo $e->getResponse();
439
- }
440
-
441
- - A ``GuzzleHttp\Exception\ServerException`` is thrown for 500 level
442
- errors if the ``exceptions`` request option is set to true. This
443
- exception extends from ``GuzzleHttp\Exception\BadResponseException``.
444
- - A ``GuzzleHttp\Exception\TooManyRedirectsException`` is thrown when too
445
- many redirects are followed. This exception extends from ``GuzzleHttp\Exception\RequestException``.
446
-
447
- All of the above exceptions extend from
448
- ``GuzzleHttp\Exception\TransferException``.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/requirements.txt DELETED
@@ -1,2 +0,0 @@
1
- Sphinx>=1.2b1
2
- guzzle_sphinx_theme>=0.6.0
 
 
backend/vendor/guzzlehttp/guzzle/docs/streams.rst DELETED
@@ -1,213 +0,0 @@
1
- =======
2
- Streams
3
- =======
4
-
5
- Guzzle uses stream objects to represent request and response message bodies.
6
- These stream objects allow you to work with various types of data all using a
7
- common interface.
8
-
9
- HTTP messages consist of a start-line, headers, and a body. The body of an HTTP
10
- message can be very small or extremely large. Attempting to represent the body
11
- of a message as a string can easily consume more memory than intended because
12
- the body must be stored completely in memory. Attempting to store the body of a
13
- request or response in memory would preclude the use of that implementation from
14
- being able to work with large message bodies. The StreamInterface is used in
15
- order to hide the implementation details of where a stream of data is read from
16
- or written to.
17
-
18
- Guzzle's StreamInterface exposes several methods that enable streams to be read
19
- from, written to, and traversed effectively.
20
-
21
- Streams expose their capabilities using three methods: ``isReadable()``,
22
- ``isWritable()``, and ``isSeekable()``. These methods can be used by stream
23
- collaborators to determine if a stream is capable of their requirements.
24
-
25
- Each stream instance has various capabilities: they can be read-only,
26
- write-only, read-write, allow arbitrary random access (seeking forwards or
27
- backwards to any location), or only allow sequential access (for example in the
28
- case of a socket or pipe).
29
-
30
- Creating Streams
31
- ================
32
-
33
- The best way to create a stream is using the static factory method,
34
- ``GuzzleHttp\Stream\Stream::factory()``. This factory accepts strings,
35
- resources returned from ``fopen()``, an object that implements
36
- ``__toString()``, and an object that implements
37
- ``GuzzleHttp\Stream\StreamInterface``.
38
-
39
- .. code-block:: php
40
-
41
- use GuzzleHttp\Stream\Stream;
42
-
43
- $stream = Stream::factory('string data');
44
- echo $stream;
45
- // string data
46
- echo $stream->read(3);
47
- // str
48
- echo $stream->getContents();
49
- // ing data
50
- var_export($stream->eof());
51
- // true
52
- var_export($stream->tell());
53
- // 11
54
-
55
- Metadata
56
- ========
57
-
58
- Guzzle streams expose stream metadata through the ``getMetadata()`` method.
59
- This method provides the data you would retrieve when calling PHP's
60
- `stream_get_meta_data() function <http://php.net/manual/en/function.stream-get-meta-data.php>`_,
61
- and can optionally expose other custom data.
62
-
63
- .. code-block:: php
64
-
65
- use GuzzleHttp\Stream\Stream;
66
-
67
- $resource = fopen('/path/to/file', 'r');
68
- $stream = Stream::factory($resource);
69
- echo $stream->getMetadata('uri');
70
- // /path/to/file
71
- var_export($stream->isReadable());
72
- // true
73
- var_export($stream->isWritable());
74
- // false
75
- var_export($stream->isSeekable());
76
- // true
77
-
78
- Stream Decorators
79
- =================
80
-
81
- With the small and focused interface, add custom functionality to streams is
82
- very simple with stream decorators. Guzzle provides several built-in decorators
83
- that provide additional stream functionality.
84
-
85
- CachingStream
86
- -------------
87
-
88
- The CachingStream is used to allow seeking over previously read bytes on
89
- non-seekable streams. This can be useful when transferring a non-seekable
90
- entity body fails due to needing to rewind the stream (for example, resulting
91
- from a redirect). Data that is read from the remote stream will be buffered in
92
- a PHP temp stream so that previously read bytes are cached first in memory,
93
- then on disk.
94
-
95
- .. code-block:: php
96
-
97
- use GuzzleHttp\Stream\Stream;
98
- use GuzzleHttp\Stream\CachingStream;
99
-
100
- $original = Stream::factory(fopen('http://www.google.com', 'r'));
101
- $stream = new CachingStream($original);
102
-
103
- $stream->read(1024);
104
- echo $stream->tell();
105
- // 1024
106
-
107
- $stream->seek(0);
108
- echo $stream->tell();
109
- // 0
110
-
111
- LimitStream
112
- -----------
113
-
114
- LimitStream can be used to read a subset or slice of an existing stream object.
115
- This can be useful for breaking a large file into smaller pieces to be sent in
116
- chunks (e.g. Amazon S3's multipart upload API).
117
-
118
- .. code-block:: php
119
-
120
- use GuzzleHttp\Stream\Stream;
121
- use GuzzleHttp\Stream\LimitStream;
122
-
123
- $original = Stream::factory(fopen('/tmp/test.txt', 'r+'));
124
- echo $original->getSize();
125
- // >>> 1048576
126
-
127
- // Limit the size of the body to 1024 bytes and start reading from byte 2048
128
- $stream = new LimitStream($original, 1024, 2048);
129
- echo $stream->getSize();
130
- // >>> 1024
131
- echo $stream->tell();
132
- // >>> 0
133
-
134
- NoSeekStream
135
- ------------
136
-
137
- NoSeekStream wraps a stream and does not allow seeking.
138
-
139
- .. code-block:: php
140
-
141
- use GuzzleHttp\Stream\Stream;
142
- use GuzzleHttp\Stream\LimitStream;
143
-
144
- $original = Stream::factory('foo');
145
- $noSeek = new NoSeekStream($original);
146
-
147
- echo $noSeek->read(3);
148
- // foo
149
- var_export($noSeek->isSeekable());
150
- // false
151
- $noSeek->seek(0);
152
- var_export($noSeek->read(3));
153
- // NULL
154
-
155
- Creating Custom Decorators
156
- --------------------------
157
-
158
- Creating a stream decorator is very easy thanks to the
159
- ``GuzzleHttp\Stream\StreamDecoratorTrait``. This trait provides methods that
160
- implement ``GuzzleHttp\Stream\StreamInterface`` by proxying to an underlying
161
- stream. Just ``use`` the ``StreamDecoratorTrait`` and implement your custom
162
- methods.
163
-
164
- For example, let's say we wanted to call a specific function each time the last
165
- byte is read from a stream. This could be implemented by overriding the
166
- ``read()`` method.
167
-
168
- .. code-block:: php
169
-
170
- use GuzzleHttp\Stream\StreamDecoratorTrait;
171
-
172
- class EofCallbackStream implements StreamInterface
173
- {
174
- use StreamDecoratorTrait;
175
-
176
- private $callback;
177
-
178
- public function __construct(StreamInterface $stream, callable $callback)
179
- {
180
- $this->stream = $stream;
181
- $this->callback = $callback;
182
- }
183
-
184
- public function read($length)
185
- {
186
- $result = $this->stream->read($length);
187
-
188
- // Invoke the callback when EOF is hit.
189
- if ($this->eof()) {
190
- call_user_func($this->callback);
191
- }
192
-
193
- return $result;
194
- }
195
- }
196
-
197
- This decorator could be added to any existing stream and used like so:
198
-
199
- .. code-block:: php
200
-
201
- use GuzzleHttp\Stream\Stream;
202
-
203
- $original = Stream::factory('foo');
204
- $eofStream = new EofCallbackStream($original, function () {
205
- echo 'EOF!';
206
- });
207
-
208
- $eofStream->read(2);
209
- $eofStream->read(1);
210
- // echoes "EOF!"
211
- $eofStream->seek(0);
212
- $eofStream->read(3);
213
- // echoes "EOF!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/guzzle/docs/testing.rst DELETED
@@ -1,232 +0,0 @@
1
- ======================
2
- Testing Guzzle Clients
3
- ======================
4
-
5
- Guzzle provides several tools that will enable you to easily mock the HTTP
6
- layer without needing to send requests over the internet.
7
-
8
- * Mock subscriber
9
- * Mock handler
10
- * Node.js web server for integration testing
11
-
12
- Mock Subscriber
13
- ===============
14
-
15
- When testing HTTP clients, you often need to simulate specific scenarios like
16
- returning a successful response, returning an error, or returning specific
17
- responses in a certain order. Because unit tests need to be predictable, easy
18
- to bootstrap, and fast, hitting an actual remote API is a test smell.
19
-
20
- Guzzle provides a mock subscriber that can be attached to clients or requests
21
- that allows you to queue up a list of responses to use rather than hitting a
22
- remote API.
23
-
24
- .. code-block:: php
25
-
26
- use GuzzleHttp\Client;
27
- use GuzzleHttp\Subscriber\Mock;
28
- use GuzzleHttp\Message\Response;
29
-
30
- $client = new Client();
31
-
32
- // Create a mock subscriber and queue two responses.
33
- $mock = new Mock([
34
- new Response(200, ['X-Foo' => 'Bar']), // Use response object
35
- "HTTP/1.1 202 OK\r\nContent-Length: 0\r\n\r\n" // Use a response string
36
- ]);
37
-
38
- // Add the mock subscriber to the client.
39
- $client->getEmitter()->attach($mock);
40
- // The first request is intercepted with the first response.
41
- echo $client->get('/')->getStatusCode();
42
- //> 200
43
- // The second request is intercepted with the second response.
44
- echo $client->get('/')->getStatusCode();
45
- //> 202
46
-
47
- When no more responses are in the queue and a request is sent, an
48
- ``OutOfBoundsException`` is thrown.
49
-
50
- History Subscriber
51
- ==================
52
-
53
- When using things like the ``Mock`` subscriber, you often need to know if the
54
- requests you expected to send were sent exactly as you intended. While the mock
55
- subscriber responds with mocked responses, the ``GuzzleHttp\Subscriber\History``
56
- subscriber maintains a history of the requests that were sent by a client.
57
-
58
- .. code-block:: php
59
-
60
- use GuzzleHttp\Client;
61
- use GuzzleHttp\Subscriber\History;
62
-
63
- $client = new Client();
64
- $history = new History();
65
-
66
- // Add the history subscriber to the client.
67
- $client->getEmitter()->attach($history);
68
-
69
- $client->get('http://httpbin.org/get');
70
- $client->head('http://httpbin.org/get');
71
-
72
- // Count the number of transactions
73
- echo count($history);
74
- //> 2
75
- // Get the last request
76
- $lastRequest = $history->getLastRequest();
77
- // Get the last response
78
- $lastRequest = $history->getLastResponse();
79
-
80
- // Iterate over the transactions that were sent
81
- foreach ($history as $transaction) {
82
- echo $transaction['request']->getMethod();
83
- //> GET, HEAD
84
- echo $transaction['response']->getStatusCode();
85
- //> 200, 200
86
- }
87
-
88
- The history subscriber can also be printed, revealing the requests and
89
- responses that were sent as a string, in order.
90
-
91
- .. code-block:: php
92
-
93
- echo $history;
94
-
95
- ::
96
-
97
- > GET /get HTTP/1.1
98
- Host: httpbin.org
99
- User-Agent: Guzzle/4.0-dev curl/7.21.4 PHP/5.5.8
100
-
101
- < HTTP/1.1 200 OK
102
- Access-Control-Allow-Origin: *
103
- Content-Type: application/json
104
- Date: Tue, 25 Mar 2014 03:53:27 GMT
105
- Server: gunicorn/0.17.4
106
- Content-Length: 270
107
- Connection: keep-alive
108
-
109
- {
110
- "headers": {
111
- "Connection": "close",
112
- "X-Request-Id": "3d0f7d5c-c937-4394-8248-2b8e03fcccdb",
113
- "User-Agent": "Guzzle/4.0-dev curl/7.21.4 PHP/5.5.8",
114
- "Host": "httpbin.org"
115
- },
116
- "origin": "76.104.247.1",
117
- "args": {},
118
- "url": "http://httpbin.org/get"
119
- }
120
-
121
- > HEAD /get HTTP/1.1
122
- Host: httpbin.org
123
- User-Agent: Guzzle/4.0-dev curl/7.21.4 PHP/5.5.8
124
-
125
- < HTTP/1.1 200 OK
126
- Access-Control-Allow-Origin: *
127
- Content-length: 270
128
- Content-Type: application/json
129
- Date: Tue, 25 Mar 2014 03:53:27 GMT
130
- Server: gunicorn/0.17.4
131
- Connection: keep-alive
132
-
133
- Mock Adapter
134
- ============
135
-
136
- In addition to using the Mock subscriber, you can use the
137
- ``GuzzleHttp\Ring\Client\MockAdapter`` as the handler of a client to return the
138
- same response over and over or return the result of a callable function.
139
-
140
- Test Web Server
141
- ===============
142
-
143
- Using mock responses is almost always enough when testing a web service client.
144
- When implementing custom :doc:`HTTP handlers <handlers>`, you'll need to send
145
- actual HTTP requests in order to sufficiently test the handler. However, a
146
- best practice is to contact a local web server rather than a server over the
147
- internet.
148
-
149
- - Tests are more reliable
150
- - Tests do not require a network connection
151
- - Tests have no external dependencies
152
-
153
- Using the test server
154
- ---------------------
155
-
156
- .. warning::
157
-
158
- The following functionality is provided to help developers of Guzzle
159
- develop HTTP handlers. There is no promise of backwards compatibility
160
- when it comes to the node.js test server or the ``GuzzleHttp\Tests\Server``
161
- class. If you are using the test server or ``Server`` class outside of
162
- guzzlehttp/guzzle, then you will need to configure autoloading and
163
- ensure the web server is started manually.
164
-
165
- .. hint::
166
-
167
- You almost never need to use this test web server. You should only ever
168
- consider using it when developing HTTP handlers. The test web server
169
- is not necessary for mocking requests. For that, please use the
170
- Mock subcribers and History subscriber.
171
-
172
- Guzzle ships with a node.js test server that receives requests and returns
173
- responses from a queue. The test server exposes a simple API that is used to
174
- enqueue responses and inspect the requests that it has received.
175
-
176
- Any operation on the ``Server`` object will ensure that
177
- the server is running and wait until it is able to receive requests before
178
- returning.
179
-
180
- .. code-block:: php
181
-
182
- use GuzzleHttp\Client;
183
- use GuzzleHttp\Tests\Server;
184
-
185
- // Start the server and queue a response
186
- Server::enqueue("HTTP/1.1 200 OK\r\n\Content-Length: 0r\n\r\n");
187
-
188
- $client = new Client(['base_url' => Server::$url]);
189
- echo $client->get('/foo')->getStatusCode();
190
- // 200
191
-
192
- ``GuzzleHttp\Tests\Server`` provides a static interface to the test server. You
193
- can queue an HTTP response or an array of responses by calling
194
- ``Server::enqueue()``. This method accepts a string representing an HTTP
195
- response message, a ``GuzzleHttp\Message\ResponseInterface``, or an array of
196
- HTTP message strings / ``GuzzleHttp\Message\ResponseInterface`` objects.
197
-
198
- .. code-block:: php
199
-
200
- // Queue single response
201
- Server::enqueue("HTTP/1.1 200 OK\r\n\Content-Length: 0r\n\r\n");
202
-
203
- // Clear the queue and queue an array of responses
204
- Server::enqueue([
205
- "HTTP/1.1 200 OK\r\n\Content-Length: 0r\n\r\n",
206
- "HTTP/1.1 404 Not Found\r\n\Content-Length: 0r\n\r\n"
207
- ]);
208
-
209
- When a response is queued on the test server, the test server will remove any
210
- previously queued responses. As the server receives requests, queued responses
211
- are dequeued and returned to the request. When the queue is empty, the server
212
- will return a 500 response.
213
-
214
- You can inspect the requests that the server has retrieved by calling
215
- ``Server::received()``. This method accepts an optional ``$hydrate`` parameter
216
- that specifies if you are retrieving an array of HTTP requests as strings or an
217
- array of ``GuzzleHttp\Message\RequestInterface`` objects.
218
-
219
- .. code-block:: php
220
-
221
- foreach (Server::received() as $response) {
222
- echo $response;
223
- }
224
-
225
- You can clear the list of received requests from the web server using the
226
- ``Server::flush()`` method.
227
-
228
- .. code-block:: php
229
-
230
- Server::flush();
231
- echo count(Server::received());
232
- // 0
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/guzzlehttp/ringphp/.travis.yml CHANGED
@@ -4,6 +4,7 @@ php:
4
  - 5.4
5
  - 5.5
6
  - 5.6
 
7
  - hhvm
8
 
9
  before_script:
4
  - 5.4
5
  - 5.5
6
  - 5.6
7
+ - 7.0
8
  - hhvm
9
 
10
  before_script:
backend/vendor/guzzlehttp/ringphp/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
  # CHANGELOG
2
 
 
 
 
 
 
 
 
 
 
 
3
  ## 1.0.5 - 2014-12-10
4
 
5
  * Adding more error information to PHP stream wrapper exceptions.
1
  # CHANGELOG
2
 
3
+ ## 1.0.7 - 2015-03-29
4
+
5
+ * PHP 7 fixes.
6
+
7
+ ## 1.0.6 - 2015-02-26
8
+
9
+ * Bug fix: futures now extend from React's PromiseInterface to ensure that they
10
+ are properly forwarded down the promise chain.
11
+ * The multi handle of the CurlMultiHandler is now created lazily.
12
+
13
  ## 1.0.5 - 2014-12-10
14
 
15
  * Adding more error information to PHP stream wrapper exceptions.
backend/vendor/guzzlehttp/ringphp/composer.json CHANGED
@@ -1,5 +1,6 @@
1
  {
2
  "name": "guzzlehttp/ringphp",
 
3
  "license": "MIT",
4
  "authors": [
5
  {
1
  {
2
  "name": "guzzlehttp/ringphp",
3
+ "description": "Provides a simple API and specification that abstracts away the details of HTTP into a single PHP function.",
4
  "license": "MIT",
5
  "authors": [
6
  {
backend/vendor/guzzlehttp/ringphp/src/Client/CurlHandler.php CHANGED
@@ -71,6 +71,7 @@ class CurlHandler
71
  $response = ['transfer_stats' => curl_getinfo($h)];
72
  $response['curl']['error'] = curl_error($h);
73
  $response['curl']['errno'] = curl_errno($h);
 
74
  $this->releaseEasyHandle($h);
75
 
76
  return new CompletedFutureArray(
71
  $response = ['transfer_stats' => curl_getinfo($h)];
72
  $response['curl']['error'] = curl_error($h);
73
  $response['curl']['errno'] = curl_errno($h);
74
+ $response['transfer_stats'] = array_merge($response['transfer_stats'], $response['curl']);
75
  $this->releaseEasyHandle($h);
76
 
77
  return new CompletedFutureArray(
backend/vendor/guzzlehttp/ringphp/src/Client/CurlMultiHandler.php CHANGED
@@ -13,13 +13,14 @@ use React\Promise\Deferred;
13
  * When using the CurlMultiHandler, custom curl options can be specified as an
14
  * associative array of curl option constants mapping to values in the
15
  * **curl** key of the "client" key of the request.
 
 
16
  */
17
  class CurlMultiHandler
18
  {
19
  /** @var callable */
20
  private $factory;
21
  private $selectTimeout;
22
- private $mh;
23
  private $active;
24
  private $handles = [];
25
  private $delays = [];
@@ -42,8 +43,9 @@ class CurlMultiHandler
42
  */
43
  public function __construct(array $options = [])
44
  {
45
- $this->mh = isset($options['mh'])
46
- ? $options['mh'] : curl_multi_init();
 
47
  $this->factory = isset($options['handle_factory'])
48
  ? $options['handle_factory'] : new CurlFactory();
49
  $this->selectTimeout = isset($options['select_timeout'])
@@ -52,6 +54,15 @@ class CurlMultiHandler
52
  ? $options['max_handles'] : 100;
53
  }
54
 
 
 
 
 
 
 
 
 
 
55
  public function __destruct()
56
  {
57
  // Finish any open connections before terminating the script.
@@ -59,9 +70,9 @@ class CurlMultiHandler
59
  $this->execute();
60
  }
61
 
62
- if ($this->mh) {
63
- curl_multi_close($this->mh);
64
- $this->mh = null;
65
  }
66
  }
67
 
@@ -106,7 +117,7 @@ class CurlMultiHandler
106
  do {
107
 
108
  if ($this->active &&
109
- curl_multi_select($this->mh, $this->selectTimeout) === -1
110
  ) {
111
  // Perform a usleep if a select returns -1.
112
  // See: https://bugs.php.net/bug.php?id=61141
@@ -119,7 +130,7 @@ class CurlMultiHandler
119
  }
120
 
121
  do {
122
- $mrc = curl_multi_exec($this->mh, $this->active);
123
  } while ($mrc === CURLM_CALL_MULTI_PERFORM);
124
 
125
  $this->processMessages();
@@ -142,13 +153,13 @@ class CurlMultiHandler
142
  if (isset($entry['request']['client']['delay'])) {
143
  $this->delays[$id] = microtime(true) + ($entry['request']['client']['delay'] / 1000);
144
  } elseif (empty($entry['request']['future'])) {
145
- curl_multi_add_handle($this->mh, $entry['handle']);
146
  } else {
147
- curl_multi_add_handle($this->mh, $entry['handle']);
148
  // "lazy" futures are only sent once the pool has many requests.
149
  if ($entry['request']['future'] !== 'lazy') {
150
  do {
151
- $mrc = curl_multi_exec($this->mh, $this->active);
152
  } while ($mrc === CURLM_CALL_MULTI_PERFORM);
153
  $this->processMessages();
154
  }
@@ -159,7 +170,7 @@ class CurlMultiHandler
159
  {
160
  if (isset($this->handles[$id])) {
161
  curl_multi_remove_handle(
162
- $this->mh,
163
  $this->handles[$id]['handle']
164
  );
165
  curl_close($this->handles[$id]['handle']);
@@ -183,7 +194,7 @@ class CurlMultiHandler
183
 
184
  $handle = $this->handles[$id]['handle'];
185
  unset($this->delays[$id], $this->handles[$id]);
186
- curl_multi_remove_handle($this->mh, $handle);
187
  curl_close($handle);
188
 
189
  return true;
@@ -197,7 +208,7 @@ class CurlMultiHandler
197
  if ($currentTime >= $delay) {
198
  unset($this->delays[$id]);
199
  curl_multi_add_handle(
200
- $this->mh,
201
  $this->handles[$id]['handle']
202
  );
203
  }
@@ -206,7 +217,7 @@ class CurlMultiHandler
206
 
207
  private function processMessages()
208
  {
209
- while ($done = curl_multi_info_read($this->mh)) {
210
  $id = (int) $done['handle'];
211
 
212
  if (!isset($this->handles[$id])) {
13
  * When using the CurlMultiHandler, custom curl options can be specified as an
14
  * associative array of curl option constants mapping to values in the
15
  * **curl** key of the "client" key of the request.
16
+ *
17
+ * @property resource $_mh Internal use only. Lazy loaded multi-handle.
18
  */
19
  class CurlMultiHandler
20
  {
21
  /** @var callable */
22
  private $factory;
23
  private $selectTimeout;
 
24
  private $active;
25
  private $handles = [];
26
  private $delays = [];
43
  */
44
  public function __construct(array $options = [])
45
  {
46
+ if (isset($options['mh'])) {
47
+ $this->_mh = $options['mh'];
48
+ }
49
  $this->factory = isset($options['handle_factory'])
50
  ? $options['handle_factory'] : new CurlFactory();
51
  $this->selectTimeout = isset($options['select_timeout'])
54
  ? $options['max_handles'] : 100;
55
  }
56
 
57
+ public function __get($name)
58
+ {
59
+ if ($name === '_mh') {
60
+ return $this->_mh = curl_multi_init();
61
+ }
62
+
63
+ throw new \BadMethodCallException();
64
+ }
65
+
66
  public function __destruct()
67
  {
68
  // Finish any open connections before terminating the script.
70
  $this->execute();
71
  }
72
 
73
+ if (isset($this->_mh)) {
74
+ curl_multi_close($this->_mh);
75
+ unset($this->_mh);
76
  }
77
  }
78
 
117
  do {
118
 
119
  if ($this->active &&
120
+ curl_multi_select($this->_mh, $this->selectTimeout) === -1
121
  ) {
122
  // Perform a usleep if a select returns -1.
123
  // See: https://bugs.php.net/bug.php?id=61141
130
  }
131
 
132
  do {
133
+ $mrc = curl_multi_exec($this->_mh, $this->active);
134
  } while ($mrc === CURLM_CALL_MULTI_PERFORM);
135
 
136
  $this->processMessages();
153
  if (isset($entry['request']['client']['delay'])) {
154
  $this->delays[$id] = microtime(true) + ($entry['request']['client']['delay'] / 1000);
155
  } elseif (empty($entry['request']['future'])) {
156
+ curl_multi_add_handle($this->_mh, $entry['handle']);
157
  } else {
158
+ curl_multi_add_handle($this->_mh, $entry['handle']);
159
  // "lazy" futures are only sent once the pool has many requests.
160
  if ($entry['request']['future'] !== 'lazy') {
161
  do {
162
+ $mrc = curl_multi_exec($this->_mh, $this->active);
163
  } while ($mrc === CURLM_CALL_MULTI_PERFORM);
164
  $this->processMessages();
165
  }
170
  {
171
  if (isset($this->handles[$id])) {
172
  curl_multi_remove_handle(
173
+ $this->_mh,
174
  $this->handles[$id]['handle']
175
  );
176
  curl_close($this->handles[$id]['handle']);
194
 
195
  $handle = $this->handles[$id]['handle'];
196
  unset($this->delays[$id], $this->handles[$id]);
197
+ curl_multi_remove_handle($this->_mh, $handle);
198
  curl_close($handle);
199
 
200
  return true;
208
  if ($currentTime >= $delay) {
209
  unset($this->delays[$id]);
210
  curl_multi_add_handle(
211
+ $this->_mh,
212
  $this->handles[$id]['handle']
213
  );
214
  }
217
 
218
  private function processMessages()
219
  {
220
+ while ($done = curl_multi_info_read($this->_mh)) {
221
  $id = (int) $done['handle'];
222
 
223
  if (!isset($this->handles[$id])) {
backend/vendor/guzzlehttp/ringphp/src/Client/StreamHandler.php CHANGED
@@ -16,6 +16,7 @@ use GuzzleHttp\Stream\Utils;
16
  class StreamHandler
17
  {
18
  private $options;
 
19
 
20
  public function __construct(array $options = [])
21
  {
@@ -30,15 +31,17 @@ class StreamHandler
30
  try {
31
  // Does not support the expect header.
32
  $request = Core::removeHeader($request, 'Expect');
33
- $stream = $this->createStream($url, $request, $headers);
34
- return $this->createResponse($request, $url, $headers, $stream);
35
  } catch (RingException $e) {
36
  return $this->createErrorResponse($url, $e);
37
  }
38
  }
39
 
40
- private function createResponse(array $request, $url, array $hdrs, $stream)
41
  {
 
 
42
  $parts = explode(' ', array_shift($hdrs), 3);
43
  $response = [
44
  'status' => $parts[1],
@@ -176,11 +179,8 @@ class StreamHandler
176
  return $resource;
177
  }
178
 
179
- private function createStream(
180
- $url,
181
- array $request,
182
- &$http_response_header
183
- ) {
184
  static $methods;
185
  if (!$methods) {
186
  $methods = array_flip(get_class_methods(__CLASS__));
@@ -215,8 +215,7 @@ class StreamHandler
215
  $url,
216
  $request,
217
  $options,
218
- $this->createContext($request, $options, $params),
219
- $http_response_header
220
  );
221
  }
222
 
@@ -310,7 +309,7 @@ class StreamHandler
310
 
311
  private function add_progress(array $request, &$options, $value, &$params)
312
  {
313
- $fn = function ($code, $_, $_, $_, $transferred, $total) use ($value) {
314
  if ($code == STREAM_NOTIFY_PROGRESS) {
315
  $value($total, $transferred, null, null);
316
  }
@@ -394,16 +393,17 @@ class StreamHandler
394
  $url,
395
  array $request,
396
  array $options,
397
- $context,
398
- &$http_response_header
399
  ) {
400
  return $this->createResource(
401
- function () use ($url, &$http_response_header, $context) {
402
  if (false === strpos($url, 'http')) {
403
  trigger_error("URL is invalid: {$url}", E_USER_WARNING);
404
  return null;
405
  }
406
- return fopen($url, 'r', null, $context);
 
 
407
  },
408
  $request,
409
  $options
16
  class StreamHandler
17
  {
18
  private $options;
19
+ private $lastHeaders;
20
 
21
  public function __construct(array $options = [])
22
  {
31
  try {
32
  // Does not support the expect header.
33
  $request = Core::removeHeader($request, 'Expect');
34
+ $stream = $this->createStream($url, $request);
35
+ return $this->createResponse($request, $url, $stream);
36
  } catch (RingException $e) {
37
  return $this->createErrorResponse($url, $e);
38
  }
39
  }
40
 
41
+ private function createResponse(array $request, $url, $stream)
42
  {
43
+ $hdrs = $this->lastHeaders;
44
+ $this->lastHeaders = null;
45
  $parts = explode(' ', array_shift($hdrs), 3);
46
  $response = [
47
  'status' => $parts[1],
179
  return $resource;
180
  }
181
 
182
+ private function createStream($url, array $request)
183
+ {
 
 
 
184
  static $methods;
185
  if (!$methods) {
186
  $methods = array_flip(get_class_methods(__CLASS__));
215
  $url,
216
  $request,
217
  $options,
218
+ $this->createContext($request, $options, $params)
 
219
  );
220
  }
221
 
309
 
310
  private function add_progress(array $request, &$options, $value, &$params)
311
  {
312
+ $fn = function ($code, $_1, $_2, $_3, $transferred, $total) use ($value) {
313
  if ($code == STREAM_NOTIFY_PROGRESS) {
314
  $value($total, $transferred, null, null);
315
  }
393
  $url,
394
  array $request,
395
  array $options,
396
+ $context
 
397
  ) {
398
  return $this->createResource(
399
+ function () use ($url, $context) {
400
  if (false === strpos($url, 'http')) {
401
  trigger_error("URL is invalid: {$url}", E_USER_WARNING);
402
  return null;
403
  }
404
+ $resource = fopen($url, 'r', null, $context);
405
+ $this->lastHeaders = $http_response_header;
406
+ return $resource;
407
  },
408
  $request,
409
  $options
backend/vendor/guzzlehttp/ringphp/src/Future/FutureInterface.php CHANGED
@@ -16,7 +16,7 @@ use React\Promise\PromisorInterface;
16
  * computation has not yet completed when wait() is called, the call to wait()
17
  * will block until the future has completed.
18
  */
19
- interface FutureInterface extends PromisorInterface
20
  {
21
  /**
22
  * Returns the result of the future either from cache or by blocking until
@@ -37,20 +37,4 @@ interface FutureInterface extends PromisorInterface
37
  * Cancels the future, if possible.
38
  */
39
  public function cancel();
40
-
41
- /**
42
- * Create and return a promise that invokes the given methods when the
43
- * future has a value, exception, or progress events.
44
- *
45
- * @param callable $onFulfilled Called when the promise is resolved.
46
- * @param callable $onRejected Called when the promise is rejected.
47
- * @param callable $onProgress Called on progress events.
48
- *
49
- * @return PromiseInterface
50
- */
51
- public function then(
52
- callable $onFulfilled = null,
53
- callable $onRejected = null,
54
- callable $onProgress = null
55
- );
56
  }
16
  * computation has not yet completed when wait() is called, the call to wait()
17
  * will block until the future has completed.
18
  */
19
+ interface FutureInterface extends PromiseInterface, PromisorInterface
20
  {
21
  /**
22
  * Returns the result of the future either from cache or by blocking until
37
  * Cancels the future, if possible.
38
  */
39
  public function cancel();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  }
backend/vendor/guzzlehttp/ringphp/tests/Client/server.js CHANGED
@@ -79,7 +79,13 @@ var GuzzleServer = function(port, log) {
79
  }
80
  if (!loadAuthentifier[typeId]) {
81
  if (!auth) {
82
- auth = require('http-auth');
 
 
 
 
 
 
83
  }
84
  switch (type) {
85
  case 'digest':
@@ -104,6 +110,11 @@ var GuzzleServer = function(port, log) {
104
  var securedAreaUriParts = request.uri.match(/^\/secure\/by-(digest)(\/qop-([^\/]*))?(\/.*)$/);
105
  if (securedAreaUriParts) {
106
  var authentifier = loadAuthentifier(securedAreaUriParts[1], { qop: securedAreaUriParts[2] });
 
 
 
 
 
107
  authentifier.check(req, res, function(req, res) {
108
  req.url = securedAreaUriParts[4];
109
  requestHandlerCallback(request, req, res);
79
  }
80
  if (!loadAuthentifier[typeId]) {
81
  if (!auth) {
82
+ try {
83
+ auth = require('http-auth');
84
+ } catch (e) {
85
+ if (e.code == 'MODULE_NOT_FOUND') {
86
+ return;
87
+ }
88
+ }
89
  }
90
  switch (type) {
91
  case 'digest':
110
  var securedAreaUriParts = request.uri.match(/^\/secure\/by-(digest)(\/qop-([^\/]*))?(\/.*)$/);
111
  if (securedAreaUriParts) {
112
  var authentifier = loadAuthentifier(securedAreaUriParts[1], { qop: securedAreaUriParts[2] });
113
+ if (!authentifier) {
114
+ res.writeHead(501, 'HTTP authentication not implemented', { 'Content-Length': 0 });
115
+ res.end();
116
+ return;
117
+ }
118
  authentifier.check(req, res, function(req, res) {
119
  req.url = securedAreaUriParts[4];
120
  requestHandlerCallback(request, req, res);
backend/vendor/zendframework/zend-cache/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-cache/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-cache/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-cache.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-cache)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-cache.git
112
+ $ cd zend-cache
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-cache.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-cache.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-cache/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-cache/README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ # zend-cache
2
+
3
+ `Zend\Cache` provides a general cache system for PHP. The `Zend\Cache` component
4
+ is able to cache different patterns (class, object, output, etc) using different
5
+ storage adapters (DB, File, Memcache, etc).
6
+
7
+
8
+ - File issues at https://github.com/zendframework/zend-cache/issues
9
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-cache
backend/vendor/zendframework/zend-cache/Zend/Cache/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-cache/Zend/Cache/README.md DELETED
@@ -1,14 +0,0 @@
1
- Cache Component from ZF2
2
- ========================
3
-
4
- This is the Cache component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-cache/{Zend/Cache/composer.json → composer.json} RENAMED
@@ -6,13 +6,12 @@
6
  "zf2",
7
  "cache"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\Cache\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/Cache",
16
  "require": {
17
  "php": ">=5.3.23",
18
  "zendframework/zend-stdlib": "self.version",
@@ -21,7 +20,10 @@
21
  "zendframework/zend-eventmanager": "self.version"
22
  },
23
  "require-dev": {
24
- "zendframework/zend-session": "self.version"
 
 
 
25
  },
26
  "suggest": {
27
  "zendframework/zend-serializer": "Zend\\Serializer component",
@@ -29,12 +31,19 @@
29
  "ext-apc": "APC >= 3.1.6 to use the APC storage adapter",
30
  "ext-dba": "DBA, to use the DBA storage adapter",
31
  "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
32
- "ext-wincache": "WinCache, to use the WinCache storage adapter"
 
 
33
  },
34
  "extra": {
35
  "branch-alias": {
36
- "dev-master": "2.3-dev",
37
- "dev-develop": "2.4-dev"
 
 
 
 
 
38
  }
39
  }
40
- }
6
  "zf2",
7
  "cache"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-cache",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\Cache\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23",
17
  "zendframework/zend-stdlib": "self.version",
20
  "zendframework/zend-eventmanager": "self.version"
21
  },
22
  "require-dev": {
23
+ "zendframework/zend-session": "self.version",
24
+ "fabpot/php-cs-fixer": "1.7.*",
25
+ "satooshi/php-coveralls": "dev-master",
26
+ "phpunit/PHPUnit": "~4.0"
27
  },
28
  "suggest": {
29
  "zendframework/zend-serializer": "Zend\\Serializer component",
31
  "ext-apc": "APC >= 3.1.6 to use the APC storage adapter",
32
  "ext-dba": "DBA, to use the DBA storage adapter",
33
  "ext-memcached": "Memcached >= 1.0.0 to use the Memcached storage adapter",
34
+ "ext-mongo": "Mongo, to use MongoDb storage adapter",
35
+ "ext-wincache": "WinCache, to use the WinCache storage adapter",
36
+ "mongofill/mongofill": "Alternative to ext-mongo - a pure PHP implementation designed as a drop in replacement"
37
  },
38
  "extra": {
39
  "branch-alias": {
40
+ "dev-master": "2.4-dev",
41
+ "dev-develop": "2.5-dev"
42
+ }
43
+ },
44
+ "autoload-dev": {
45
+ "psr-4": {
46
+ "ZendTest\\Cache\\": "test/"
47
  }
48
  }
49
+ }
backend/vendor/zendframework/zend-cache/phpunit.xml.dist ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-cache Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ <!-- Note: the following is a FULL list of ALL POSSIBLE constants
34
+ currently in use in ZF2 for ALL COMPONENTS; you should choose the
35
+ constants appropriate to the component you are migrating. -->
36
+
37
+ <const name="TESTS_ZEND_CACHE_APC_ENABLED" value="false" />
38
+ <const name="TESTS_ZEND_CACHE_XCACHE_ENABLED" value="false" />
39
+ <const name="TESTS_ZEND_CACHE_XCACHE_ADMIN_AUTH" value="false" />
40
+ <const name="TESTS_ZEND_CACHE_XCACHE_ADMIN_USER" value="" />
41
+ <const name="TESTS_ZEND_CACHE_XCACHE_ADMIN_PASS" value="" />
42
+ <const name="TESTS_ZEND_CACHE_PLATFORM_ENABLED" value="false" />
43
+ <const name="TESTS_ZEND_CACHE_WINCACHE_ENABLED" value="false" />
44
+ <const name="TESTS_ZEND_CACHE_ZEND_SERVER_ENABLED" value="false" />
45
+ <const name="TESTS_ZEND_CACHE_MEMCACHED_ENABLED" value="false" />
46
+ <const name="TESTS_ZEND_CACHE_MEMCACHED_HOST" value="127.0.0.1" />
47
+ <const name="TESTS_ZEND_CACHE_MEMCACHED_PORT" value="11211" />
48
+ <const name="TESTS_ZEND_CACHE_MEMCACHE_ENABLED" value="false" />
49
+ <const name="TESTS_ZEND_CACHE_MEMCACHE_HOST" value="127.0.0.1" />
50
+ <const name="TESTS_ZEND_CACHE_MEMCACHE_PORT" value="11211" />
51
+ <const name="TESTS_ZEND_CACHE_MONGODB_ENABLED" value="false" />
52
+ <const name="TESTS_ZEND_CACHE_MONGODB_COLLECTION" value="cache" />
53
+ <const name="TESTS_ZEND_CACHE_MONGODB_CONNECTSTRING" value="mongodb://localhost/" />
54
+ <const name="TESTS_ZEND_CACHE_MONGODB_DATABASE" value="zend_test" />
55
+ <const name="TESTS_ZEND_CACHE_REDIS_ENABLED" value="false" />
56
+ <const name="TESTS_ZEND_CACHE_REDIS_HOST" value="127.0.0.1" />
57
+ <const name="TESTS_ZEND_CACHE_REDIS_PORT" value="6379" />
58
+ <const name="TESTS_ZEND_CACHE_REDIS_PASSWORD" value="" />
59
+ <const name="TESTS_ZEND_CACHE_REDIS_DATABASE" value="false" />
60
+
61
+ </php>
62
+ </phpunit>
backend/vendor/zendframework/zend-cache/phpunit.xml.travis ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-cache Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ <!-- Note: the following is a FULL list of ALL POSSIBLE constants
34
+ currently in use in ZF2 for ALL COMPONENTS; you should choose the
35
+ constants appropriate to the component you are migrating.
36
+
37
+ The values present below reflect the correct values for Travis-CI. -->
38
+
39
+ <const name="TESTS_ZEND_CACHE_APC_ENABLED" value="false" />
40
+ <const name="TESTS_ZEND_CACHE_XCACHE_ENABLED" value="false" />
41
+ <const name="TESTS_ZEND_CACHE_XCACHE_ADMIN_AUTH" value="false" />
42
+ <const name="TESTS_ZEND_CACHE_XCACHE_ADMIN_USER" value="" />
43
+ <const name="TESTS_ZEND_CACHE_XCACHE_ADMIN_PASS" value="" />
44
+ <const name="TESTS_ZEND_CACHE_PLATFORM_ENABLED" value="false" />
45
+ <const name="TESTS_ZEND_CACHE_WINCACHE_ENABLED" value="false" />
46
+ <const name="TESTS_ZEND_CACHE_ZEND_SERVER_ENABLED" value="false" />
47
+ <const name="TESTS_ZEND_CACHE_MEMCACHED_ENABLED" value="false" />
48
+ <const name="TESTS_ZEND_CACHE_MEMCACHED_HOST" value="127.0.0.1" />
49
+ <const name="TESTS_ZEND_CACHE_MEMCACHED_PORT" value="11211" />
50
+ <const name="TESTS_ZEND_CACHE_MEMCACHE_ENABLED" value="false" />
51
+ <const name="TESTS_ZEND_CACHE_MEMCACHE_HOST" value="127.0.0.1" />
52
+ <const name="TESTS_ZEND_CACHE_MEMCACHE_PORT" value="11211" />
53
+ <const name="TESTS_ZEND_CACHE_MONGODB_ENABLED" value="false" />
54
+ <const name="TESTS_ZEND_CACHE_MONGODB_COLLECTION" value="cache" />
55
+ <const name="TESTS_ZEND_CACHE_MONGODB_CONNECTSTRING" value="mongodb://localhost/" />
56
+ <const name="TESTS_ZEND_CACHE_MONGODB_DATABASE" value="zend_test" />
57
+ <const name="TESTS_ZEND_CACHE_REDIS_ENABLED" value="false" />
58
+ <const name="TESTS_ZEND_CACHE_REDIS_HOST" value="127.0.0.1" />
59
+ <const name="TESTS_ZEND_CACHE_REDIS_PORT" value="6379" />
60
+ <const name="TESTS_ZEND_CACHE_REDIS_PASSWORD" value="" />
61
+ <const name="TESTS_ZEND_CACHE_REDIS_DATABASE" value="false" />
62
+
63
+ </php>
64
+ </phpunit>
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/BadMethodCallException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/ExtensionNotLoadedException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/LogicException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/MissingDependencyException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/MissingKeyException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/OutOfSpaceException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/UnexpectedValueException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Exception/UnsupportedMethodCallException.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/AbstractPattern.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/CallbackCache.php RENAMED
@@ -59,7 +59,7 @@ class CallbackCache extends AbstractPattern
59
  $cacheOutput = $options->getCacheOutput();
60
  if ($cacheOutput) {
61
  ob_start();
62
- ob_implicit_flush(false);
63
  }
64
 
65
  // TODO: do not cache on errors using [set|restore]_error_handler
@@ -137,9 +137,11 @@ class CallbackCache extends AbstractPattern
137
  $callbackKey = strtolower($callbackKey);
138
 
139
  // generate a unique key of object callbacks
140
- if (is_object($callback)) { // Closures & __invoke
 
141
  $object = $callback;
142
- } elseif (isset($callback[0])) { // array($object, 'method')
 
143
  $object = $callback[0];
144
  }
145
  if (isset($object)) {
59
  $cacheOutput = $options->getCacheOutput();
60
  if ($cacheOutput) {
61
  ob_start();
62
+ ob_implicit_flush(0);
63
  }
64
 
65
  // TODO: do not cache on errors using [set|restore]_error_handler
137
  $callbackKey = strtolower($callbackKey);
138
 
139
  // generate a unique key of object callbacks
140
+ if (is_object($callback)) {
141
+ // Closures & __invoke
142
  $object = $callback;
143
+ } elseif (isset($callback[0])) {
144
+ // array($object, 'method')
145
  $object = $callback[0];
146
  }
147
  if (isset($object)) {
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/CaptureCache.php RENAMED
@@ -35,7 +35,7 @@ class CaptureCache extends AbstractPattern
35
  return false;
36
  });
37
 
38
- ob_implicit_flush(false);
39
  }
40
 
41
  /**
35
  return false;
36
  });
37
 
38
+ ob_implicit_flush(0);
39
  }
40
 
41
  /**
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/ClassCache.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/ObjectCache.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/OutputCache.php RENAMED
@@ -60,7 +60,7 @@ class OutputCache extends AbstractPattern
60
  }
61
 
62
  ob_start();
63
- ob_implicit_flush(false);
64
  $this->keyStack[] = $key;
65
  return false;
66
  }
60
  }
61
 
62
  ob_start();
63
+ ob_implicit_flush(0);
64
  $this->keyStack[] = $key;
65
  return false;
66
  }
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/PatternInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Pattern/PatternOptions.php RENAMED
@@ -574,7 +574,7 @@ class PatternOptions extends AbstractOptions
574
  * Used by:
575
  * - ObjectCache
576
  *
577
- * @param mixed $objectKey
578
  * @return PatternOptions
579
  */
580
  public function setObjectKey($objectKey)
@@ -597,7 +597,7 @@ class PatternOptions extends AbstractOptions
597
  */
598
  public function getObjectKey()
599
  {
600
- if (!$this->objectKey) {
601
  return get_class($this->getObject());
602
  }
603
  return $this->objectKey;
574
  * Used by:
575
  * - ObjectCache
576
  *
577
+ * @param null|string $objectKey The object key or NULL to use the objects class name
578
  * @return PatternOptions
579
  */
580
  public function setObjectKey($objectKey)
597
  */
598
  public function getObjectKey()
599
  {
600
+ if ($this->objectKey === null) {
601
  return get_class($this->getObject());
602
  }
603
  return $this->objectKey;
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/PatternFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/PatternPluginManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Service/StorageCacheAbstractServiceFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Service/StorageCacheFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/AbstractAdapter.php RENAMED
@@ -217,11 +217,10 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
217
  {
218
  $postEvent = new PostEvent($eventName . '.post', $this, $args, $result);
219
  $eventRs = $this->getEventManager()->trigger($postEvent);
220
- if ($eventRs->stopped()) {
221
- return $eventRs->last();
222
- }
223
 
224
- return $postEvent->getResult();
 
 
225
  }
226
 
227
  /**
@@ -246,11 +245,9 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
246
  throw $exceptionEvent->getException();
247
  }
248
 
249
- if ($eventRs->stopped()) {
250
- return $eventRs->last();
251
- }
252
-
253
- return $exceptionEvent->getResult();
254
  }
255
 
256
  /**
@@ -338,7 +335,7 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
338
  {
339
  if (!$this->getOptions()->getReadable()) {
340
  $success = false;
341
- return null;
342
  }
343
 
344
  $this->normalizeKey($key);
@@ -357,20 +354,21 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
357
 
358
  try {
359
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
360
- if ($eventRs->stopped()) {
361
- return $eventRs->last();
362
- }
363
 
364
- if ($args->offsetExists('success') && $args->offsetExists('casToken')) {
 
 
365
  $result = $this->internalGetItem($args['key'], $args['success'], $args['casToken']);
366
  } elseif ($args->offsetExists('success')) {
367
  $result = $this->internalGetItem($args['key'], $args['success']);
368
  } else {
369
  $result = $this->internalGetItem($args['key']);
370
  }
 
371
  return $this->triggerPost(__FUNCTION__, $args, $result);
372
  } catch (\Exception $e) {
373
- $result = false;
 
374
  return $this->triggerException(__FUNCTION__, $args, $result, $e);
375
  }
376
  }
@@ -410,11 +408,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
410
 
411
  try {
412
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
413
- if ($eventRs->stopped()) {
414
- return $eventRs->last();
415
- }
416
 
417
- $result = $this->internalGetItems($args['keys']);
 
 
 
418
  return $this->triggerPost(__FUNCTION__, $args, $result);
419
  } catch (\Exception $e) {
420
  $result = array();
@@ -467,11 +465,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
467
 
468
  try {
469
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
470
- if ($eventRs->stopped()) {
471
- return $eventRs->last();
472
- }
473
 
474
- $result = $this->internalHasItem($args['key']);
 
 
 
475
  return $this->triggerPost(__FUNCTION__, $args, $result);
476
  } catch (\Exception $e) {
477
  $result = false;
@@ -517,11 +515,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
517
 
518
  try {
519
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
520
- if ($eventRs->stopped()) {
521
- return $eventRs->last();
522
- }
523
 
524
- $result = $this->internalHasItems($args['keys']);
 
 
 
525
  return $this->triggerPost(__FUNCTION__, $args, $result);
526
  } catch (\Exception $e) {
527
  $result = array();
@@ -571,11 +569,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
571
 
572
  try {
573
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
574
- if ($eventRs->stopped()) {
575
- return $eventRs->last();
576
- }
577
 
578
- $result = $this->internalGetMetadata($args['key']);
 
 
 
579
  return $this->triggerPost(__FUNCTION__, $args, $result);
580
  } catch (\Exception $e) {
581
  $result = false;
@@ -623,11 +621,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
623
 
624
  try {
625
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
626
- if ($eventRs->stopped()) {
627
- return $eventRs->last();
628
- }
629
 
630
- $result = $this->internalGetMetadatas($args['keys']);
 
 
 
631
  return $this->triggerPost(__FUNCTION__, $args, $result);
632
  } catch (\Exception $e) {
633
  $result = array();
@@ -682,11 +680,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
682
 
683
  try {
684
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
685
- if ($eventRs->stopped()) {
686
- return $eventRs->last();
687
- }
688
 
689
- $result = $this->internalSetItem($args['key'], $args['value']);
 
 
 
690
  return $this->triggerPost(__FUNCTION__, $args, $result);
691
  } catch (\Exception $e) {
692
  $result = false;
@@ -728,11 +726,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
728
 
729
  try {
730
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
731
- if ($eventRs->stopped()) {
732
- return $eventRs->last();
733
- }
734
 
735
- $result = $this->internalSetItems($args['keyValuePairs']);
 
 
 
736
  return $this->triggerPost(__FUNCTION__, $args, $result);
737
  } catch (\Exception $e) {
738
  $result = array_keys($keyValuePairs);
@@ -784,11 +782,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
784
 
785
  try {
786
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
787
- if ($eventRs->stopped()) {
788
- return $eventRs->last();
789
- }
790
 
791
- $result = $this->internalAddItem($args['key'], $args['value']);
 
 
 
792
  return $this->triggerPost(__FUNCTION__, $args, $result);
793
  } catch (\Exception $e) {
794
  $result = false;
@@ -836,11 +834,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
836
 
837
  try {
838
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
839
- if ($eventRs->stopped()) {
840
- return $eventRs->last();
841
- }
842
 
843
- $result = $this->internalAddItems($args['keyValuePairs']);
 
 
 
844
  return $this->triggerPost(__FUNCTION__, $args, $result);
845
  } catch (\Exception $e) {
846
  $result = array_keys($keyValuePairs);
@@ -892,11 +890,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
892
 
893
  try {
894
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
895
- if ($eventRs->stopped()) {
896
- return $eventRs->last();
897
- }
898
 
899
- $result = $this->internalReplaceItem($args['key'], $args['value']);
 
 
 
900
  return $this->triggerPost(__FUNCTION__, $args, $result);
901
  } catch (\Exception $e) {
902
  $result = false;
@@ -945,11 +943,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
945
 
946
  try {
947
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
948
- if ($eventRs->stopped()) {
949
- return $eventRs->last();
950
- }
951
 
952
- $result = $this->internalReplaceItems($args['keyValuePairs']);
 
 
 
953
  return $this->triggerPost(__FUNCTION__, $args, $result);
954
  } catch (\Exception $e) {
955
  $result = array_keys($keyValuePairs);
@@ -1004,11 +1002,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1004
 
1005
  try {
1006
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1007
- if ($eventRs->stopped()) {
1008
- return $eventRs->last();
1009
- }
1010
 
1011
- $result = $this->internalCheckAndSetItem($args['token'], $args['key'], $args['value']);
 
 
 
1012
  return $this->triggerPost(__FUNCTION__, $args, $result);
1013
  } catch (\Exception $e) {
1014
  $result = false;
@@ -1061,11 +1059,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1061
 
1062
  try {
1063
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1064
- if ($eventRs->stopped()) {
1065
- return $eventRs->last();
1066
- }
1067
 
1068
- $result = $this->internalTouchItem($args['key']);
 
 
 
1069
  return $this->triggerPost(__FUNCTION__, $args, $result);
1070
  } catch (\Exception $e) {
1071
  $result = false;
@@ -1115,11 +1113,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1115
 
1116
  try {
1117
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1118
- if ($eventRs->stopped()) {
1119
- return $eventRs->last();
1120
- }
1121
 
1122
- $result = $this->internalTouchItems($args['keys']);
 
 
 
1123
  return $this->triggerPost(__FUNCTION__, $args, $result);
1124
  } catch (\Exception $e) {
1125
  return $this->triggerException(__FUNCTION__, $args, $keys, $e);
@@ -1168,11 +1166,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1168
 
1169
  try {
1170
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1171
- if ($eventRs->stopped()) {
1172
- return $eventRs->last();
1173
- }
1174
 
1175
- $result = $this->internalRemoveItem($args['key']);
 
 
 
1176
  return $this->triggerPost(__FUNCTION__, $args, $result);
1177
  } catch (\Exception $e) {
1178
  $result = false;
@@ -1213,11 +1211,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1213
 
1214
  try {
1215
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1216
- if ($eventRs->stopped()) {
1217
- return $eventRs->last();
1218
- }
1219
 
1220
- $result = $this->internalRemoveItems($args['keys']);
 
 
 
1221
  return $this->triggerPost(__FUNCTION__, $args, $result);
1222
  } catch (\Exception $e) {
1223
  return $this->triggerException(__FUNCTION__, $args, $keys, $e);
@@ -1268,11 +1266,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1268
 
1269
  try {
1270
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1271
- if ($eventRs->stopped()) {
1272
- return $eventRs->last();
1273
- }
1274
 
1275
- $result = $this->internalIncrementItem($args['key'], $args['value']);
 
 
 
1276
  return $this->triggerPost(__FUNCTION__, $args, $result);
1277
  } catch (\Exception $e) {
1278
  $result = false;
@@ -1328,11 +1326,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1328
 
1329
  try {
1330
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1331
- if ($eventRs->stopped()) {
1332
- return $eventRs->last();
1333
- }
1334
 
1335
- $result = $this->internalIncrementItems($args['keyValuePairs']);
 
 
 
1336
  return $this->triggerPost(__FUNCTION__, $args, $result);
1337
  } catch (\Exception $e) {
1338
  $result = array();
@@ -1385,11 +1383,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1385
 
1386
  try {
1387
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1388
- if ($eventRs->stopped()) {
1389
- return $eventRs->last();
1390
- }
1391
 
1392
- $result = $this->internalDecrementItem($args['key'], $args['value']);
 
 
 
1393
  return $this->triggerPost(__FUNCTION__, $args, $result);
1394
  } catch (\Exception $e) {
1395
  $result = false;
@@ -1445,11 +1443,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1445
 
1446
  try {
1447
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1448
- if ($eventRs->stopped()) {
1449
- return $eventRs->last();
1450
- }
1451
 
1452
- $result = $this->internalDecrementItems($args['keyValuePairs']);
 
 
 
1453
  return $this->triggerPost(__FUNCTION__, $args, $result);
1454
  } catch (\Exception $e) {
1455
  $result = array();
@@ -1492,11 +1490,11 @@ abstract class AbstractAdapter implements StorageInterface, EventsCapableInterfa
1492
 
1493
  try {
1494
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
1495
- if ($eventRs->stopped()) {
1496
- return $eventRs->last();
1497
- }
1498
 
1499
- $result = $this->internalGetCapabilities();
 
 
 
1500
  return $this->triggerPost(__FUNCTION__, $args, $result);
1501
  } catch (\Exception $e) {
1502
  $result = false;
217
  {
218
  $postEvent = new PostEvent($eventName . '.post', $this, $args, $result);
219
  $eventRs = $this->getEventManager()->trigger($postEvent);
 
 
 
220
 
221
+ return $eventRs->stopped()
222
+ ? $eventRs->last()
223
+ : $postEvent->getResult();
224
  }
225
 
226
  /**
245
  throw $exceptionEvent->getException();
246
  }
247
 
248
+ return $eventRs->stopped()
249
+ ? $eventRs->last()
250
+ : $exceptionEvent->getResult();
 
 
251
  }
252
 
253
  /**
335
  {
336
  if (!$this->getOptions()->getReadable()) {
337
  $success = false;
338
+ return;
339
  }
340
 
341
  $this->normalizeKey($key);
354
 
355
  try {
356
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
357
 
358
+ if ($eventRs->stopped()) {
359
+ $result = $eventRs->last();
360
+ } elseif ($args->offsetExists('success') && $args->offsetExists('casToken')) {
361
  $result = $this->internalGetItem($args['key'], $args['success'], $args['casToken']);
362
  } elseif ($args->offsetExists('success')) {
363
  $result = $this->internalGetItem($args['key'], $args['success']);
364
  } else {
365
  $result = $this->internalGetItem($args['key']);
366
  }
367
+
368
  return $this->triggerPost(__FUNCTION__, $args, $result);
369
  } catch (\Exception $e) {
370
+ $result = null;
371
+ $success = false;
372
  return $this->triggerException(__FUNCTION__, $args, $result, $e);
373
  }
374
  }
408
 
409
  try {
410
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
411
 
412
+ $result = $eventRs->stopped()
413
+ ? $eventRs->last()
414
+ : $this->internalGetItems($args['keys']);
415
+
416
  return $this->triggerPost(__FUNCTION__, $args, $result);
417
  } catch (\Exception $e) {
418
  $result = array();
465
 
466
  try {
467
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
468
 
469
+ $result = $eventRs->stopped()
470
+ ? $eventRs->last()
471
+ : $this->internalHasItem($args['key']);
472
+
473
  return $this->triggerPost(__FUNCTION__, $args, $result);
474
  } catch (\Exception $e) {
475
  $result = false;
515
 
516
  try {
517
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
518
 
519
+ $result = $eventRs->stopped()
520
+ ? $eventRs->last()
521
+ : $this->internalHasItems($args['keys']);
522
+
523
  return $this->triggerPost(__FUNCTION__, $args, $result);
524
  } catch (\Exception $e) {
525
  $result = array();
569
 
570
  try {
571
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
572
 
573
+ $result = $eventRs->stopped()
574
+ ? $eventRs->last()
575
+ : $this->internalGetMetadata($args['key']);
576
+
577
  return $this->triggerPost(__FUNCTION__, $args, $result);
578
  } catch (\Exception $e) {
579
  $result = false;
621
 
622
  try {
623
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
624
 
625
+ $result = $eventRs->stopped()
626
+ ? $eventRs->last()
627
+ : $this->internalGetMetadatas($args['keys']);
628
+
629
  return $this->triggerPost(__FUNCTION__, $args, $result);
630
  } catch (\Exception $e) {
631
  $result = array();
680
 
681
  try {
682
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
683
 
684
+ $result = $eventRs->stopped()
685
+ ? $eventRs->last()
686
+ : $this->internalSetItem($args['key'], $args['value']);
687
+
688
  return $this->triggerPost(__FUNCTION__, $args, $result);
689
  } catch (\Exception $e) {
690
  $result = false;
726
 
727
  try {
728
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
729
 
730
+ $result = $eventRs->stopped()
731
+ ? $eventRs->last()
732
+ : $this->internalSetItems($args['keyValuePairs']);
733
+
734
  return $this->triggerPost(__FUNCTION__, $args, $result);
735
  } catch (\Exception $e) {
736
  $result = array_keys($keyValuePairs);
782
 
783
  try {
784
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
785
 
786
+ $result = $eventRs->stopped()
787
+ ? $eventRs->last()
788
+ : $this->internalAddItem($args['key'], $args['value']);
789
+
790
  return $this->triggerPost(__FUNCTION__, $args, $result);
791
  } catch (\Exception $e) {
792
  $result = false;
834
 
835
  try {
836
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
837
 
838
+ $result = $eventRs->stopped()
839
+ ? $eventRs->last()
840
+ : $this->internalAddItems($args['keyValuePairs']);
841
+
842
  return $this->triggerPost(__FUNCTION__, $args, $result);
843
  } catch (\Exception $e) {
844
  $result = array_keys($keyValuePairs);
890
 
891
  try {
892
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
893
 
894
+ $result = $eventRs->stopped()
895
+ ? $eventRs->last()
896
+ : $this->internalReplaceItem($args['key'], $args['value']);
897
+
898
  return $this->triggerPost(__FUNCTION__, $args, $result);
899
  } catch (\Exception $e) {
900
  $result = false;
943
 
944
  try {
945
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
946
 
947
+ $result = $eventRs->stopped()
948
+ ? $eventRs->last()
949
+ : $this->internalReplaceItems($args['keyValuePairs']);
950
+
951
  return $this->triggerPost(__FUNCTION__, $args, $result);
952
  } catch (\Exception $e) {
953
  $result = array_keys($keyValuePairs);
1002
 
1003
  try {
1004
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1005
 
1006
+ $result = $eventRs->stopped()
1007
+ ? $eventRs->last()
1008
+ : $this->internalCheckAndSetItem($args['token'], $args['key'], $args['value']);
1009
+
1010
  return $this->triggerPost(__FUNCTION__, $args, $result);
1011
  } catch (\Exception $e) {
1012
  $result = false;
1059
 
1060
  try {
1061
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1062
 
1063
+ $result = $eventRs->stopped()
1064
+ ? $eventRs->last()
1065
+ : $this->internalTouchItem($args['key']);
1066
+
1067
  return $this->triggerPost(__FUNCTION__, $args, $result);
1068
  } catch (\Exception $e) {
1069
  $result = false;
1113
 
1114
  try {
1115
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1116
 
1117
+ $result = $eventRs->stopped()
1118
+ ? $eventRs->last()
1119
+ : $this->internalTouchItems($args['keys']);
1120
+
1121
  return $this->triggerPost(__FUNCTION__, $args, $result);
1122
  } catch (\Exception $e) {
1123
  return $this->triggerException(__FUNCTION__, $args, $keys, $e);
1166
 
1167
  try {
1168
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1169
 
1170
+ $result = $eventRs->stopped()
1171
+ ? $eventRs->last()
1172
+ : $this->internalRemoveItem($args['key']);
1173
+
1174
  return $this->triggerPost(__FUNCTION__, $args, $result);
1175
  } catch (\Exception $e) {
1176
  $result = false;
1211
 
1212
  try {
1213
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1214
 
1215
+ $result = $eventRs->stopped()
1216
+ ? $eventRs->last()
1217
+ : $this->internalRemoveItems($args['keys']);
1218
+
1219
  return $this->triggerPost(__FUNCTION__, $args, $result);
1220
  } catch (\Exception $e) {
1221
  return $this->triggerException(__FUNCTION__, $args, $keys, $e);
1266
 
1267
  try {
1268
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1269
 
1270
+ $result = $eventRs->stopped()
1271
+ ? $eventRs->last()
1272
+ : $this->internalIncrementItem($args['key'], $args['value']);
1273
+
1274
  return $this->triggerPost(__FUNCTION__, $args, $result);
1275
  } catch (\Exception $e) {
1276
  $result = false;
1326
 
1327
  try {
1328
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1329
 
1330
+ $result = $eventRs->stopped()
1331
+ ? $eventRs->last()
1332
+ : $this->internalIncrementItems($args['keyValuePairs']);
1333
+
1334
  return $this->triggerPost(__FUNCTION__, $args, $result);
1335
  } catch (\Exception $e) {
1336
  $result = array();
1383
 
1384
  try {
1385
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1386
 
1387
+ $result = $eventRs->stopped()
1388
+ ? $eventRs->last()
1389
+ : $this->internalDecrementItem($args['key'], $args['value']);
1390
+
1391
  return $this->triggerPost(__FUNCTION__, $args, $result);
1392
  } catch (\Exception $e) {
1393
  $result = false;
1443
 
1444
  try {
1445
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1446
 
1447
+ $result = $eventRs->stopped()
1448
+ ? $eventRs->last()
1449
+ : $this->internalDecrementItems($args['keyValuePairs']);
1450
+
1451
  return $this->triggerPost(__FUNCTION__, $args, $result);
1452
  } catch (\Exception $e) {
1453
  $result = array();
1490
 
1491
  try {
1492
  $eventRs = $this->triggerPre(__FUNCTION__, $args);
 
 
 
1493
 
1494
+ $result = $eventRs->stopped()
1495
+ ? $eventRs->last()
1496
+ : $this->internalGetCapabilities();
1497
+
1498
  return $this->triggerPost(__FUNCTION__, $args, $result);
1499
  } catch (\Exception $e) {
1500
  $result = false;
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/AbstractZendServer.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/AdapterOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Apc.php RENAMED
@@ -221,7 +221,7 @@ class Apc extends AbstractAdapter implements
221
  $result = apc_fetch($internalKey, $success);
222
 
223
  if (!$success) {
224
- return null;
225
  }
226
 
227
  $casToken = $result;
@@ -361,16 +361,19 @@ class Apc extends AbstractAdapter implements
361
 
362
  $options = $this->getOptions();
363
  $namespace = $options->getNamespace();
 
 
364
  if ($namespace === '') {
365
  $pattern = '/^(' . implode('|', $keysRegExp) . ')' . '$/';
366
  } else {
367
  $prefix = $namespace . $options->getNamespaceSeparator();
 
368
  $pattern = '/^' . preg_quote($prefix, '/') . '(' . implode('|', $keysRegExp) . ')' . '$/';
369
  }
 
370
  $format = APC_ITER_ALL ^ APC_ITER_VALUE ^ APC_ITER_TYPE ^ APC_ITER_REFCOUNT;
371
  $it = new BaseApcIterator('user', $pattern, $format, 100, APC_LIST_ACTIVE);
372
  $result = array();
373
- $prefixL = strlen($prefix);
374
  foreach ($it as $internalKey => $metadata) {
375
  // @see http://pecl.php.net/bugs/bug.php?id=22564
376
  if (!apc_exists($internalKey)) {
@@ -378,7 +381,7 @@ class Apc extends AbstractAdapter implements
378
  }
379
 
380
  $this->normalizeMetadata($metadata);
381
- $result[substr($internalKey, $prefixL)] = & $metadata;
382
  }
383
 
384
  return $result;
221
  $result = apc_fetch($internalKey, $success);
222
 
223
  if (!$success) {
224
+ return;
225
  }
226
 
227
  $casToken = $result;
361
 
362
  $options = $this->getOptions();
363
  $namespace = $options->getNamespace();
364
+ $prefixL = 0;
365
+
366
  if ($namespace === '') {
367
  $pattern = '/^(' . implode('|', $keysRegExp) . ')' . '$/';
368
  } else {
369
  $prefix = $namespace . $options->getNamespaceSeparator();
370
+ $prefixL = strlen($prefix);
371
  $pattern = '/^' . preg_quote($prefix, '/') . '(' . implode('|', $keysRegExp) . ')' . '$/';
372
  }
373
+
374
  $format = APC_ITER_ALL ^ APC_ITER_VALUE ^ APC_ITER_TYPE ^ APC_ITER_REFCOUNT;
375
  $it = new BaseApcIterator('user', $pattern, $format, 100, APC_LIST_ACTIVE);
376
  $result = array();
 
377
  foreach ($it as $internalKey => $metadata) {
378
  // @see http://pecl.php.net/bugs/bug.php?id=22564
379
  if (!apc_exists($internalKey)) {
381
  }
382
 
383
  $this->normalizeMetadata($metadata);
384
+ $result[substr($internalKey, $prefixL)] = $metadata;
385
  }
386
 
387
  return $result;
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ApcIterator.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ApcOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/BlackHole.php RENAMED
@@ -113,7 +113,7 @@ class BlackHole implements
113
  public function getItem($key, & $success = null, & $casToken = null)
114
  {
115
  $success = false;
116
- return null;
117
  }
118
 
119
  /**
113
  public function getItem($key, & $success = null, & $casToken = null)
114
  {
115
  $success = false;
116
+ return;
117
  }
118
 
119
  /**
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Dba.php RENAMED
@@ -81,7 +81,7 @@ class Dba extends AbstractAdapter implements
81
  * Set options.
82
  *
83
  * @param array|Traversable|DbaOptions $options
84
- * @return Apc
85
  * @see getOptions()
86
  */
87
  public function setOptions($options)
@@ -153,7 +153,7 @@ class Dba extends AbstractAdapter implements
153
  /**
154
  * Get available space in bytes
155
  *
156
- * @return int|float
157
  */
158
  public function getAvailableSpace()
159
  {
@@ -264,7 +264,8 @@ class Dba extends AbstractAdapter implements
264
 
265
  $this->_open();
266
 
267
- do { // Workaround for PHP-Bug #62491 & #62492
 
268
  $recheck = false;
269
  $internalKey = dba_firstkey($this->handle);
270
  while ($internalKey !== false && $internalKey !== null) {
@@ -285,7 +286,7 @@ class Dba extends AbstractAdapter implements
285
  /**
286
  * Get the storage iterator
287
  *
288
- * @return ApcIterator
289
  */
290
  public function getIterator()
291
  {
@@ -335,7 +336,7 @@ class Dba extends AbstractAdapter implements
335
 
336
  if ($value === false) {
337
  $success = false;
338
- return null;
339
  }
340
 
341
  $success = true;
@@ -377,8 +378,10 @@ class Dba extends AbstractAdapter implements
377
  $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator();
378
  $internalKey = $prefix . $normalizedKey;
379
 
 
 
380
  $this->_open();
381
- if (!dba_replace($internalKey, $value, $this->handle)) {
382
  throw new Exception\RuntimeException("dba_replace('{$internalKey}', ...) failed");
383
  }
384
 
81
  * Set options.
82
  *
83
  * @param array|Traversable|DbaOptions $options
84
+ * @return self
85
  * @see getOptions()
86
  */
87
  public function setOptions($options)
153
  /**
154
  * Get available space in bytes
155
  *
156
+ * @return float
157
  */
158
  public function getAvailableSpace()
159
  {
264
 
265
  $this->_open();
266
 
267
+ // Workaround for PHP-Bug #62491 & #62492
268
+ do {
269
  $recheck = false;
270
  $internalKey = dba_firstkey($this->handle);
271
  while ($internalKey !== false && $internalKey !== null) {
286
  /**
287
  * Get the storage iterator
288
  *
289
+ * @return DbaIterator
290
  */
291
  public function getIterator()
292
  {
336
 
337
  if ($value === false) {
338
  $success = false;
339
+ return;
340
  }
341
 
342
  $success = true;
378
  $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator();
379
  $internalKey = $prefix . $normalizedKey;
380
 
381
+ $cacheableValue = (string) $value; // dba_replace requires a string
382
+
383
  $this->_open();
384
+ if (!dba_replace($internalKey, $cacheableValue, $this->handle)) {
385
  throw new Exception\RuntimeException("dba_replace('{$internalKey}', ...) failed");
386
  }
387
 
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/DbaIterator.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/DbaOptions.php RENAMED
@@ -117,6 +117,12 @@ class DbaOptions extends AdapterOptions
117
  throw new Exception\ExtensionNotLoadedException("DBA-Handler '{$handler}' not supported");
118
  }
119
 
 
 
 
 
 
 
120
  $this->triggerOptionEvent('handler', $handler);
121
  $this->handler = $handler;
122
  return $this;
117
  throw new Exception\ExtensionNotLoadedException("DBA-Handler '{$handler}' not supported");
118
  }
119
 
120
+ if ($handler === 'inifile') {
121
+ throw new Exception\ExtensionNotLoadedException(
122
+ "DBA-Handler 'inifile' does not reliably support write operations"
123
+ );
124
+ }
125
+
126
  $this->triggerOptionEvent('handler', $handler);
127
  $this->handler = $handler;
128
  return $this;
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Filesystem.php RENAMED
@@ -150,27 +150,23 @@ class Filesystem extends AbstractAdapter implements
150
 
151
  ErrorHandler::start();
152
  foreach ($glob as $entry) {
153
- $mtime = $entry->getMTime();
154
- if ($time >= $mtime + $ttl) {
155
- $pathname = $entry->getPathname();
156
- unlink($pathname);
 
157
 
158
- $tagPathname = substr($pathname, 0, -4) . '.tag';
159
- if (file_exists($tagPathname)) {
160
- unlink($tagPathname);
 
161
  }
162
  }
 
 
 
163
  }
164
  $error = ErrorHandler::stop();
165
- if ($error) {
166
- $result = false;
167
- return $this->triggerException(
168
- __FUNCTION__,
169
- new ArrayObject(),
170
- $result,
171
- new Exception\RuntimeException('Failed to clear expired items', 0, $error)
172
- );
173
- }
174
 
175
  return true;
176
  }
@@ -433,7 +429,7 @@ class Filesystem extends AbstractAdapter implements
433
  * Get available space in bytes
434
  *
435
  * @throws Exception\RuntimeException
436
- * @return int|float
437
  */
438
  public function getAvailableSpace()
439
  {
@@ -508,14 +504,15 @@ class Filesystem extends AbstractAdapter implements
508
  * @param string $normalizedKey
509
  * @param bool $success
510
  * @param mixed $casToken
511
- * @return mixed Data on success, null on failure
512
  * @throws Exception\ExceptionInterface
 
513
  */
514
  protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null)
515
  {
516
  if (!$this->internalHasItem($normalizedKey)) {
517
  $success = false;
518
- return null;
519
  }
520
 
521
  try {
@@ -915,8 +912,6 @@ class Filesystem extends AbstractAdapter implements
915
  */
916
  protected function internalSetItems(array & $normalizedKeyValuePairs)
917
  {
918
- $oldUmask = null;
919
-
920
  // create an associated array of files and contents to write
921
  $contents = array();
922
  foreach ($normalizedKeyValuePairs as $key => & $value) {
@@ -1499,6 +1494,11 @@ class Filesystem extends AbstractAdapter implements
1499
  */
1500
  protected function putFileContent($file, $data, $nonBlocking = false, & $wouldblock = null)
1501
  {
 
 
 
 
 
1502
  $options = $this->getOptions();
1503
  $locking = $options->getFileLocking();
1504
  $nonBlocking = $locking && $nonBlocking;
150
 
151
  ErrorHandler::start();
152
  foreach ($glob as $entry) {
153
+ try {
154
+ $mtime = $entry->getMTime();
155
+ if ($time >= $mtime + $ttl) {
156
+ $pathname = $entry->getPathname();
157
+ unlink($pathname);
158
 
159
+ $tagPathname = substr($pathname, 0, -4) . '.tag';
160
+ if (file_exists($tagPathname)) {
161
+ unlink($tagPathname);
162
+ }
163
  }
164
  }
165
+ // TEMPORARY FIX: Disregard any exceptions because a race condition in ZendCache
166
+ // throws too many errors and the ErrorHandler is not able to catch them.
167
+ catch (\Exception $e) {}
168
  }
169
  $error = ErrorHandler::stop();
 
 
 
 
 
 
 
 
 
170
 
171
  return true;
172
  }
429
  * Get available space in bytes
430
  *
431
  * @throws Exception\RuntimeException
432
+ * @return float
433
  */
434
  public function getAvailableSpace()
435
  {
504
  * @param string $normalizedKey
505
  * @param bool $success
506
  * @param mixed $casToken
507
+ * @return null|mixed Data on success, null on failure
508
  * @throws Exception\ExceptionInterface
509
+ * @throws BaseException
510
  */
511
  protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null)
512
  {
513
  if (!$this->internalHasItem($normalizedKey)) {
514
  $success = false;
515
+ return;
516
  }
517
 
518
  try {
912
  */
913
  protected function internalSetItems(array & $normalizedKeyValuePairs)
914
  {
 
 
915
  // create an associated array of files and contents to write
916
  $contents = array();
917
  foreach ($normalizedKeyValuePairs as $key => & $value) {
1494
  */
1495
  protected function putFileContent($file, $data, $nonBlocking = false, & $wouldblock = null)
1496
  {
1497
+ if (! is_string($data)) {
1498
+ // Ensure we have a string
1499
+ $data = (string) $data;
1500
+ }
1501
+
1502
  $options = $this->getOptions();
1503
  $locking = $options->getFileLocking();
1504
  $nonBlocking = $locking && $nonBlocking;
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/FilesystemIterator.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/FilesystemOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/KeyListIterator.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Memcache.php RENAMED
@@ -67,7 +67,7 @@ class Memcache extends AbstractAdapter implements
67
 
68
  // reset initialized flag on update option(s)
69
  $initialized = & $this->initialized;
70
- $this->getEventManager()->attach('option', function ($event) use (& $initialized) {
71
  $initialized = false;
72
  });
73
  }
@@ -220,7 +220,7 @@ class Memcache extends AbstractAdapter implements
220
  $result = $memc->get($internalKey);
221
  $success = ($result !== false);
222
  if ($result === false) {
223
- return null;
224
  }
225
 
226
  $casToken = $result;
67
 
68
  // reset initialized flag on update option(s)
69
  $initialized = & $this->initialized;
70
+ $this->getEventManager()->attach('option', function () use (& $initialized) {
71
  $initialized = false;
72
  });
73
  }
220
  $result = $memc->get($internalKey);
221
  $success = ($result !== false);
222
  if ($result === false) {
223
+ return;
224
  }
225
 
226
  $casToken = $result;
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcacheOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcacheResourceManager.php RENAMED
@@ -95,6 +95,8 @@ class MemcacheResourceManager
95
  *
96
  * @param string $id
97
  * @param array|Traversable|MemcacheResource $resource
 
 
98
  * @return MemcacheResourceManager
99
  */
100
  public function setResource($id, $resource, $failureCallback = null, $serverDefaults = array())
@@ -184,7 +186,8 @@ class MemcacheResourceManager
184
  * Set compress threshold on a Memcache resource
185
  *
186
  * @param MemcacheResource $resource
187
- * @param array $libOptions
 
188
  */
189
  protected function setResourceAutoCompressThreshold(MemcacheResource $resource, $threshold, $minSavings)
190
  {
@@ -396,7 +399,7 @@ class MemcacheResourceManager
396
  * Get callback for server connection failures
397
  *
398
  * @param string $id
399
- * @return callable|null
400
  * @throws Exception\RuntimeException
401
  */
402
  public function getFailureCallback($id)
95
  *
96
  * @param string $id
97
  * @param array|Traversable|MemcacheResource $resource
98
+ * @param callable $failureCallback
99
+ * @param array|Traversable $serverDefaults
100
  * @return MemcacheResourceManager
101
  */
102
  public function setResource($id, $resource, $failureCallback = null, $serverDefaults = array())
186
  * Set compress threshold on a Memcache resource
187
  *
188
  * @param MemcacheResource $resource
189
+ * @param int $threshold
190
+ * @param float $minSavings
191
  */
192
  protected function setResourceAutoCompressThreshold(MemcacheResource $resource, $threshold, $minSavings)
193
  {
399
  * Get callback for server connection failures
400
  *
401
  * @param string $id
402
+ * @return callable
403
  * @throws Exception\RuntimeException
404
  */
405
  public function getFailureCallback($id)
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Memcached.php RENAMED
@@ -79,7 +79,7 @@ class Memcached extends AbstractAdapter implements
79
 
80
  // reset initialized flag on update option(s)
81
  $initialized = & $this->initialized;
82
- $this->getEventManager()->attach('option', function ($event) use (& $initialized) {
83
  $initialized = false;
84
  });
85
  }
79
 
80
  // reset initialized flag on update option(s)
81
  $initialized = & $this->initialized;
82
+ $this->getEventManager()->attach('option', function () use (& $initialized) {
83
  $initialized = false;
84
  });
85
  }
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcachedOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemcachedResourceManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Memory.php RENAMED
@@ -84,7 +84,7 @@ class Memory extends AbstractAdapter implements
84
  /**
85
  * Get total space in bytes
86
  *
87
- * @return int|float
88
  */
89
  public function getTotalSpace()
90
  {
@@ -307,7 +307,7 @@ class Memory extends AbstractAdapter implements
307
  }
308
 
309
  if (!$success) {
310
- return null;
311
  }
312
 
313
  $casToken = $data[0];
84
  /**
85
  * Get total space in bytes
86
  *
87
+ * @return int
88
  */
89
  public function getTotalSpace()
90
  {
307
  }
308
 
309
  if (!$success) {
310
+ return;
311
  }
312
 
313
  $casToken = $data[0];
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/MemoryOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/src/Storage/Adapter/MongoDb.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Cache\Storage\Adapter;
11
+
12
+ use MongoCollection as MongoResource;
13
+ use MongoDate;
14
+ use MongoException as MongoResourceException;
15
+ use stdClass;
16
+ use Zend\Cache\Exception;
17
+ use Zend\Cache\Storage\Capabilities;
18
+ use Zend\Cache\Storage\FlushableInterface;
19
+
20
+ class MongoDb extends AbstractAdapter implements FlushableInterface
21
+ {
22
+ /**
23
+ * Has this instance be initialized
24
+ *
25
+ * @var bool
26
+ */
27
+ private $initialized = false;
28
+
29
+ /**
30
+ * the mongodb resource manager
31
+ *
32
+ * @var null|MongoDbResourceManager
33
+ */
34
+ private $resourceManager;
35
+
36
+ /**
37
+ * The mongodb resource id
38
+ *
39
+ * @var null|string
40
+ */
41
+ private $resourceId;
42
+
43
+ /**
44
+ * The namespace prefix
45
+ *
46
+ * @var string
47
+ */
48
+ private $namespacePrefix = '';
49
+
50
+ /**
51
+ * {@inheritDoc}
52
+ *
53
+ * @throws Exception\ExtensionNotLoadedException
54
+ */
55
+ public function __construct($options = null)
56
+ {
57
+ if (!class_exists('Mongo') || !class_exists('MongoClient')) {
58
+ throw new Exception\ExtensionNotLoadedException('MongoDb extension not loaded or Mongo polyfill not included');
59
+ }
60
+
61
+ parent::__construct($options);
62
+
63
+ $initialized = & $this->initialized;
64
+
65
+ $this->getEventManager()->attach(
66
+ 'option',
67
+ function () use (& $initialized) {
68
+ $initialized = false;
69
+ }
70
+ );
71
+ }
72
+
73
+ /**
74
+ * get mongodb resource
75
+ *
76
+ * @return MongoResource
77
+ */
78
+ private function getMongoDbResource()
79
+ {
80
+ if (! $this->initialized) {
81
+ $options = $this->getOptions();
82
+
83
+ $this->resourceManager = $options->getResourceManager();
84
+ $this->resourceId = $options->getResourceId();
85
+ $namespace = $options->getNamespace();
86
+ $this->namespacePrefix = ($namespace === '' ? '' : $namespace . $options->getNamespaceSeparator());
87
+ $this->initialized = true;
88
+ }
89
+
90
+ return $this->resourceManager->getResource($this->resourceId);
91
+ }
92
+
93
+ /**
94
+ * {@inheritDoc}
95
+ */
96
+ public function setOptions($options)
97
+ {
98
+ return parent::setOptions($options instanceof MongoDbOptions ? $options : new MongoDbOptions($options));
99
+ }
100
+
101
+ /**
102
+ * Get options.
103
+ *
104
+ * @return MongoDbOptions
105
+ * @see setOptions()
106
+ */
107
+ public function getOptions()
108
+ {
109
+ return $this->options;
110
+ }
111
+
112
+ /**
113
+ * {@inheritDoc}
114
+ *
115
+ * @throws Exception\RuntimeException
116
+ */
117
+ protected function internalGetItem(& $normalizedKey, & $success = null, & $casToken = null)
118
+ {
119
+ $result = $this->fetchFromCollection($normalizedKey);
120
+ $success = false;
121
+
122
+ if (null === $result) {
123
+ return;
124
+ }
125
+
126
+ if (isset($result['expires'])) {
127
+ if (! $result['expires'] instanceof MongoDate) {
128
+ throw new Exception\RuntimeException(sprintf(
129
+ "The found item _id '%s' for key '%s' is not a valid cache item"
130
+ . ": the field 'expired' isn't an instance of MongoDate, '%s' found instead",
131
+ (string) $result['_id'],
132
+ $this->namespacePrefix . $normalizedKey,
133
+ is_object($result['expires']) ? get_class($result['expires']) : gettype($result['expires'])
134
+ ));
135
+ }
136
+
137
+ if ($result['expires']->sec < time()) {
138
+ $this->internalRemoveItem($key);
139
+
140
+ return;
141
+ }
142
+ }
143
+
144
+ if (! array_key_exists('value', $result)) {
145
+ throw new Exception\RuntimeException(sprintf(
146
+ "The found item _id '%s' for key '%s' is not a valid cache item: missing the field 'value'",
147
+ (string) $result['_id'],
148
+ $this->namespacePrefix . $normalizedKey
149
+ ));
150
+ }
151
+
152
+ $success = true;
153
+
154
+ return $casToken = $result['value'];
155
+ }
156
+
157
+ /**
158
+ * {@inheritDoc}
159
+ *
160
+ * @throws Exception\RuntimeException
161
+ */
162
+ protected function internalSetItem(& $normalizedKey, & $value)
163
+ {
164
+ $mongo = $this->getMongoDbResource();
165
+ $key = $this->namespacePrefix . $normalizedKey;
166
+ $ttl = $this->getOptions()->getTTl();
167
+ $expires = null;
168
+ $cacheItem = array(
169
+ 'key' => $key,
170
+ 'value' => $value,
171
+ );
172
+
173
+ if ($ttl > 0) {
174
+ $expiresMicro = microtime(true) + $ttl;
175
+ $expiresSecs = (int) $expiresMicro;
176
+ $cacheItem['expires'] = new MongoDate($expiresSecs, $expiresMicro - $expiresSecs);
177
+ }
178
+
179
+ try {
180
+ $mongo->remove(array('key' => $key));
181
+
182
+ $result = $mongo->insert($cacheItem);
183
+ } catch (MongoResourceException $e) {
184
+ throw new Exception\RuntimeException($e->getMessage(), $e->getCode(), $e);
185
+ }
186
+
187
+ return null !== $result && ((double) 1) === $result['ok'];
188
+ }
189
+
190
+ /**
191
+ * {@inheritDoc}
192
+ *
193
+ * @throws Exception\RuntimeException
194
+ */
195
+ protected function internalRemoveItem(& $normalizedKey)
196
+ {
197
+ try {
198
+ $result = $this->getMongoDbResource()->remove(array('key' => $this->namespacePrefix . $normalizedKey));
199
+ } catch (MongoResourceException $e) {
200
+ throw new Exception\RuntimeException($e->getMessage(), $e->getCode(), $e);
201
+ }
202
+
203
+ return false !== $result
204
+ && ((double) 1) === $result['ok']
205
+ && $result['n'] > 0;
206
+ }
207
+
208
+ /**
209
+ * {@inheritDoc}
210
+ */
211
+ public function flush()
212
+ {
213
+ $result = $this->getMongoDbResource()->drop();
214
+
215
+ return ((double) 1) === $result['ok'];
216
+ }
217
+
218
+ /**
219
+ * {@inheritDoc}
220
+ */
221
+ protected function internalGetCapabilities()
222
+ {
223
+ if ($this->capabilities) {
224
+ return $this->capabilities;
225
+ }
226
+
227
+ return $this->capabilities = new Capabilities(
228
+ $this,
229
+ $this->capabilityMarker = new stdClass(),
230
+ array(
231
+ 'supportedDatatypes' => array(
232
+ 'NULL' => true,
233
+ 'boolean' => true,
234
+ 'integer' => true,
235
+ 'double' => true,
236
+ 'string' => true,
237
+ 'array' => true,
238
+ 'object' => false,
239
+ 'resource' => false,
240
+ ),
241
+ 'supportedMetadata' => array(
242
+ '_id',
243
+ ),
244
+ 'minTtl' => 0,
245
+ 'maxTtl' => 0,
246
+ 'staticTtl' => true,
247
+ 'ttlPrecision' => 1,
248
+ 'useRequestTime' => false,
249
+ 'expiredRead' => false,
250
+ 'maxKeyLength' => 255,
251
+ 'namespaceIsPrefix' => true,
252
+ )
253
+ );
254
+ }
255
+
256
+ /**
257
+ * {@inheritDoc}
258
+ *
259
+ * @throws Exception\ExceptionInterface
260
+ */
261
+ protected function internalGetMetadata(& $normalizedKey)
262
+ {
263
+ $result = $this->fetchFromCollection($normalizedKey);
264
+
265
+ return null !== $result ? array('_id' => $result['_id']) : false;
266
+ }
267
+
268
+ /**
269
+ * Return raw records from MongoCollection
270
+ *
271
+ * @param string $normalizedKey
272
+ *
273
+ * @return array|null
274
+ *
275
+ * @throws Exception\RuntimeException
276
+ */
277
+ private function fetchFromCollection(& $normalizedKey)
278
+ {
279
+ try {
280
+ return $this->getMongoDbResource()->findOne(array('key' => $this->namespacePrefix . $normalizedKey));
281
+ } catch (MongoResourceException $e) {
282
+ throw new Exception\RuntimeException($e->getMessage(), $e->getCode(), $e);
283
+ }
284
+ }
285
+ }
backend/vendor/zendframework/zend-cache/src/Storage/Adapter/MongoDbOptions.php ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Cache\Storage\Adapter;
11
+
12
+ class MongoDbOptions extends AdapterOptions
13
+ {
14
+ /**
15
+ * The namespace separator
16
+ *
17
+ * @var string
18
+ */
19
+ private $namespaceSeparator = ':';
20
+
21
+ /**
22
+ * The mongo DB resource manager
23
+ *
24
+ * @var null|MongoDbResourceManager
25
+ */
26
+ private $resourceManager;
27
+
28
+ /**
29
+ * The resource id of the resource manager
30
+ *
31
+ * @var string
32
+ */
33
+ private $resourceId = 'default';
34
+
35
+ /**
36
+ * Set namespace separator
37
+ *
38
+ * @param string $namespaceSeparator
39
+ *
40
+ * @return self
41
+ */
42
+ public function setNamespaceSeparator($namespaceSeparator)
43
+ {
44
+ $namespaceSeparator = (string) $namespaceSeparator;
45
+
46
+ if ($this->namespaceSeparator !== $namespaceSeparator) {
47
+ $this->triggerOptionEvent('namespace_separator', $namespaceSeparator);
48
+
49
+ $this->namespaceSeparator = $namespaceSeparator;
50
+ }
51
+
52
+ return $this;
53
+ }
54
+
55
+ /**
56
+ * Get namespace separator
57
+ *
58
+ * @return string
59
+ */
60
+ public function getNamespaceSeparator()
61
+ {
62
+ return $this->namespaceSeparator;
63
+ }
64
+
65
+ /**
66
+ * Set the mongodb resource manager to use
67
+ *
68
+ * @param null|MongoDbResourceManager $resourceManager
69
+ *
70
+ * @return self
71
+ */
72
+ public function setResourceManager(MongoDbResourceManager $resourceManager = null)
73
+ {
74
+ if ($this->resourceManager !== $resourceManager) {
75
+ $this->triggerOptionEvent('resource_manager', $resourceManager);
76
+
77
+ $this->resourceManager = $resourceManager;
78
+ }
79
+
80
+ return $this;
81
+ }
82
+
83
+ /**
84
+ * Get the mongodb resource manager
85
+ *
86
+ * @return MongoDbResourceManager
87
+ */
88
+ public function getResourceManager()
89
+ {
90
+ return $this->resourceManager ?: $this->resourceManager = new MongoDbResourceManager();
91
+ }
92
+
93
+ /**
94
+ * Get the mongodb resource id
95
+ *
96
+ * @return string
97
+ */
98
+ public function getResourceId()
99
+ {
100
+ return $this->resourceId;
101
+ }
102
+
103
+ /**
104
+ * Set the mongodb resource id
105
+ *
106
+ * @param string $resourceId
107
+ *
108
+ * @return self
109
+ */
110
+ public function setResourceId($resourceId)
111
+ {
112
+ $resourceId = (string) $resourceId;
113
+
114
+ if ($this->resourceId !== $resourceId) {
115
+ $this->triggerOptionEvent('resource_id', $resourceId);
116
+
117
+ $this->resourceId = $resourceId;
118
+ }
119
+
120
+ return $this;
121
+ }
122
+
123
+ /**
124
+ * Set the mongo DB server
125
+ *
126
+ * @param string $server
127
+ * @return self
128
+ */
129
+ public function setServer($server)
130
+ {
131
+ $this->getResourceManager()->setServer($this->getResourceId(), $server);
132
+ return $this;
133
+ }
134
+
135
+ public function setConnectionOptions(array $connectionOptions)
136
+ {
137
+ $this->getResourceManager()->setConnectionOptions($this->getResourceId(), $connectionOptions);
138
+ return $this;
139
+ }
140
+
141
+ public function setDriverOptions(array $driverOptions)
142
+ {
143
+ $this->getResourceManager()->setDriverOptions($this->getResourceId(), $driverOptions);
144
+ return $this;
145
+ }
146
+
147
+ public function setDatabase($database)
148
+ {
149
+ $this->getResourceManager()->setDatabase($this->getResourceId(), $database);
150
+ return $this;
151
+ }
152
+
153
+ public function setCollection($collection)
154
+ {
155
+ $this->getResourceManager()->setCollection($this->getResourceId(), $collection);
156
+ return $this;
157
+ }
158
+ }
backend/vendor/zendframework/zend-cache/src/Storage/Adapter/MongoDbResourceManager.php ADDED
@@ -0,0 +1,204 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Cache\Storage\Adapter;
11
+
12
+ use MongoCollection;
13
+ use MongoException;
14
+ use Zend\Cache\Exception;
15
+
16
+ class MongoDbResourceManager
17
+ {
18
+ /**
19
+ * Registered resources
20
+ *
21
+ * @var array[]
22
+ */
23
+ private $resources = array();
24
+
25
+ /**
26
+ * Check if a resource exists
27
+ *
28
+ * @param string $id
29
+ *
30
+ * @return bool
31
+ */
32
+ public function hasResource($id)
33
+ {
34
+ return isset($this->resources[$id]);
35
+ }
36
+
37
+ /**
38
+ * Set a resource
39
+ *
40
+ * @param string $id
41
+ * @param array|MongoCollection $resource
42
+ *
43
+ * @return self
44
+ *
45
+ * @throws Exception\RuntimeException
46
+ */
47
+ public function setResource($id, $resource)
48
+ {
49
+ if ($resource instanceof MongoCollection) {
50
+ $this->resources[$id] = array(
51
+ 'db' => (string) $resource->db,
52
+ 'db_instance' => $resource->db,
53
+ 'collection' => (string) $resource,
54
+ 'collection_instance' => $resource,
55
+ );
56
+ return $this;
57
+ }
58
+
59
+ if (! is_array($resource)) {
60
+ throw new Exception\InvalidArgumentException(sprintf(
61
+ '%s expects an array or MongoCollection; received %s',
62
+ __METHOD__,
63
+ (is_object($resource) ? get_class($resource) : gettype($resource))
64
+ ));
65
+ }
66
+
67
+ $this->resources[$id] = $resource;
68
+ return $this;
69
+ }
70
+
71
+ /**
72
+ * Instantiate and return the MongoCollection resource
73
+ *
74
+ * @param string $id
75
+ * @return MongoCollection
76
+ * @throws Exception\RuntimeException
77
+ */
78
+ public function getResource($id)
79
+ {
80
+ if (!$this->hasResource($id)) {
81
+ throw new Exception\RuntimeException("No resource with id '{$id}'");
82
+ }
83
+
84
+ $resource = $this->resources[$id];
85
+ if (!isset($resource['collection_instance'])) {
86
+ try {
87
+ if (!isset($resource['db_instance'])) {
88
+ if (!isset($resource['client_instance'])) {
89
+ $clientClass = version_compare(phpversion('mongo'), '1.3.0', '<') ? 'Mongo' : 'MongoClient';
90
+ $resource['client_instance'] = new $clientClass(
91
+ isset($resource['server']) ? $resource['server'] : null,
92
+ isset($resource['connection_options']) ? $resource['connection_options'] : array(),
93
+ isset($resource['driver_options']) ? $resource['driver_options'] : array()
94
+ );
95
+ }
96
+
97
+ $resource['db_instance'] = $resource['client_instance']->selectDB(
98
+ isset($resource['db']) ? $resource['db'] : ''
99
+ );
100
+ }
101
+
102
+ $collection = $resource['db_instance']->selectCollection(
103
+ isset($resource['collection']) ? $resource['collection'] : ''
104
+ );
105
+ $collection->ensureIndex(array('key' => 1));
106
+
107
+ $this->resources[$id]['collection_instance'] = $collection;
108
+ } catch (MongoException $e) {
109
+ throw new Exception\RuntimeException($e->getMessage(), $e->getCode(), $e);
110
+ }
111
+ }
112
+
113
+ return $this->resources[$id]['collection_instance'];
114
+ }
115
+
116
+ public function setServer($id, $server)
117
+ {
118
+ $this->resources[$id]['server'] = (string)$server;
119
+
120
+ unset($this->resource[$id]['client_instance']);
121
+ unset($this->resource[$id]['db_instance']);
122
+ unset($this->resource[$id]['collection_instance']);
123
+ }
124
+
125
+ public function getServer($id)
126
+ {
127
+ if (!$this->hasResource($id)) {
128
+ throw new Exception\RuntimeException("No resource with id '{$id}'");
129
+ }
130
+
131
+ return isset($this->resources[$id]['server']) ? $this->resources[$id]['server'] : null;
132
+ }
133
+
134
+ public function setConnectionOptions($id, array $connectionOptions)
135
+ {
136
+ $this->resources[$id]['connection_options'] = $connectionOptions;
137
+
138
+ unset($this->resource[$id]['client_instance']);
139
+ unset($this->resource[$id]['db_instance']);
140
+ unset($this->resource[$id]['collection_instance']);
141
+ }
142
+
143
+ public function getConnectionOptions($id)
144
+ {
145
+ if (!$this->hasResource($id)) {
146
+ throw new Exception\RuntimeException("No resource with id '{$id}'");
147
+ }
148
+
149
+ return isset($this->resources[$id]['connection_options'])
150
+ ? $this->resources[$id]['connection_options']
151
+ : array();
152
+ }
153
+
154
+ public function setDriverOptions($id, array $driverOptions)
155
+ {
156
+ $this->resources[$id]['driver_options'] = $driverOptions;
157
+
158
+ unset($this->resource[$id]['client_instance']);
159
+ unset($this->resource[$id]['db_instance']);
160
+ unset($this->resource[$id]['collection_instance']);
161
+ }
162
+
163
+ public function getDriverOptions($id)
164
+ {
165
+ if (!$this->hasResource($id)) {
166
+ throw new Exception\RuntimeException("No resource with id '{$id}'");
167
+ }
168
+
169
+ return isset($this->resources[$id]['driver_options']) ? $this->resources[$id]['driver_options'] : array();
170
+ }
171
+
172
+ public function setDatabase($id, $database)
173
+ {
174
+ $this->resources[$id]['db'] = (string)$database;
175
+
176
+ unset($this->resource[$id]['db_instance']);
177
+ unset($this->resource[$id]['collection_instance']);
178
+ }
179
+
180
+ public function getDatabase($id)
181
+ {
182
+ if (!$this->hasResource($id)) {
183
+ throw new Exception\RuntimeException("No resource with id '{$id}'");
184
+ }
185
+
186
+ return isset($this->resources[$id]['db']) ? $this->resources[$id]['db'] : '';
187
+ }
188
+
189
+ public function setCollection($id, $collection)
190
+ {
191
+ $this->resources[$id]['collection'] = (string)$collection;
192
+
193
+ unset($this->resource[$id]['collection_instance']);
194
+ }
195
+
196
+ public function getCollection($id)
197
+ {
198
+ if (!$this->hasResource($id)) {
199
+ throw new Exception\RuntimeException("No resource with id '{$id}'");
200
+ }
201
+
202
+ return isset($this->resources[$id]['collection']) ? $this->resources[$id]['collection'] : '';
203
+ }
204
+ }
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Redis.php RENAMED
@@ -13,12 +13,14 @@ use Redis as RedisResource;
13
  use RedisException as RedisResourceException;
14
  use stdClass;
15
  use Traversable;
 
16
  use Zend\Cache\Exception;
17
  use Zend\Cache\Storage\Capabilities;
18
  use Zend\Cache\Storage\FlushableInterface;
19
  use Zend\Cache\Storage\TotalSpaceCapableInterface;
20
 
21
  class Redis extends AbstractAdapter implements
 
22
  FlushableInterface,
23
  TotalSpaceCapableInterface
24
  {
@@ -66,7 +68,7 @@ class Redis extends AbstractAdapter implements
66
 
67
  // reset initialized flag on update option(s)
68
  $initialized = & $this->initialized;
69
- $this->getEventManager()->attach('option', function ($event) use (& $initialized) {
70
  $initialized = false;
71
  });
72
  }
@@ -151,7 +153,7 @@ class Redis extends AbstractAdapter implements
151
 
152
  if ($value === false) {
153
  $success = false;
154
- return null;
155
  }
156
 
157
  $success = true;
@@ -368,6 +370,32 @@ class Redis extends AbstractAdapter implements
368
  }
369
  }
370
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
371
  /* TotalSpaceCapableInterface */
372
 
373
  /**
13
  use RedisException as RedisResourceException;
14
  use stdClass;
15
  use Traversable;
16
+ use Zend\Cache\Storage\ClearByPrefixInterface;
17
  use Zend\Cache\Exception;
18
  use Zend\Cache\Storage\Capabilities;
19
  use Zend\Cache\Storage\FlushableInterface;
20
  use Zend\Cache\Storage\TotalSpaceCapableInterface;
21
 
22
  class Redis extends AbstractAdapter implements
23
+ ClearByPrefixInterface,
24
  FlushableInterface,
25
  TotalSpaceCapableInterface
26
  {
68
 
69
  // reset initialized flag on update option(s)
70
  $initialized = & $this->initialized;
71
+ $this->getEventManager()->attach('option', function () use (& $initialized) {
72
  $initialized = false;
73
  });
74
  }
153
 
154
  if ($value === false) {
155
  $success = false;
156
+ return;
157
  }
158
 
159
  $success = true;
370
  }
371
  }
372
 
373
+ /* ClearByPrefixInterface */
374
+
375
+ /**
376
+ * Remove items matching given prefix
377
+ *
378
+ * @param string $prefix
379
+ * @return bool
380
+ */
381
+ public function clearByPrefix($prefix)
382
+ {
383
+ $redis = $this->getRedisResource();
384
+
385
+ $prefix = (string) $prefix;
386
+ if ($prefix === '') {
387
+ throw new Exception\InvalidArgumentException('No prefix given');
388
+ }
389
+
390
+ $options = $this->getOptions();
391
+ $namespace = $options->getNamespace();
392
+ $prefix = ($namespace === '') ? '' : $namespace . $options->getNamespaceSeparator() . $prefix;
393
+
394
+ $redis->delete($redis->keys($prefix.'*'));
395
+
396
+ return true;
397
+ }
398
+
399
  /* TotalSpaceCapableInterface */
400
 
401
  /**
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/RedisOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/RedisResourceManager.php RENAMED
@@ -105,7 +105,7 @@ class RedisResourceManager
105
  * Gets a redis resource
106
  *
107
  * @param string $id
108
- * @return RedisResource
109
  * @throws Exception\RuntimeException
110
  */
111
  public function getResource($id)
@@ -233,14 +233,14 @@ class RedisResourceManager
233
  }
234
 
235
  if (! is_string($serverUri)) {
236
- return null;
237
  }
238
 
239
  // parse server from URI host{:?port}
240
  $server = trim($serverUri);
241
 
242
  if (strpos($server, '/') === 0) {
243
- return null;
244
  }
245
 
246
  //non unix domain socket connection
@@ -627,7 +627,7 @@ class RedisResourceManager
627
  *
628
  * @param string $id
629
  * @param int $database
630
- * @return RedisResource
631
  */
632
  public function setDatabase($id, $database)
633
  {
105
  * Gets a redis resource
106
  *
107
  * @param string $id
108
+ * @return RedisResourceManager
109
  * @throws Exception\RuntimeException
110
  */
111
  public function getResource($id)
233
  }
234
 
235
  if (! is_string($serverUri)) {
236
+ return;
237
  }
238
 
239
  // parse server from URI host{:?port}
240
  $server = trim($serverUri);
241
 
242
  if (strpos($server, '/') === 0) {
243
+ return;
244
  }
245
 
246
  //non unix domain socket connection
627
  *
628
  * @param string $id
629
  * @param int $database
630
+ * @return RedisResourceManager
631
  */
632
  public function setDatabase($id, $database)
633
  {
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/Session.php RENAMED
@@ -152,13 +152,13 @@ class Session extends AbstractAdapter implements
152
 
153
  if (!$cntr->offsetExists($ns)) {
154
  $success = false;
155
- return null;
156
  }
157
 
158
  $data = $cntr->offsetGet($ns);
159
  $success = array_key_exists($normalizedKey, $data);
160
  if (!$success) {
161
- return null;
162
  }
163
 
164
  $casToken = $value = $data[$normalizedKey];
152
 
153
  if (!$cntr->offsetExists($ns)) {
154
  $success = false;
155
+ return;
156
  }
157
 
158
  $data = $cntr->offsetGet($ns);
159
  $success = array_key_exists($normalizedKey, $data);
160
  if (!$success) {
161
+ return;
162
  }
163
 
164
  $casToken = $value = $data[$normalizedKey];
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/SessionOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/WinCache.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/WinCacheOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/XCache.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/XCacheOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ZendServerDisk.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Adapter/ZendServerShm.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/AdapterPluginManager.php RENAMED
@@ -34,6 +34,7 @@ class AdapterPluginManager extends AbstractPluginManager
34
  'memcache' => 'Zend\Cache\Storage\Adapter\Memcache',
35
  'memcached' => 'Zend\Cache\Storage\Adapter\Memcached',
36
  'memory' => 'Zend\Cache\Storage\Adapter\Memory',
 
37
  'redis' => 'Zend\Cache\Storage\Adapter\Redis',
38
  'session' => 'Zend\Cache\Storage\Adapter\Session',
39
  'xcache' => 'Zend\Cache\Storage\Adapter\XCache',
34
  'memcache' => 'Zend\Cache\Storage\Adapter\Memcache',
35
  'memcached' => 'Zend\Cache\Storage\Adapter\Memcached',
36
  'memory' => 'Zend\Cache\Storage\Adapter\Memory',
37
+ 'mongodb' => 'Zend\Cache\Storage\Adapter\MongoDb',
38
  'redis' => 'Zend\Cache\Storage\Adapter\Redis',
39
  'session' => 'Zend\Cache\Storage\Adapter\Session',
40
  'xcache' => 'Zend\Cache\Storage\Adapter\XCache',
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/AvailableSpaceCapableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Capabilities.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ClearByNamespaceInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ClearByPrefixInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ClearExpiredInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Event.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/ExceptionEvent.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/FlushableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/IterableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/IteratorInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/OptimizableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/AbstractPlugin.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/ClearExpiredByFactor.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/ExceptionHandler.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/IgnoreUserAbort.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/OptimizeByFactor.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/PluginInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/PluginOptions.php RENAMED
@@ -26,7 +26,7 @@ class PluginOptions extends AbstractOptions
26
  /**
27
  * Used by:
28
  * - ExceptionHandler
29
- * @var callable
30
  */
31
  protected $exceptionCallback;
32
 
@@ -99,7 +99,7 @@ class PluginOptions extends AbstractOptions
99
  * Used by:
100
  * - ExceptionHandler
101
  *
102
- * @param callable $exceptionCallback
103
  * @throws Exception\InvalidArgumentException
104
  * @return PluginOptions
105
  */
@@ -118,7 +118,7 @@ class PluginOptions extends AbstractOptions
118
  * Used by:
119
  * - ExceptionHandler
120
  *
121
- * @return callable
122
  */
123
  public function getExceptionCallback()
124
  {
26
  /**
27
  * Used by:
28
  * - ExceptionHandler
29
+ * @var null|callable
30
  */
31
  protected $exceptionCallback;
32
 
99
  * Used by:
100
  * - ExceptionHandler
101
  *
102
+ * @param null|callable $exceptionCallback
103
  * @throws Exception\InvalidArgumentException
104
  * @return PluginOptions
105
  */
118
  * Used by:
119
  * - ExceptionHandler
120
  *
121
+ * @return null|callable
122
  */
123
  public function getExceptionCallback()
124
  {
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/Plugin/Serializer.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/PluginManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/PostEvent.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/StorageInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/TaggableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/Storage/TotalSpaceCapableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-cache/{Zend/Cache → src}/StorageFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-config/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-config/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-config.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-config)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-config.git
112
+ $ cd zend-config
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-config.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-config.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-config/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-config/README.md ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ # zend-config
2
+
3
+ `Zend\Config` is designed to simplify access to configuration data within
4
+ applications. It provides a nested object property-based user interface for
5
+ accessing this configuration data within application code. The configuration
6
+ data may come from a variety of media supporting hierarchical data storage.
7
+
8
+
9
+ - File issues at https://github.com/zendframework/zend-code/issues
10
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-code
backend/vendor/zendframework/zend-config/Zend/Config/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-config/Zend/Config/README.md DELETED
@@ -1,15 +0,0 @@
1
- Config Component from ZF2
2
- =========================
3
-
4
- This is the Config component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-config/{Zend/Config/composer.json → composer.json} RENAMED
@@ -6,13 +6,12 @@
6
  "zf2",
7
  "config"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\Config\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/Config",
16
  "require": {
17
  "php": ">=5.3.23",
18
  "zendframework/zend-stdlib": "self.version"
@@ -21,7 +20,10 @@
21
  "zendframework/zend-filter": "self.version",
22
  "zendframework/zend-i18n": "self.version",
23
  "zendframework/zend-json": "self.version",
24
- "zendframework/zend-servicemanager": "self.version"
 
 
 
25
  },
26
  "suggest": {
27
  "zendframework/zend-filter": "Zend\\Filter component",
@@ -31,8 +33,13 @@
31
  },
32
  "extra": {
33
  "branch-alias": {
34
- "dev-master": "2.3-dev",
35
- "dev-develop": "2.4-dev"
 
 
 
 
 
36
  }
37
  }
38
- }
6
  "zf2",
7
  "config"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-config",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\Config\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23",
17
  "zendframework/zend-stdlib": "self.version"
20
  "zendframework/zend-filter": "self.version",
21
  "zendframework/zend-i18n": "self.version",
22
  "zendframework/zend-json": "self.version",
23
+ "zendframework/zend-servicemanager": "self.version",
24
+ "fabpot/php-cs-fixer": "1.7.*",
25
+ "satooshi/php-coveralls": "dev-master",
26
+ "phpunit/PHPUnit": "~4.0"
27
  },
28
  "suggest": {
29
  "zendframework/zend-filter": "Zend\\Filter component",
33
  },
34
  "extra": {
35
  "branch-alias": {
36
+ "dev-master": "2.4-dev",
37
+ "dev-develop": "2.5-dev"
38
+ }
39
+ },
40
+ "autoload-dev": {
41
+ "psr-4": {
42
+ "ZendTest\\Config\\": "test/"
43
  }
44
  }
45
+ }
backend/vendor/zendframework/zend-config/phpunit.xml.dist ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-config Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ <!-- Note: the following is a FULL list of ALL POSSIBLE constants
34
+ currently in use in ZF2 for ALL COMPONENTS; you should choose the
35
+ constants appropriate to the component you are migrating. -->
36
+
37
+ <const name="TESTS_ZEND_CONFIG_YAML_ENABLED" value="false" />
38
+ <const name="TESTS_ZEND_CONFIG_YAML_LIB_INCLUDE" value="" />
39
+ <const name="TESTS_ZEND_CONFIG_WRITER_YAML_CALLBACK" value="" />
40
+ <const name="TESTS_ZEND_CONFIG_READER_YAML_CALLBACK" value="" />
41
+ </php>
42
+ </phpunit>
backend/vendor/zendframework/zend-config/phpunit.xml.travis ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-config Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ <!-- Note: the following is a FULL list of ALL POSSIBLE constants
34
+ currently in use in ZF2 for ALL COMPONENTS; you should choose the
35
+ constants appropriate to the component you are migrating.
36
+
37
+ The values present below reflect the correct values for Travis-CI. -->
38
+
39
+ <const name="TESTS_ZEND_CONFIG_YAML_ENABLED" value="false" />
40
+ <const name="TESTS_ZEND_CONFIG_YAML_LIB_INCLUDE" value="" />
41
+ <const name="TESTS_ZEND_CONFIG_WRITER_YAML_CALLBACK" value="" />
42
+ <const name="TESTS_ZEND_CONFIG_READER_YAML_CALLBACK" value="" />
43
+
44
+ </php>
45
+ </phpunit>
backend/vendor/zendframework/zend-config/{Zend/Config → src}/AbstractConfigFactory.php RENAMED
@@ -84,7 +84,7 @@ class AbstractConfigFactory implements ServiceManager\AbstractFactoryInterface
84
 
85
  $config = $serviceLocator->get('Config');
86
  $this->configs[$requestedName] = $this->configs[$key] = $config[$key];
87
- return $config;
88
  }
89
 
90
  /**
@@ -167,6 +167,6 @@ class AbstractConfigFactory implements ServiceManager\AbstractFactoryInterface
167
  return $matches[1];
168
  }
169
  }
170
- return null;
171
  }
172
  }
84
 
85
  $config = $serviceLocator->get('Config');
86
  $this->configs[$requestedName] = $this->configs[$key] = $config[$key];
87
+ return $config[$key];
88
  }
89
 
90
  /**
167
  return $matches[1];
168
  }
169
  }
170
+ return;
171
  }
172
  }
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Config.php RENAMED
@@ -30,13 +30,6 @@ class Config implements Countable, Iterator, ArrayAccess
30
  */
31
  protected $allowModifications;
32
 
33
- /**
34
- * Number of elements in configuration data.
35
- *
36
- * @var int
37
- */
38
- protected $count;
39
-
40
  /**
41
  * Data within the configuration.
42
  *
@@ -71,8 +64,6 @@ class Config implements Countable, Iterator, ArrayAccess
71
  } else {
72
  $this->data[$key] = $value;
73
  }
74
-
75
- $this->count++;
76
  }
77
  }
78
 
@@ -126,8 +117,6 @@ class Config implements Countable, Iterator, ArrayAccess
126
  } else {
127
  $this->data[$name] = $value;
128
  }
129
-
130
- $this->count++;
131
  } else {
132
  throw new Exception\RuntimeException('Config is read only');
133
  }
@@ -200,7 +189,6 @@ class Config implements Countable, Iterator, ArrayAccess
200
  throw new Exception\InvalidArgumentException('Config is read only');
201
  } elseif (isset($this->data[$name])) {
202
  unset($this->data[$name]);
203
- $this->count--;
204
  $this->skipNextIteration = true;
205
  }
206
  }
@@ -213,7 +201,7 @@ class Config implements Countable, Iterator, ArrayAccess
213
  */
214
  public function count()
215
  {
216
- return $this->count;
217
  }
218
 
219
  /**
@@ -360,8 +348,6 @@ class Config implements Countable, Iterator, ArrayAccess
360
  } else {
361
  $this->data[$key] = $value;
362
  }
363
-
364
- $this->count++;
365
  }
366
  }
367
 
30
  */
31
  protected $allowModifications;
32
 
 
 
 
 
 
 
 
33
  /**
34
  * Data within the configuration.
35
  *
64
  } else {
65
  $this->data[$key] = $value;
66
  }
 
 
67
  }
68
  }
69
 
117
  } else {
118
  $this->data[$name] = $value;
119
  }
 
 
120
  } else {
121
  throw new Exception\RuntimeException('Config is read only');
122
  }
189
  throw new Exception\InvalidArgumentException('Config is read only');
190
  } elseif (isset($this->data[$name])) {
191
  unset($this->data[$name]);
 
192
  $this->skipNextIteration = true;
193
  }
194
  }
201
  */
202
  public function count()
203
  {
204
+ return count($this->data);
205
  }
206
 
207
  /**
348
  } else {
349
  $this->data[$key] = $value;
350
  }
 
 
351
  }
352
  }
353
 
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Factory.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Constant.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Filter.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/ProcessorInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Queue.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Token.php RENAMED
@@ -259,7 +259,7 @@ class Token implements ProcessorInterface
259
 
260
  if (!is_string($value) && (is_bool($value) || is_numeric($value))) {
261
  $stringVal = (string) $value;
262
- $changedVal = strtr($value, $this->map);
263
 
264
  // replace the value only if a string replacement occurred
265
  if ($changedVal !== $stringVal) {
259
 
260
  if (!is_string($value) && (is_bool($value) || is_numeric($value))) {
261
  $stringVal = (string) $value;
262
+ $changedVal = strtr($stringVal, $this->map);
263
 
264
  // replace the value only if a string replacement occurred
265
  if ($changedVal !== $stringVal) {
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Processor/Translator.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Ini.php RENAMED
@@ -72,7 +72,7 @@ class Ini implements ReaderInterface
72
  $this->directory = dirname($filename);
73
 
74
  set_error_handler(
75
- function ($error, $message = '', $file = '', $line = 0) use ($filename) {
76
  throw new Exception\RuntimeException(
77
  sprintf('Error reading INI file "%s": %s', $filename, $message),
78
  $error
@@ -101,7 +101,7 @@ class Ini implements ReaderInterface
101
  $this->directory = null;
102
 
103
  set_error_handler(
104
- function ($error, $message = '', $file = '', $line = 0) {
105
  throw new Exception\RuntimeException(
106
  sprintf('Error reading INI string: %s', $message),
107
  $error
72
  $this->directory = dirname($filename);
73
 
74
  set_error_handler(
75
+ function ($error, $message = '') use ($filename) {
76
  throw new Exception\RuntimeException(
77
  sprintf('Error reading INI file "%s": %s', $filename, $message),
78
  $error
101
  $this->directory = null;
102
 
103
  set_error_handler(
104
+ function ($error, $message = '') {
105
  throw new Exception\RuntimeException(
106
  sprintf('Error reading INI string: %s', $message),
107
  $error
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/JavaProperties.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Json.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/ReaderInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Xml.php RENAMED
@@ -65,7 +65,7 @@ class Xml implements ReaderInterface
65
  $this->directory = dirname($filename);
66
 
67
  set_error_handler(
68
- function ($error, $message = '', $file = '', $line = 0) use ($filename) {
69
  throw new Exception\RuntimeException(
70
  sprintf('Error reading XML file "%s": %s', $filename, $message),
71
  $error
@@ -100,7 +100,7 @@ class Xml implements ReaderInterface
100
  $this->directory = null;
101
 
102
  set_error_handler(
103
- function ($error, $message = '', $file = '', $line = 0) {
104
  throw new Exception\RuntimeException(
105
  sprintf('Error reading XML string: %s', $message),
106
  $error
@@ -155,7 +155,7 @@ class Xml implements ReaderInterface
155
  $child = array('_' => $child);
156
  }
157
 
158
- if (! is_array($child) ) {
159
  $child = array();
160
  }
161
 
65
  $this->directory = dirname($filename);
66
 
67
  set_error_handler(
68
+ function ($error, $message = '') use ($filename) {
69
  throw new Exception\RuntimeException(
70
  sprintf('Error reading XML file "%s": %s', $filename, $message),
71
  $error
100
  $this->directory = null;
101
 
102
  set_error_handler(
103
+ function ($error, $message = '') {
104
  throw new Exception\RuntimeException(
105
  sprintf('Error reading XML string: %s', $message),
106
  $error
155
  $child = array('_' => $child);
156
  }
157
 
158
+ if (! is_array($child)) {
159
  $child = array();
160
  }
161
 
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Reader/Yaml.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/ReaderPluginManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/AbstractWriter.php RENAMED
@@ -38,7 +38,7 @@ abstract class AbstractWriter implements WriterInterface
38
  }
39
 
40
  set_error_handler(
41
- function ($error, $message = '', $file = '', $line = 0) use ($filename) {
42
  throw new Exception\RuntimeException(
43
  sprintf('Error writing to "%s": %s', $filename, $message),
44
  $error
38
  }
39
 
40
  set_error_handler(
41
+ function ($error, $message = '') use ($filename) {
42
  throw new Exception\RuntimeException(
43
  sprintf('Error writing to "%s": %s', $filename, $message),
44
  $error
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Ini.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Json.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/PhpArray.php RENAMED
@@ -76,7 +76,7 @@ class PhpArray extends AbstractWriter
76
  }
77
 
78
  set_error_handler(
79
- function ($error, $message = '', $file = '', $line = 0) use ($filename) {
80
  throw new Exception\RuntimeException(
81
  sprintf('Error writing to "%s": %s', $filename, $message),
82
  $error
76
  }
77
 
78
  set_error_handler(
79
+ function ($error, $message = '') use ($filename) {
80
  throw new Exception\RuntimeException(
81
  sprintf('Error writing to "%s": %s', $filename, $message),
82
  $error
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/WriterInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Xml.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/Writer/Yaml.php RENAMED
File without changes
backend/vendor/zendframework/zend-config/{Zend/Config → src}/WriterPluginManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-eventmanager/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-event-manager/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-event-manager.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-event-manager)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-event-manager.git
112
+ $ cd zend-event-manager
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-event-manager.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-event-manager.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-eventmanager/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-eventmanager/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # zend-eventmanager
2
+
3
+ The `Zend\EventManager` is a component designed for the following use cases:
4
+
5
+ - Implementing simple subject/observer patterns.
6
+ - Implementing Aspect-Oriented designs.
7
+ - Implementing event-driven architectures.
8
+
9
+ The basic architecture allows you to attach and detach listeners to named events,
10
+ both on a per-instance basis as well as via shared collections; trigger events;
11
+ and interrupt execution of listeners.
12
+
13
+
14
+ - File issues at https://github.com/zendframework/zend-eventmanager/issues
15
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-eventmanager
backend/vendor/zendframework/zend-eventmanager/Zend/EventManager/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-eventmanager/Zend/EventManager/README.md DELETED
@@ -1,15 +0,0 @@
1
- EventManager Component from ZF2
2
- ===============================
3
-
4
- This is the EventManager component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-eventmanager/Zend/EventManager/composer.json DELETED
@@ -1,26 +0,0 @@
1
- {
2
- "name": "zendframework/zend-eventmanager",
3
- "description": " ",
4
- "license": "BSD-3-Clause",
5
- "keywords": [
6
- "zf2",
7
- "eventmanager"
8
- ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
- "autoload": {
11
- "psr-0": {
12
- "Zend\\EventManager\\": ""
13
- }
14
- },
15
- "target-dir": "Zend/EventManager",
16
- "require": {
17
- "php": ">=5.3.23",
18
- "zendframework/zend-stdlib": "self.version"
19
- },
20
- "extra": {
21
- "branch-alias": {
22
- "dev-master": "2.3-dev",
23
- "dev-develop": "2.4-dev"
24
- }
25
- }
26
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-eventmanager/composer.json ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "zendframework/zend-eventmanager",
3
+ "description": " ",
4
+ "license": "BSD-3-Clause",
5
+ "keywords": [
6
+ "zf2",
7
+ "eventmanager"
8
+ ],
9
+ "homepage": "https://github.com/zendframework/zend-event-manager",
10
+ "autoload": {
11
+ "psr-4": {
12
+ "Zend\\EventManager\\": "src/"
13
+ }
14
+ },
15
+ "require": {
16
+ "php": ">=5.3.23",
17
+ "zendframework/zend-stdlib": "self.version"
18
+ },
19
+ "extra": {
20
+ "branch-alias": {
21
+ "dev-master": "2.4-dev",
22
+ "dev-develop": "2.5-dev"
23
+ }
24
+ },
25
+ "autoload-dev": {
26
+ "psr-4": {
27
+ "ZendTest\\EventManager\\": "test/"
28
+ }
29
+ },
30
+ "require-dev": {
31
+ "fabpot/php-cs-fixer": "1.7.*",
32
+ "satooshi/php-coveralls": "dev-master",
33
+ "phpunit/PHPUnit": "~4.0"
34
+ }
35
+ }
backend/vendor/zendframework/zend-eventmanager/phpunit.xml.dist ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-eventmanager Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+
34
+ </php>
35
+ </phpunit>
backend/vendor/zendframework/zend-eventmanager/phpunit.xml.travis ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-eventmanager Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+
34
+ </php>
35
+ </phpunit>
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/AbstractListenerAggregate.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Event.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManager.php RENAMED
@@ -167,12 +167,10 @@ class EventManager implements EventManagerInterface
167
  /**
168
  * Trigger all listeners for a given event
169
  *
170
- * Can emulate triggerUntil() if the last argument provided is a callback.
171
- *
172
- * @param string $event
173
- * @param string|object $target Object calling emit, or symbol describing target (such as static method name)
174
- * @param array|ArrayAccess $argv Array of arguments; typically, should be associative
175
- * @param null|callable $callback
176
  * @return ResponseCollection All listener return values
177
  * @throws Exception\InvalidCallbackException
178
  */
@@ -214,42 +212,21 @@ class EventManager implements EventManagerInterface
214
  * Triggers listeners until the provided callback evaluates the return
215
  * value of one as true, or until all listeners have been executed.
216
  *
217
- * @param string $event
218
  * @param string|object $target Object calling emit, or symbol describing target (such as static method name)
219
  * @param array|ArrayAccess $argv Array of arguments; typically, should be associative
220
  * @param callable $callback
221
  * @return ResponseCollection
 
222
  * @throws Exception\InvalidCallbackException if invalid callable provided
223
  */
224
  public function triggerUntil($event, $target, $argv = null, $callback = null)
225
  {
226
- if ($event instanceof EventInterface) {
227
- $e = $event;
228
- $event = $e->getName();
229
- $callback = $target;
230
- } elseif ($target instanceof EventInterface) {
231
- $e = $target;
232
- $e->setName($event);
233
- $callback = $argv;
234
- } elseif ($argv instanceof EventInterface) {
235
- $e = $argv;
236
- $e->setName($event);
237
- $e->setTarget($target);
238
- } else {
239
- $e = new $this->eventClass();
240
- $e->setName($event);
241
- $e->setTarget($target);
242
- $e->setParams($argv);
243
- }
244
-
245
- if (!is_callable($callback)) {
246
- throw new Exception\InvalidCallbackException('Invalid callback provided');
247
- }
248
-
249
- // Initial value of stop propagation flag should be false
250
- $e->stopPropagation(false);
251
-
252
- return $this->triggerListeners($event, $e, $callback);
253
  }
254
 
255
  /**
@@ -416,7 +393,7 @@ class EventManager implements EventManagerInterface
416
  *
417
  * Use this method if you want to be able to modify arguments from within a
418
  * listener. It returns an ArrayObject of the arguments, which may then be
419
- * passed to trigger() or triggerUntil().
420
  *
421
  * @param array $args
422
  * @return ArrayObject
@@ -429,8 +406,7 @@ class EventManager implements EventManagerInterface
429
  /**
430
  * Trigger listeners
431
  *
432
- * Actual functionality for triggering listeners, to which both trigger() and triggerUntil()
433
- * delegate.
434
  *
435
  * @param string $event Event name
436
  * @param EventInterface $e
167
  /**
168
  * Trigger all listeners for a given event
169
  *
170
+ * @param string|EventInterface $event
171
+ * @param string|object $target Object calling emit, or symbol describing target (such as static method name)
172
+ * @param array|ArrayAccess $argv Array of arguments; typically, should be associative
173
+ * @param null|callable $callback Trigger listeners until return value of this callback evaluate to true
 
 
174
  * @return ResponseCollection All listener return values
175
  * @throws Exception\InvalidCallbackException
176
  */
212
  * Triggers listeners until the provided callback evaluates the return
213
  * value of one as true, or until all listeners have been executed.
214
  *
215
+ * @param string|EventInterface $event
216
  * @param string|object $target Object calling emit, or symbol describing target (such as static method name)
217
  * @param array|ArrayAccess $argv Array of arguments; typically, should be associative
218
  * @param callable $callback
219
  * @return ResponseCollection
220
+ * @deprecated Please use trigger()
221
  * @throws Exception\InvalidCallbackException if invalid callable provided
222
  */
223
  public function triggerUntil($event, $target, $argv = null, $callback = null)
224
  {
225
+ trigger_error(
226
+ 'This method is deprecated and will be removed in the future. Please use trigger() instead.',
227
+ E_USER_DEPRECATED
228
+ );
229
+ return $this->trigger($event, $target, $argv, $callback);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
230
  }
231
 
232
  /**
393
  *
394
  * Use this method if you want to be able to modify arguments from within a
395
  * listener. It returns an ArrayObject of the arguments, which may then be
396
+ * passed to trigger().
397
  *
398
  * @param array $args
399
  * @return ArrayObject
406
  /**
407
  * Trigger listeners
408
  *
409
+ * Actual functionality for triggering listeners, to which trigger() delegate.
 
410
  *
411
  * @param string $event Event name
412
  * @param EventInterface $e
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManagerAwareInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManagerAwareTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventManagerInterface.php RENAMED
@@ -25,10 +25,9 @@ interface EventManagerInterface extends SharedEventManagerAwareInterface
25
  * - Passing event name and Event object only
26
  * - Passing event name, target, and Event object
27
  * - Passing event name, target, and array|ArrayAccess of arguments
 
28
  *
29
- * Can emulate triggerUntil() if the last argument provided is a callback.
30
- *
31
- * @param string $event
32
  * @param object|string $target
33
  * @param array|object $argv
34
  * @param null|callable $callback
@@ -45,11 +44,12 @@ interface EventManagerInterface extends SharedEventManagerAwareInterface
45
  * - Passing event name, target, Event object, and callback
46
  * - Passing event name, target, array|ArrayAccess of arguments, and callback
47
  *
48
- * @param string $event
49
  * @param object|string $target
50
  * @param array|object $argv
51
  * @param callable $callback
52
  * @return ResponseCollection
 
53
  */
54
  public function triggerUntil($event, $target, $argv = null, $callback = null);
55
 
25
  * - Passing event name and Event object only
26
  * - Passing event name, target, and Event object
27
  * - Passing event name, target, and array|ArrayAccess of arguments
28
+ * - Passing event name, target, array|ArrayAccess of arguments, and callback
29
  *
30
+ * @param string|EventInterface $event
 
 
31
  * @param object|string $target
32
  * @param array|object $argv
33
  * @param null|callable $callback
44
  * - Passing event name, target, Event object, and callback
45
  * - Passing event name, target, array|ArrayAccess of arguments, and callback
46
  *
47
+ * @param string|EventInterface $event
48
  * @param object|string $target
49
  * @param array|object $argv
50
  * @param callable $callback
51
  * @return ResponseCollection
52
+ * @deprecated Please use trigger()
53
  */
54
  public function triggerUntil($event, $target, $argv = null, $callback = null);
55
 
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/EventsCapableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/DomainException.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Exception/InvalidCallbackException.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Filter/FilterInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/Filter/FilterIterator.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/FilterChain.php RENAMED
@@ -115,6 +115,6 @@ class FilterChain implements Filter\FilterInterface
115
  */
116
  public function getResponses()
117
  {
118
- return null;
119
  }
120
  }
115
  */
116
  public function getResponses()
117
  {
118
+ return;
119
  }
120
  }
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/GlobalEventManager.php RENAMED
@@ -52,14 +52,15 @@ class GlobalEventManager
52
  /**
53
  * Trigger an event
54
  *
55
- * @param string $event
56
  * @param object|string $context
57
- * @param array|object $argv
 
58
  * @return ResponseCollection
59
  */
60
- public static function trigger($event, $context, $argv = array())
61
  {
62
- return static::getEventCollection()->trigger($event, $context, $argv);
63
  }
64
 
65
  /**
@@ -71,10 +72,15 @@ class GlobalEventManager
71
  * @param array|object $argv
72
  * @param callable $callback
73
  * @return ResponseCollection
 
74
  */
75
  public static function triggerUntil($event, $context, $argv, $callback)
76
  {
77
- return static::getEventCollection()->triggerUntil($event, $context, $argv, $callback);
 
 
 
 
78
  }
79
 
80
  /**
52
  /**
53
  * Trigger an event
54
  *
55
+ * @param string $event
56
  * @param object|string $context
57
+ * @param array|object $argv
58
+ * @param null|callable $callback
59
  * @return ResponseCollection
60
  */
61
+ public static function trigger($event, $context, $argv = array(), $callback = null)
62
  {
63
+ return static::getEventCollection()->trigger($event, $context, $argv, $callback);
64
  }
65
 
66
  /**
72
  * @param array|object $argv
73
  * @param callable $callback
74
  * @return ResponseCollection
75
+ * @deprecated Please use trigger()
76
  */
77
  public static function triggerUntil($event, $context, $argv, $callback)
78
  {
79
+ trigger_error(
80
+ 'This method is deprecated and will be removed in the future. Please use trigger() instead.',
81
+ E_USER_DEPRECATED
82
+ );
83
+ return static::trigger($event, $context, $argv, $callback);
84
  }
85
 
86
  /**
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ListenerAggregateInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ListenerAggregateTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ProvidesEvents.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/ResponseCollection.php RENAMED
@@ -61,7 +61,7 @@ class ResponseCollection extends SplStack
61
  public function last()
62
  {
63
  if (count($this) === 0) {
64
- return null;
65
  }
66
  return parent::top();
67
  }
61
  public function last()
62
  {
63
  if (count($this) === 0) {
64
+ return;
65
  }
66
  return parent::top();
67
  }
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventAggregateAwareInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventManagerAwareInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedEventManagerInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/SharedListenerAggregateInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-eventmanager/{Zend/EventManager → src}/StaticEventManager.php RENAMED
@@ -15,7 +15,7 @@ namespace Zend\EventManager;
15
  class StaticEventManager extends SharedEventManager
16
  {
17
  /**
18
- * @var StaticEventManager
19
  */
20
  protected static $instance;
21
 
15
  class StaticEventManager extends SharedEventManager
16
  {
17
  /**
18
+ * @var SharedEventManagerInterface
19
  */
20
  protected static $instance;
21
 
backend/vendor/zendframework/zend-json/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-json/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-json/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-json.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-json)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-json.git
112
+ $ cd zend-json
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-json.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-json.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-json/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-json/README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ # zend-json
2
+
3
+ `Zend\Json` provides convenience methods for serializing native PHP to JSON and
4
+ decoding JSON to native PHP. For more information on JSON, visit the JSON
5
+ [project site](http://www.json.org/).
6
+
7
+
8
+ - File issues at https://github.com/zendframework/zend-json/issues
9
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-json
backend/vendor/zendframework/zend-json/Zend/Json/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-json/Zend/Json/README.md DELETED
@@ -1,15 +0,0 @@
1
- JSON Component from ZF2
2
- =======================
3
-
4
- This is the JSON component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-json/{Zend/Json/composer.json → composer.json} RENAMED
@@ -6,20 +6,22 @@
6
  "zf2",
7
  "json"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\Json\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/Json",
16
  "require": {
17
  "php": ">=5.3.23",
18
  "zendframework/zend-stdlib": "self.version"
19
  },
20
  "require-dev": {
21
  "zendframework/zend-http": "self.version",
22
- "zendframework/zend-server": "self.version"
 
 
 
23
  },
24
  "suggest": {
25
  "zendframework/zend-http": "Zend\\Http component",
@@ -28,8 +30,13 @@
28
  },
29
  "extra": {
30
  "branch-alias": {
31
- "dev-master": "2.3-dev",
32
- "dev-develop": "2.4-dev"
 
 
 
 
 
33
  }
34
  }
35
- }
6
  "zf2",
7
  "json"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-json",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\Json\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23",
17
  "zendframework/zend-stdlib": "self.version"
18
  },
19
  "require-dev": {
20
  "zendframework/zend-http": "self.version",
21
+ "zendframework/zend-server": "self.version",
22
+ "fabpot/php-cs-fixer": "1.7.*",
23
+ "satooshi/php-coveralls": "dev-master",
24
+ "phpunit/PHPUnit": "~4.0"
25
  },
26
  "suggest": {
27
  "zendframework/zend-http": "Zend\\Http component",
30
  },
31
  "extra": {
32
  "branch-alias": {
33
+ "dev-master": "2.4-dev",
34
+ "dev-develop": "2.5-dev"
35
+ }
36
+ },
37
+ "autoload-dev": {
38
+ "psr-4": {
39
+ "ZendTest\\Json\\": "test/"
40
  }
41
  }
42
+ }
backend/vendor/zendframework/zend-json/phpunit.xml.dist ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-json Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-json/phpunit.xml.travis ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-json Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Decoder.php RENAMED
@@ -220,16 +220,12 @@ class Decoder
220
  $result = $this->tokenValue;
221
  $this->_getNextToken();
222
  return($result);
223
- break;
224
  case self::LBRACE:
225
  return($this->_decodeObject());
226
- break;
227
  case self::LBRACKET:
228
  return($this->_decodeArray());
229
- break;
230
  default:
231
- return null;
232
- break;
233
  }
234
  }
235
 
220
  $result = $this->tokenValue;
221
  $this->_getNextToken();
222
  return($result);
 
223
  case self::LBRACE:
224
  return($this->_decodeObject());
 
225
  case self::LBRACKET:
226
  return($this->_decodeArray());
 
227
  default:
228
+ return;
 
229
  }
230
  }
231
 
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Encoder.php RENAMED
@@ -65,7 +65,7 @@ class Encoder
65
  */
66
  public static function encode($value, $cycleCheck = false, $options = array())
67
  {
68
- $encoder = new static(($cycleCheck) ? true : false, $options);
69
 
70
  if ($value instanceof JsonSerializable) {
71
  $value = $value->jsonSerialize();
65
  */
66
  public static function encode($value, $cycleCheck = false, $options = array())
67
  {
68
+ $encoder = new static($cycleCheck, $options);
69
 
70
  if ($value instanceof JsonSerializable) {
71
  $value = $value->jsonSerialize();
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/BadMethodCallException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/RecursionException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Expr.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Json.php RENAMED
@@ -114,16 +114,29 @@ class Json
114
  $valueToEncode = static::_recursiveJsonExprFinder($valueToEncode, $javascriptExpressions);
115
  }
116
 
 
 
117
  // Encoding
118
  if (function_exists('json_encode') && static::$useBuiltinEncoderDecoder !== true) {
 
 
 
 
 
 
 
119
  $encodedResult = json_encode(
120
  $valueToEncode,
121
- JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP
122
  );
123
  } else {
124
  $encodedResult = Encoder::encode($valueToEncode, $cycleCheck, $options);
125
  }
126
 
 
 
 
 
127
  //only do post-processing to revert back the Zend\Json\Expr if any.
128
  if (count($javascriptExpressions) > 0) {
129
  $count = count($javascriptExpressions);
@@ -320,9 +333,7 @@ class Json
320
  // If it is not a valid XML content, throw an exception.
321
  if (!$simpleXmlElementObject) {
322
  throw new RuntimeException('Function fromXml was called with an invalid XML formatted string.');
323
- } // End of if ($simpleXmlElementObject == null)
324
-
325
- $resultArray = null;
326
 
327
  // Call the recursive function to convert the XML into a PHP array.
328
  $resultArray = static::_processXml($simpleXmlElementObject, $ignoreXmlAttributes);
@@ -348,17 +359,22 @@ class Json
348
  $result = "";
349
  $indent = 0;
350
 
351
- $ind = "\t";
352
  if (isset($options['indent'])) {
353
  $ind = $options['indent'];
354
  }
355
 
356
  $inLiteral = false;
357
  foreach ($tokens as $token) {
 
358
  if ($token == "") {
359
  continue;
360
  }
361
 
 
 
 
 
362
  $prefix = str_repeat($ind, $indent);
363
  if (!$inLiteral && ($token == "{" || $token == "[")) {
364
  $indent++;
114
  $valueToEncode = static::_recursiveJsonExprFinder($valueToEncode, $javascriptExpressions);
115
  }
116
 
117
+ $prettyPrint = (isset($options['prettyPrint']) && ($options['prettyPrint'] == true));
118
+
119
  // Encoding
120
  if (function_exists('json_encode') && static::$useBuiltinEncoderDecoder !== true) {
121
+ $encodeOptions = JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP;
122
+
123
+ if ($prettyPrint && defined('JSON_PRETTY_PRINT')) {
124
+ $encodeOptions |= JSON_PRETTY_PRINT;
125
+ $prettyPrint = false;
126
+ }
127
+
128
  $encodedResult = json_encode(
129
  $valueToEncode,
130
+ $encodeOptions
131
  );
132
  } else {
133
  $encodedResult = Encoder::encode($valueToEncode, $cycleCheck, $options);
134
  }
135
 
136
+ if ($prettyPrint) {
137
+ $encodedResult = self::prettyPrint($encodedResult, array("intent" => " "));
138
+ }
139
+
140
  //only do post-processing to revert back the Zend\Json\Expr if any.
141
  if (count($javascriptExpressions) > 0) {
142
  $count = count($javascriptExpressions);
333
  // If it is not a valid XML content, throw an exception.
334
  if (!$simpleXmlElementObject) {
335
  throw new RuntimeException('Function fromXml was called with an invalid XML formatted string.');
336
+ } // End of if ($simpleXmlElementObject === null)
 
 
337
 
338
  // Call the recursive function to convert the XML into a PHP array.
339
  $resultArray = static::_processXml($simpleXmlElementObject, $ignoreXmlAttributes);
359
  $result = "";
360
  $indent = 0;
361
 
362
+ $ind = " ";
363
  if (isset($options['indent'])) {
364
  $ind = $options['indent'];
365
  }
366
 
367
  $inLiteral = false;
368
  foreach ($tokens as $token) {
369
+ $token = trim($token);
370
  if ($token == "") {
371
  continue;
372
  }
373
 
374
+ if (preg_match('/^("(?:.*)"):[ ]?(.*)$/', $token, $matches)) {
375
+ $token = $matches[1] . ': ' . $matches[2];
376
+ }
377
+
378
  $prefix = str_repeat($ind, $indent);
379
  if (!$inLiteral && ($token == "{" || $token == "[")) {
380
  $indent++;
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Cache.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Client.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Error.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/ErrorException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/HttpException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Request.php RENAMED
@@ -135,7 +135,7 @@ class Request
135
  return $this->params[$index];
136
  }
137
 
138
- return null;
139
  }
140
 
141
  /**
135
  return $this->params[$index];
136
  }
137
 
138
+ return;
139
  }
140
 
141
  /**
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Request/Http.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Response.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Response/Http.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Server.php RENAMED
@@ -269,7 +269,7 @@ class Server extends AbstractServer
269
  */
270
  public function setReturnResponse($flag = true)
271
  {
272
- $this->returnResponse = ($flag) ? true : false;
273
  return $this;
274
  }
275
 
@@ -304,7 +304,7 @@ class Server extends AbstractServer
304
  }
305
  }
306
  }
307
- return null;
308
  }
309
 
310
  /**
269
  */
270
  public function setReturnResponse($flag = true)
271
  {
272
+ $this->returnResponse = (bool) $flag;
273
  return $this;
274
  }
275
 
304
  }
305
  }
306
  }
307
+ return;
308
  }
309
 
310
  /**
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Smd.php RENAMED
File without changes
backend/vendor/zendframework/zend-json/{Zend/Json → src}/Server/Smd/Service.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-math/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-math/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-math.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-math)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-math.git
112
+ $ cd zend-math
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-math.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-math.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-math/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-math/README.md ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ # zend-math
2
+
3
+ `Zend\Math` provides general mathematical functions. So far the supported
4
+ functionalities are:
5
+
6
+ - `Zend\Math\Rand`, a random number generator;
7
+ - `Zend\Math\BigInteger`, a library to manage big integers.
8
+
9
+
10
+ - File issues at https://github.com/zendframework/zend-math/issues
11
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-math
backend/vendor/zendframework/zend-math/Zend/Math/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-math/Zend/Math/README.md DELETED
@@ -1,15 +0,0 @@
1
- Math Component from ZF2
2
- =======================
3
-
4
- This is the Math component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-math/{Zend/Math/composer.json → composer.json} RENAMED
@@ -6,13 +6,12 @@
6
  "zf2",
7
  "math"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\Math\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/Math",
16
  "require": {
17
  "php": ">=5.3.23"
18
  },
@@ -24,8 +23,18 @@
24
  },
25
  "extra": {
26
  "branch-alias": {
27
- "dev-master": "2.3-dev",
28
- "dev-develop": "2.4-dev"
29
  }
 
 
 
 
 
 
 
 
 
 
30
  }
31
- }
6
  "zf2",
7
  "math"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-math",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\Math\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23"
17
  },
23
  },
24
  "extra": {
25
  "branch-alias": {
26
+ "dev-master": "2.4-dev",
27
+ "dev-develop": "2.5-dev"
28
  }
29
+ },
30
+ "autoload-dev": {
31
+ "psr-4": {
32
+ "ZendTest\\Math\\": "test/"
33
+ }
34
+ },
35
+ "require-dev": {
36
+ "fabpot/php-cs-fixer": "1.7.*",
37
+ "satooshi/php-coveralls": "dev-master",
38
+ "phpunit/PHPUnit": "~4.0"
39
  }
40
+ }
backend/vendor/zendframework/zend-math/phpunit.xml.dist ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-math Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-math/phpunit.xml.travis ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-math Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Adapter/AdapterInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Adapter/Bcmath.php RENAMED
@@ -212,7 +212,7 @@ class Bcmath implements AdapterInterface
212
  public function intToBin($operand, $twoc = false)
213
  {
214
  $nb = chr(0);
215
- $isNegative = (strpos($operand, '-') === 0) ? true : false;
216
  $operand = ltrim($operand, '+-0');
217
 
218
  if (empty($operand)) {
212
  public function intToBin($operand, $twoc = false)
213
  {
214
  $nb = chr(0);
215
+ $isNegative = (strpos($operand, '-') === 0);
216
  $operand = ltrim($operand, '+-0');
217
 
218
  if (empty($operand)) {
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Adapter/Gmp.php RENAMED
@@ -203,7 +203,7 @@ class Gmp implements AdapterInterface
203
  public function intToBin($int, $twoc = false)
204
  {
205
  $nb = chr(0);
206
- $isNegative = (strpos($int, '-') === 0) ? true : false;
207
  $int = ltrim($int, '+-0');
208
 
209
  if (empty($int)) {
203
  public function intToBin($int, $twoc = false)
204
  {
205
  $nb = chr(0);
206
+ $isNegative = (strpos($int, '-') === 0);
207
  $int = ltrim($int, '+-0');
208
 
209
  if (empty($int)) {
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/AdapterPluginManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/BigInteger.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/DivisionByZeroException.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/BigInteger/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/DomainException.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-math/{Zend/Math → src}/Rand.php RENAMED
@@ -54,7 +54,7 @@ abstract class Rand
54
  $checkAlternatives = (file_exists('/dev/urandom') && is_readable('/dev/urandom'))
55
  || class_exists('\\COM', false);
56
  if (true === $strong && false === $checkAlternatives) {
57
- throw new Exception\RuntimeException (
58
  'This PHP environment doesn\'t support secure random number generation. ' .
59
  'Please consider installing the OpenSSL and/or Mcrypt extensions'
60
  );
54
  $checkAlternatives = (file_exists('/dev/urandom') && is_readable('/dev/urandom'))
55
  || class_exists('\\COM', false);
56
  if (true === $strong && false === $checkAlternatives) {
57
+ throw new Exception\RuntimeException(
58
  'This PHP environment doesn\'t support secure random number generation. ' .
59
  'Please consider installing the OpenSSL and/or Mcrypt extensions'
60
  );
backend/vendor/zendframework/zend-math/{Zend/Math → src}/Source/HashTiming.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-serializer/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-serializer/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-serializer.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-serializer)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-serializer.git
112
+ $ cd zend-serializer
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-serializer.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-serializer.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-serializer/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-serializer/README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ # zend-serializer
2
+
3
+ The `Zend\Serializer` component provides an adapter based interface to simply
4
+ generate storable representation of PHP types by different facilities, and
5
+ recover.
6
+
7
+
8
+ - File issues at https://github.com/zendframework/zend-serializer/issues
9
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-serializer
backend/vendor/zendframework/zend-serializer/Zend/Serializer/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-serializer/Zend/Serializer/README.md DELETED
@@ -1,15 +0,0 @@
1
- Serializer Component from ZF2
2
- =============================
3
-
4
- This is the Serializer component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-serializer/{Zend/Serializer/composer.json → composer.json} RENAMED
@@ -6,13 +6,12 @@
6
  "zf2",
7
  "serializer"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\Serializer\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/Serializer",
16
  "require": {
17
  "php": ">=5.3.23",
18
  "zendframework/zend-stdlib": "self.version",
@@ -20,15 +19,23 @@
20
  "zendframework/zend-math": "self.version"
21
  },
22
  "require-dev": {
23
- "zendframework/zend-servicemanager": "self.version"
 
 
 
24
  },
25
  "suggest": {
26
  "zendframework/zend-servicemanager": "To support plugin manager support"
27
  },
28
  "extra": {
29
  "branch-alias": {
30
- "dev-master": "2.3-dev",
31
- "dev-develop": "2.4-dev"
 
 
 
 
 
32
  }
33
  }
34
- }
6
  "zf2",
7
  "serializer"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-serializer",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\Serializer\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23",
17
  "zendframework/zend-stdlib": "self.version",
19
  "zendframework/zend-math": "self.version"
20
  },
21
  "require-dev": {
22
+ "zendframework/zend-servicemanager": "self.version",
23
+ "fabpot/php-cs-fixer": "1.7.*",
24
+ "satooshi/php-coveralls": "dev-master",
25
+ "phpunit/PHPUnit": "~4.0"
26
  },
27
  "suggest": {
28
  "zendframework/zend-servicemanager": "To support plugin manager support"
29
  },
30
  "extra": {
31
  "branch-alias": {
32
+ "dev-master": "2.4-dev",
33
+ "dev-develop": "2.5-dev"
34
+ }
35
+ },
36
+ "autoload-dev": {
37
+ "psr-4": {
38
+ "ZendTest\\Serializer\\": "test/"
39
  }
40
  }
41
+ }
backend/vendor/zendframework/zend-serializer/phpunit.xml.dist ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-serializer Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-serializer/phpunit.xml.travis ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-serializer Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/AbstractAdapter.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/AdapterInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/AdapterOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/IgBinary.php RENAMED
@@ -69,7 +69,7 @@ class IgBinary extends AbstractAdapter
69
  public function unserialize($serialized)
70
  {
71
  if ($serialized === static::$serializedNull) {
72
- return null;
73
  }
74
 
75
  ErrorHandler::start();
69
  public function unserialize($serialized)
70
  {
71
  if ($serialized === static::$serializedNull) {
72
+ return;
73
  }
74
 
75
  ErrorHandler::start();
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/Json.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/JsonOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/MsgPack.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PhpCode.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PhpSerialize.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PythonPickle.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/PythonPickleOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/Wddx.php RENAMED
@@ -125,7 +125,7 @@ class Wddx extends AbstractAdapter
125
  //$simpleXml = new \SimpleXMLElement($wddx);
126
  libxml_disable_entity_loader($oldLibxmlDisableEntityLoader);
127
  if (isset($simpleXml->data[0]->null[0])) {
128
- return null; // valid null
129
  }
130
  throw new Exception\RuntimeException('Unserialization failed: Invalid wddx packet');
131
  } catch (\Exception $e) {
125
  //$simpleXml = new \SimpleXMLElement($wddx);
126
  libxml_disable_entity_loader($oldLibxmlDisableEntityLoader);
127
  if (isset($simpleXml->data[0]->null[0])) {
128
+ return; // valid null
129
  }
130
  throw new Exception\RuntimeException('Unserialization failed: Invalid wddx packet');
131
  } catch (\Exception $e) {
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Adapter/WddxOptions.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/AdapterPluginManager.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/ExtensionNotLoadedException.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-serializer/{Zend/Serializer → src}/Serializer.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-servicemanager/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-service-manager/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-service-manager.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-service-manager)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-service-manager.git
112
+ $ cd zend-service-manager
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-service-manager.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-service-manager.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-servicemanager/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-servicemanager/README.md ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ # zend-servicemanager
2
+
3
+ The Service Locator design pattern is implemented by the `Zend\ServiceManager`
4
+ component. The Service Locator is a service/object locator, tasked with
5
+ retrieving other objects.
6
+
7
+
8
+ - File issues at https://github.com/zendframework/zend-servicemanager/issues
9
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-servicemanager
backend/vendor/zendframework/zend-servicemanager/Zend/ServiceManager/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-servicemanager/Zend/ServiceManager/README.md DELETED
@@ -1,15 +0,0 @@
1
- ServiceManager Component from ZF2
2
- =================================
3
-
4
- This is the ServiceManager component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager/composer.json → composer.json} RENAMED
@@ -6,18 +6,20 @@
6
  "zf2",
7
  "servicemanager"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\ServiceManager\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/ServiceManager",
16
  "require": {
17
  "php": ">=5.3.23"
18
  },
19
  "require-dev": {
20
- "zendframework/zend-di": "self.version"
 
 
 
21
  },
22
  "suggest": {
23
  "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
@@ -25,8 +27,13 @@
25
  },
26
  "extra": {
27
  "branch-alias": {
28
- "dev-master": "2.3-dev",
29
- "dev-develop": "2.4-dev"
 
 
 
 
 
30
  }
31
  }
32
- }
6
  "zf2",
7
  "servicemanager"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-service-manager",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\ServiceManager\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23"
17
  },
18
  "require-dev": {
19
+ "zendframework/zend-di": "self.version",
20
+ "fabpot/php-cs-fixer": "1.7.*",
21
+ "satooshi/php-coveralls": "dev-master",
22
+ "phpunit/PHPUnit": "~4.0"
23
  },
24
  "suggest": {
25
  "ocramius/proxy-manager": "ProxyManager 0.5.* to handle lazy initialization of services",
27
  },
28
  "extra": {
29
  "branch-alias": {
30
+ "dev-master": "2.4-dev",
31
+ "dev-develop": "2.5-dev"
32
+ }
33
+ },
34
+ "autoload-dev": {
35
+ "psr-4": {
36
+ "ZendTest\\ServiceManager\\": "test/"
37
  }
38
  }
39
+ }
backend/vendor/zendframework/zend-servicemanager/phpunit.xml.dist ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-servicemanager Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-servicemanager/phpunit.xml.travis ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-servicemanager Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/AbstractFactoryInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/AbstractPluginManager.php RENAMED
@@ -9,6 +9,8 @@
9
 
10
  namespace Zend\ServiceManager;
11
 
 
 
12
  /**
13
  * ServiceManager implementation for managing plugins
14
  *
@@ -55,7 +57,7 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
55
  * Add a default initializer to ensure the plugin is valid after instance
56
  * creation.
57
  *
58
- * @param null|ConfigInterface $configuration
59
  */
60
  public function __construct(ConfigInterface $configuration = null)
61
  {
@@ -74,7 +76,7 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
74
  * Checks that the filter loaded is either a valid callback or an instance
75
  * of FilterInterface.
76
  *
77
- * @param mixed $plugin
78
  * @return void
79
  * @throws Exception\RuntimeException if invalid
80
  */
@@ -88,21 +90,44 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
88
  * constructor if not null and a non-empty array.
89
  *
90
  * @param string $name
91
- * @param array $options
92
- * @param bool $usePeeringServiceManagers
 
93
  * @return object
 
 
 
 
94
  */
95
  public function get($name, $options = array(), $usePeeringServiceManagers = true)
96
  {
 
 
97
  // Allow specifying a class name directly; registers as an invokable class
98
  if (!$this->has($name) && $this->autoAddInvokableClass && class_exists($name)) {
 
 
99
  $this->setInvokableClass($name, $name);
100
  }
101
 
102
  $this->creationOptions = $options;
103
- $instance = parent::get($name, $usePeeringServiceManagers);
 
 
 
 
 
 
 
 
104
  $this->creationOptions = null;
105
- $this->validatePlugin($instance);
 
 
 
 
 
 
106
  return $instance;
107
  }
108
 
@@ -112,9 +137,9 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
112
  * Validates that the service object via validatePlugin() prior to
113
  * attempting to register it.
114
  *
115
- * @param string $name
116
- * @param mixed $service
117
- * @param bool $shared
118
  * @return AbstractPluginManager
119
  * @throws Exception\InvalidServiceNameException
120
  */
@@ -124,18 +149,20 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
124
  $this->validatePlugin($service);
125
  }
126
  parent::setService($name, $service, $shared);
 
127
  return $this;
128
  }
129
 
130
  /**
131
  * Set the main service locator so factories can have access to it to pull deps
132
  *
133
- * @param ServiceLocatorInterface $serviceLocator
134
  * @return AbstractPluginManager
135
  */
136
  public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
137
  {
138
  $this->serviceLocator = $serviceLocator;
 
139
  return $this;
140
  }
141
 
@@ -155,8 +182,8 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
155
  * Overrides parent implementation by passing $creationOptions to the
156
  * constructor, if non-null.
157
  *
158
- * @param string $canonicalName
159
- * @param string $requestedName
160
  * @return null|\stdClass
161
  * @throws Exception\ServiceNotCreatedException If resolved class does not exist
162
  */
@@ -191,8 +218,8 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
191
  * Overrides parent implementation by passing $creationOptions to the
192
  * constructor, if non-null.
193
  *
194
- * @param string $canonicalName
195
- * @param string $requestedName
196
  * @return mixed
197
  * @throws Exception\ServiceNotCreatedException If factory is not callable
198
  */
@@ -216,13 +243,11 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
216
  } elseif (is_callable($factory)) {
217
  $instance = $this->createServiceViaCallback($factory, $canonicalName, $requestedName);
218
  } else {
219
- throw new Exception\ServiceNotCreatedException(
220
- sprintf(
221
- 'While attempting to create %s%s an invalid factory was registered for this instance type.',
222
- $canonicalName,
223
- ($requestedName ? '(alias: ' . $requestedName . ')' : '')
224
- )
225
- );
226
  }
227
 
228
  return $instance;
@@ -231,9 +256,9 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
231
  /**
232
  * Create service via callback
233
  *
234
- * @param callable $callable
235
- * @param string $cName
236
- * @param string $rName
237
  * @throws Exception\ServiceNotCreatedException
238
  * @throws Exception\ServiceNotFoundException
239
  * @throws Exception\CircularDependencyFoundException
@@ -258,4 +283,35 @@ abstract class AbstractPluginManager extends ServiceManager implements ServiceLo
258
 
259
  return parent::createServiceViaCallback($callable, $cName, $rName);
260
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
261
  }
9
 
10
  namespace Zend\ServiceManager;
11
 
12
+ use Exception as BaseException;
13
+
14
  /**
15
  * ServiceManager implementation for managing plugins
16
  *
57
  * Add a default initializer to ensure the plugin is valid after instance
58
  * creation.
59
  *
60
+ * @param null|ConfigInterface $configuration
61
  */
62
  public function __construct(ConfigInterface $configuration = null)
63
  {
76
  * Checks that the filter loaded is either a valid callback or an instance
77
  * of FilterInterface.
78
  *
79
+ * @param mixed $plugin
80
  * @return void
81
  * @throws Exception\RuntimeException if invalid
82
  */
90
  * constructor if not null and a non-empty array.
91
  *
92
  * @param string $name
93
+ * @param array $options
94
+ * @param bool $usePeeringServiceManagers
95
+ *
96
  * @return object
97
+ *
98
+ * @throws Exception\ServiceNotFoundException
99
+ * @throws Exception\ServiceNotCreatedException
100
+ * @throws Exception\RuntimeException
101
  */
102
  public function get($name, $options = array(), $usePeeringServiceManagers = true)
103
  {
104
+ $isAutoInvokable = false;
105
+
106
  // Allow specifying a class name directly; registers as an invokable class
107
  if (!$this->has($name) && $this->autoAddInvokableClass && class_exists($name)) {
108
+ $isAutoInvokable = true;
109
+
110
  $this->setInvokableClass($name, $name);
111
  }
112
 
113
  $this->creationOptions = $options;
114
+
115
+ try {
116
+ $instance = parent::get($name, $usePeeringServiceManagers);
117
+ } catch (Exception\ServiceNotFoundException $exception) {
118
+ $this->tryThrowingServiceLocatorUsageException($name, $isAutoInvokable, $exception);
119
+ } catch (Exception\ServiceNotCreatedException $exception) {
120
+ $this->tryThrowingServiceLocatorUsageException($name, $isAutoInvokable, $exception);
121
+ }
122
+
123
  $this->creationOptions = null;
124
+
125
+ try {
126
+ $this->validatePlugin($instance);
127
+ } catch (Exception\RuntimeException $exception) {
128
+ $this->tryThrowingServiceLocatorUsageException($name, $isAutoInvokable, $exception);
129
+ }
130
+
131
  return $instance;
132
  }
133
 
137
  * Validates that the service object via validatePlugin() prior to
138
  * attempting to register it.
139
  *
140
+ * @param string $name
141
+ * @param mixed $service
142
+ * @param bool $shared
143
  * @return AbstractPluginManager
144
  * @throws Exception\InvalidServiceNameException
145
  */
149
  $this->validatePlugin($service);
150
  }
151
  parent::setService($name, $service, $shared);
152
+
153
  return $this;
154
  }
155
 
156
  /**
157
  * Set the main service locator so factories can have access to it to pull deps
158
  *
159
+ * @param ServiceLocatorInterface $serviceLocator
160
  * @return AbstractPluginManager
161
  */
162
  public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
163
  {
164
  $this->serviceLocator = $serviceLocator;
165
+
166
  return $this;
167
  }
168
 
182
  * Overrides parent implementation by passing $creationOptions to the
183
  * constructor, if non-null.
184
  *
185
+ * @param string $canonicalName
186
+ * @param string $requestedName
187
  * @return null|\stdClass
188
  * @throws Exception\ServiceNotCreatedException If resolved class does not exist
189
  */
218
  * Overrides parent implementation by passing $creationOptions to the
219
  * constructor, if non-null.
220
  *
221
+ * @param string $canonicalName
222
+ * @param string $requestedName
223
  * @return mixed
224
  * @throws Exception\ServiceNotCreatedException If factory is not callable
225
  */
243
  } elseif (is_callable($factory)) {
244
  $instance = $this->createServiceViaCallback($factory, $canonicalName, $requestedName);
245
  } else {
246
+ throw new Exception\ServiceNotCreatedException(sprintf(
247
+ 'While attempting to create %s%s an invalid factory was registered for this instance type.',
248
+ $canonicalName,
249
+ ($requestedName ? '(alias: ' . $requestedName . ')' : '')
250
+ ));
 
 
251
  }
252
 
253
  return $instance;
256
  /**
257
  * Create service via callback
258
  *
259
+ * @param callable $callable
260
+ * @param string $cName
261
+ * @param string $rName
262
  * @throws Exception\ServiceNotCreatedException
263
  * @throws Exception\ServiceNotFoundException
264
  * @throws Exception\CircularDependencyFoundException
283
 
284
  return parent::createServiceViaCallback($callable, $cName, $rName);
285
  }
286
+
287
+ /**
288
+ * @param string $serviceName
289
+ * @param bool $isAutoInvokable
290
+ * @param BaseException $exception
291
+ *
292
+ * @throws BaseException
293
+ * @throws Exception\ServiceLocatorUsageException
294
+ */
295
+ private function tryThrowingServiceLocatorUsageException(
296
+ $serviceName,
297
+ $isAutoInvokable,
298
+ BaseException $exception
299
+ ) {
300
+ if ($isAutoInvokable) {
301
+ $this->unregisterService($this->canonicalizeName($serviceName));
302
+ }
303
+
304
+ $serviceLocator = $this->getServiceLocator();
305
+
306
+ if ($serviceLocator && $serviceLocator->has($serviceName)) {
307
+ throw Exception\ServiceLocatorUsageException::fromInvalidPluginManagerRequestedServiceName(
308
+ $this,
309
+ $serviceLocator,
310
+ $serviceName,
311
+ $exception
312
+ );
313
+ }
314
+
315
+ throw $exception;
316
+ }
317
  }
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Config.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ConfigInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/DelegatorFactoryInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiAbstractServiceFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiInstanceManagerProxy.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiServiceFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Di/DiServiceInitializer.php RENAMED
@@ -10,7 +10,6 @@
10
  namespace Zend\ServiceManager\Di;
11
 
12
  use Zend\Di\Di;
13
- use Zend\ServiceManager\Exception;
14
  use Zend\ServiceManager\InitializerInterface;
15
  use Zend\ServiceManager\ServiceLocatorInterface;
16
 
10
  namespace Zend\ServiceManager\Di;
11
 
12
  use Zend\Di\Di;
 
13
  use Zend\ServiceManager\InitializerInterface;
14
  use Zend\ServiceManager\ServiceLocatorInterface;
15
 
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/CircularDependencyFoundException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/CircularReferenceException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/InvalidServiceNameException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/src/Exception/ServiceLocatorUsageException.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\ServiceManager\Exception;
11
+
12
+ use Exception as BaseException;
13
+ use Zend\ServiceManager\AbstractPluginManager;
14
+ use Zend\ServiceManager\ServiceLocatorInterface;
15
+
16
+ class ServiceLocatorUsageException extends ServiceNotFoundException
17
+ {
18
+ /**
19
+ * Static constructor
20
+ *
21
+ * @param AbstractPluginManager $pluginManager
22
+ * @param ServiceLocatorInterface $parentLocator
23
+ * @param string $serviceName
24
+ * @param BaseException $previousException
25
+ *
26
+ * @return self
27
+ */
28
+ public static function fromInvalidPluginManagerRequestedServiceName(
29
+ AbstractPluginManager $pluginManager,
30
+ ServiceLocatorInterface $parentLocator,
31
+ $serviceName,
32
+ BaseException $previousException
33
+ ) {
34
+ return new self(
35
+ sprintf(
36
+ "Service \"%s\" has been requested to plugin manager of type \"%s\", but couldn't be retrieved.\n"
37
+ . "A previous exception of type \"%s\" has been raised in the process.\n"
38
+ . "By the way, a service with the name \"%s\" has been found in the parent service locator \"%s\": "
39
+ . 'did you forget to use $parentLocator = $serviceLocator->getServiceLocator() in your factory code?',
40
+ $serviceName,
41
+ get_class($pluginManager),
42
+ get_class($previousException),
43
+ $serviceName,
44
+ get_class($parentLocator)
45
+ ),
46
+ 0,
47
+ $previousException
48
+ );
49
+ }
50
+ }
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/ServiceNotCreatedException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Exception/ServiceNotFoundException.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/FactoryInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/InitializerInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/MutableCreationOptionsInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/src/MutableCreationOptionsTrait.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\ServiceManager;
11
+
12
+ /**
13
+ * Trait for MutableCreationOptions Factories
14
+ */
15
+ trait MutableCreationOptionsTrait
16
+ {
17
+ /**
18
+ * @var array
19
+ */
20
+ protected $creationOptions = array();
21
+
22
+ /**
23
+ * Set creation options
24
+ *
25
+ * @param array $creationOptions
26
+ * @return void
27
+ */
28
+ public function setCreationOptions(array $creationOptions)
29
+ {
30
+ $this->creationOptions = $creationOptions;
31
+ }
32
+
33
+ /**
34
+ * Get creation options
35
+ *
36
+ * @return array
37
+ */
38
+ public function getCreationOptions()
39
+ {
40
+ return $this->creationOptions;
41
+ }
42
+ }
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Proxy/LazyServiceFactory.php RENAMED
@@ -10,7 +10,6 @@
10
  namespace Zend\ServiceManager\Proxy;
11
 
12
  use ProxyManager\Factory\LazyLoadingValueHolderFactory;
13
-
14
  use ProxyManager\Proxy\LazyLoadingInterface;
15
  use Zend\ServiceManager\DelegatorFactoryInterface;
16
  use Zend\ServiceManager\Exception;
10
  namespace Zend\ServiceManager\Proxy;
11
 
12
  use ProxyManager\Factory\LazyLoadingValueHolderFactory;
 
13
  use ProxyManager\Proxy\LazyLoadingInterface;
14
  use Zend\ServiceManager\DelegatorFactoryInterface;
15
  use Zend\ServiceManager\Exception;
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/Proxy/LazyServiceFactoryFactory.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceLocatorAwareInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceLocatorAwareTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceLocatorInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceManager.php RENAMED
@@ -114,6 +114,11 @@ class ServiceManager implements ServiceLocatorInterface
114
  */
115
  protected $canonicalNamesReplacements = array('-' => '', '_' => '', ' ' => '', '\\' => '', '/' => '');
116
 
 
 
 
 
 
117
  /**
118
  * Constructor
119
  *
@@ -446,7 +451,7 @@ class ServiceManager implements ServiceLocatorInterface
446
  if (!isset($this->shared[$cName])) {
447
  return $this->shareByDefault();
448
  }
449
-
450
  return $this->shared[$cName];
451
  }
452
 
@@ -718,10 +723,21 @@ class ServiceManager implements ServiceLocatorInterface
718
  }
719
 
720
  if ($usePeeringServiceManagers) {
 
721
  foreach ($this->peeringServiceManagers as $peeringServiceManager) {
 
 
 
 
 
 
 
722
  if ($peeringServiceManager->has($name)) {
 
723
  return true;
724
  }
 
 
725
  }
726
  }
727
 
@@ -987,11 +1003,8 @@ class ServiceManager implements ServiceLocatorInterface
987
  */
988
  protected function retrieveFromPeeringManager($name)
989
  {
990
- foreach ($this->peeringServiceManagers as $peeringServiceManager) {
991
- if ($peeringServiceManager->has($name)) {
992
- $this->shared[$name] = $peeringServiceManager->isShared($name);
993
- return $peeringServiceManager->get($name);
994
- }
995
  }
996
 
997
  $name = $this->canonicalizeName($name);
@@ -1002,14 +1015,43 @@ class ServiceManager implements ServiceLocatorInterface
1002
  } while ($this->hasAlias($name));
1003
  }
1004
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1005
  foreach ($this->peeringServiceManagers as $peeringServiceManager) {
 
 
 
 
 
 
 
 
1006
  if ($peeringServiceManager->has($name)) {
1007
  $this->shared[$name] = $peeringServiceManager->isShared($name);
1008
- return $peeringServiceManager->get($name);
 
 
1009
  }
 
 
1010
  }
1011
 
1012
- return null;
1013
  }
1014
 
1015
  /**
@@ -1101,7 +1143,7 @@ class ServiceManager implements ServiceLocatorInterface
1101
  );
1102
  }
1103
  }
1104
- return null;
1105
  }
1106
 
1107
  /**
114
  */
115
  protected $canonicalNamesReplacements = array('-' => '', '_' => '', ' ' => '', '\\' => '', '/' => '');
116
 
117
+ /**
118
+ * @var ServiceLocatorInterface
119
+ */
120
+ protected $serviceManagerCaller;
121
+
122
  /**
123
  * Constructor
124
  *
451
  if (!isset($this->shared[$cName])) {
452
  return $this->shareByDefault();
453
  }
454
+
455
  return $this->shared[$cName];
456
  }
457
 
723
  }
724
 
725
  if ($usePeeringServiceManagers) {
726
+ $caller = $this->serviceManagerCaller;
727
  foreach ($this->peeringServiceManagers as $peeringServiceManager) {
728
+ // ignore peering service manager if they are the same instance
729
+ if ($caller === $peeringServiceManager) {
730
+ continue;
731
+ }
732
+
733
+ $peeringServiceManager->serviceManagerCaller = $this;
734
+
735
  if ($peeringServiceManager->has($name)) {
736
+ $peeringServiceManager->serviceManagerCaller = null;
737
  return true;
738
  }
739
+
740
+ $peeringServiceManager->serviceManagerCaller = null;
741
  }
742
  }
743
 
1003
  */
1004
  protected function retrieveFromPeeringManager($name)
1005
  {
1006
+ if (null !== ($service = $this->loopPeeringServiceManagers($name))) {
1007
+ return $service;
 
 
 
1008
  }
1009
 
1010
  $name = $this->canonicalizeName($name);
1015
  } while ($this->hasAlias($name));
1016
  }
1017
 
1018
+ if (null !== ($service = $this->loopPeeringServiceManagers($name))) {
1019
+ return $service;
1020
+ }
1021
+
1022
+ return;
1023
+ }
1024
+
1025
+ /**
1026
+ * Loop over peering service managers.
1027
+ *
1028
+ * @param string $name
1029
+ * @return mixed
1030
+ */
1031
+ protected function loopPeeringServiceManagers($name)
1032
+ {
1033
+ $caller = $this->serviceManagerCaller;
1034
+
1035
  foreach ($this->peeringServiceManagers as $peeringServiceManager) {
1036
+ // ignore peering service manager if they are the same instance
1037
+ if ($caller === $peeringServiceManager) {
1038
+ continue;
1039
+ }
1040
+
1041
+ // pass this instance to peering service manager
1042
+ $peeringServiceManager->serviceManagerCaller = $this;
1043
+
1044
  if ($peeringServiceManager->has($name)) {
1045
  $this->shared[$name] = $peeringServiceManager->isShared($name);
1046
+ $instance = $peeringServiceManager->get($name);
1047
+ $peeringServiceManager->serviceManagerCaller = null;
1048
+ return $instance;
1049
  }
1050
+
1051
+ $peeringServiceManager->serviceManagerCaller = null;
1052
  }
1053
 
1054
+ return;
1055
  }
1056
 
1057
  /**
1143
  );
1144
  }
1145
  }
1146
+ return;
1147
  }
1148
 
1149
  /**
backend/vendor/zendframework/zend-servicemanager/{Zend/ServiceManager → src}/ServiceManagerAwareInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/.coveralls.yml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ coverage_clover: clover.xml
2
+ json_path: coveralls-upload.json
3
+ src_dir: src
backend/vendor/zendframework/zend-stdlib/CONTRIBUTING.md ADDED
@@ -0,0 +1,229 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # CONTRIBUTING
2
+
3
+ ## RESOURCES
4
+
5
+ If you wish to contribute to Zend Framework, please be sure to
6
+ read/subscribe to the following resources:
7
+
8
+ - [Coding Standards](https://github.com/zendframework/zf2/wiki/Coding-Standards)
9
+ - [Contributor's Guide](http://framework.zend.com/participate/contributor-guide)
10
+ - ZF Contributor's mailing list:
11
+ Archives: http://zend-framework-community.634137.n4.nabble.com/ZF-Contributor-f680267.html
12
+ Subscribe: zf-contributors-subscribe@lists.zend.com
13
+ - ZF Contributor's IRC channel:
14
+ #zftalk.dev on Freenode.net
15
+
16
+ If you are working on new features or refactoring [create a proposal](https://github.com/zendframework/zend-stdlib/issues/new).
17
+
18
+ ## Reporting Potential Security Issues
19
+
20
+ If you have encountered a potential security vulnerability, please **DO NOT** report it on the public
21
+ issue tracker: send it to us at [zf-security@zend.com](mailto:zf-security@zend.com) instead.
22
+ We will work with you to verify the vulnerability and patch it as soon as possible.
23
+
24
+ When reporting issues, please provide the following information:
25
+
26
+ - Component(s) affected
27
+ - A description indicating how to reproduce the issue
28
+ - A summary of the security vulnerability and impact
29
+
30
+ We request that you contact us via the email address above and give the project
31
+ contributors a chance to resolve the vulnerability and issue a new release prior
32
+ to any public exposure; this helps protect users and provides them with a chance
33
+ to upgrade and/or update in order to protect their applications.
34
+
35
+ For sensitive email communications, please use [our PGP key](http://framework.zend.com/zf-security-pgp-key.asc).
36
+
37
+ ## RUNNING TESTS
38
+
39
+ > ### Note: testing versions prior to 2.4
40
+ >
41
+ > This component originates with Zend Framework 2. During the lifetime of ZF2,
42
+ > testing infrastructure migrated from PHPUnit 3 to PHPUnit 4. In most cases, no
43
+ > changes were necessary. However, due to the migration, tests may not run on
44
+ > versions < 2.4. As such, you may need to change the PHPUnit dependency if
45
+ > attempting a fix on such a version.
46
+
47
+ To run tests:
48
+
49
+ - Clone the repository:
50
+
51
+ ```console
52
+ $ git clone git@github.com:zendframework/zend-stdlib.git
53
+ $ cd
54
+ ```
55
+
56
+ - Install dependencies via composer:
57
+
58
+ ```console
59
+ $ curl -sS https://getcomposer.org/installer | php --
60
+ $ ./composer.phar install
61
+ ```
62
+
63
+ If you don't have `curl` installed, you can also download `composer.phar` from https://getcomposer.org/
64
+
65
+ - Run the tests via `phpunit` and the provided PHPUnit config, like in this example:
66
+
67
+ ```console
68
+ $ ./vendor/bin/phpunit
69
+ ```
70
+
71
+ You can turn on conditional tests with the phpunit.xml file.
72
+ To do so:
73
+
74
+ - Copy `phpunit.xml.dist` file to `phpunit.xml`
75
+ - Edit `phpunit.xml` to enable any specific functionality you
76
+ want to test, as well as to provide test values to utilize.
77
+
78
+ ## Running Coding Standards Checks
79
+
80
+ This component uses [php-cs-fixer](http://cs.sensiolabs.org/) for coding
81
+ standards checks, and provides configuration for our selected checks.
82
+ `php-cs-fixer` is installed by default via Composer.
83
+
84
+ To run checks only:
85
+
86
+ ```console
87
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --dry-run --config-file=.php_cs
88
+ ```
89
+
90
+ To have `php-cs-fixer` attempt to fix problems for you, omit the `--dry-run`
91
+ flag:
92
+
93
+ ```console
94
+ $ ./vendor/bin/php-cs-fixer fix . -v --diff --config-file=.php_cs
95
+ ```
96
+
97
+ If you allow php-cs-fixer to fix CS issues, please re-run the tests to ensure
98
+ they pass, and make sure you add and commit the changes after verification.
99
+
100
+ ## Recommended Workflow for Contributions
101
+
102
+ Your first step is to establish a public repository from which we can
103
+ pull your work into the master repository. We recommend using
104
+ [GitHub](https://github.com), as that is where the component is already hosted.
105
+
106
+ 1. Setup a [GitHub account](http://github.com/), if you haven't yet
107
+ 2. Fork the repository (http://github.com/zendframework/zend-stdlib)
108
+ 3. Clone the canonical repository locally and enter it.
109
+
110
+ ```console
111
+ $ git clone git://github.com:zendframework/zend-stdlib.git
112
+ $ cd zend-stdlib
113
+ ```
114
+
115
+ 4. Add a remote to your fork; substitute your GitHub username in the command
116
+ below.
117
+
118
+ ```console
119
+ $ git remote add {username} git@github.com:{username}/zend-stdlib.git
120
+ $ git fetch {username}
121
+ ```
122
+
123
+ ### Keeping Up-to-Date
124
+
125
+ Periodically, you should update your fork or personal repository to
126
+ match the canonical ZF repository. Assuming you have setup your local repository
127
+ per the instructions above, you can do the following:
128
+
129
+
130
+ ```console
131
+ $ git checkout master
132
+ $ git fetch origin
133
+ $ git rebase origin/master
134
+ # OPTIONALLY, to keep your remote up-to-date -
135
+ $ git push {username} master:master
136
+ ```
137
+
138
+ If you're tracking other branches -- for example, the "develop" branch, where
139
+ new feature development occurs -- you'll want to do the same operations for that
140
+ branch; simply substitute "develop" for "master".
141
+
142
+ ### Working on a patch
143
+
144
+ We recommend you do each new feature or bugfix in a new branch. This simplifies
145
+ the task of code review as well as the task of merging your changes into the
146
+ canonical repository.
147
+
148
+ A typical workflow will then consist of the following:
149
+
150
+ 1. Create a new local branch based off either your master or develop branch.
151
+ 2. Switch to your new local branch. (This step can be combined with the
152
+ previous step with the use of `git checkout -b`.)
153
+ 3. Do some work, commit, repeat as necessary.
154
+ 4. Push the local branch to your remote repository.
155
+ 5. Send a pull request.
156
+
157
+ The mechanics of this process are actually quite trivial. Below, we will
158
+ create a branch for fixing an issue in the tracker.
159
+
160
+ ```console
161
+ $ git checkout -b hotfix/9295
162
+ Switched to a new branch 'hotfix/9295'
163
+ ```
164
+
165
+ ... do some work ...
166
+
167
+
168
+ ```console
169
+ $ git commit
170
+ ```
171
+
172
+ ... write your log message ...
173
+
174
+
175
+ ```console
176
+ $ git push {username} hotfix/9295:hotfix/9295
177
+ Counting objects: 38, done.
178
+ Delta compression using up to 2 threads.
179
+ Compression objects: 100% (18/18), done.
180
+ Writing objects: 100% (20/20), 8.19KiB, done.
181
+ Total 20 (delta 12), reused 0 (delta 0)
182
+ To ssh://git@github.com/{username}/zend-stdlib.git
183
+ b5583aa..4f51698 HEAD -> master
184
+ ```
185
+
186
+ To send a pull request, you have two options.
187
+
188
+ If using GitHub, you can do the pull request from there. Navigate to
189
+ your repository, select the branch you just created, and then select the
190
+ "Pull Request" button in the upper right. Select the user/organization
191
+ "zendframework" as the recipient.
192
+
193
+ If using your own repository - or even if using GitHub - you can use `git
194
+ format-patch` to create a patchset for us to apply; in fact, this is
195
+ **recommended** for security-related patches. If you use `format-patch`, please
196
+ send the patches as attachments to:
197
+
198
+ - zf-devteam@zend.com for patches without security implications
199
+ - zf-security@zend.com for security patches
200
+
201
+ #### What branch to issue the pull request against?
202
+
203
+ Which branch should you issue a pull request against?
204
+
205
+ - For fixes against the stable release, issue the pull request against the
206
+ "master" branch.
207
+ - For new features, or fixes that introduce new elements to the public API (such
208
+ as new public methods or properties), issue the pull request against the
209
+ "develop" branch.
210
+
211
+ ### Branch Cleanup
212
+
213
+ As you might imagine, if you are a frequent contributor, you'll start to
214
+ get a ton of branches both locally and on your remote.
215
+
216
+ Once you know that your changes have been accepted to the master
217
+ repository, we suggest doing some cleanup of these branches.
218
+
219
+ - Local branch cleanup
220
+
221
+ ```console
222
+ $ git branch -d <branchname>
223
+ ```
224
+
225
+ - Remote branch removal
226
+
227
+ ```console
228
+ $ git push {username} :<branchname>
229
+ ```
backend/vendor/zendframework/zend-stdlib/LICENSE.txt ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2005-2015, Zend Technologies USA, Inc.
2
+ All rights reserved.
3
+
4
+ Redistribution and use in source and binary forms, with or without modification,
5
+ are permitted provided that the following conditions are met:
6
+
7
+ * Redistributions of source code must retain the above copyright notice,
8
+ this list of conditions and the following disclaimer.
9
+
10
+ * Redistributions in binary form must reproduce the above copyright notice,
11
+ this list of conditions and the following disclaimer in the documentation
12
+ and/or other materials provided with the distribution.
13
+
14
+ * Neither the name of Zend Technologies USA, Inc. nor the names of its
15
+ contributors may be used to endorse or promote products derived from this
16
+ software without specific prior written permission.
17
+
18
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
22
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
25
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
backend/vendor/zendframework/zend-stdlib/README.md ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # zend-stdlib
2
+
3
+ `Zend\Stdlib` is a set of components that implements general purpose utility
4
+ class for different scopes like:
5
+
6
+ - array utilities functions;
7
+ - hydrators;
8
+ - json serialazible interfaces;
9
+ - general messaging systems;
10
+ - strin wrappers;
11
+ - etc
12
+
13
+
14
+ - File issues at https://github.com/zendframework/zend-stdlib/issues
15
+ - Documentation is at http://framework.zend.com/manual/current/en/index.html#zend-stdlib
backend/vendor/zendframework/zend-stdlib/Zend/Stdlib/CONTRIBUTING.md DELETED
@@ -1,3 +0,0 @@
1
- # CONTRIBUTING
2
-
3
- Please don't open pull requests against this repository, please use https://github.com/zendframework/zf2.
 
 
 
backend/vendor/zendframework/zend-stdlib/Zend/Stdlib/Hydrator/ClassMethods.php DELETED
@@ -1,186 +0,0 @@
1
- <?php
2
- /**
3
- * Zend Framework (http://framework.zend.com/)
4
- *
5
- * @link http://github.com/zendframework/zf2 for the canonical source repository
6
- * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
- * @license http://framework.zend.com/license/new-bsd New BSD License
8
- */
9
-
10
- namespace Zend\Stdlib\Hydrator;
11
-
12
- use Traversable;
13
- use Zend\Stdlib\Exception;
14
- use Zend\Stdlib\ArrayUtils;
15
- use Zend\Stdlib\Hydrator\Filter\FilterComposite;
16
- use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
17
- use Zend\Stdlib\Hydrator\Filter\GetFilter;
18
- use Zend\Stdlib\Hydrator\Filter\HasFilter;
19
- use Zend\Stdlib\Hydrator\Filter\IsFilter;
20
- use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter;
21
- use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter;
22
- use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
23
-
24
- class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface
25
- {
26
- /**
27
- * Flag defining whether array keys are underscore-separated (true) or camel case (false)
28
- * @var bool
29
- */
30
- protected $underscoreSeparatedKeys = true;
31
-
32
- /**
33
- * @var \Zend\Stdlib\Hydrator\Filter\FilterInterface
34
- */
35
- private $callableMethodFilter;
36
-
37
- /**
38
- * Define if extract values will use camel case or name with underscore
39
- * @param bool|array $underscoreSeparatedKeys
40
- */
41
- public function __construct($underscoreSeparatedKeys = true)
42
- {
43
- parent::__construct();
44
- $this->setUnderscoreSeparatedKeys($underscoreSeparatedKeys);
45
-
46
- $this->callableMethodFilter = new OptionalParametersFilter();
47
-
48
- $this->filterComposite->addFilter('is', new IsFilter());
49
- $this->filterComposite->addFilter('has', new HasFilter());
50
- $this->filterComposite->addFilter('get', new GetFilter());
51
- $this->filterComposite->addFilter('parameter', new OptionalParametersFilter(), FilterComposite::CONDITION_AND);
52
- }
53
-
54
- /**
55
- * @param array|Traversable $options
56
- * @return ClassMethods
57
- * @throws Exception\InvalidArgumentException
58
- */
59
- public function setOptions($options)
60
- {
61
- if ($options instanceof Traversable) {
62
- $options = ArrayUtils::iteratorToArray($options);
63
- } elseif (!is_array($options)) {
64
- throw new Exception\InvalidArgumentException(
65
- 'The options parameter must be an array or a Traversable'
66
- );
67
- }
68
- if (isset($options['underscoreSeparatedKeys'])) {
69
- $this->setUnderscoreSeparatedKeys($options['underscoreSeparatedKeys']);
70
- }
71
-
72
- return $this;
73
- }
74
-
75
- /**
76
- * @param bool $underscoreSeparatedKeys
77
- * @return ClassMethods
78
- */
79
- public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys)
80
- {
81
- $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys;
82
-
83
- if ($this->underscoreSeparatedKeys) {
84
- $this->setNamingStrategy(new UnderscoreNamingStrategy);
85
- } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) {
86
- $this->removeNamingStrategy();
87
- }
88
-
89
- return $this;
90
- }
91
-
92
- /**
93
- * @return bool
94
- */
95
- public function getUnderscoreSeparatedKeys()
96
- {
97
- return $this->underscoreSeparatedKeys;
98
- }
99
-
100
- /**
101
- * Extract values from an object with class methods
102
- *
103
- * Extracts the getter/setter of the given $object.
104
- *
105
- * @param object $object
106
- * @return array
107
- * @throws Exception\BadMethodCallException for a non-object $object
108
- */
109
- public function extract($object)
110
- {
111
- if (!is_object($object)) {
112
- throw new Exception\BadMethodCallException(
113
- sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
114
- );
115
- }
116
-
117
- $filter = null;
118
- if ($object instanceof FilterProviderInterface) {
119
- $filter = new FilterComposite(
120
- array($object->getFilter()),
121
- array(new MethodMatchFilter('getFilter'))
122
- );
123
- } else {
124
- $filter = $this->filterComposite;
125
- }
126
-
127
- $attributes = array();
128
- $methods = get_class_methods($object);
129
-
130
- foreach ($methods as $method) {
131
- if (
132
- !$filter->filter(
133
- get_class($object) . '::' . $method
134
- )
135
- ) {
136
- continue;
137
- }
138
-
139
- if (!$this->callableMethodFilter->filter(get_class($object) . '::' . $method)) {
140
- continue;
141
- }
142
-
143
- $attribute = $method;
144
- if (preg_match('/^get/', $method)) {
145
- $attribute = substr($method, 3);
146
- if (!property_exists($object, $attribute)) {
147
- $attribute = lcfirst($attribute);
148
- }
149
- }
150
-
151
- $attribute = $this->extractName($attribute, $object);
152
- $attributes[$attribute] = $this->extractValue($attribute, $object->$method(), $object);
153
- }
154
-
155
- return $attributes;
156
- }
157
-
158
- /**
159
- * Hydrate an object by populating getter/setter methods
160
- *
161
- * Hydrates an object by getter/setter methods of the object.
162
- *
163
- * @param array $data
164
- * @param object $object
165
- * @return object
166
- * @throws Exception\BadMethodCallException for a non-object $object
167
- */
168
- public function hydrate(array $data, $object)
169
- {
170
- if (!is_object($object)) {
171
- throw new Exception\BadMethodCallException(
172
- sprintf('%s expects the provided $object to be a PHP object)', __METHOD__)
173
- );
174
- }
175
-
176
- foreach ($data as $property => $value) {
177
- $method = 'set' . ucfirst($this->hydrateName($property, $data));
178
- if (is_callable(array($object, $method))) {
179
- $value = $this->hydrateValue($property, $value, $data);
180
- $object->$method($value);
181
- }
182
- }
183
-
184
- return $object;
185
- }
186
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-stdlib/Zend/Stdlib/README.md DELETED
@@ -1,15 +0,0 @@
1
- Stdlib Component from ZF2
2
- =========================
3
-
4
- This is the Stdlib component for ZF2.
5
-
6
- - File issues at https://github.com/zendframework/zf2/issues
7
- - Create pull requests against https://github.com/zendframework/zf2
8
- - Documentation is at http://framework.zend.com/docs
9
-
10
- LICENSE
11
- -------
12
-
13
- The files in this archive are released under the [Zend Framework
14
- license](http://framework.zend.com/license), which is a 3-clause BSD license.
15
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib/composer.json → composer.json} RENAMED
@@ -6,13 +6,12 @@
6
  "zf2",
7
  "stdlib"
8
  ],
9
- "homepage": "https://github.com/zendframework/zf2",
10
  "autoload": {
11
- "psr-0": {
12
- "Zend\\Stdlib\\": ""
13
  }
14
  },
15
- "target-dir": "Zend/Stdlib",
16
  "require": {
17
  "php": ">=5.3.23"
18
  },
@@ -20,7 +19,10 @@
20
  "zendframework/zend-eventmanager": "self.version",
21
  "zendframework/zend-serializer": "self.version",
22
  "zendframework/zend-servicemanager": "self.version",
23
- "zendframework/zend-filter": "self.version"
 
 
 
24
  },
25
  "suggest": {
26
  "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
@@ -30,8 +32,13 @@
30
  },
31
  "extra": {
32
  "branch-alias": {
33
- "dev-master": "2.3-dev",
34
- "dev-develop": "2.4-dev"
 
 
 
 
 
35
  }
36
  }
37
- }
6
  "zf2",
7
  "stdlib"
8
  ],
9
+ "homepage": "https://github.com/zendframework/zend-stdlib",
10
  "autoload": {
11
+ "psr-4": {
12
+ "Zend\\Stdlib\\": "src/"
13
  }
14
  },
 
15
  "require": {
16
  "php": ">=5.3.23"
17
  },
19
  "zendframework/zend-eventmanager": "self.version",
20
  "zendframework/zend-serializer": "self.version",
21
  "zendframework/zend-servicemanager": "self.version",
22
+ "zendframework/zend-filter": "self.version",
23
+ "fabpot/php-cs-fixer": "1.7.*",
24
+ "satooshi/php-coveralls": "dev-master",
25
+ "phpunit/PHPUnit": "~4.0"
26
  },
27
  "suggest": {
28
  "zendframework/zend-eventmanager": "To support aggregate hydrator usage",
32
  },
33
  "extra": {
34
  "branch-alias": {
35
+ "dev-master": "2.4-dev",
36
+ "dev-develop": "2.5-dev"
37
+ }
38
+ },
39
+ "autoload-dev": {
40
+ "psr-4": {
41
+ "ZendTest\\Stdlib\\": "test/"
42
  }
43
  }
44
+ }
backend/vendor/zendframework/zend-stdlib/phpunit.xml.dist ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-stdlib Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-stdlib/phpunit.xml.travis ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3
+ xsi:noNamespaceSchemaLocation="./vendor/phpunit/phpunit/phpunit.xsd"
4
+ bootstrap="./test/bootstrap.php"
5
+ colors="true">
6
+ <testsuites>
7
+ <testsuite name="zend-stdlib Test Suite">
8
+ <directory>./test/</directory>
9
+ </testsuite>
10
+ </testsuites>
11
+
12
+ <groups>
13
+ <exclude>
14
+ <group>disable</group>
15
+ </exclude>
16
+ </groups>
17
+
18
+ <filter>
19
+ <whitelist addUncoveredFilesFromWhitelist="true">
20
+ <directory suffix=".php">./src</directory>
21
+ </whitelist>
22
+ </filter>
23
+
24
+ <php>
25
+ <ini name="date.timezone" value="UTC"/>
26
+
27
+ <!-- OB_ENABLED should be enabled for some tests to check if all
28
+ functionality works as expected. Such tests include those for
29
+ Zend\Soap and Zend\Session, which require that headers not be sent
30
+ in order to work. -->
31
+ <const name="TESTS_ZEND_OB_ENABLED" value="false" />
32
+
33
+ </php>
34
+ </phpunit>
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/AbstractOptions.php RENAMED
@@ -100,7 +100,7 @@ abstract class AbstractOptions implements ParameterObjectInterface
100
  {
101
  $setter = 'set' . str_replace('_', '', $key);
102
 
103
- if (method_exists($this, $setter)) {
104
  $this->{$setter}($value);
105
 
106
  return;
@@ -108,9 +108,10 @@ abstract class AbstractOptions implements ParameterObjectInterface
108
 
109
  if ($this->__strictMode__) {
110
  throw new Exception\BadMethodCallException(sprintf(
111
- 'The option "%s" does not have a matching "%s" setter method which must be defined',
112
  $key,
113
- 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))
 
114
  ));
115
  }
116
  }
@@ -127,12 +128,12 @@ abstract class AbstractOptions implements ParameterObjectInterface
127
  {
128
  $getter = 'get' . str_replace('_', '', $key);
129
 
130
- if (method_exists($this, $getter)) {
131
  return $this->{$getter}();
132
  }
133
 
134
  throw new Exception\BadMethodCallException(sprintf(
135
- 'The option "%s" does not have a matching "%s" getter method which must be defined',
136
  $key,
137
  'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))
138
  ));
@@ -146,7 +147,9 @@ abstract class AbstractOptions implements ParameterObjectInterface
146
  */
147
  public function __isset($key)
148
  {
149
- return null !== $this->__get($key);
 
 
150
  }
151
 
152
  /**
100
  {
101
  $setter = 'set' . str_replace('_', '', $key);
102
 
103
+ if (is_callable(array($this, $setter))) {
104
  $this->{$setter}($value);
105
 
106
  return;
108
 
109
  if ($this->__strictMode__) {
110
  throw new Exception\BadMethodCallException(sprintf(
111
+ 'The option "%s" does not have a callable "%s" ("%s") setter method which must be defined',
112
  $key,
113
+ 'set' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key))),
114
+ $setter
115
  ));
116
  }
117
  }
128
  {
129
  $getter = 'get' . str_replace('_', '', $key);
130
 
131
+ if (is_callable(array($this, $getter))) {
132
  return $this->{$getter}();
133
  }
134
 
135
  throw new Exception\BadMethodCallException(sprintf(
136
+ 'The option "%s" does not have a callable "%s" getter method which must be defined',
137
  $key,
138
  'get' . str_replace(' ', '', ucwords(str_replace('_', ' ', $key)))
139
  ));
147
  */
148
  public function __isset($key)
149
  {
150
+ $getter = 'get' . str_replace('_', '', $key);
151
+
152
+ return method_exists($this, $getter) && null !== $this->__get($key);
153
  }
154
 
155
  /**
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArrayObject.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArraySerializableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArrayStack.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ArrayUtils.php RENAMED
@@ -10,6 +10,8 @@
10
  namespace Zend\Stdlib;
11
 
12
  use Traversable;
 
 
13
 
14
  /**
15
  * Utility class for testing and manipulation of PHP arrays.
@@ -18,6 +20,16 @@ use Traversable;
18
  */
19
  abstract class ArrayUtils
20
  {
 
 
 
 
 
 
 
 
 
 
21
  /**
22
  * Test whether an array contains one or more string keys
23
  *
@@ -257,8 +269,12 @@ abstract class ArrayUtils
257
  public static function merge(array $a, array $b, $preserveNumericKeys = false)
258
  {
259
  foreach ($b as $key => $value) {
260
- if (isset($a[$key]) || array_key_exists($key, $a)) {
261
- if (!$preserveNumericKeys && is_int($key)) {
 
 
 
 
262
  $a[] = $value;
263
  } elseif (is_array($value) && is_array($a[$key])) {
264
  $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys);
@@ -266,10 +282,54 @@ abstract class ArrayUtils
266
  $a[$key] = $value;
267
  }
268
  } else {
269
- $a[$key] = $value;
 
 
270
  }
271
  }
272
 
273
  return $a;
274
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
275
  }
10
  namespace Zend\Stdlib;
11
 
12
  use Traversable;
13
+ use Zend\Stdlib\ArrayUtils\MergeRemoveKey;
14
+ use Zend\Stdlib\ArrayUtils\MergeReplaceKeyInterface;
15
 
16
  /**
17
  * Utility class for testing and manipulation of PHP arrays.
20
  */
21
  abstract class ArrayUtils
22
  {
23
+ /**
24
+ * Compatibility Flag for ArrayUtils::filter
25
+ */
26
+ const ARRAY_FILTER_USE_BOTH = 1;
27
+
28
+ /**
29
+ * Compatibility Flag for ArrayUtils::filter
30
+ */
31
+ const ARRAY_FILTER_USE_KEY = 2;
32
+
33
  /**
34
  * Test whether an array contains one or more string keys
35
  *
269
  public static function merge(array $a, array $b, $preserveNumericKeys = false)
270
  {
271
  foreach ($b as $key => $value) {
272
+ if ($value instanceof MergeReplaceKeyInterface) {
273
+ $a[$key] = $value->getData();
274
+ } elseif (isset($a[$key]) || array_key_exists($key, $a)) {
275
+ if ($value instanceof MergeRemoveKey) {
276
+ unset($a[$key]);
277
+ } elseif (!$preserveNumericKeys && is_int($key)) {
278
  $a[] = $value;
279
  } elseif (is_array($value) && is_array($a[$key])) {
280
  $a[$key] = static::merge($a[$key], $value, $preserveNumericKeys);
282
  $a[$key] = $value;
283
  }
284
  } else {
285
+ if (!$value instanceof MergeRemoveKey) {
286
+ $a[$key] = $value;
287
+ }
288
  }
289
  }
290
 
291
  return $a;
292
  }
293
+
294
+ /**
295
+ * Compatibility Method for array_filter on <5.6 systems
296
+ *
297
+ * @param array $data
298
+ * @param callable $callback
299
+ * @param null|int $flag
300
+ * @return array
301
+ */
302
+ public static function filter(array $data, $callback, $flag = null)
303
+ {
304
+ if (! is_callable($callback)) {
305
+ throw new Exception\InvalidArgumentException(sprintf(
306
+ 'Second parameter of %s must be callable',
307
+ __METHOD__
308
+ ));
309
+ }
310
+
311
+ if (version_compare(PHP_VERSION, '5.6.0') >= 0) {
312
+ return array_filter($data, $callback, $flag);
313
+ }
314
+
315
+ $output = array();
316
+ foreach ($data as $key => $value) {
317
+ $params = array($value);
318
+
319
+ if ($flag === static::ARRAY_FILTER_USE_BOTH) {
320
+ $params[] = $key;
321
+ }
322
+
323
+ if ($flag === static::ARRAY_FILTER_USE_KEY) {
324
+ $params = array($key);
325
+ }
326
+
327
+ $response = call_user_func_array($callback, $params);
328
+ if ($response) {
329
+ $output[$key] = $value;
330
+ }
331
+ }
332
+
333
+ return $output;
334
+ }
335
  }
backend/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeRemoveKey.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\ArrayUtils;
11
+
12
+ final class MergeRemoveKey
13
+ {
14
+ }
backend/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKey.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\ArrayUtils;
11
+
12
+ final class MergeReplaceKey implements MergeReplaceKeyInterface
13
+ {
14
+ /**
15
+ * @var mixed
16
+ */
17
+ protected $data;
18
+
19
+ /**
20
+ * @param mixed $data
21
+ */
22
+ public function __construct($data)
23
+ {
24
+ $this->data = $data;
25
+ }
26
+
27
+ /**
28
+ * {@inheritDoc}
29
+ */
30
+ public function getData()
31
+ {
32
+ return $this->data;
33
+ }
34
+ }
backend/vendor/zendframework/zend-stdlib/src/ArrayUtils/MergeReplaceKeyInterface.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\ArrayUtils;
11
+
12
+ /**
13
+ * Marker interface: can be used to replace keys completely in {@see ArrayUtils::merge()} operations
14
+ */
15
+ interface MergeReplaceKeyInterface
16
+ {
17
+ /**
18
+ * @return mixed
19
+ */
20
+ public function getData();
21
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/CallbackHandler.php RENAMED
@@ -167,7 +167,7 @@ class CallbackHandler
167
  if (array_key_exists($name, $this->metadata)) {
168
  return $this->metadata[$name];
169
  }
170
- return null;
171
  }
172
 
173
  /**
167
  if (array_key_exists($name, $this->metadata)) {
168
  return $this->metadata[$name];
169
  }
170
+ return;
171
  }
172
 
173
  /**
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/DateTime.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/DispatchableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ErrorHandler.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/BadMethodCallException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/DomainException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/ExceptionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/ExtensionNotLoadedException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/InvalidArgumentException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/InvalidCallbackException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/LogicException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Exception/RuntimeException.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Extractor/ExtractionInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Glob.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/AllGuardsTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/ArrayOrTraversableGuardTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/EmptyGuardTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/GuardUtils.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Guard/NullGuardTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/AbstractHydrator.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/AggregateHydrator.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/ExtractEvent.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/HydrateEvent.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Aggregate/HydratorListener.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/ArraySerializable.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/src/Hydrator/ClassMethods.php ADDED
@@ -0,0 +1,274 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator;
11
+
12
+ use Traversable;
13
+ use Zend\Stdlib\Exception;
14
+ use Zend\Stdlib\ArrayUtils;
15
+ use Zend\Stdlib\Hydrator\Filter\FilterComposite;
16
+ use Zend\Stdlib\Hydrator\Filter\FilterProviderInterface;
17
+ use Zend\Stdlib\Hydrator\Filter\GetFilter;
18
+ use Zend\Stdlib\Hydrator\Filter\HasFilter;
19
+ use Zend\Stdlib\Hydrator\Filter\IsFilter;
20
+ use Zend\Stdlib\Hydrator\Filter\MethodMatchFilter;
21
+ use Zend\Stdlib\Hydrator\Filter\OptionalParametersFilter;
22
+ use Zend\Stdlib\Hydrator\NamingStrategy\NamingStrategyInterface;
23
+ use Zend\Stdlib\Hydrator\NamingStrategy\UnderscoreNamingStrategy;
24
+
25
+ class ClassMethods extends AbstractHydrator implements HydratorOptionsInterface
26
+ {
27
+ /**
28
+ * Holds the names of the methods used for hydration, indexed by class::property name,
29
+ * false if the hydration method is not callable/usable for hydration purposes
30
+ *
31
+ * @var string[]|bool[]
32
+ */
33
+ private $hydrationMethodsCache = array();
34
+
35
+ /**
36
+ * A map of extraction methods to property name to be used during extraction, indexed
37
+ * by class name and method name
38
+ *
39
+ * @var string[][]
40
+ */
41
+ private $extractionMethodsCache = array();
42
+
43
+ /**
44
+ * Flag defining whether array keys are underscore-separated (true) or camel case (false)
45
+ *
46
+ * @var bool
47
+ */
48
+ protected $underscoreSeparatedKeys = true;
49
+
50
+ /**
51
+ * @var \Zend\Stdlib\Hydrator\Filter\FilterInterface
52
+ */
53
+ private $callableMethodFilter;
54
+
55
+ /**
56
+ * Define if extract values will use camel case or name with underscore
57
+ * @param bool|array $underscoreSeparatedKeys
58
+ */
59
+ public function __construct($underscoreSeparatedKeys = true)
60
+ {
61
+ parent::__construct();
62
+ $this->setUnderscoreSeparatedKeys($underscoreSeparatedKeys);
63
+
64
+ $this->callableMethodFilter = new OptionalParametersFilter();
65
+
66
+ $this->filterComposite->addFilter('is', new IsFilter());
67
+ $this->filterComposite->addFilter('has', new HasFilter());
68
+ $this->filterComposite->addFilter('get', new GetFilter());
69
+ $this->filterComposite->addFilter('parameter', new OptionalParametersFilter(), FilterComposite::CONDITION_AND);
70
+ }
71
+
72
+ /**
73
+ * @param array|Traversable $options
74
+ * @return ClassMethods
75
+ * @throws Exception\InvalidArgumentException
76
+ */
77
+ public function setOptions($options)
78
+ {
79
+ if ($options instanceof Traversable) {
80
+ $options = ArrayUtils::iteratorToArray($options);
81
+ } elseif (!is_array($options)) {
82
+ throw new Exception\InvalidArgumentException(
83
+ 'The options parameter must be an array or a Traversable'
84
+ );
85
+ }
86
+ if (isset($options['underscoreSeparatedKeys'])) {
87
+ $this->setUnderscoreSeparatedKeys($options['underscoreSeparatedKeys']);
88
+ }
89
+
90
+ return $this;
91
+ }
92
+
93
+ /**
94
+ * @param bool $underscoreSeparatedKeys
95
+ * @return ClassMethods
96
+ */
97
+ public function setUnderscoreSeparatedKeys($underscoreSeparatedKeys)
98
+ {
99
+ $this->underscoreSeparatedKeys = (bool) $underscoreSeparatedKeys;
100
+
101
+ if ($this->underscoreSeparatedKeys) {
102
+ $this->setNamingStrategy(new UnderscoreNamingStrategy);
103
+ } elseif ($this->getNamingStrategy() instanceof UnderscoreNamingStrategy) {
104
+ $this->removeNamingStrategy();
105
+ }
106
+
107
+ return $this;
108
+ }
109
+
110
+ /**
111
+ * @return bool
112
+ */
113
+ public function getUnderscoreSeparatedKeys()
114
+ {
115
+ return $this->underscoreSeparatedKeys;
116
+ }
117
+
118
+ /**
119
+ * Extract values from an object with class methods
120
+ *
121
+ * Extracts the getter/setter of the given $object.
122
+ *
123
+ * @param object $object
124
+ * @return array
125
+ * @throws Exception\BadMethodCallException for a non-object $object
126
+ */
127
+ public function extract($object)
128
+ {
129
+ if (!is_object($object)) {
130
+ throw new Exception\BadMethodCallException(sprintf(
131
+ '%s expects the provided $object to be a PHP object)',
132
+ __METHOD__
133
+ ));
134
+ }
135
+
136
+ $objectClass = get_class($object);
137
+
138
+ // reset the hydrator's hydrator's cache for this object, as the filter may be per-instance
139
+ if ($object instanceof FilterProviderInterface) {
140
+ $this->extractionMethodsCache[$objectClass] = null;
141
+ }
142
+
143
+ // pass 1 - finding out which properties can be extracted, with which methods (populate hydration cache)
144
+ if (! isset($this->extractionMethodsCache[$objectClass])) {
145
+ $this->extractionMethodsCache[$objectClass] = array();
146
+ $filter = $this->filterComposite;
147
+ $methods = get_class_methods($object);
148
+
149
+ if ($object instanceof FilterProviderInterface) {
150
+ $filter = new FilterComposite(
151
+ array($object->getFilter()),
152
+ array(new MethodMatchFilter('getFilter'))
153
+ );
154
+ }
155
+
156
+ foreach ($methods as $method) {
157
+ $methodFqn = $objectClass . '::' . $method;
158
+
159
+ if (! ($filter->filter($methodFqn) && $this->callableMethodFilter->filter($methodFqn))) {
160
+ continue;
161
+ }
162
+
163
+ $attribute = $method;
164
+
165
+ if (strpos($method, 'get') === 0) {
166
+ $attribute = substr($method, 3);
167
+ if (!property_exists($object, $attribute)) {
168
+ $attribute = lcfirst($attribute);
169
+ }
170
+ }
171
+
172
+ $this->extractionMethodsCache[$objectClass][$method] = $attribute;
173
+ }
174
+ }
175
+
176
+ $values = array();
177
+
178
+ // pass 2 - actually extract data
179
+ foreach ($this->extractionMethodsCache[$objectClass] as $methodName => $attributeName) {
180
+ $realAttributeName = $this->extractName($attributeName, $object);
181
+ $values[$realAttributeName] = $this->extractValue($realAttributeName, $object->$methodName(), $object);
182
+ }
183
+
184
+ return $values;
185
+ }
186
+
187
+ /**
188
+ * Hydrate an object by populating getter/setter methods
189
+ *
190
+ * Hydrates an object by getter/setter methods of the object.
191
+ *
192
+ * @param array $data
193
+ * @param object $object
194
+ * @return object
195
+ * @throws Exception\BadMethodCallException for a non-object $object
196
+ */
197
+ public function hydrate(array $data, $object)
198
+ {
199
+ if (!is_object($object)) {
200
+ throw new Exception\BadMethodCallException(sprintf(
201
+ '%s expects the provided $object to be a PHP object)',
202
+ __METHOD__
203
+ ));
204
+ }
205
+
206
+ $objectClass = get_class($object);
207
+
208
+ foreach ($data as $property => $value) {
209
+ $propertyFqn = $objectClass . '::$' . $property;
210
+
211
+ if (! isset($this->hydrationMethodsCache[$propertyFqn])) {
212
+ $setterName = 'set' . ucfirst($this->hydrateName($property, $data));
213
+
214
+ $this->hydrationMethodsCache[$propertyFqn] = is_callable(array($object, $setterName))
215
+ ? $setterName
216
+ : false;
217
+ }
218
+
219
+ if ($this->hydrationMethodsCache[$propertyFqn]) {
220
+ $object->{$this->hydrationMethodsCache[$propertyFqn]}($this->hydrateValue($property, $value, $data));
221
+ }
222
+ }
223
+
224
+ return $object;
225
+ }
226
+
227
+ /**
228
+ * {@inheritDoc}
229
+ */
230
+ public function addFilter($name, $filter, $condition = FilterComposite::CONDITION_OR)
231
+ {
232
+ $this->resetCaches();
233
+
234
+ return parent::addFilter($name, $filter, $condition);
235
+ }
236
+
237
+ /**
238
+ * {@inheritDoc}
239
+ */
240
+ public function removeFilter($name)
241
+ {
242
+ $this->resetCaches();
243
+
244
+ return parent::removeFilter($name);
245
+ }
246
+
247
+ /**
248
+ * {@inheritDoc}
249
+ */
250
+ public function setNamingStrategy(NamingStrategyInterface $strategy)
251
+ {
252
+ $this->resetCaches();
253
+
254
+ return parent::setNamingStrategy($strategy);
255
+ }
256
+
257
+ /**
258
+ * {@inheritDoc}
259
+ */
260
+ public function removeNamingStrategy()
261
+ {
262
+ $this->resetCaches();
263
+
264
+ return parent::removeNamingStrategy();
265
+ }
266
+
267
+ /**
268
+ * Reset all local hydration/extraction caches
269
+ */
270
+ private function resetCaches()
271
+ {
272
+ $this->hydrationMethodsCache = $this->extractionMethodsCache = array();
273
+ }
274
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydrator.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator;
11
+
12
+ use Zend\ServiceManager\ServiceLocatorInterface;
13
+
14
+ class DelegatingHydrator implements HydratorInterface
15
+ {
16
+ /**
17
+ * @var ServiceLocatorInterface
18
+ */
19
+ protected $hydrators;
20
+
21
+ /**
22
+ * Constructor
23
+ *
24
+ * @param ServiceLocatorInterface $hydrators
25
+ */
26
+ public function __construct(ServiceLocatorInterface $hydrators)
27
+ {
28
+ $this->hydrators = $hydrators;
29
+ }
30
+
31
+ /**
32
+ * {@inheritdoc}
33
+ */
34
+ public function hydrate(array $data, $object)
35
+ {
36
+ return $this->getHydrator($object)->hydrate($data, $object);
37
+ }
38
+
39
+ /**
40
+ * {@inheritdoc}
41
+ */
42
+ public function extract($object)
43
+ {
44
+ return $this->getHydrator($object)->extract($object);
45
+ }
46
+
47
+ /**
48
+ * Gets hydrator of an object
49
+ *
50
+ * @param object $object
51
+ * @return HydratorInterface
52
+ */
53
+ protected function getHydrator($object)
54
+ {
55
+ return $this->hydrators->get(get_class($object));
56
+ }
57
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/DelegatingHydratorFactory.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator;
11
+
12
+ use Zend\ServiceManager\FactoryInterface;
13
+ use Zend\ServiceManager\ServiceLocatorInterface;
14
+
15
+ class DelegatingHydratorFactory implements FactoryInterface
16
+ {
17
+ /**
18
+ * Creates DelegatingHydrator
19
+ *
20
+ * @param ServiceLocatorInterface $serviceLocator
21
+ * @return DelegatingHydrator
22
+ */
23
+ public function createService(ServiceLocatorInterface $serviceLocator)
24
+ {
25
+ // Assume that this factory is registered with the HydratorManager,
26
+ // and just pass it directly on.
27
+ return new DelegatingHydrator($serviceLocator);
28
+ }
29
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/FilterComposite.php RENAMED
@@ -36,6 +36,8 @@ class FilterComposite implements FilterInterface
36
  /**
37
  * Define default Filter
38
  *
 
 
39
  * @throws InvalidArgumentException
40
  */
41
  public function __construct($orFilter = array(), $andFilter = array())
36
  /**
37
  * Define default Filter
38
  *
39
+ * @param array $orFilter
40
+ * @param array $andFilter
41
  * @throws InvalidArgumentException
42
  */
43
  public function __construct($orFilter = array(), $andFilter = array())
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/FilterInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/FilterProviderInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/GetFilter.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/HasFilter.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/IsFilter.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/MethodMatchFilter.php RENAMED
@@ -41,8 +41,8 @@ class MethodMatchFilter implements FilterInterface
41
  $pos = 0;
42
  }
43
  if (substr($property, $pos) === $this->method) {
44
- return $this->exclude ? false : true;
45
  }
46
- return $this->exclude ? true : false;
47
  }
48
  }
41
  $pos = 0;
42
  }
43
  if (substr($property, $pos) === $this->method) {
44
+ return !$this->exclude;
45
  }
46
+ return $this->exclude;
47
  }
48
  }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/NumberOfParameterFilter.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Filter/OptionalParametersFilter.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/FilterEnabledInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydrationInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorAwareInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorAwareTrait.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorOptionsInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/HydratorPluginManager.php RENAMED
@@ -26,6 +26,15 @@ class HydratorPluginManager extends AbstractPluginManager
26
  */
27
  protected $shareByDefault = false;
28
 
 
 
 
 
 
 
 
 
 
29
  /**
30
  * Default set of adapters
31
  *
@@ -38,6 +47,15 @@ class HydratorPluginManager extends AbstractPluginManager
38
  'reflection' => 'Zend\Stdlib\Hydrator\Reflection'
39
  );
40
 
 
 
 
 
 
 
 
 
 
41
  /**
42
  * {@inheritDoc}
43
  */
26
  */
27
  protected $shareByDefault = false;
28
 
29
+ /**
30
+ * Default aliases
31
+ *
32
+ * @var array
33
+ */
34
+ protected $aliases = array(
35
+ 'delegatinghydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydrator',
36
+ );
37
+
38
  /**
39
  * Default set of adapters
40
  *
47
  'reflection' => 'Zend\Stdlib\Hydrator\Reflection'
48
  );
49
 
50
+ /**
51
+ * Default factory-based adapters
52
+ *
53
+ * @var array
54
+ */
55
+ protected $factories = array(
56
+ 'Zend\Stdlib\Hydrator\DelegatingHydrator' => 'Zend\Stdlib\Hydrator\DelegatingHydratorFactory',
57
+ );
58
+
59
  /**
60
  * {@inheritDoc}
61
  */
backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/ArrayMapNamingStrategy.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\NamingStrategy;
11
+
12
+ final class ArrayMapNamingStrategy implements NamingStrategyInterface
13
+ {
14
+ /**
15
+ * @var string[]
16
+ */
17
+ private $extractionMap = array();
18
+
19
+ /**
20
+ * @var string[]
21
+ */
22
+ private $hydrationMap = array();
23
+
24
+ /**
25
+ * Constructor
26
+ *
27
+ * @param array $extractionMap A map of string keys and values for symmetric translation of hydrated
28
+ * and extracted field names
29
+ */
30
+ public function __construct(array $extractionMap)
31
+ {
32
+ $this->extractionMap = $extractionMap;
33
+ $this->hydrationMap = array_flip($extractionMap);
34
+ }
35
+
36
+ /**
37
+ * {@inheritDoc}
38
+ */
39
+ public function hydrate($name)
40
+ {
41
+ return isset($this->hydrationMap[$name]) ? $this->hydrationMap[$name] : $name;
42
+ }
43
+
44
+ /**
45
+ * {@inheritDoc}
46
+ */
47
+ public function extract($name)
48
+ {
49
+ return isset($this->extractionMap[$name]) ? $this->extractionMap[$name] : $name;
50
+ }
51
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/CompositeNamingStrategy.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\NamingStrategy;
11
+
12
+ final class CompositeNamingStrategy implements NamingStrategyInterface
13
+ {
14
+ /**
15
+ * @var array
16
+ */
17
+ private $namingStrategies = array();
18
+
19
+ /**
20
+ * @var NamingStrategyInterface
21
+ */
22
+ private $defaultNamingStrategy;
23
+
24
+ /**
25
+ * @param NamingStrategyInterface[] $strategies indexed by the name they translate
26
+ * @param NamingStrategyInterface|null $defaultNamingStrategy
27
+ */
28
+ public function __construct(array $strategies, NamingStrategyInterface $defaultNamingStrategy = null)
29
+ {
30
+ $this->namingStrategies = array_map(
31
+ function (NamingStrategyInterface $strategy) {
32
+ // this callback is here only to ensure type-safety
33
+ return $strategy;
34
+ },
35
+ $strategies
36
+ );
37
+
38
+ $this->defaultNamingStrategy = $defaultNamingStrategy ?: new IdentityNamingStrategy();
39
+ }
40
+
41
+ /**
42
+ * {@inheritDoc}
43
+ */
44
+ public function extract($name)
45
+ {
46
+ $strategy = isset($this->namingStrategies[$name])
47
+ ? $this->namingStrategies[$name]
48
+ : $this->defaultNamingStrategy;
49
+
50
+ return $strategy->extract($name);
51
+ }
52
+
53
+ /**
54
+ * {@inheritDoc}
55
+ */
56
+ public function hydrate($name)
57
+ {
58
+ $strategy = isset($this->namingStrategies[$name])
59
+ ? $this->namingStrategies[$name]
60
+ : $this->defaultNamingStrategy;
61
+
62
+ return $strategy->hydrate($name);
63
+ }
64
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/IdentityNamingStrategy.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\NamingStrategy;
11
+
12
+ final class IdentityNamingStrategy implements NamingStrategyInterface
13
+ {
14
+ /**
15
+ * {@inheritDoc}
16
+ */
17
+ public function hydrate($name)
18
+ {
19
+ return $name;
20
+ }
21
+
22
+ /**
23
+ * {@inheritDoc}
24
+ */
25
+ public function extract($name)
26
+ {
27
+ return $name;
28
+ }
29
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/NamingStrategy/MapNamingStrategy.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\NamingStrategy;
11
+
12
+ use Zend\Stdlib\Exception\InvalidArgumentException;
13
+
14
+ class MapNamingStrategy implements NamingStrategyInterface
15
+ {
16
+ /**
17
+ * Map for hydrate name conversion.
18
+ *
19
+ * @var array
20
+ */
21
+ protected $mapping = array();
22
+
23
+ /**
24
+ * Reversed map for extract name conversion.
25
+ *
26
+ * @var array
27
+ */
28
+ protected $reverse = array();
29
+
30
+ /**
31
+ * Initialize.
32
+ *
33
+ * @param array $mapping Map for name conversion on hydration
34
+ * @param array $reverse Reverse map for name conversion on extraction
35
+ */
36
+ public function __construct(array $mapping, array $reverse = null)
37
+ {
38
+ $this->mapping = $mapping;
39
+ $this->reverse = $reverse ?: $this->flipMapping($mapping);
40
+ }
41
+
42
+ /**
43
+ * Safelly flip mapping array.
44
+ *
45
+ * @param array $array Array to flip
46
+ * @return array Flipped array
47
+ * @throws InvalidArgumentException
48
+ */
49
+ protected function flipMapping(array $array)
50
+ {
51
+ array_walk($array, function ($value) {
52
+ if (!is_string($value) && !is_int($value)) {
53
+ throw new InvalidArgumentException('Mapping array can\'t be flipped because of invalid value');
54
+ }
55
+ });
56
+
57
+ return array_flip($array);
58
+ }
59
+
60
+ /**
61
+ * Converts the given name so that it can be extracted by the hydrator.
62
+ *
63
+ * @param string $name The original name
64
+ * @return mixed The hydrated name
65
+ */
66
+ public function hydrate($name)
67
+ {
68
+ if (array_key_exists($name, $this->mapping)) {
69
+ return $this->mapping[$name];
70
+ }
71
+
72
+ return $name;
73
+ }
74
+
75
+ /**
76
+ * Converts the given name so that it can be hydrated by the hydrator.
77
+ *
78
+ * @param string $name The original name
79
+ * @return mixed The extracted name
80
+ */
81
+ public function extract($name)
82
+ {
83
+ if (array_key_exists($name, $this->reverse)) {
84
+ return $this->reverse[$name];
85
+ }
86
+
87
+ return $name;
88
+ }
89
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/NamingStrategy/NamingStrategyInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/NamingStrategy/UnderscoreNamingStrategy.php RENAMED
@@ -13,9 +13,15 @@ use Zend\Filter\FilterChain;
13
 
14
  class UnderscoreNamingStrategy implements NamingStrategyInterface
15
  {
 
 
 
16
  protected static $camelCaseToUnderscoreFilter;
17
 
18
- protected static $underscoreToCamelCaseFilter;
 
 
 
19
 
20
  /**
21
  * Remove underscores and capitalize letters
@@ -25,7 +31,7 @@ class UnderscoreNamingStrategy implements NamingStrategyInterface
25
  */
26
  public function hydrate($name)
27
  {
28
- return lcfirst($this->getUnderscoreToCamelCaseFilter()->filter($name));
29
  }
30
 
31
  /**
@@ -42,16 +48,17 @@ class UnderscoreNamingStrategy implements NamingStrategyInterface
42
  /**
43
  * @return FilterChain
44
  */
45
- protected function getUnderscoreToCamelCaseFilter()
46
  {
47
- if (static::$underscoreToCamelCaseFilter instanceof FilterChain) {
48
- return static::$underscoreToCamelCaseFilter;
49
  }
50
 
51
  $filter = new FilterChain();
52
- $filter->attachByName('WordUnderscoreToCamelCase');
53
- static::$underscoreToCamelCaseFilter = $filter;
54
- return $filter;
 
55
  }
56
 
57
  /**
@@ -64,9 +71,10 @@ class UnderscoreNamingStrategy implements NamingStrategyInterface
64
  }
65
 
66
  $filter = new FilterChain();
 
67
  $filter->attachByName('WordCamelCaseToUnderscore');
68
  $filter->attachByName('StringToLower');
69
- static::$camelCaseToUnderscoreFilter = $filter;
70
- return $filter;
71
  }
72
  }
13
 
14
  class UnderscoreNamingStrategy implements NamingStrategyInterface
15
  {
16
+ /**
17
+ * @var FilterChain|null
18
+ */
19
  protected static $camelCaseToUnderscoreFilter;
20
 
21
+ /**
22
+ * @var FilterChain|null
23
+ */
24
+ protected static $underscoreToStudlyCaseFilter;
25
 
26
  /**
27
  * Remove underscores and capitalize letters
31
  */
32
  public function hydrate($name)
33
  {
34
+ return $this->getUnderscoreToStudlyCaseFilter()->filter($name);
35
  }
36
 
37
  /**
48
  /**
49
  * @return FilterChain
50
  */
51
+ protected function getUnderscoreToStudlyCaseFilter()
52
  {
53
+ if (static::$underscoreToStudlyCaseFilter instanceof FilterChain) {
54
+ return static::$underscoreToStudlyCaseFilter;
55
  }
56
 
57
  $filter = new FilterChain();
58
+
59
+ $filter->attachByName('WordUnderscoreToStudlyCase');
60
+
61
+ return static::$underscoreToStudlyCaseFilter = $filter;
62
  }
63
 
64
  /**
71
  }
72
 
73
  $filter = new FilterChain();
74
+
75
  $filter->attachByName('WordCamelCaseToUnderscore');
76
  $filter->attachByName('StringToLower');
77
+
78
+ return static::$camelCaseToUnderscoreFilter = $filter;
79
  }
80
  }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/NamingStrategyEnabledInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/ObjectProperty.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Reflection.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/BooleanStrategy.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\Strategy;
11
+
12
+ use Zend\Stdlib\Exception\InvalidArgumentException;
13
+
14
+ /**
15
+ * This Strategy extracts and hydrates int and string values to Boolean values
16
+ *
17
+ * @package Zend\Stdlib\Hydrator\Strategy
18
+ */
19
+ final class BooleanStrategy implements StrategyInterface
20
+ {
21
+ /**
22
+ * @var int|string
23
+ */
24
+ private $trueValue;
25
+
26
+ /**
27
+ * @var int|string
28
+ */
29
+ private $falseValue;
30
+
31
+ /**
32
+ * @param int|string $trueValue
33
+ * @param int|string $falseValue
34
+ * @throws InvalidArgumentException
35
+ */
36
+ public function __construct($trueValue, $falseValue)
37
+ {
38
+ if (!is_int($trueValue) && !is_string($trueValue)) {
39
+ throw new InvalidArgumentException(sprintf(
40
+ 'Unable to instantiate BooleanStrategy. Expected int or string as $trueValue. %s was given',
41
+ is_object($trueValue) ? get_class($trueValue) : gettype($trueValue)
42
+ ));
43
+ }
44
+
45
+ if (!is_int($falseValue) && !is_string($falseValue)) {
46
+ throw new InvalidArgumentException(sprintf(
47
+ 'Unable to instantiate BooleanStrategy. Expected int or string as $falseValue. %s was given',
48
+ is_object($falseValue) ? get_class($falseValue) : gettype($falseValue)
49
+ ));
50
+ }
51
+
52
+ $this->trueValue = $trueValue;
53
+ $this->falseValue = $falseValue;
54
+ }
55
+
56
+ /**
57
+ * Converts the given value so that it can be extracted by the hydrator.
58
+ *
59
+ * @param bool $value The original value.
60
+ * @throws InvalidArgumentException
61
+ * @return int|string Returns the value that should be extracted.
62
+ */
63
+ public function extract($value)
64
+ {
65
+ if (!is_bool($value)) {
66
+ throw new InvalidArgumentException(sprintf(
67
+ 'Unable to extract. Expected bool. %s was given.',
68
+ is_object($value) ? get_class($value) : gettype($value)
69
+ ));
70
+ }
71
+
72
+ return $value === true ? $this->trueValue : $this->falseValue;
73
+ }
74
+
75
+ /**
76
+ * Converts the given value so that it can be hydrated by the hydrator.
77
+ *
78
+ * @param int|string $value The original value.
79
+ * @throws InvalidArgumentException
80
+ * @return bool Returns the value that should be hydrated.
81
+ */
82
+ public function hydrate($value)
83
+ {
84
+ if (!is_string($value) && !is_int($value)) {
85
+ throw new InvalidArgumentException(sprintf(
86
+ 'Unable to hydrate. Expected string or int. %s was given.',
87
+ is_object($value) ? get_class($value) : gettype($value)
88
+ ));
89
+ }
90
+
91
+ if ($value === $this->trueValue) {
92
+ return true;
93
+ }
94
+
95
+ if ($value === $this->falseValue) {
96
+ return false;
97
+ }
98
+
99
+ throw new InvalidArgumentException(sprintf(
100
+ 'Unexpected value %s can\'t be hydrated. Expect %s or %s as Value.',
101
+ $value,
102
+ $this->trueValue,
103
+ $this->falseValue
104
+ ));
105
+ }
106
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/ClosureStrategy.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/DateTimeFormatterStrategy.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\Strategy;
11
+
12
+ use DateTime;
13
+ use DateTimeZone;
14
+
15
+ final class DateTimeFormatterStrategy implements StrategyInterface
16
+ {
17
+ /**
18
+ * @var string
19
+ */
20
+ private $format;
21
+
22
+ /**
23
+ * @var DateTimeZone|null
24
+ */
25
+ private $timezone;
26
+
27
+ /**
28
+ * Constructor
29
+ *
30
+ * @param string $format
31
+ * @param DateTimeZone|null $timezone
32
+ */
33
+ public function __construct($format = DateTime::RFC3339, DateTimeZone $timezone = null)
34
+ {
35
+ $this->format = (string) $format;
36
+ $this->timezone = $timezone;
37
+ }
38
+
39
+ /**
40
+ * {@inheritDoc}
41
+ *
42
+ * Converts to date time string
43
+ *
44
+ * @param mixed|DateTime $value
45
+ *
46
+ * @return mixed|string
47
+ */
48
+ public function extract($value)
49
+ {
50
+ if ($value instanceof DateTime) {
51
+ return $value->format($this->format);
52
+ }
53
+
54
+ return $value;
55
+ }
56
+
57
+ /**
58
+ * Converts date time string to DateTime instance for injecting to object
59
+ *
60
+ * {@inheritDoc}
61
+ *
62
+ * @param mixed|string $value
63
+ *
64
+ * @return mixed|DateTime
65
+ */
66
+ public function hydrate($value)
67
+ {
68
+ if ($value === '' || $value === null) {
69
+ return;
70
+ }
71
+
72
+ if ($this->timezone) {
73
+ $hydrated = DateTime::createFromFormat($this->format, $value, $this->timezone);
74
+ } else {
75
+ $hydrated = DateTime::createFromFormat($this->format, $value);
76
+ }
77
+
78
+ return $hydrated ?: $value;
79
+ }
80
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/DefaultStrategy.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/ExceptionInterface.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\Strategy\Exception;
11
+
12
+ interface ExceptionInterface
13
+ {
14
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/Exception/InvalidArgumentException.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\Strategy\Exception;
11
+
12
+ class InvalidArgumentException extends \InvalidArgumentException implements ExceptionInterface
13
+ {
14
+ }
backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/ExplodeStrategy.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\Strategy;
11
+
12
+ final class ExplodeStrategy implements StrategyInterface
13
+ {
14
+ /**
15
+ * @var string
16
+ */
17
+ private $valueDelimiter;
18
+
19
+ /**
20
+ * @var int|null
21
+ */
22
+ private $explodeLimit;
23
+
24
+ /**
25
+ * Constructor
26
+ *
27
+ * @param string $delimiter String that the values will be split upon
28
+ * @param int|null $explodeLimit Explode limit
29
+ */
30
+ public function __construct($delimiter = ',', $explodeLimit = null)
31
+ {
32
+ $this->setValueDelimiter($delimiter);
33
+
34
+ $this->explodeLimit = ($explodeLimit === null) ? null : (int) $explodeLimit;
35
+ }
36
+
37
+ /**
38
+ * Sets the delimiter string that the values will be split upon
39
+ *
40
+ * @param string $delimiter
41
+ * @return self
42
+ */
43
+ private function setValueDelimiter($delimiter)
44
+ {
45
+ if (!is_string($delimiter)) {
46
+ throw new Exception\InvalidArgumentException(sprintf(
47
+ '%s expects Delimiter to be string, %s provided instead',
48
+ __METHOD__,
49
+ is_object($delimiter) ? get_class($delimiter) : gettype($delimiter)
50
+ ));
51
+ }
52
+
53
+ if (empty($delimiter)) {
54
+ throw new Exception\InvalidArgumentException('Delimiter cannot be empty.');
55
+ }
56
+
57
+ $this->valueDelimiter = $delimiter;
58
+ }
59
+
60
+ /**
61
+ * {@inheritDoc}
62
+ *
63
+ * Split a string by delimiter
64
+ *
65
+ * @param string|null $value
66
+ *
67
+ * @return string[]
68
+ *
69
+ * @throws Exception\InvalidArgumentException
70
+ */
71
+ public function hydrate($value)
72
+ {
73
+ if (null === $value) {
74
+ return array();
75
+ }
76
+
77
+ if (!(is_string($value) || is_numeric($value))) {
78
+ throw new Exception\InvalidArgumentException(sprintf(
79
+ '%s expects argument 1 to be string, %s provided instead',
80
+ __METHOD__,
81
+ is_object($value) ? get_class($value) : gettype($value)
82
+ ));
83
+ }
84
+
85
+ if ($this->explodeLimit !== null) {
86
+ return explode($this->valueDelimiter, $value, $this->explodeLimit);
87
+ }
88
+
89
+ return explode($this->valueDelimiter, $value);
90
+ }
91
+
92
+ /**
93
+ * {@inheritDoc}
94
+ *
95
+ * Join array elements with delimiter
96
+ *
97
+ * @param string[] $value The original value.
98
+ *
99
+ * @return string|null
100
+ */
101
+ public function extract($value)
102
+ {
103
+ if (!is_array($value)) {
104
+ throw new Exception\InvalidArgumentException(sprintf(
105
+ '%s expects argument 1 to be array, %s provided instead',
106
+ __METHOD__,
107
+ is_object($value) ? get_class($value) : gettype($value)
108
+ ));
109
+ }
110
+
111
+ return empty($value) ? null : implode($this->valueDelimiter, $value);
112
+ }
113
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/SerializableStrategy.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/src/Hydrator/Strategy/StrategyChain.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Zend Framework (http://framework.zend.com/)
4
+ *
5
+ * @link http://github.com/zendframework/zf2 for the canonical source repository
6
+ * @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
7
+ * @license http://framework.zend.com/license/new-bsd New BSD License
8
+ */
9
+
10
+ namespace Zend\Stdlib\Hydrator\Strategy;
11
+
12
+ use Traversable;
13
+ use Zend\Stdlib\ArrayUtils;
14
+
15
+ final class StrategyChain implements StrategyInterface
16
+ {
17
+ /**
18
+ * Strategy chain for extraction
19
+ *
20
+ * @var StrategyInterface[]
21
+ */
22
+ private $extractionStrategies;
23
+
24
+ /**
25
+ * Strategy chain for hydration
26
+ *
27
+ * @var StrategyInterface[]
28
+ */
29
+ private $hydrationStrategies;
30
+
31
+ /**
32
+ * Constructor
33
+ *
34
+ * @param array|Traversable $extractionStrategies
35
+ */
36
+ public function __construct($extractionStrategies)
37
+ {
38
+ $extractionStrategies = ArrayUtils::iteratorToArray($extractionStrategies);
39
+ $this->extractionStrategies = array_map(
40
+ function (StrategyInterface $strategy) {
41
+ // this callback is here only to ensure type-safety
42
+ return $strategy;
43
+ },
44
+ $extractionStrategies
45
+ );
46
+
47
+ $this->hydrationStrategies = array_reverse($extractionStrategies);
48
+ }
49
+
50
+ /**
51
+ * {@inheritDoc}
52
+ */
53
+ public function extract($value)
54
+ {
55
+ foreach ($this->extractionStrategies as $strategy) {
56
+ $value = $strategy->extract($value);
57
+ }
58
+
59
+ return $value;
60
+ }
61
+
62
+ /**
63
+ * {@inheritDoc}
64
+ */
65
+ public function hydrate($value)
66
+ {
67
+ foreach ($this->hydrationStrategies as $strategy) {
68
+ $value = $strategy->hydrate($value);
69
+ }
70
+
71
+ return $value;
72
+ }
73
+ }
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/Strategy/StrategyInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Hydrator/StrategyEnabledInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/InitializableInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/JsonSerializable.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/JsonSerializable/PhpLegacyCompatibility.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Message.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/MessageInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ParameterObjectInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Parameters.php RENAMED
@@ -86,7 +86,7 @@ class Parameters extends PhpArrayObject implements ParametersInterface
86
  if ($this->offsetExists($name)) {
87
  return parent::offsetGet($name);
88
  }
89
- return null;
90
  }
91
 
92
  /**
86
  if ($this->offsetExists($name)) {
87
  return parent::offsetGet($name);
88
  }
89
+ return;
90
  }
91
 
92
  /**
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ParametersInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/PriorityList.php RENAMED
@@ -129,7 +129,7 @@ class PriorityList implements Iterator, Countable
129
  public function get($name)
130
  {
131
  if (!isset($this->items[$name])) {
132
- return null;
133
  }
134
 
135
  return $this->items[$name]['data'];
@@ -197,6 +197,7 @@ class PriorityList implements Iterator, Countable
197
  */
198
  public function current()
199
  {
 
200
  $node = current($this->items);
201
 
202
  return $node ? $node['data'] : false;
@@ -207,6 +208,7 @@ class PriorityList implements Iterator, Countable
207
  */
208
  public function key()
209
  {
 
210
  return key($this->items);
211
  }
212
 
@@ -228,6 +230,14 @@ class PriorityList implements Iterator, Countable
228
  return current($this->items) !== false;
229
  }
230
 
 
 
 
 
 
 
 
 
231
  /**
232
  * {@inheritDoc}
233
  */
129
  public function get($name)
130
  {
131
  if (!isset($this->items[$name])) {
132
+ return;
133
  }
134
 
135
  return $this->items[$name]['data'];
197
  */
198
  public function current()
199
  {
200
+ $this->sorted || $this->sort();
201
  $node = current($this->items);
202
 
203
  return $node ? $node['data'] : false;
208
  */
209
  public function key()
210
  {
211
+ $this->sorted || $this->sort();
212
  return key($this->items);
213
  }
214
 
230
  return current($this->items) !== false;
231
  }
232
 
233
+ /**
234
+ * @return self
235
+ */
236
+ public function getIterator()
237
+ {
238
+ return clone $this;
239
+ }
240
+
241
  /**
242
  * {@inheritDoc}
243
  */
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/PriorityQueue.php RENAMED
@@ -208,7 +208,6 @@ class PriorityQueue implements Countable, IteratorAggregate, Serializable
208
  switch ($flag) {
209
  case self::EXTR_BOTH:
210
  return $this->items;
211
- break;
212
  case self::EXTR_PRIORITY:
213
  return array_map(function ($item) {
214
  return $item['priority'];
208
  switch ($flag) {
209
  case self::EXTR_BOTH:
210
  return $this->items;
 
211
  case self::EXTR_PRIORITY:
212
  return array_map(function ($item) {
213
  return $item['priority'];
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Request.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/RequestInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/Response.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/ResponseInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/SplPriorityQueue.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/SplQueue.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/SplStack.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringUtils.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/AbstractStringWrapper.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/Iconv.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/Intl.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/MbString.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/Native.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/StringWrapper/StringWrapperInterface.php RENAMED
File without changes
backend/vendor/zendframework/zend-stdlib/{Zend/Stdlib → src}/compatibility/autoload.php RENAMED
File without changes
bitcoin.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // include php class for QR code generation
3
+ include('./phpqrcode.php');
4
+
5
+ // get bitcoin address
6
+ $bitcoinaddress = htmlspecialchars( $_GET["bitcoinaddress"] );
7
+
8
+ // output page
9
+ echo '<html><head><title>Bitcoin</title></head><body>';
10
+ echo '<div style="text-align:center;"><h1>Bitcoin</h1></div>';
11
+ echo '<p style="text-align:center;"><a href="bitcoin:' . $bitcoinaddress . '">bitcoin:' . $bitcoinaddress . '</a></p>';
12
+ echo '<p style="text-align:center;">';
13
+ QRcode::svg( $bitcoinaddress, false, 'h', 5 );
14
+ echo '</p>';
15
+ echo '<p style="text-align:center;">Information: <a href="https://www.bitcoin.org" target="_blank">bitcoin.org</a></p>';
16
+ echo '</body></html>';
17
+ ?>
css/shariff.min.local.css ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ /*!
2
+ * shariff - v1.16.0 - 15.08.2015
3
+ * https://github.com/heiseonline/shariff
4
+ * Copyright (c) 2015 Ines Pauer, Philipp Busse, Sebastian Hilbig, Erich Kramer, Deniz Sesli
5
+ * Licensed under the MIT license
6
+ */@font-face{font-family:shariff3uu;src:url(../fonts/shariff3uu.eot);src:url(../fonts/shariff3uu.eot)format('embedded-opentype'),url(../fonts/shariff3uu.woff)format('woff'),url(../fonts/shariff3uu.ttf)format('truetype'),url(../fonts/shariff3uu.svg)format('svg');font-weight:400;font-style:normal}.shariff .s3uu{font-family:shariff3uu;speak:none;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-feature-settings:normal;-moz-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-kerning:auto;-moz-font-kerning:auto;font-kerning:auto;-webkit-font-language-override:normal;-moz-font-language-override:normal;font-language-override:normal;font-size:inherit;font-size-adjust:none;font-stretch:normal;font-synthesis:weight style;text-rendering:auto;width:35px;line-height:35px;text-align:center;vertical-align:middle;font-size:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shariff .s3uu-facebook:before{content:"\e800"}.shariff .s3uu-twitter:before{content:"\e801"}.shariff .s3uu-google-plus:before{content:"\e802"}.shariff .s3uu-pinterest:before{content:"\e803"}.shariff .s3uu-xing:before{content:"\e804"}.shariff .s3uu-linkedin:before{content:"\e805"}.shariff .s3uu-reddit:before{content:"\e806"}.shariff .s3uu-stumbleupon:before{content:"\e807"}.shariff .s3uu-envelope:before{content:"\e808"}.shariff .s3uu-print:before{content:"\e809"}.shariff .s3uu-info:before{content:"\e80a"}.shariff .s3uu-flattr:before{content:"\e80b"}.shariff .s3uu-whatsapp:before{content:"\f232"}.shariff .s3uu-vk:before{content:"\e600"}.shariff .s3uu-paypal:before{content:"\e603"}.shariff .s3uu-bitcoin:before{content:"\e601"}.shariff .s3uu-tumblr:before{content:"\eabb"}.shariff .s3uu-patreon:before{content:"\e602"}.flattr_warning{background-color:red;color:#fff;font-size:20px;font-weight:700;padding:10px;text-align:center;margin:0 auto;line-height:1.5}.shariff_mailform{background:#eee none repeat scroll 0 0;border:1px solid;margin:10px;max-width:750px;padding:10px 15px}.shariff_mailform form{margin:0}.shariff_mailform fieldset{border:none;margin:0;padding:0}.shariff_mailform label{margin-left:3px;display:inline-block}.shariff_mailform p{margin:10px 0 0 0!important}.shariff_mailform textarea{height:auto!important;width:90%!important}.shariff_mailform input,.shariff_mailform select{vertical-align:baseline}.shariff_mailform_error{color:red;font-weight:700;padding:0 0 5px}.shariff_mailform_disabled{color:red;font-weight:700;padding:2px 0 0}.shariff_mailform_headline{font-weight:700;padding:0}.shariff::after,.shariff::before{content:" ";display:table}.shariff::after{clear:both}.shariff span{color:inherit}.shariff ul{display:-webkit-flex;display:-moz-flex;display:-ms-flex;display:-o-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-moz-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;padding:0!important;margin:0!important}.shariff ul li{list-style-type:none}.shariff ul li::before{content:normal!important}.shariff li{height:35px;box-sizing:border-box;overflow:hidden!important;margin:5px!important;padding:0!important;text-indent:0!important}.shariff li a{color:#fff;position:relative;display:block;height:35px;text-decoration:none;box-sizing:border-box;border:0}.shariff li .share_text{vertical-align:top!important}.shariff li .share_count,.shariff li .share_text{font-family:Arial,Helvetica,sans-serif;font-size:12px;line-height:36px}.shariff li .s3uu{width:35px;line-height:35px;text-align:center;vertical-align:top;font-size:20px}.shariff li .share_count{padding:0 8px;height:33px;position:absolute;top:0;right:0;margin:1px;background-color:rgba(255,255,255,.5);vertical-align:middle}.shariff .orientation-horizontal li{-webkit-box-flex:1}.shariff .orientation-horizontal .info{-webkit-box-flex:0}.shariff .orientation-horizontal li{float:left;-webkit-flex:none;-ms-flex:none;flex:none}.shariff .orientation-horizontal li .share_text{display:block;text-indent:-9999px;padding-left:3px}.shariff .orientation-horizontal li .share_count{display:none}.shariff .theme-default .shariff-button a{color:#fff}.shariff .theme-color .share_count{background-color:transparent!important;color:#fff}.shariff .theme-color a{color:#fff!important}.shariff .theme-color a:hover{color:#fff}.shariff .theme-grey .share_count{background-color:transparent}.shariff .theme-grey .shariff-button a{background-color:#b0b0b0;color:#fff}.shariff .theme-white .share_count{background-color:transparent}.shariff .theme-white .shariff-button{border:1px solid #ddd}.shariff .theme-white .shariff-button a{background-color:#fff;color:0}.shariff .theme-white .shariff-button a:hover{background-color:#eee}.shariff .theme-round .share_count{display:inline;height:100%;padding:0;right:0;left:0;top:0;margin:0;width:100%;background-color:transparent;color:transparent!important}.shariff .theme-round .shariff-button{width:35px!important;min-width:35px!important;max-width:35px!important;height:35px;border-radius:50%;margin:5px}.shariff .theme-round .share_text{display:block;text-indent:-9999px}.shariff .theme-round li{background:0 0}.shariff .theme-round li .s3uu{vertical-align:baseline}.shariff .theme-round li a{color:#fff}.shariff .theme-round a{text-align:center;color:#fff;position:relative;height:35px}.shariff .theme-round li.facebook .share_count:hover{background-color:#99adcf!important;color:#183a75!important}.shariff .theme-round li.twitter .share_count:hover{background-color:#96d4ee!important;color:#0174a4!important}.shariff .theme-round li.googleplus .share_count:hover{background-color:#eda79d!important;color:#a31601!important}.shariff .theme-round li.pinterest .share_count:hover{background-color:#ff050f!important;color:#fff!important}.shariff .theme-round li.linkedin .share_count:hover{background-color:#99adcf!important;color:#183a75!important}.shariff .theme-round li.xing .share_count:hover{background-color:#4fa5a7!important;color:#15686a!important}.shariff .theme-round li.reddit .share_count:hover{background-color:#e9f2fa!important;color:#000!important}.shariff .theme-round li.stumbleupon .share_count:hover{background-color:#fb613c!important;color:#fff!important}.shariff .theme-round li.flattr .share_count:hover{background-color:#f67c1a!important;color:#fff!important}.shariff .theme-round li.paypal .share_count:hover{background-color:#0285d2!important;color:#fff!important}.shariff .theme-round li.bitcoin .share_count:hover{background-color:#f7931a!important;color:#fff!important}.shariff .theme-round li.tumblr .share_count:hover{background-color:#529ecc!important;color:#fff!important}.shariff .theme-round li.patreon .share_count:hover{background-color:#e6461a!important;color:#fff!important}.shariff .orientation-vertical{-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}.shariff .orientation-vertical li{width:135px}.shariff .orientation-vertical li a{color:#fff}.shariff .buttonsize-small li{height:25px}.shariff .buttonsize-small li a{height:25px}.shariff .buttonsize-small li .share_count,.shariff .buttonsize-small li .share_text{font-size:11px;line-height:25px;padding:0 5px;height:23px}.shariff .buttonsize-small li .s3uu{width:25px;line-height:25px;font-size:16px}.shariff .buttonsize-small li .share_text{padding-left:1px!important}.shariff .orientation-vertical.buttonsize-small li{width:115px}.shariff .theme-round.buttonsize-small li .s3uu{margin-top:0}.shariff .theme-round.buttonsize-small .shariff-button{width:25px!important;min-width:25px!important;max-width:25px!important;height:25px!important}.shariff .theme-round.buttonsize-small .share_count{padding:0!important;height:25px!important}.widget .shariff .theme-color li a,.widget .shariff .theme-default li a,.widget .shariff .theme-grey li a,.widget .shariff .theme-round li a{color:#fff}.widget .shariff .theme-color li a:hover,.widget .shariff .theme-default li a:hover,.widget .shariff .theme-grey li a:hover,.widget .shariff .theme-round li a:hover{color:#fff}@media only screen and (max-width:360px){.shariff .orientation-horizontal li{min-width:35px;max-width:35px}.shariff .orientation-horizontal.buttonsize-small li{min-width:25px;max-width:25px}}@media only screen and (min-width:360px){.shariff .orientation-horizontal li{min-width:80px;width:auto}.shariff .orientation-horizontal li .share_count{display:block}.shariff .orientation-horizontal.col-1 li,.shariff .orientation-horizontal.col-2 li{min-width:130px}.shariff .orientation-horizontal.col-1 li .share_text,.shariff .orientation-horizontal.col-2 li .share_text{text-indent:0;display:inline!important}.shariff .orientation-horizontal.col-5 li,.shariff .orientation-horizontal.col-6 li{-webkit-flex:none;-ms-flex:none;flex:none}}@media only screen and (min-width:640px){.shariff .orientation-horizontal.col-3 li{min-width:130px}.shariff .orientation-horizontal.col-3 li .share_text{text-indent:0;display:inline!important}.shariff .orientation-horizontal.col-3.buttonsize-small li{min-width:105px}.shariff .orientation-horizontal.col-3.buttonsize-small li .share_text{text-indent:0;display:inline!important}}@media only screen and (min-width:768px){.shariff .orientation-horizontal li{min-width:130px}.shariff .orientation-horizontal li .share_text{text-indent:0;display:inline!important}.shariff .orientation-horizontal.buttonsize-small li{min-width:105px}.shariff .orientation-horizontal.buttonsize-small li .share_text{text-indent:0;display:inline!important}}@media only screen and (min-width:1024px){.shariff li{height:35px}.shariff li a{height:35px}.shariff li .s3uu{width:35px;line-height:35px}.shariff .buttonsize-small li{height:25px}.shariff .buttonsize-small li a{height:25px}.shariff .buttonsize-small li .s3uu{width:25px;line-height:25px}}.shariff .twitter a{background-color:#55acee}.shariff .twitter a:hover{background-color:#32bbf5}.shariff .theme-default .twitter .share_count{color:#147bc9}.shariff .theme-white .twitter a{color:#55acee}.shariff .theme-white .twitter a:hover{color:#55acee}.shariff .facebook a{background-color:#3b5998;color:#fff}.shariff .facebook a:hover{background-color:#4273c8}.shariff .theme-default .facebook .share_count{color:#1e2e4f}.shariff .theme-white .facebook a{color:#3b5998!important}.shariff .theme-white .facebook a:hover{color:#3b5998}.shariff .googleplus a{background-color:#d34836}.shariff .googleplus a:hover{background-color:#f75b44}.shariff .theme-default .googleplus .share_count{color:#86291d}.shariff .theme-white .googleplus a{color:#d34836}.shariff .theme-white .googleplus a:hover{color:#d34836}.shariff .mailform a{background-color:#999}.shariff .mailform a:hover{background-color:#a8a8a8}.shariff .theme-white .mailform a{color:#999}.shariff .theme-white .mailform a:hover{color:#999}.shariff .buttonsize-small .mailform .s3uu{font-size:14px!important}.shariff .mailto a{background-color:#999}.shariff .mailto a:hover{background-color:#a8a8a8}.shariff .theme-white .mailto a{color:#999}.shariff .theme-white .mailto a:hover{color:#999}.shariff .buttonsize-small .mailto .s3uu{font-size:14px!important}.shariff .info{border:1px solid #ccc}.shariff .info a{color:#666!important;background-color:#fff;text-align:center}.shariff .info a:hover{background-color:#efefef}.shariff .info .s3uu-info{width:35px;max-width:35px}.shariff .info .share_text{display:block!important;text-indent:-9999px!important}.shariff .theme-grey .info a{background-color:#fff}.shariff .theme-grey .info a:hover{background-color:#efefef}.shariff .orientation-vertical .info{width:35px;float:left}.shariff .orientation-vertical.buttonsize-small .info{width:25px;float:left}@media only screen and (min-width:360px){.shariff .orientation-horizontal .info{-webkit-flex:none!important;-ms-flex:none!important;flex:none!important;width:35px;min-width:35px;max-width:35px}.shariff .orientation-vertical .info{width:35px}.shariff .orientation-vertical.buttonsize-small .info{width:25px}.shariff .orientation-vertical.buttonsize-small .info .s3uu{line-height:24px;width:23px}.shariff .orientation-horizontal.buttonsize-small .info{width:25px;min-width:25px;max-width:25px}.shariff .orientation-horizontal.buttonsize-small .info .s3uu{line-height:24px;width:23px}}.shariff .whatsapp a{background-color:#5cbe4a}.shariff .whatsapp a:hover{background-color:#34af23}.shariff .s3uu-whatsapp{margin-left:1px}.shariff .theme-white .whatsapp a{color:#5cbe4a}.shariff .theme-white .whatsapp a:hover{color:#5cbe4a}.shariff .xing a{background-color:#126567;color:#fff}.shariff .xing a:hover{background-color:#29888a}.shariff .theme-default .xing .share_count{color:#031010}.shariff .theme-white .xing a{color:#126567}.shariff .theme-white .xing a:hover{color:#126567}.shariff .pinterest a{background-color:#cb2027;color:#fff}.shariff .pinterest a:hover{background-color:#e70f18}.shariff .theme-default .pinterest .share_count{color:#731216}.shariff .theme-white .pinterest a{color:#cb2027!important}.shariff .theme-white .pinterest a:hover{color:#cb2027}.shariff .stumbleupon a{background-color:#eb4b24}.shariff .stumbleupon a:hover{background-color:#e1370e}.shariff .stumbleupon .s3uu-stumbleupon{font-size:20px}.shariff .stumbleupon .s3uu-stumbleupon .buttonsize-small{font-size:16px}.shariff .theme-default .stumbleupon .share_count{color:#9b2a0e}.shariff .theme-white .stumbleupon a{color:#eb4b24!important}.shariff .theme-white .stumbleupon a:hover{color:#eb4b24}.shariff .printer a{background-color:#999}.shariff .printer a:hover{background-color:#a8a8a8}.shariff .theme-white .printer a{color:#999}.shariff .theme-white .printer a:hover{color:#999}.shariff .reddit a{background-color:#cee3f8;color:#000!important}.shariff .reddit a:hover{background-color:#bedcf9}.shariff .reddit .share_count{color:#000}.shariff .theme-white .reddit a{color:#000!important}.shariff .theme-grey .reddit a{color:#fff!important}.shariff .theme-grey .reddit a .share_count{color:#fff!important}.widget .shariff .theme-color .reddit a,.widget .shariff .theme-round .reddit a,.widget .shariff .theme-white .reddit a{color:#000!important}.shariff .linkedin a{background-color:#0077b5}.shariff .linkedin a:hover{background-color:#1488bf}.shariff .theme-default .linkedin .share_count{background-color:#33aae8}.shariff .theme-white .linkedin a{color:#0077b5}.shariff .theme-white .linkedin a:hover{color:#0077b5}.shariff .flattr a{background-color:#7ea352;color:#fff}.shariff .flattr a .s3uu{font-size:18px}.shariff .flattr a:hover{background-color:#f67c1a}.shariff .theme-default .flattr .share_count{color:#4a5f30}.shariff .theme-default .flattr a:hover .share_count{color:#a44c06}.shariff .theme-white .flattr a{color:#7ea352}.shariff .theme-white .flattr a:hover{color:#7ea352}.shariff .buttonsize-small .flattr a .s3uu{font-size:14px}.shariff .paypal a{background-color:#009cde;color:#fff}.shariff .paypal a .s3uu{font-size:18px}.shariff .paypal a:hover{background-color:#0285d2}.shariff .theme-default .paypal .share_count{color:#005478}.shariff .theme-default .paypal a:hover .share_count{color:#005478}.shariff .theme-white .paypal a{color:#009cde}.shariff .theme-white .paypal a:hover{color:#0285d2}.shariff .buttonsize-small .paypal a .s3uu{font-size:14px}.shariff .bitcoin a{background-color:#f7931a;color:#fff}.shariff .bitcoin a .s3uu{font-size:18px}.shariff .bitcoin a:hover{background-color:#000}.shariff .theme-default .bitcoin .share_count{color:#a55d06}.shariff .theme-default .bitcoin a:hover .share_count{color:#a55d06}.shariff .theme-white .bitcoin a{color:#f7931a}.shariff .theme-white .bitcoin a:hover{color:#000}.shariff .buttonsize-small .bitcoin a .s3uu{font-size:14px}.shariff .tumblr a{background-color:#36465d;color:#fff}.shariff .tumblr a .s3uu{font-size:18px}.shariff .tumblr a:hover{background-color:#529ecc}.shariff .theme-default .tumblr .share_count{color:#11151c}.shariff .theme-default .tumblr a:hover .share_count{color:#11151c}.shariff .theme-white .tumblr a{color:#36465d}.shariff .theme-white .tumblr a:hover{color:#529ecc}.shariff .buttonsize-small .tumblr a .s3uu{font-size:14px}.shariff .patreon a{background-color:#e6461a;color:#fff}.shariff .patreon a .s3uu{font-size:18px}.shariff .patreon a:hover{background-color:#f09076}.shariff .theme-default .patreon .share_count{color:#8b2a0f}.shariff .theme-default .patreon a:hover .share_count{color:#8b2a0f}.shariff .theme-white .patreon a{color:#e6461a}.shariff .theme-white .patreon a:hover{color:#232d32}.shariff .buttonsize-small .patreon a .s3uu{font-size:14px}
css/shariff_admin-notice.css ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ .shariff_admininfo_cross { float:right; margin-top:6px }
2
+ .shariff_cross_icon { line-height:1; text-align:center; width:20px; text-decoration:none }
3
+ .shariff_cross_icon::before { content:"\00D7"; font-weight:bold; font-size:2em }
css/shariff_options.css ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .shariff code {
2
+ font-size: 12px !important;
3
+ }
4
+
5
+ .shariff_status-col {
6
+ width: 400px;
7
+ }
8
+
9
+ .shariff_status-col2 {
10
+ word-wrap: break-word;
11
+ }
12
+
13
+ .shariff_options-table {
14
+ display: table;
15
+ border-spacing: 10px;
16
+ margin: -15px 0 -5px -5px;
17
+ border-collapse: separate;
18
+ }
19
+
20
+ .shariff_options-row {
21
+ display: table-row;
22
+ }
23
+
24
+ .shariff_options-cell {
25
+ display: table-cell;
26
+ vertical-align: middle;
27
+ min-width: 75px;
28
+ }
29
+
30
+ .shariff_status-table {
31
+ display: table;
32
+ }
33
+
34
+ .shariff_status-row {
35
+ display: table-row;
36
+ }
37
+
38
+ .shariff_status-main-table {
39
+ display: table;
40
+ border-spacing: 10px;
41
+ margin: -10px 0 0 -10px;
42
+ }
43
+
44
+ .shariff_status-first-cell {
45
+ display: table-cell;
46
+ width: 125px;
47
+ }
48
+
49
+ .shariff_status-cell {
50
+ display: table-cell;
51
+ }
52
+
53
+ .shariff_status-disabled {
54
+ font-weight: bold;
55
+ }
56
+
57
+ .shariff_status-ok {
58
+ font-weight: bold;
59
+ color: green;
60
+ }
61
+
62
+ .shariff_status-error {
63
+ font-weight: bold;
64
+ color: red;
65
+ }
66
+
67
+ .shariff_shortcode_row_head {
68
+ display: table-row;
69
+ }
70
+
71
+ .shariff_shortcode_cell_head {
72
+ display: table-cell;
73
+ border: 1px solid;
74
+ padding: 10px;
75
+ }
76
+
77
+ .shariff_shortcode_cell_name-option {
78
+ display: table-cell;
79
+ border: 1px solid;
80
+ padding: 10px;
81
+ width: 100px;
82
+ font-weight: bold;
83
+ }
84
+
85
+ .shariff_shortcode_cell_default {
86
+ display: table-cell;
87
+ border: 1px solid;
88
+ padding: 10px;
89
+ width: 275px;
90
+ font-weight: bold;
91
+ }
92
+
93
+ .shariff_shortcode_cell_example {
94
+ display: table-cell;
95
+ border: 1px solid;
96
+ padding: 10px;
97
+ width: 275px;
98
+ font-weight: bold;
99
+ }
100
+
101
+ .shariff_shortcode_cell_description {
102
+ display: table-cell;
103
+ border: 1px solid;
104
+ padding: 10px;
105
+ font-weight: bold;
106
+ }
107
+
108
+ .shariff_shortcode_table {
109
+ display: table;
110
+ background-color: #fff;
111
+ }
112
+
113
+ .shariff_shortcode_row {
114
+ display: table-row;
115
+ }
116
+
117
+ .shariff_shortcode_cell {
118
+ display: table-cell;
119
+ border: 1px solid;
120
+ padding: 10px;
121
+ }
fonts/shariff3uu.eot CHANGED
Binary file
fonts/shariff3uu.svg CHANGED
@@ -6,19 +6,23 @@
6
  <font id="icomoon" horiz-adv-x="1024">
7
  <font-face units-per-em="1024" ascent="960" descent="-64" />
8
  <missing-glyph horiz-adv-x="1024" />
9
- <glyph unicode="&#x20;" d="" horiz-adv-x="512" />
10
- <glyph unicode="&#xe600;" d="M1095.429 653.714q13.143-36.571-85.714-168-13.714-18.286-37.143-48.571-44.571-57.143-51.429-74.857-9.714-23.429 8-46.286 9.714-12 46.286-46.857h0.571l2.286-2.286q80.571-74.857 109.143-126.286 1.714-2.857 3.714-7.143t4-15.143-0.286-19.429-14.286-15.714-33.714-7.143l-146.286-2.286q-13.714-2.857-32 2.857t-29.714 12.571l-11.429 6.857q-17.143 12-40 36.571t-39.143 44.286-34.857 33.143-32.286 8.857q-1.714-0.571-4.571-2t-9.714-8.286-12.286-16.857-9.714-29.714-3.714-44.286q0-8.571-2-15.714t-4.286-10.571l-2.286-2.857q-10.286-10.857-30.286-12.571h-65.714q-40.571-2.286-83.429 9.429t-75.143 30.286-58.857 37.714-40.286 32.857l-14.286 13.714q-5.714 5.714-15.714 17.143t-40.857 52-60.571 86.286-70 120.571-74.571 155.429q-3.429 9.143-3.429 15.429t1.714 9.143l2.286 3.429q8.571 10.857 32.571 10.857l156.571 1.143q6.857-1.143 13.143-3.714t9.143-4.857l2.857-1.714q9.143-6.286 13.714-18.286 11.429-28.571 26.286-59.143t23.429-46.571l9.143-16.571q16.571-34.286 32-59.429t27.714-39.143 23.714-22 19.429-8 15.429 2.857q1.143 0.571 2.857 2.857t6.857 12.571 7.714 26.857 5.429 46.286 0 71.429q-1.143 22.857-5.143 41.714t-8 26.286l-3.429 6.857q-14.286 19.429-48.571 24.571-7.429 1.143 2.857 13.714 9.714 10.857 21.714 17.143 30.286 14.857 136.571 13.714 46.857-0.571 77.143-7.429 11.429-2.857 19.143-7.714t11.714-13.714 6-18.286 2-26-0.571-31.429-1.429-40.286-0.857-47.143q0-6.286-0.571-24t-0.286-27.429 2-23.143 6.571-22.286 12.857-14q4.571-1.143 9.714-2.286t14.857 6.286 21.714 19.714 29.714 38.286 38.857 61.429q34.286 59.429 61.143 128.571 2.286 5.714 5.714 10t6.286 6l2.286 1.714 2.857 1.429t7.429 1.714 11.429 0.286l164.571 1.143q22.286 2.857 36.571-1.429t17.714-9.429z" horiz-adv-x="1097" />
11
- <glyph unicode="&#xe800;" d="M547.84 952.832v-150.528h-89.088q-49.152 0-66.56-20.48t-17.408-61.44v-108.544h167.936l-22.528-168.96h-145.408v-434.176h-175.104v434.176h-145.408v168.96h145.408v124.928q0 106.496 59.392 164.864t158.72 58.368q83.968 0 130.048-7.168z" horiz-adv-x="585" />
12
- <glyph unicode="&#xe801;" d="M925.696 726.528q-37.888-55.296-92.16-95.232 0-8.192 0-23.552 0-74.752-21.504-148.48t-65.536-142.336-105.472-119.808-147.456-83.968-185.344-30.72q-154.624 0-282.624 82.944 19.456-3.072 44.032-3.072 129.024 0 229.376 78.848-60.416 2.048-107.52 36.864t-65.536 91.136q19.456-2.048 34.816-2.048 24.576 0 49.152 6.144-64.512 13.312-106.496 63.488t-41.984 117.76v2.048q38.912-21.504 83.968-23.552-37.888 25.6-60.416 65.536t-22.528 88.064q0 50.176 25.6 93.184 69.632-84.992 167.936-136.192t212.992-56.32q-5.12 21.504-5.12 41.984 0 76.8 54.272 130.048t130.048 54.272q80.896 0 135.168-58.368 62.464 12.288 116.736 45.056-20.48-65.536-80.896-102.4 53.248 6.144 106.496 28.672z" horiz-adv-x="950" />
13
- <glyph unicode="&#xe802;" d="M419.84 505.344q0-20.48 18.432-40.96t44.032-37.888 52.224-41.984 44.032-60.416 18.432-80.896q0-51.2-27.648-98.304-40.96-69.632-120.832-103.424t-169.984-32.768q-75.776 0-141.312 24.576t-97.28 77.824q-21.504 34.816-21.504 74.752 0 47.104 25.6 86.016t67.584 65.536q74.752 47.104 230.4 57.344-18.432 24.576-26.624 41.984t-9.216 41.984q0 20.48 12.288 49.152-26.624-3.072-38.912-3.072-84.992 0-142.336 55.296t-58.368 140.288q0 46.080 20.48 90.112t56.32 74.752q44.032 37.888 104.448 56.32t124.928 18.432h238.592l-78.848-50.176h-74.752q41.984-35.84 63.488-75.776t21.504-92.16q0-40.96-13.312-73.728t-33.792-53.248-39.936-36.864-33.792-34.816-14.336-37.888zM336.896 559.616q21.504 0 44.032 10.24t37.888 24.576q30.72 32.768 30.72 91.136 0 32.768-10.24 70.656t-27.648 74.752-48.128 58.368-66.56 23.552q-24.576 0-47.104-11.264t-37.888-29.696q-26.624-33.792-26.624-91.136 0-26.624 5.12-56.32t18.432-58.368 29.696-53.248 43.008-37.888 55.296-15.36zM337.92 60.928q32.768 0 63.488 7.168t56.32 22.528 41.984 41.984 15.36 62.464q0 14.336-4.096 27.648t-8.192 24.576-15.36 23.552-16.384 19.456-22.528 20.48-20.48 16.384-23.552 16.384-21.504 15.36q-8.192 1.024-26.624 1.024-30.72 0-60.416-4.096t-61.44-14.336-55.296-25.6-38.912-43.008-15.36-60.416q0-39.936 19.456-70.656t52.224-47.104 68.608-25.6 72.704-8.192zM800.768 561.664h121.856v-61.44h-121.856v-124.928h-60.416v124.928h-120.832v61.44h120.832v123.904h60.416v-123.904z" horiz-adv-x="950" />
14
- <glyph unicode="&#xe803;" d="M877.568 448q0-119.808-58.368-220.16t-159.744-159.744-220.16-59.392q-63.488 0-124.928 18.432 33.792 53.248 44.032 94.208 5.12 19.456 31.744 120.832 11.264-22.528 40.96-38.912t65.536-16.384q68.608 0 122.88 38.912t84.992 107.52 29.696 154.624q0 65.536-34.816 121.856t-98.304 93.184-145.408 36.864q-60.416 0-112.64-17.408t-88.064-44.032-62.464-62.464-37.888-73.728-12.288-76.8q0-59.392 22.528-104.448t67.584-63.488q16.384-7.168 21.504 11.264 1.024 4.096 4.096 17.408t5.12 17.408q3.072 13.312-6.144 24.576-29.696 34.816-29.696 86.016 0 86.016 59.392 148.48t156.672 62.464q86.016 0 134.144-47.104t49.152-121.856q0-97.28-39.936-164.864t-100.352-68.608q-34.816 0-55.296 24.576t-13.312 60.416q4.096 19.456 15.36 53.248t16.384 58.368 7.168 44.032q0 27.648-15.36 47.104t-44.032 18.432q-35.84 0-60.416-31.744t-24.576-81.92q0-40.96 14.336-69.632l-56.32-238.592q-10.24-39.936-7.168-101.376-117.76 52.224-190.464 160.768t-72.704 241.664q0 119.808 59.392 220.16t158.72 159.744 221.184 59.392 220.16-59.392 159.744-159.744 58.368-220.16z" horiz-adv-x="878" />
15
- <glyph unicode="&#xe804;" d="M340.992 579.072q-5.12-10.24-146.432-261.12-15.36-25.6-37.888-25.6h-136.192q-12.288 0-17.408 9.216t0 20.48l144.384 256q1.024 0 0 1.024l-92.16 158.72q-7.168 13.312 0 21.504 5.12 8.192 17.408 8.192h137.216q22.528 0 37.888-25.6zM801.792 945.664q6.144-9.216 0-21.504l-302.080-533.504 192.512-352.256q6.144-11.264 0-20.48-5.12-9.216-18.432-9.216h-136.192q-23.552 0-37.888 25.6l-193.536 356.352q10.24 18.432 303.104 537.6 14.336 25.6 36.864 25.6h138.24q12.288 0 17.408-8.192z" horiz-adv-x="804" />
16
- <glyph unicode="&#xe805;" d="M199.68 602.624v-566.272h-188.416v566.272h188.416zM211.968 777.728q0-41.984-29.696-69.632t-76.8-27.648h-1.024q-47.104 0-75.776 27.648t-28.672 69.632 29.696 69.632 76.8 27.648 75.776-27.648 29.696-69.632zM877.568 360.96v-324.608h-187.392v303.104q0 60.416-23.552 94.208t-72.704 33.792q-35.84 0-59.392-19.456t-36.864-49.152q-6.144-17.408-6.144-46.080v-316.416h-188.416q1.024 228.352 1.024 369.664t0 168.96l-1.024 27.648h188.416v-81.92h-1.024q11.264 18.432 23.552 31.744t31.744 29.696 50.176 24.576 65.536 9.216q97.28 0 156.672-64.512t59.392-190.464z" horiz-adv-x="878" />
17
- <glyph unicode="&#xe806;" d="M475.136 409.088q0-31.744-23.552-54.272t-55.296-23.552q-32.768 0-55.296 23.552t-23.552 54.272q0 32.768 23.552 56.32t55.296 23.552 55.296-23.552 23.552-56.32zM738.304 488.96q31.744 0 55.296-23.552t22.528-56.32q0-31.744-22.528-54.272t-55.296-23.552q-32.768 0-56.32 23.552t-23.552 54.272q0 32.768 24.576 56.32t55.296 23.552zM1133.568 495.104q0-35.84-17.408-65.536t-47.104-47.104q2.048-18.432 2.048-34.816 0-68.608-38.912-131.072t-112.64-110.592q-71.68-47.104-162.816-71.68t-192.512-25.6q-100.352 0-191.488 25.6t-162.816 71.68q-73.728 48.128-112.64 109.568t-39.936 132.096q0 17.408 3.072 37.888-27.648 17.408-44.032 47.104t-16.384 62.464q0 53.248 37.888 91.136t91.136 37.888q47.104 0 84.992-31.744 141.312 90.112 337.92 94.208l76.8 241.664q2.048 8.192 10.24 12.288t16.384 2.048l197.632-47.104q12.288 28.672 38.912 47.104t59.392 17.408q44.032 0 74.752-30.72t30.72-75.776-30.72-74.752-74.752-31.744q-44.032 0-74.752 30.72t-31.744 74.752l-180.224 41.984-66.56-208.896q187.392-8.192 320.512-95.232 35.84 33.792 86.016 33.792 53.248 0 91.136-37.888t37.888-91.136zM951.296 915.968q-26.624 0-44.032-18.432t-18.432-44.032 18.432-44.032 44.032-18.432 44.032 18.432 17.408 44.032-17.408 44.032-44.032 18.432zM44.032 495.104q0-38.912 28.672-63.488 28.672 74.752 103.424 134.144-20.48 14.336-47.104 14.336-34.816 0-60.416-24.576t-24.576-60.416zM894.976 141.824q64.512 41.984 98.304 95.232t33.792 110.592-33.792 110.592-98.304 95.232q-65.536 43.008-151.552 65.536t-179.2 23.552-179.2-23.552-151.552-65.536q-63.488-41.984-97.28-95.232t-34.816-110.592 34.816-110.592 97.28-95.232q66.56-41.984 151.552-65.536t179.2-23.552 179.2 23.552 151.552 65.536zM1056.768 427.52q32.768 26.624 32.768 67.584 0 34.816-24.576 60.416t-60.416 24.576q-27.648 0-49.152-16.384 74.752-59.392 101.376-136.192zM718.848 217.6q6.144 6.144 15.36 6.144t15.36-6.144 6.144-15.36-6.144-16.384q-56.32-56.32-182.272-56.32h-1.024q-125.952 0-182.272 56.32-6.144 7.168-6.144 16.384t6.144 15.36 15.36 6.144 15.36-6.144q44.032-44.032 151.552-44.032h1.024q107.52 0 151.552 44.032z" horiz-adv-x="1134" />
18
- <glyph unicode="&#xe807;" d="M607.232 553.472v67.584q0 23.552-17.408 40.96t-40.96 16.384-40.96-16.384-17.408-40.96v-350.208q0-100.352-71.68-171.008t-174.080-70.656q-101.376 0-173.056 71.68t-71.68 173.056v152.576h187.392v-149.504q0-24.576 17.408-41.984t40.96-16.384 40.96 16.384 17.408 41.984v354.304q0 97.28 71.68 166.912t173.056 68.608q100.352 0 172.032-69.632t72.704-167.936v-77.824l-111.616-32.768zM909.312 426.496h187.392v-152.576q0-101.376-71.68-173.056t-173.056-71.68-173.056 70.656-71.68 172.032v153.6l74.752-34.816 111.616 32.768v-154.624q0-23.552 16.384-40.96t40.96-16.384 41.984 16.384 16.384 40.96v157.696z" horiz-adv-x="1097" />
19
- <glyph unicode="&#xe808;" d="M1024 554.496v-453.632q0-37.888-26.624-64.512t-64.512-27.648h-841.728q-36.864 0-64.512 27.648t-26.624 64.512v453.632q25.6-28.672 57.344-50.176 206.848-140.288 284.672-196.608 32.768-24.576 52.224-37.888t54.272-27.648 62.464-13.312h2.048q28.672 0 62.464 13.312t54.272 27.648 52.224 37.888q97.28 69.632 284.672 196.608 32.768 22.528 57.344 50.176zM1024 722.432q0-45.056-27.648-86.016t-69.632-70.656q-215.040-149.504-268.288-185.344-5.12-4.096-23.552-17.408t-30.72-22.528-29.696-18.432-33.792-15.36-27.648-5.12h-2.048q-12.288 0-27.648 5.12t-33.792 15.36-29.696 18.432-30.72 22.528-23.552 17.408q-52.224 35.84-150.528 103.424t-116.736 81.92q-35.84 23.552-66.56 65.536t-31.744 78.848q0 44.032 23.552 73.728t67.584 29.696h841.728q36.864 0 63.488-26.624t27.648-64.512z" />
20
- <glyph unicode="&#xe809;" d="M219.136 82.432h512v146.432h-512v-146.432zM219.136 448h512v219.136h-91.136q-22.528 0-38.912 16.384t-16.384 38.912v91.136h-365.568v-365.568zM877.568 411.136q0 15.36-10.24 25.6t-26.624 11.264-25.6-11.264-10.24-25.6 10.24-25.6 25.6-10.24 26.624 10.24 10.24 25.6zM951.296 411.136v-237.568q0-7.168-6.144-12.288t-12.288-6.144h-128v-91.136q0-22.528-16.384-38.912t-38.912-16.384h-548.864q-22.528 0-37.888 16.384t-16.384 38.912v91.136h-128q-7.168 0-13.312 6.144t-5.12 12.288v237.568q0 45.056 32.768 77.824t76.8 31.744h36.864v311.296q0 22.528 16.384 38.912t37.888 16.384h384q23.552 0 51.2-12.288t43.008-26.624l87.040-87.040q15.36-16.384 27.648-44.032t11.264-50.176v-146.432h35.84q46.080 0 77.824-31.744t32.768-77.824z" horiz-adv-x="950" />
21
- <glyph unicode="&#xe80a;" d="M365.568 192v-72.704q0-15.36-10.24-25.6t-26.624-11.264h-291.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 25.6t25.6 11.264h35.84v219.136h-35.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 25.6t25.6 11.264h219.136q15.36 0 25.6-11.264t11.264-25.6v-328.704h35.84q15.36 0 26.624-11.264t10.24-25.6zM292.864 850.432v-109.568q0-15.36-11.264-25.6t-25.6-11.264h-146.432q-14.336 0-25.6 11.264t-11.264 25.6v109.568q0 14.336 11.264 25.6t25.6 11.264h146.432q15.36 0 25.6-11.264t11.264-25.6z" horiz-adv-x="366" />
22
- <glyph unicode="&#xe80b;" d="M0 51.712v526.336q0 183.296 87.040 284.672t265.216 101.376h561.152q-5.12-5.12-53.248-54.272t-102.4-103.424-111.616-111.616-97.28-95.232-43.008-37.888q-15.36 0-15.36 16.384v159.744h-49.152q-60.416 0-96.256-6.144t-64.512-26.624-39.936-58.368-12.288-98.304v-268.288zM68.608-68.096q5.12 5.12 54.272 54.272t102.4 103.424 111.616 112.64 97.28 95.232 41.984 36.864q15.36 0 15.36-16.384v-159.744h49.152q118.784 0 165.888 36.864t46.080 152.576v268.288l229.376 228.352v-526.336q0-183.296-86.016-284.672t-266.24-101.376h-561.152z" horiz-adv-x="982" />
23
- <glyph unicode="&#xf232;" d="M562.857 403.429q7.429 0 55.714-25.143t51.143-30.286q1.143-2.857 1.143-8.571 0-18.857-9.714-43.429-9.143-22.286-40.571-37.429t-58.286-15.143q-32.571 0-108.571 35.429-56 25.714-97.143 67.429t-84.571 105.714q-41.143 61.143-40.571 110.857v4.571q1.714 52 42.286 90.286 13.714 12.571 29.714 12.571 3.429 0 10.286-0.857t10.857-0.857q10.857 0 15.143-3.714t8.857-15.714q4.571-11.429 18.857-50.286t14.286-42.857q0-12-19.714-32.857t-19.714-26.571q0-4 2.857-8.571 19.429-41.714 58.286-78.286 32-30.286 86.286-57.714 6.857-4 12.571-4 8.571 0 30.857 27.714t29.714 27.714zM446.857 100.571q72.571 0 139.143 28.571t114.571 76.571 76.571 114.571 28.571 139.143-28.571 139.143-76.571 114.571-114.571 76.571-139.143 28.571-139.143-28.571-114.571-76.571-76.571-114.571-28.571-139.143q0-116 68.571-210.286l-45.143-133.143 138.286 44q90.286-59.429 197.143-59.429zM446.857 890.286q87.429 0 167.143-34.286t137.429-92 92-137.429 34.286-167.143-34.286-167.143-92-137.429-137.429-92-167.143-34.286q-111.429 0-208.571 53.714l-238.286-76.571 77.714 231.429q-61.714 101.714-61.714 222.286 0 87.429 34.286 167.143t92 137.429 137.429 92 167.143 34.286z" />
 
 
 
 
24
  </font></defs></svg>
6
  <font id="icomoon" horiz-adv-x="1024">
7
  <font-face units-per-em="1024" ascent="960" descent="-64" />
8
  <missing-glyph horiz-adv-x="1024" />
9
+ <glyph unicode="&#x20;" horiz-adv-x="512" d="" />
10
+ <glyph unicode="&#xe600;" glyph-name="vk" horiz-adv-x="1097" d="M1095.429 653.714q13.143-36.571-85.714-168-13.714-18.286-37.143-48.571-44.571-57.143-51.429-74.857-9.714-23.429 8-46.286 9.714-12 46.286-46.857h0.571l2.286-2.286q80.571-74.857 109.143-126.286 1.714-2.857 3.714-7.143t4-15.143-0.286-19.429-14.286-15.714-33.714-7.143l-146.286-2.286q-13.714-2.857-32 2.857t-29.714 12.571l-11.429 6.857q-17.143 12-40 36.571t-39.143 44.286-34.857 33.143-32.286 8.857q-1.714-0.571-4.571-2t-9.714-8.286-12.286-16.857-9.714-29.714-3.714-44.286q0-8.571-2-15.714t-4.286-10.571l-2.286-2.857q-10.286-10.857-30.286-12.571h-65.714q-40.571-2.286-83.429 9.429t-75.143 30.286-58.857 37.714-40.286 32.857l-14.286 13.714q-5.714 5.714-15.714 17.143t-40.857 52-60.571 86.286-70 120.571-74.571 155.429q-3.429 9.143-3.429 15.429t1.714 9.143l2.286 3.429q8.571 10.857 32.571 10.857l156.571 1.143q6.857-1.143 13.143-3.714t9.143-4.857l2.857-1.714q9.143-6.286 13.714-18.286 11.429-28.571 26.286-59.143t23.429-46.571l9.143-16.571q16.571-34.286 32-59.429t27.714-39.143 23.714-22 19.429-8 15.429 2.857q1.143 0.571 2.857 2.857t6.857 12.571 7.714 26.857 5.429 46.286 0 71.429q-1.143 22.857-5.143 41.714t-8 26.286l-3.429 6.857q-14.286 19.429-48.571 24.571-7.429 1.143 2.857 13.714 9.714 10.857 21.714 17.143 30.286 14.857 136.571 13.714 46.857-0.571 77.143-7.429 11.429-2.857 19.143-7.714t11.714-13.714 6-18.286 2-26-0.571-31.429-1.429-40.286-0.857-47.143q0-6.286-0.571-24t-0.286-27.429 2-23.143 6.571-22.286 12.857-14q4.571-1.143 9.714-2.286t14.857 6.286 21.714 19.714 29.714 38.286 38.857 61.429q34.286 59.429 61.143 128.571 2.286 5.714 5.714 10t6.286 6l2.286 1.714 2.857 1.429t7.429 1.714 11.429 0.286l164.571 1.143q22.286 2.857 36.571-1.429t17.714-9.429z" />
11
+ <glyph unicode="&#xe601;" glyph-name="bitcoin" horiz-adv-x="731" d="M666.857 585.143q10.286-104-74.857-147.429 66.857-16 100-58.857t25.714-122.286q-4-40.571-18.571-71.429t-36.857-50.857-55.429-33.429-69.429-19.714-83.143-8.571v-145.714h-88v143.429q-45.714 0-69.714 0.571v-144h-88v145.714q-10.286 0-30.857 0.286t-31.429 0.286h-114.286l17.714 104.571h63.429q28.571 0 33.143 29.143v229.714h9.143q-3.429 0.571-9.143 0.571v164q-7.429 38.857-50.857 38.857h-63.429v93.714l121.143-0.571q36.571 0 55.429 0.571v144h88v-141.143q46.857 1.143 69.714 1.143v140h88v-144q45.143-4 80-12.857t64.571-25.714 47.143-44.571 20.857-65.429zM544 273.714q0 20.571-8.571 36.571t-21.143 26.286-32.857 17.429-37.429 10.571-42.286 5.143-39.429 1.714-36.857-0.571-27.143-0.571v-193.143q4.571 0 21.143-0.286t27.429-0.286 30.286 0.857 33.429 2.286 32.571 4.857 31.714 8 27.143 12 22.571 17.143 14 22.857 5.429 29.143zM503.429 545.714q0 18.857-7.143 33.429t-17.429 24-27.429 16-31.429 9.429-35.143 4.571-33.143 1.429-30.857-0.571-22.571-0.286v-175.429q2.857 0 19.714-0.286t26.571 0 28.571 1.143 31.429 3.143 29.429 6.286 27.714 10.571 21.143 15.429 15.429 22 5.143 29.143z" />
12
+ <glyph unicode="&#xe602;" glyph-name="f34f26d0-c543-11e3-8539-21c1c92ea5fb" d="M332.449 903.164c-140.274-58.915-216.022-131.858-279.145-269.326-29.458-63.123-32.263-93.984-39.277-381.545l-7.014-311.408h103.803l4.208 305.797c4.208 281.951 7.014 308.603 35.068 361.907 50.499 93.984 98.192 141.677 189.37 186.564 119.233 60.318 225.841 60.318 345.074 0 98.192-49.096 147.288-99.595 196.384-207.605 29.458-63.123 33.666-89.775 28.055-168.329-11.222-150.093-79.956-259.507-210.411-331.047-65.929-36.471-88.373-42.082-189.37-42.082-63.123 0-117.83 4.208-123.441 9.819-5.611 4.208-9.819 49.096-11.222 98.192-1.403 79.956 1.403 88.373 26.652 82.762 103.803-19.638 182.356-15.43 227.244 12.625 136.066 84.164 136.066 294.575 0 378.74-99.595 60.318-245.479 25.249-305.797-72.942-25.249-42.082-28.055-71.54-28.055-331.047v-286.159l172.537 5.611c150.093 4.208 180.953 8.416 249.688 40.679 110.816 51.901 186.564 126.247 239.868 234.258 42.082 84.164 46.29 105.205 46.29 220.23 0 106.608-5.611 137.468-36.471 204.8-51.901 110.816-126.247 186.564-234.258 239.868-127.649 63.123-279.145 70.137-399.781 19.638z" />
13
+ <glyph unicode="&#xe603;" glyph-name="paypal" d="M635.429 696q0 90.857-135.429 90.857h-40q-18.286 0-34-12.286t-19.714-30l-36-157.714q-1.143-2.857-1.143-9.143 0-13.714 9.714-22.571t23.429-8.857h30.286q39.429 0 73.429 7.429t64.286 23.429 47.714 46.571 17.429 72.286zM980.571 609.143q0-151.429-125.714-244.571-125.143-92-349.714-92h-34.857q-18.286 0-33.714-12.286t-19.429-30l-41.714-180.571q-4.571-20.571-23.143-35.143t-39.714-14.571h-121.714q-17.714 0-30.286 11.429t-12.571 29.143q0 5.714 7.429 37.143h86.286q19.429 0 36.571 13.429t21.714 32.286l41.714 180.571q4.571 18.857 21.429 32.571t36.286 13.714h34.857q222.857 0 346.857 91.429t124 240.571q0 73.714-29.143 118.286 104.571-52.571 104.571-191.429zM876 714.857q0-150.857-126.286-244.571-124.571-92-349.714-92h-34.286q-18.286 0-34-12.571t-19.714-30.286l-41.714-180q-4.571-20.571-22.857-35.143t-39.429-14.571h-122.286q-17.714 0-30 11.143t-12.286 29.429q0 4.571 1.143 11.429l171.429 743.429q4.571 20.571 23.143 35.143t39.714 14.571h253.714q38.857 0 71.429-2.286t68.857-8.571 64.857-17.143 55.143-28.857 44.286-42.286 28.286-59.143 10.571-77.714z" />
14
+ <glyph unicode="&#xe800;" glyph-name="facebook" horiz-adv-x="585" d="M547.84 952.832v-150.528h-89.088q-49.152 0-66.56-20.48t-17.408-61.44v-108.544h167.936l-22.528-168.96h-145.408v-434.176h-175.104v434.176h-145.408v168.96h145.408v124.928q0 106.496 59.392 164.864t158.72 58.368q83.968 0 130.048-7.168z" />
15
+ <glyph unicode="&#xe801;" glyph-name="twitter" horiz-adv-x="950" d="M925.696 726.528q-37.888-55.296-92.16-95.232 0-8.192 0-23.552 0-74.752-21.504-148.48t-65.536-142.336-105.472-119.808-147.456-83.968-185.344-30.72q-154.624 0-282.624 82.944 19.456-3.072 44.032-3.072 129.024 0 229.376 78.848-60.416 2.048-107.52 36.864t-65.536 91.136q19.456-2.048 34.816-2.048 24.576 0 49.152 6.144-64.512 13.312-106.496 63.488t-41.984 117.76v2.048q38.912-21.504 83.968-23.552-37.888 25.6-60.416 65.536t-22.528 88.064q0 50.176 25.6 93.184 69.632-84.992 167.936-136.192t212.992-56.32q-5.12 21.504-5.12 41.984 0 76.8 54.272 130.048t130.048 54.272q80.896 0 135.168-58.368 62.464 12.288 116.736 45.056-20.48-65.536-80.896-102.4 53.248 6.144 106.496 28.672z" />
16
+ <glyph unicode="&#xe802;" glyph-name="gplus" horiz-adv-x="950" d="M419.84 505.344q0-20.48 18.432-40.96t44.032-37.888 52.224-41.984 44.032-60.416 18.432-80.896q0-51.2-27.648-98.304-40.96-69.632-120.832-103.424t-169.984-32.768q-75.776 0-141.312 24.576t-97.28 77.824q-21.504 34.816-21.504 74.752 0 47.104 25.6 86.016t67.584 65.536q74.752 47.104 230.4 57.344-18.432 24.576-26.624 41.984t-9.216 41.984q0 20.48 12.288 49.152-26.624-3.072-38.912-3.072-84.992 0-142.336 55.296t-58.368 140.288q0 46.080 20.48 90.112t56.32 74.752q44.032 37.888 104.448 56.32t124.928 18.432h238.592l-78.848-50.176h-74.752q41.984-35.84 63.488-75.776t21.504-92.16q0-40.96-13.312-73.728t-33.792-53.248-39.936-36.864-33.792-34.816-14.336-37.888zM336.896 559.616q21.504 0 44.032 10.24t37.888 24.576q30.72 32.768 30.72 91.136 0 32.768-10.24 70.656t-27.648 74.752-48.128 58.368-66.56 23.552q-24.576 0-47.104-11.264t-37.888-29.696q-26.624-33.792-26.624-91.136 0-26.624 5.12-56.32t18.432-58.368 29.696-53.248 43.008-37.888 55.296-15.36zM337.92 60.928q32.768 0 63.488 7.168t56.32 22.528 41.984 41.984 15.36 62.464q0 14.336-4.096 27.648t-8.192 24.576-15.36 23.552-16.384 19.456-22.528 20.48-20.48 16.384-23.552 16.384-21.504 15.36q-8.192 1.024-26.624 1.024-30.72 0-60.416-4.096t-61.44-14.336-55.296-25.6-38.912-43.008-15.36-60.416q0-39.936 19.456-70.656t52.224-47.104 68.608-25.6 72.704-8.192zM800.768 561.664h121.856v-61.44h-121.856v-124.928h-60.416v124.928h-120.832v61.44h120.832v123.904h60.416v-123.904z" />
17
+ <glyph unicode="&#xe803;" glyph-name="pinterest-circled" horiz-adv-x="878" d="M877.568 448q0-119.808-58.368-220.16t-159.744-159.744-220.16-59.392q-63.488 0-124.928 18.432 33.792 53.248 44.032 94.208 5.12 19.456 31.744 120.832 11.264-22.528 40.96-38.912t65.536-16.384q68.608 0 122.88 38.912t84.992 107.52 29.696 154.624q0 65.536-34.816 121.856t-98.304 93.184-145.408 36.864q-60.416 0-112.64-17.408t-88.064-44.032-62.464-62.464-37.888-73.728-12.288-76.8q0-59.392 22.528-104.448t67.584-63.488q16.384-7.168 21.504 11.264 1.024 4.096 4.096 17.408t5.12 17.408q3.072 13.312-6.144 24.576-29.696 34.816-29.696 86.016 0 86.016 59.392 148.48t156.672 62.464q86.016 0 134.144-47.104t49.152-121.856q0-97.28-39.936-164.864t-100.352-68.608q-34.816 0-55.296 24.576t-13.312 60.416q4.096 19.456 15.36 53.248t16.384 58.368 7.168 44.032q0 27.648-15.36 47.104t-44.032 18.432q-35.84 0-60.416-31.744t-24.576-81.92q0-40.96 14.336-69.632l-56.32-238.592q-10.24-39.936-7.168-101.376-117.76 52.224-190.464 160.768t-72.704 241.664q0 119.808 59.392 220.16t158.72 159.744 221.184 59.392 220.16-59.392 159.744-159.744 58.368-220.16z" />
18
+ <glyph unicode="&#xe804;" glyph-name="xing" horiz-adv-x="804" d="M340.992 579.072q-5.12-10.24-146.432-261.12-15.36-25.6-37.888-25.6h-136.192q-12.288 0-17.408 9.216t0 20.48l144.384 256q1.024 0 0 1.024l-92.16 158.72q-7.168 13.312 0 21.504 5.12 8.192 17.408 8.192h137.216q22.528 0 37.888-25.6zM801.792 945.664q6.144-9.216 0-21.504l-302.080-533.504 192.512-352.256q6.144-11.264 0-20.48-5.12-9.216-18.432-9.216h-136.192q-23.552 0-37.888 25.6l-193.536 356.352q10.24 18.432 303.104 537.6 14.336 25.6 36.864 25.6h138.24q12.288 0 17.408-8.192z" />
19
+ <glyph unicode="&#xe805;" glyph-name="linkedin" horiz-adv-x="878" d="M199.68 602.624v-566.272h-188.416v566.272h188.416zM211.968 777.728q0-41.984-29.696-69.632t-76.8-27.648h-1.024q-47.104 0-75.776 27.648t-28.672 69.632 29.696 69.632 76.8 27.648 75.776-27.648 29.696-69.632zM877.568 360.96v-324.608h-187.392v303.104q0 60.416-23.552 94.208t-72.704 33.792q-35.84 0-59.392-19.456t-36.864-49.152q-6.144-17.408-6.144-46.080v-316.416h-188.416q1.024 228.352 1.024 369.664t0 168.96l-1.024 27.648h188.416v-81.92h-1.024q11.264 18.432 23.552 31.744t31.744 29.696 50.176 24.576 65.536 9.216q97.28 0 156.672-64.512t59.392-190.464z" />
20
+ <glyph unicode="&#xe806;" glyph-name="reddit" horiz-adv-x="1134" d="M475.136 409.088q0-31.744-23.552-54.272t-55.296-23.552q-32.768 0-55.296 23.552t-23.552 54.272q0 32.768 23.552 56.32t55.296 23.552 55.296-23.552 23.552-56.32zM738.304 488.96q31.744 0 55.296-23.552t22.528-56.32q0-31.744-22.528-54.272t-55.296-23.552q-32.768 0-56.32 23.552t-23.552 54.272q0 32.768 24.576 56.32t55.296 23.552zM1133.568 495.104q0-35.84-17.408-65.536t-47.104-47.104q2.048-18.432 2.048-34.816 0-68.608-38.912-131.072t-112.64-110.592q-71.68-47.104-162.816-71.68t-192.512-25.6q-100.352 0-191.488 25.6t-162.816 71.68q-73.728 48.128-112.64 109.568t-39.936 132.096q0 17.408 3.072 37.888-27.648 17.408-44.032 47.104t-16.384 62.464q0 53.248 37.888 91.136t91.136 37.888q47.104 0 84.992-31.744 141.312 90.112 337.92 94.208l76.8 241.664q2.048 8.192 10.24 12.288t16.384 2.048l197.632-47.104q12.288 28.672 38.912 47.104t59.392 17.408q44.032 0 74.752-30.72t30.72-75.776-30.72-74.752-74.752-31.744q-44.032 0-74.752 30.72t-31.744 74.752l-180.224 41.984-66.56-208.896q187.392-8.192 320.512-95.232 35.84 33.792 86.016 33.792 53.248 0 91.136-37.888t37.888-91.136zM951.296 915.968q-26.624 0-44.032-18.432t-18.432-44.032 18.432-44.032 44.032-18.432 44.032 18.432 17.408 44.032-17.408 44.032-44.032 18.432zM44.032 495.104q0-38.912 28.672-63.488 28.672 74.752 103.424 134.144-20.48 14.336-47.104 14.336-34.816 0-60.416-24.576t-24.576-60.416zM894.976 141.824q64.512 41.984 98.304 95.232t33.792 110.592-33.792 110.592-98.304 95.232q-65.536 43.008-151.552 65.536t-179.2 23.552-179.2-23.552-151.552-65.536q-63.488-41.984-97.28-95.232t-34.816-110.592 34.816-110.592 97.28-95.232q66.56-41.984 151.552-65.536t179.2-23.552 179.2 23.552 151.552 65.536zM1056.768 427.52q32.768 26.624 32.768 67.584 0 34.816-24.576 60.416t-60.416 24.576q-27.648 0-49.152-16.384 74.752-59.392 101.376-136.192zM718.848 217.6q6.144 6.144 15.36 6.144t15.36-6.144 6.144-15.36-6.144-16.384q-56.32-56.32-182.272-56.32h-1.024q-125.952 0-182.272 56.32-6.144 7.168-6.144 16.384t6.144 15.36 15.36 6.144 15.36-6.144q44.032-44.032 151.552-44.032h1.024q107.52 0 151.552 44.032z" />
21
+ <glyph unicode="&#xe807;" glyph-name="stumbleupon" horiz-adv-x="1097" d="M607.232 553.472v67.584q0 23.552-17.408 40.96t-40.96 16.384-40.96-16.384-17.408-40.96v-350.208q0-100.352-71.68-171.008t-174.080-70.656q-101.376 0-173.056 71.68t-71.68 173.056v152.576h187.392v-149.504q0-24.576 17.408-41.984t40.96-16.384 40.96 16.384 17.408 41.984v354.304q0 97.28 71.68 166.912t173.056 68.608q100.352 0 172.032-69.632t72.704-167.936v-77.824l-111.616-32.768zM909.312 426.496h187.392v-152.576q0-101.376-71.68-173.056t-173.056-71.68-173.056 70.656-71.68 172.032v153.6l74.752-34.816 111.616 32.768v-154.624q0-23.552 16.384-40.96t40.96-16.384 41.984 16.384 16.384 40.96v157.696z" />
22
+ <glyph unicode="&#xe808;" glyph-name="mail-alt" d="M1024 554.496v-453.632q0-37.888-26.624-64.512t-64.512-27.648h-841.728q-36.864 0-64.512 27.648t-26.624 64.512v453.632q25.6-28.672 57.344-50.176 206.848-140.288 284.672-196.608 32.768-24.576 52.224-37.888t54.272-27.648 62.464-13.312h2.048q28.672 0 62.464 13.312t54.272 27.648 52.224 37.888q97.28 69.632 284.672 196.608 32.768 22.528 57.344 50.176zM1024 722.432q0-45.056-27.648-86.016t-69.632-70.656q-215.040-149.504-268.288-185.344-5.12-4.096-23.552-17.408t-30.72-22.528-29.696-18.432-33.792-15.36-27.648-5.12h-2.048q-12.288 0-27.648 5.12t-33.792 15.36-29.696 18.432-30.72 22.528-23.552 17.408q-52.224 35.84-150.528 103.424t-116.736 81.92q-35.84 23.552-66.56 65.536t-31.744 78.848q0 44.032 23.552 73.728t67.584 29.696h841.728q36.864 0 63.488-26.624t27.648-64.512z" />
23
+ <glyph unicode="&#xe809;" glyph-name="print" horiz-adv-x="950" d="M219.136 82.432h512v146.432h-512v-146.432zM219.136 448h512v219.136h-91.136q-22.528 0-38.912 16.384t-16.384 38.912v91.136h-365.568v-365.568zM877.568 411.136q0 15.36-10.24 25.6t-26.624 11.264-25.6-11.264-10.24-25.6 10.24-25.6 25.6-10.24 26.624 10.24 10.24 25.6zM951.296 411.136v-237.568q0-7.168-6.144-12.288t-12.288-6.144h-128v-91.136q0-22.528-16.384-38.912t-38.912-16.384h-548.864q-22.528 0-37.888 16.384t-16.384 38.912v91.136h-128q-7.168 0-13.312 6.144t-5.12 12.288v237.568q0 45.056 32.768 77.824t76.8 31.744h36.864v311.296q0 22.528 16.384 38.912t37.888 16.384h384q23.552 0 51.2-12.288t43.008-26.624l87.040-87.040q15.36-16.384 27.648-44.032t11.264-50.176v-146.432h35.84q46.080 0 77.824-31.744t32.768-77.824z" />
24
+ <glyph unicode="&#xe80a;" glyph-name="info" horiz-adv-x="366" d="M365.568 192v-72.704q0-15.36-10.24-25.6t-26.624-11.264h-291.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 25.6t25.6 11.264h35.84v219.136h-35.84q-15.36 0-25.6 11.264t-11.264 25.6v72.704q0 15.36 11.264 25.6t25.6 11.264h219.136q15.36 0 25.6-11.264t11.264-25.6v-328.704h35.84q15.36 0 26.624-11.264t10.24-25.6zM292.864 850.432v-109.568q0-15.36-11.264-25.6t-25.6-11.264h-146.432q-14.336 0-25.6 11.264t-11.264 25.6v109.568q0 14.336 11.264 25.6t25.6 11.264h146.432q15.36 0 25.6-11.264t11.264-25.6z" />
25
+ <glyph unicode="&#xe80b;" glyph-name="flattr" horiz-adv-x="982" d="M0 51.712v526.336q0 183.296 87.040 284.672t265.216 101.376h561.152q-5.12-5.12-53.248-54.272t-102.4-103.424-111.616-111.616-97.28-95.232-43.008-37.888q-15.36 0-15.36 16.384v159.744h-49.152q-60.416 0-96.256-6.144t-64.512-26.624-39.936-58.368-12.288-98.304v-268.288zM68.608-68.096q5.12 5.12 54.272 54.272t102.4 103.424 111.616 112.64 97.28 95.232 41.984 36.864q15.36 0 15.36-16.384v-159.744h49.152q118.784 0 165.888 36.864t46.080 152.576v268.288l229.376 228.352v-526.336q0-183.296-86.016-284.672t-266.24-101.376h-561.152z" />
26
+ <glyph unicode="&#xeabb;" glyph-name="tumblr" d="M576.032 512l-0.002-234.184c0-59.418-0.77-93.656 5.53-110.5 6.25-16.754 21.918-34.146 38.99-44.202 22.684-13.588 48.542-20.376 77.708-20.376 51.854 0 82.478 6.848 133.742 40.54v-153.944c-43.7-20.552-81.866-32.594-117.324-40.922-35.5-8.242-73.86-12.406-115.064-12.406-46.828 0-74.456 5.886-110.41 17.656-35.958 11.868-66.66 28.806-92.020 50.54-25.45 21.922-43.022 45.208-52.848 69.832-9.826 24.636-14.716 60.414-14.716 107.244v359.1h-137.426v145.006c40.208 13.042 85.164 31.788 113.78 56.152 28.754 24.45 51.766 53.706 69.106 87.944 17.392 34.146 29.348 77.712 35.872 130.516h165.084l-0.002-255.996h255.968v-192h-255.968z" />
27
+ <glyph unicode="&#xf232;" glyph-name="untitled" d="M562.857 403.429q7.429 0 55.714-25.143t51.143-30.286q1.143-2.857 1.143-8.571 0-18.857-9.714-43.429-9.143-22.286-40.571-37.429t-58.286-15.143q-32.571 0-108.571 35.429-56 25.714-97.143 67.429t-84.571 105.714q-41.143 61.143-40.571 110.857v4.571q1.714 52 42.286 90.286 13.714 12.571 29.714 12.571 3.429 0 10.286-0.857t10.857-0.857q10.857 0 15.143-3.714t8.857-15.714q4.571-11.429 18.857-50.286t14.286-42.857q0-12-19.714-32.857t-19.714-26.571q0-4 2.857-8.571 19.429-41.714 58.286-78.286 32-30.286 86.286-57.714 6.857-4 12.571-4 8.571 0 30.857 27.714t29.714 27.714zM446.857 100.571q72.571 0 139.143 28.571t114.571 76.571 76.571 114.571 28.571 139.143-28.571 139.143-76.571 114.571-114.571 76.571-139.143 28.571-139.143-28.571-114.571-76.571-76.571-114.571-28.571-139.143q0-116 68.571-210.286l-45.143-133.143 138.286 44q90.286-59.429 197.143-59.429zM446.857 890.286q87.429 0 167.143-34.286t137.429-92 92-137.429 34.286-167.143-34.286-167.143-92-137.429-137.429-92-167.143-34.286q-111.429 0-208.571 53.714l-238.286-76.571 77.714 231.429q-61.714 101.714-61.714 222.286 0 87.429 34.286 167.143t92 137.429 137.429 92 167.143 34.286z" />
28
  </font></defs></svg>
fonts/shariff3uu.ttf CHANGED
Binary file
fonts/shariff3uu.woff CHANGED
Binary file
locale/mailform-DE.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // strings for the e-mail form in German
3
+
4
+ // mail form
5
+ $mf_headline['DE'] = 'Diesen Beitrag per E-Mail versenden';
6
+ $mf_headinfo['DE'] = 'Sie k&ouml;nnen maximal fünf Empf&auml;nger angeben. Diese bitte durch Kommas trennen.';
7
+ $mf_rcpt['DE'] = 'Empf&auml;nger E-Mail-Adresse(n)';
8
+ $mf_rcpt_ph['DE'] = 'empf&auml;nger@example.com';
9
+ $mf_from['DE'] = 'Absender E-Mail-Adresse';
10
+ $mf_from_ph['DE'] = 'absender@example.com';
11
+ $mf_name['DE'] = 'Name des Absenders (optional)';
12
+ $mf_name_ph['DE'] = 'Ihr Name';
13
+ $mf_comment['DE'] = 'Zusatztext (optional)';
14
+ $mf_send['DE'] = 'E-Mail senden';
15
+ $mf_info['DE'] = 'Die hier eingegebenen Daten werden nur dazu verwendet, die E-Mail in Ihrem Namen zu versenden. Sie werden nicht gespeichert und es erfolgt keine Weitergabe an Dritte oder eine Analyse zu Marketing-Zwecken.';
16
+ $mf_optional['DE'] = ' (optional)';
17
+ $mf_wait['DE'] = 'Spam-Schutz: Bitte in %d Sekunden noch einmal versuchen!';
18
+ $mf_to_error['DE'] = 'Ung&uuml;ltige Empf&auml;nger-Adresse(n)!';
19
+ $mf_from_error['DE'] = 'Ung&uuml;ltige Absender-Adresse!';
20
+
21
+ // send confirmation
22
+ $mf_mail_send['DE'] = 'Die E-Mail wurde erfolgreich gesendet an:';
23
+
24
+ // e-mail content
25
+ $mf_mailbody1['DE'] = 'Der folgende Beitrag wurde Ihnen von ';
26
+ $mf_mailbody2['DE'] = 'jemanden'; // will be replaced with a name, if provided
27
+ $mf_mailbody3['DE'] = ' empfohlen:';
28
+
29
+ // e-mail footer
30
+ //72 123456789012345678901234567890123456789012345678901234567890123456789012
31
+ $mf_footer['DE'] = "Diese E-Mail wurde ueber das WordPress Plugin \"Shariff Wrapper\" \r\n";
32
+ $mf_footer['DE'] .= "versendet. Es wurde entwickelt, um die Privatsphaere der Webseiten-\r\n";
33
+ $mf_footer['DE'] .= "besucher zu schuetzen. Der Seitenbetreiber hat daher keine Moeglichkeit,\r\n";
34
+ $mf_footer['DE'] .= "naehere Angaben zum tatsaechlichen Absender dieser E-Mail zu geben.\r\n";
35
+
36
+ ?>
locale/mailform-EN.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // strings for the e-mail form in English
3
+
4
+ // mail form
5
+ $mf_headline['EN'] = 'Share this post by e-mail';
6
+ $mf_headinfo['EN'] = 'You can enter up to five recipients. Seperate them with a comma.';
7
+ $mf_rcpt['EN'] = 'E-mail address of the recipient(s)';
8
+ $mf_rcpt_ph['EN'] = 'recipient@example.com';
9
+ $mf_from['EN'] = 'E-mail address of the sender';
10
+ $mf_from_ph['EN'] = 'sender@example.com';
11
+ $mf_name['EN'] = 'Name of the sender (optional)';
12
+ $mf_name_ph['EN'] = 'Your name';
13
+ $mf_comment['EN'] = 'Additional text (optional)';
14
+ $mf_send['EN'] = 'Send e-mail';
15
+ $mf_info['EN'] = 'The provided data in this form is only used to send the e-mail in your name. They will not be stored and not be distributed to any third party or used for marketing purposes.';
16
+ $mf_optional['EN'] = ' (optional)';
17
+ $mf_wait['EN'] = 'Spam protection: Please try again in %d seconds!';
18
+ $mf_to_error['EN'] = 'Invalid e-mail address(es)!';
19
+ $mf_from_error['EN'] = 'Invalid e-mail address!';
20
+
21
+ // send confirmation
22
+ $mf_mail_send['EN'] = 'The e-mail was successfully send to:';
23
+
24
+ // e-mail content
25
+ $mf_mailbody1['EN'] = 'The following post was suggested to you by ';
26
+ $mf_mailbody2['EN'] = 'somebody'; // will be replaced with a name, if provided
27
+ $mf_mailbody3['EN'] = ':';
28
+
29
+ // e-mail footer
30
+ //72 123456789012345678901234567890123456789012345678901234567890123456789012
31
+ $mf_footer['EN'] = "This e-mail was send using the WordPress plugin \"Shariff Wrapper\".\r\n";
32
+ $mf_footer['EN'] .= "It was developed to protect the privacy of the website visitors.\r\n";
33
+ $mf_footer['EN'] .= "Therefore the owner of the site cannot provide any more information\r\n";
34
+ $mf_footer['EN'] .= "about the actual sender of this e-mail.\r\n";
35
+
36
+ ?>
locale/mailform-FR.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // strings for the e-mail form in French
3
+
4
+ // mail form
5
+ $mf_headline['FR'] = 'Envoyer cet article par e-mail';
6
+ $mf_headinfo['FR'] = 'Vous pouvez partager cet article avec 5 destinataires au maximum. Veuillez séparer chaque adresse par une virgule.';
7
+ $mf_rcpt['FR'] = 'E-mail des destinataires';
8
+ $mf_rcpt_ph['FR'] = 'destinataire@example.com';
9
+ $mf_from['FR'] = "E-mail de l'expéditeur";
10
+ $mf_from_ph['FR'] = 'expéditeur@example.com';
11
+ $mf_name['FR'] = "Nom de l'expéditeur (optionel)";
12
+ $mf_name_ph['FR'] = 'Votre nom';
13
+ $mf_comment['FR'] = 'Message (optionel)';
14
+ $mf_send['FR'] = 'envoyer e-mail';
15
+ $mf_info['FR'] = 'Les données fournies ne seront pas utilisées pour envoyer des email en votre nom. Elles ne seront pas conservées, divulguées ou utilisées pour une analyse marketing.';
16
+ $mf_optional['FR'] = ' (optionel)';
17
+ $mf_wait['FR'] = 'Protecion contre les spam : Veuillez réessayer dans %d secondes!';
18
+ $mf_to_error['FR'] = 'Erreur dans la(les) adresse(s) de destination !';
19
+ $mf_from_error['FR'] = "Erreur dans l'adresse de l'expediteur!";
20
+
21
+ // send confirmation
22
+ $mf_mail_send['FR'] = "L'e-mail a été envoyé avec succès à : ";
23
+
24
+ // e-mail content
25
+ $mf_mailbody1['FR'] = "L'article suivant vous a été envoyé par ";
26
+ $mf_mailbody2['FR'] = "quelqu'un"; // will be replaced with a name, if provided
27
+ $mf_mailbody3['FR'] = " : ";
28
+
29
+ // e-mail footer
30
+ //72 123456789012345678901234567890123456789012345678901234567890123456789012
31
+ $mf_footer['FR'] = "Cet e-mail vous a été envoyé depuis le plugin Wordpress \"Shariff\r\n";
32
+ $mf_footer['FR'] .= "Wrapper\". Il a été développé pour protéger les données privées de \r\n";
33
+ $mf_footer['FR'] .= "l'internaute qui visite notre site.Le propriétaire n'a pas la \r\n";
34
+ $mf_footer['FR'] .= "possibilité de donner des informations plus détaillées sur le \r\n";
35
+ $mf_footer['FR'] .= "véritable expediteur de cet e-mail.\r\n";
36
+
37
+ ?>
locale/mailform-IT.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ // strings for the e-mail form in Italian
3
+
4
+ // mail form
5
+ $mf_headline['IT'] = 'Condividi questo articolo via email';
6
+ $mf_headinfo['IT'] = 'Puoi inserire fino a cinque destinatari. Seperali con una virgola.';
7
+ $mf_rcpt['IT'] = 'Indirizzo e-mail del(i) destinatario(i)';
8
+ $mf_rcpt_ph['IT'] = 'destinatario@example.com';
9
+ $mf_from['IT'] = 'Indirizzo e-mail del mittente';
10
+ $mf_from_ph['IT'] = 'mittente@example.com';
11
+ $mf_name['IT'] = 'Nome del mittente (facoltativo)';
12
+ $mf_name_ph['IT'] = 'Il tuo nome';
13
+ $mf_comment['IT'] = 'Testo aggiuntivo (facoltativo)';
14
+ $mf_send['IT'] = 'Invia e-mail';
15
+ $mf_info['IT'] = 'I dati forniti in questo modulo sono utilizzati unicamente per inviare una e-mail a tuo nome. Non saranno archiviati, ne&#039; distribuiti a terzi o utilizzati con finalita&#039; di marketing.';
16
+ $mf_optional['IT'] = ' (facoltativo)';
17
+ $mf_wait['IT'] = 'Protezione spam: Per favore riprova tra %d secondi!';
18
+ $mf_to_error['IT'] = 'Indirizzo(i) e-mail invalido(i)!';
19
+ $mf_from_error['IT'] = 'Indirizzo email invalido!';
20
+
21
+ // send confirmation
22
+ $mf_mail_send['IT'] = 'La tua e-mail e&#039; stata inviata con successo a:';
23
+
24
+ // e-mail content
25
+ $mf_mailbody1['IT'] = 'Il seguente articolo ti e&#039; stato consigliato da ';
26
+ $mf_mailbody2['IT'] = 'qualcuno'; // sostituito da un nome, se fornito
27
+ $mf_mailbody3['IT'] = ':';
28
+
29
+ // e-mail footer
30
+ //72 123456789012345678901234567890123456789012345678901234567890123456789012
31
+ $mf_footer['IT'] = "La presente e-mail e&#039; stata inviata utilizzando il plugin di\r\n";
32
+ $mf_footer['IT'] .= "WordPress \"Shariff Wrapper\". Tale plugin e&#039; stato sviluppato per\r\n";
33
+ $mf_footer['IT'] .= "garantire la privacy dei visitatori del sito. Pertanto il proprietario\r\n";
34
+ $mf_footer['IT'] .= "del sito non puo&#039; fornire informazioni aggiuntive sull'effettivo\r\n";
35
+ $mf_footer['IT'] .= "mittente della presente e-mail.\r\n";
36
+ ?>
locale/shariff3UU-de_DE.mo CHANGED
Binary file
locale/shariff3UU-de_DE.po CHANGED
@@ -1,197 +1,787 @@
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: Shariff for WP posts, pages, themes and as widget v1.2.4\n"
4
- "Report-Msgid-Bugs-To: \n"
 
 
 
 
 
 
 
 
5
  "POT-Creation-Date: \n"
6
- "PO-Revision-Date: 2015-04-24 19:14:51+0000\n"
7
- "Last-Translator: sands <sands@sm-circus.com>\n"
8
  "Language-Team: \n"
9
  "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "Plural-Forms: nplurals=2; plural=n != 1;\n"
13
- "X-Generator: Poedit 1.7.6\n"
14
- "X-Poedit-Language: \n"
15
- "X-Poedit-Country: \n"
16
- "X-Poedit-SourceCharset: utf-8\n"
17
- "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
18
- "X-Poedit-Basepath: ../\n"
19
- "X-Poedit-Bookmarks: \n"
20
  "X-Poedit-SearchPath-0: .\n"
21
- "X-Textdomain-Support: yes"
22
-
23
- #: shariff.php:44
24
- #@ shariff3UU
25
- msgid "Enable Shariff for all post and configure the options with these settings."
26
- msgstr "Aktiviere Shariff für alle Posts und stelle die Parameter ein."
27
-
28
- #: shariff.php:52
29
- #@ shariff3UU
30
- msgid "Check to put Shariff at the begin off all posts."
31
- msgstr "Shariff vor jedem Post einfügen."
32
-
33
- #: shariff.php:56
34
- #@ shariff3UU
35
- msgid "Select button language."
36
- msgstr "Sprache für die Button vorbelegen."
37
-
38
- #: shariff.php:60
39
- #@ shariff3UU
40
- msgid "Select theme (Shariff button design)."
41
- msgstr "Wähle ein Design"
42
-
43
- #: shariff.php:64
44
- #@ shariff3UU
45
- msgid "Check this to make orientation of buttons <b>vertical</b>."
46
- msgstr "Buttons vertikal anordnen."
47
-
48
- #: shariff.php:69
49
- #@ shariff3UU
50
- msgid "Put in the service do you want enable (<code>facebook|twitter|googleplus|whatsapp|mail|mailto|printer| pinterest|linkedin|xing|reddit|stumbleupon|flattr|info</code>). Use the pipe sign | between two or more services."
51
- msgstr "Schreibe den Namen des Service, der eingebunden werden soll (<code>facebook|twitter|googleplus|whatsapp|mail|mailto|printer| pinterest|linkedin|xing|reddit|stumbleupon|flattr|info</code>). Verwende das Pipe-Zeichen | bei zwei oder mehr Services als Trenner."
52
-
53
- #: shariff.php:73
54
- #@ shariff3UU
55
- msgid "Check this to show share statistic."
56
- msgstr "Zeige Statistik in den Buttons."
57
-
58
- #: shariff.php:78
59
- #@ shariff3UU
60
- msgid "Change the default link of the \"info\" button to:"
61
- msgstr "Ändere den Standard-Link von \"info\" zu"
62
-
63
- #: shariff.php:143
64
- #@ shariff3UU
65
- msgid "This configures the default behavior of Shariff for your blog. You can overwrite this in single posts or pages with the options within the <code>[shariff]</code> shorttag."
66
- msgstr "Hier konfigurierst Du das Standard-Verhalten von Shariff für alle Posts im Blog. Es läßt sich in einzelnen Posts oder Seiten mit dem Shorttag <code>[shariff]</code> anpassen."
67
-
68
- #: shariff.php:97
69
- #@ shariff3UU
70
- msgid "browser selected"
71
- msgstr "vom Browser bestimmt"
72
-
73
- #: shariff.php:281
74
- #@ shariff3UU
75
- msgid "Add Shariff as configured in the admin menue."
76
- msgstr "Fügt Shariff wie im Admin-Menü konfiguriert an."
77
-
78
- #: shariff.php:296
79
- #@ shariff3UU
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
  msgid "Title"
81
  msgstr "Titel"
82
 
83
- #: shariff.php:83
84
- #@ shariff3UU
85
- msgid "CSS style attributes for the CSS container _around_ Shariff"
86
- msgstr "CSS Stil-Attribute f&uuml;r den Rahmen-Container _um_ Shariff"
 
87
 
88
- #: shariff.php:149
89
- #@ shariff3UU
90
- msgid "please read about it in the FAQ"
91
- msgstr "bitte lies Details dazu in der FAQ"
 
92
 
93
- #: shariff.php:455
94
- #@ shariff3UU
95
- msgid "Please check your "
96
- msgstr "Bitte &uuml;berpr&uuml;fe die "
97
-
98
- #: shariff.php:455
99
- #@ shariff3UU
100
- msgid "Shariff-Settings</a> - We have new detailed options where shariff buttons can be displayed! Also please read the FAQ about planed changes of the mail/mailto service functionality."
101
- msgstr "Shariff-Einstellungen</a> - Wir haben neue und detailliertere Optionen, wo die Shariff-Buttons erscheinen sollen! Ausserdem &auml;ndert sich bald die Funktionalit&auml;t des mail/mailto-Service. Mehr dazu in der FAQ."
102
-
103
- #: shariff.php:48
104
- #@ shariff3UU
105
- msgid "Check to put Shariff at the end off all posts."
106
- msgstr "Shariff am Ende von jedem Post einf&uuml;gen (Einzelansicht)."
107
-
108
- #: shariff.php:52
109
- #@ shariff3UU
110
- msgid "Check to put Shariff at the beginning off all posts."
111
- msgstr "Shariff am Anfang von jedem Post einf&uuml;gen (Einzelansicht)."
112
-
113
- #: shariff.php:56
114
- #@ shariff3UU
115
- msgid "Check to put Shariff at the end off all posts on the overview page."
116
- msgstr "Shariff am Ende von jedem Post einf&uuml;gen (&Uuml;bersichts-Seite)."
117
-
118
- #: shariff.php:60
119
- #@ shariff3UU
120
- msgid "Check to put Shariff at the beginning off all posts on the overview page."
121
- msgstr "Shariff am Anfang von jedem Post einf&uuml;gen (&Uuml;bersichts-Seite)."
122
-
123
- #: shariff.php:152
124
- #@ shariff3UU
125
- msgid "Check to put Shariff at the end off all extension pages (e.g. product sites)."
126
- msgstr "Shariff am Ende aller Erweiterungen einf&uuml;gen (z.B. Artikelseiten in Shops)."
127
-
128
- #: shariff.php:64
129
- #@ shariff3UU
130
- msgid "Check to put Shariff at the end off all pages."
131
- msgstr "Shariff am Ende von jeder Seite einf&uuml;gen."
132
-
133
- #: shariff.php:68
134
- #@ shariff3UU
135
- msgid "Check to put Shariff at the beginning off all pages."
136
- msgstr "Shariff am Anfang von jeder Seite einf&uuml;gen."
137
-
138
- #: shariff.php:129
139
- #@ shariff3UU
140
- msgid "Set the screen name for Twitter (via) to"
141
- msgstr "Setze f&uuml;r Twitter folgenden Screen-Namen (via)"
142
-
143
- #: shariff.php:149
144
- #@ shariff3UU
145
- msgid "Select the alignment of the Shariff buttons"
146
- msgstr "Positioniere die Shariff-Buttons"
147
-
148
- #: shariff.php:154
149
- #@ shariff3UU
150
- msgid "Select the alignment of the Shariff buttons in the widget"
151
- msgstr "Positioniere die Shariff-Buttons im Widget"
152
-
153
- #: shariff.php:144
154
- #@ shariff3UU
155
- msgid "Set the username for Flattr to"
156
- msgstr "Nutze für Flattr folgenden Benutzernamen"
157
-
158
- #: shariff.php:293
159
- #@ shariff3UU
160
- msgid "left"
161
- msgstr "links"
162
 
163
- #: shariff.php:294
164
- #@ shariff3UU
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  msgid "center"
166
- msgstr "mittig"
 
 
 
 
 
 
167
 
168
- #: shariff.php:294
169
- #@ shariff3UU
 
170
  msgid "right"
171
  msgstr "rechts"
172
 
173
- #: shariff.php:667
174
- #@ shariff3UU
175
- msgid "Shariff-Settings</a> - Flattr was selected, but no username was provided! Please enter your <strong>Flattr username</strong> in the shariff options!"
176
- msgstr "Shariff-Einstellungen</a> - Flattr wurde ausgewählt, aber kein Benutzername angegeben! Bitte den eigenen <strong>Flattr-Benutzernamen</strong> in den Shariff-Einstellungen eintragen!"
 
177
 
178
- #: shariff.php:117
179
- #@ shariff3UU
180
- msgid "Settings"
181
- msgstr "Einstellungen"
 
182
 
183
- #: shariff.php:373
184
- #@ shariff3UU
185
- msgid "Choose image"
186
- msgstr "Bild w&auml;hlen"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
187
 
188
- #: shariff.php:216
189
- #@ shariff3UU
190
- msgid "Select the default image for Pinterest in case no other usable image is found."
191
- msgstr "Setze ein Standardbild f&uuml;r Pinterest, falls kein anderes gefunden werden kann."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
192
 
193
  # @ shariff3UU
194
- #: shariff.php:168
195
- msgid "Check this to make the buttons 30% smaller (all designs)."
196
- msgstr "Ausw&auml;hlen, um alle Buttons - unabh&auml;ngig vom Design - 30% kleiner zu machen."
 
197
 
 
 
 
 
 
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: Shariff Wrapper for Wordpress\n"
4
+ "PO-Revision-Date: 2015-08-15 23:28+0100\n"
5
+ "Last-Translator: JP\n"
6
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
7
+ "Content-Type: text/plain; charset=utf-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "X-Poedit-SourceCharset: utf-8\n"
10
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
11
+ "X-Textdomain-Support: yes\n"
12
+ "Project-Id-Version: \n"
13
  "POT-Creation-Date: \n"
14
+ "PO-Revision-Date: \n"
15
+ "Last-Translator: JP\n"
16
  "Language-Team: \n"
17
  "MIME-Version: 1.0\n"
18
+ "X-Generator: Poedit 1.8.1\n"
19
+ "Language: de_DE\n"
 
 
 
 
 
 
 
 
20
  "X-Poedit-SearchPath-0: .\n"
21
+
22
+ # @ shariff3UU
23
+ #. Text in function
24
+ #: shariff.php:1
25
+ msgid "<p>If you contact us about a problem with the share counts, please <u>always</u> include the information provided in the"
26
+ msgstr "<p>Bei Problemen mit der Statistik (share counts), übermittle bitte <u>immer</u> auch die Informationen aus dem"
27
+
28
+ # @ shariff3UU
29
+ #. Text in function
30
+ #: shariff.php:1
31
+ msgid "<p>The WordPress plugin \"Shariff Wrapper\" has been developed by <a href=\"http://www.datenverwurstungszentrale.com\" target=\"_blank\">3UU</a> and <a href=\"https://www.jplambeck.de\" target=_blank\">JP</a> in order to help protect the privacy of your visitors. It is based on the original Shariff buttons developed by the German computer magazin <a href=\"http://ct.de/shariff\" target=\"_blank\">c't</a> that fullfill the strict data protection laws in Germany. If you need any help with the plugin, take a look at the <a href=\"https://wordpress.org/plugins/shariff/faq/\" target=\"_blank\">Frequently Asked Questions (FAQ)</a> and the <a href=\"https://wordpress.org/support/plugin/shariff\" target=\"_blank\">Support Forum</a>. For up to date news about the plugin you can also follow <a href=\"https://twitter.com/jplambeck\" target=_blank\">@jplambeck</a> on Twitter.</p>"
32
+ msgstr "<p>Das WordPress-Plugin \"Shariff Wrapper\" wurde von <a href=\"http://www.datenverwurstungszentrale.com\" target=\"_blank\">3UU</a> und <a href=\"https://www.jplambeck.de\" target=_blank\">JP</a> entwickelt, um die Privatsphäre von Webseitenbesuchern zu schützen. Es basiert auf den original Shariff-Buttons, die vom Computermagazin <a href=\"http://ct.de/shariff\" target=\"_blank\">c't</a> entwickelt wurden, um die strengen Datenschutzgesetze in Deutschland zu respektieren. Bei Problemen, Fragen und Anregungen wirf einen Blick in die <a href=\"https://wordpress.org/plugins/shariff/faq/\" target=\"_blank\">Frequently Asked Questions (FAQ)</a> und das <a href=\"https://wordpress.org/support/plugin/shariff\" target=\"_blank\">Support Forum</a>. Für aktuelle Neuigkeiten rund um das Plugin folge <a href=\"https://twitter.com/jplambeck\" target=_blank\">@jplambeck</a> auf Twitter.</p>"
33
+
34
+ # @ shariff3UU
35
+ #. Text in function
36
+ #: shariff.php:1
37
+ msgid "<p>This is a list of all available options for the <code>[shariff]</code> shortcode:</p>"
38
+ msgstr "<p>Dies ist eine Liste mit allen verfügbaren Optionen für den <code>[shariff]</code> Shortcode:</p>"
39
+
40
+ #. Text in function
41
+ #: shariff.php:1
42
+ msgid "Add Shariff as configured on the plugin options page."
43
+ msgstr "Fügt die Shariff-Buttons mit den Einstellungen aus dem Plugin-Menü ein."
44
+
45
+ # @ shariff3UU
46
+ #. Text in function
47
+ #: shariff.php:1
48
+ msgid "Add the Shariff buttons <u>after</u> all:"
49
+ msgstr "Füge die Shariff-Buttons automatisch ein <u>nach</u> allen:"
50
+
51
+ # @ shariff3UU
52
+ #. Text in function
53
+ #: shariff.php:1
54
+ msgid "Add the Shariff buttons <u>before</u> all:"
55
+ msgstr "Füge die Shariff-Buttons automatisch ein <u>vor</u> allen:"
56
+
57
+ # @ shariff3UU
58
+ #. Text in function
59
+ #: shariff.php:1
60
+ msgid "Add the post content to the e-mail body."
61
+ msgstr "Füge den Inhalt der Beiträge in die E-Mail ein."
62
+
63
+ # @ shariff3UU
64
+ #. Text in function
65
+ #: shariff.php:1
66
+ msgid "Adds a headline above the Shariff buttons. Basic HTML as well as style and class attributes can be used. To remove a headline set on the plugins options page use headline=\"\"."
67
+ msgstr "Fügt eine Überschrift zu den Shariff-Buttons hinzu. Basis-HTML sowie style- und class-Attribute dürfen verwendet werden. Um eine Überschrift, die in den Plugin-Einstellungen gesetzt wurde, bei einzelnen Widgets zu entfernen, kann headline=\"\" verwendet werden"
68
+
69
+ # @ shariff3UU
70
+ #. Text in function
71
+ #: shariff.php:1
72
+ msgid "Advanced"
73
+ msgstr "Erweitert"
74
+
75
+ # @ shariff3UU
76
+ #. Text in function
77
+ #: shariff.php:1
78
+ msgid "Advanced options"
79
+ msgstr "Erweiterte Einstellungen"
80
+
81
+ # @ shariff3UU
82
+ #. Text in function
83
+ #: shariff.php:1
84
+ msgid "Alignment of the Shariff buttons in the widget:"
85
+ msgstr "Ausrichtung der Shariff-Buttons im Widget:"
86
+
87
+ # @ shariff3UU
88
+ #. Text in function
89
+ #: shariff.php:1
90
+ msgid "Alignment of the Shariff buttons:"
91
+ msgstr "Ausrichtung der Shariff-Buttons:"
92
+
93
+ # @ shariff3UU
94
+ #. Text in function
95
+ #: shariff.php:1
96
+ msgid "Backend error."
97
+ msgstr "Fehler im Backend."
98
+
99
+ # @ shariff3UU
100
+ #. Text in function
101
+ #: shariff.php:1
102
+ msgid "<p>Basic HTML as well as style and class attributes are allowed - e.g. <code>&lt;h1 class=\"shariff_headline\"&gt;Share this post&lt;/h1&gt;</code></p>"
103
+ msgstr "<p>Basis-HTML sowie style- und class-Attribute sind erlaubt - z.B. <code>&lt;h1 class=\"shariff_headline\"&gt;Teile diesen Beitrag&lt;/h1&gt;</code></p>"
104
+
105
+ # @ shariff3UU
106
+ #. Text in function
107
+ #: shariff.php:1
108
+ msgid "Basic"
109
+ msgstr "Basis"
110
+
111
+ # @ shariff3UU
112
+ #. Text in function
113
+ #: shariff.php:1
114
+ msgid "Basic options"
115
+ msgstr "Basiseinstellungen"
116
+
117
+ # @ shariff3UU
118
+ #. Text in function
119
+ #: shariff.php:1
120
+ msgid "CSS attributes for the container <span style=\"text-decoration: underline;\">around</span> Shariff:"
121
+ msgstr "CSS-Attribute für den Container <u>um</u> die Shariff-Buttons:"
122
+
123
+ # @ shariff3UU
124
+ #. Text in function
125
+ #: shariff.php:1
126
+ msgid "Cache TTL in seconds (60 - 7200):"
127
+ msgstr "Cache-Lebensdauer (TTL) in Sekunden (60 - 7200):"
128
+
129
+ # @ shariff3UU
130
+ #. Text in function
131
+ #: shariff.php:1
132
+ msgid "Cache directory is not writable or cannot be found."
133
+ msgstr "Cache-Verzeichnis ist nicht beschreibbar oder existiert nicht."
134
+
135
+ # @ shariff3UU
136
+ #. Text in function
137
+ #: shariff.php:1
138
+ msgid "Cache directory is writable."
139
+ msgstr "Cache-Verzeichnis ist beschreibbar."
140
+
141
+ # @ shariff3UU
142
+ #. Text in function
143
+ #: shariff.php:1
144
+ msgid "Changes the language of the share buttons."
145
+ msgstr "Stellt die Sprache der Shariff-Buttons ein."
146
+
147
+ # @ shariff3UU
148
+ #. Text in function
149
+ #: shariff.php:1
150
+ msgid "Changes the orientation of the buttons."
151
+ msgstr "Verändert die Anordnung der Shariff-Buttons."
152
+
153
+ # @ shariff3UU
154
+ #. Text in function
155
+ #: shariff.php:1
156
+ msgid "Changes the title to share. Only for special use cases."
157
+ msgstr "Legt den Titel zum Teilen fest. Nur für spezielle Umstände."
158
+
159
+ # @ shariff3UU
160
+ #. Text in function
161
+ #: shariff.php:1
162
+ msgid "Changes the url to share. Only for special use cases."
163
+ msgstr "Legt die URL zum Teilen fest. Nur für spezielle Umstände."
164
+
165
+ # @ shariff3UU
166
+ #. Text in function
167
+ #: shariff.php:1
168
+ msgid "Choose image"
169
+ msgstr "Wähle Bild"
170
+
171
+ # @ shariff3UU
172
+ #. Text in function
173
+ #: shariff.php:1
174
+ msgid "Code:"
175
+ msgstr "Code:"
176
+
177
+ # @ shariff3UU
178
+ #. Text in function
179
+ #: shariff.php:1
180
+ msgid "Current share count for "
181
+ msgstr "Aktueller Zählerstand für "
182
+
183
+ # @ shariff3UU
184
+ #. Text in function
185
+ #: shariff.php:1
186
+ msgid "Custom link for the info button:"
187
+ msgstr "Individueller Link für den Info-Button:"
188
+
189
+ # @ shariff3UU
190
+ #. Text in function
191
+ #: shariff.php:1
192
+ msgid "Default"
193
+ msgstr "Standard"
194
+
195
+ # @ shariff3UU
196
+ #. Text in function
197
+ #: shariff.php:1
198
+ msgid "Default image for Pinterest:"
199
+ msgstr "Standardbild für Pinterest:"
200
+
201
+ # @ shariff3UU
202
+ #. Text in function
203
+ #: shariff.php:1
204
+ msgid "Default sender e-mail address:"
205
+ msgstr "Standard Absenderadresse:"
206
+
207
+ # @ shariff3UU
208
+ #. Text in function
209
+ #: shariff.php:1
210
+ msgid "Default sender name:"
211
+ msgstr "Standard Absendername:"
212
+
213
+ # @ shariff3UU
214
+ #. Text in function
215
+ #: shariff.php:1
216
+ msgid "Description"
217
+ msgstr "Beschreibung"
218
+
219
+ # @ shariff3UU
220
+ #. Text in function
221
+ #: shariff.php:1
222
+ msgid "Design"
223
+ msgstr "Design"
224
+
225
+ # @ shariff3UU
226
+ #. Text in function
227
+ #: shariff.php:1
228
+ msgid "Design options"
229
+ msgstr "Desingoptionen"
230
+
231
+ # @ shariff3UU
232
+ #. Text in function
233
+ #: shariff.php:1
234
+ msgid "Determines the default image to share for Pinterest, if no other usable image is found."
235
+ msgstr "Legt das Standardbild zum Teilen für Pinterest fest, wenn kein anderes Bild gefunden wird."
236
+
237
+ # @ shariff3UU
238
+ #. Text in function
239
+ #: shariff.php:1
240
+ msgid "Determines the main design of the buttons."
241
+ msgstr "Legt das Hauptdesign der Shariff-Buttons fest."
242
+
243
+ # @ shariff3UU
244
+ #. Text in function
245
+ #: shariff.php:1
246
+ msgid "Determines which buttons to show and in which order."
247
+ msgstr "Legt fest, welche Buttons benutzt werden sollen und in welcher Reihenfolge."
248
+
249
+ # @ shariff3UU
250
+ #. Text in function
251
+ #: shariff.php:1
252
+ msgid "Disable the Shariff buttons on password protected posts."
253
+ msgstr "Verberge die Buttons bei passwortgeschützten Beiträgen."
254
+
255
+ # @ shariff3UU
256
+ #. Text in function
257
+ #: shariff.php:1
258
+ msgid "Disable the mail form functionality."
259
+ msgstr "Deaktiviere die Mailformular-Funktion."
260
+
261
+ # @ shariff3UU
262
+ #. Text in function
263
+ #: shariff.php:1
264
+ msgid "Disabled"
265
+ msgstr "Deaktiviert"
266
+
267
+ # @ shariff3UU
268
+ #. Text in function
269
+ #: shariff.php:1
270
+ msgid "Enable share counts (statistic)."
271
+ msgstr "Aktiviere die Statistik (share counts)."
272
+
273
+ # @ shariff3UU
274
+ #. Text in function
275
+ #: shariff.php:1
276
+ msgid "Enable the following services in the provided order:"
277
+ msgstr "Aktiviere die folgenden Dienste in dieser Reihenfolge:"
278
+
279
+ # @ shariff3UU
280
+ #. Text in function
281
+ #: shariff.php:1
282
+ msgid "Enables share counts on the buttons."
283
+ msgstr "Aktiviert die Statistik (share counts) in den Shariff-Buttons."
284
+
285
+ # @ shariff3UU
286
+ #. Text in function
287
+ #: shariff.php:1
288
+ msgid "Error"
289
+ msgstr "Fehler"
290
+
291
+ # @ shariff3UU
292
+ #. Text in function
293
+ #: shariff.php:1
294
+ msgid "Example"
295
+ msgstr "Beispiel"
296
+
297
+ # @ shariff3UU
298
+ #. Text in function
299
+ #: shariff.php:1
300
+ msgid "Extension pages (e.g. product sites)"
301
+ msgstr "Erweiterungen (z.B. Produktseiten)"
302
+
303
+ # @ shariff3UU
304
+ #. Text in function
305
+ #: shariff.php:1
306
+ msgid "Facebook API (ID):"
307
+ msgstr "Facebook API (ID):"
308
+
309
+ # @ shariff3UU
310
+ #. Text in function
311
+ #: shariff.php:1
312
+ msgid "Facebook App ID:"
313
+ msgstr "Facebook App ID:"
314
+
315
+ # @ shariff3UU
316
+ #. Text in function
317
+ #: shariff.php:1
318
+ msgid "Facebook App Secret:"
319
+ msgstr "Facebook App Secret:"
320
+
321
+ # @ shariff3UU
322
+ #. Text in function
323
+ #: shariff.php:1
324
+ msgid "Facebook:"
325
+ msgstr "Facebook:"
326
+
327
+ # @ shariff3UU
328
+ #. Text in function
329
+ #: shariff.php:1
330
+ msgid "Flattr username:"
331
+ msgstr "Flattr-Benutzername:"
332
+
333
+ # @ shariff3UU
334
+ #. Text in function
335
+ #: shariff.php:1
336
+ msgid "Headline above all Shariff buttons:"
337
+ msgstr "Überschrift über allen Shariff-Buttons:"
338
+
339
+ # @ shariff3UU
340
+ #. Text in function
341
+ #: shariff.php:1
342
+ msgid "Help"
343
+ msgstr "Hilfe"
344
+
345
+ # @ shariff3UU
346
+ #. Text in function
347
+ #: shariff.php:1
348
+ msgid "Help Section</a> and the "
349
+ msgstr "Hilfe-Bereich</a> und in das "
350
+
351
+ # @ shariff3UU
352
+ #. Text in function
353
+ #: shariff.php:1
354
+ msgid "Mail Form"
355
+ msgstr "Mail Form"
356
+
357
+ # @ shariff3UU
358
+ #. Text in function
359
+ #: shariff.php:1
360
+ msgid "Mail form disabled."
361
+ msgstr "Mailformular deaktiviert."
362
+
363
+ # @ shariff3UU
364
+ #. Text in function
365
+ #: shariff.php:1
366
+ msgid "Mail form options"
367
+ msgstr "Mailformular-Einstellungen"
368
+
369
+ # @ shariff3UU
370
+ #. Text in function
371
+ #: shariff.php:1
372
+ msgid "Mailform language:"
373
+ msgstr "Sprache des Mailformulars:"
374
+
375
+ # @ shariff3UU
376
+ #. Text in function
377
+ #: shariff.php:1
378
+ msgid "Message:"
379
+ msgstr "Nachricht:"
380
+
381
+ # @ shariff3UU
382
+ #. Text in function
383
+ #: shariff.php:1
384
+ msgid "More information in the FAQ."
385
+ msgstr "Mehr Informationen in der FAQ."
386
+
387
+ # @ shariff3UU
388
+ #. Text in function
389
+ #: shariff.php:1
390
+ msgid "Name"
391
+ msgstr "Name"
392
+
393
+ # @ shariff3UU
394
+ #. Text in function
395
+ #: shariff.php:1
396
+ msgid "Not configured"
397
+ msgstr "Nicht konfiguriert."
398
+
399
+ # @ shariff3UU
400
+ #. Text in function
401
+ #: shariff.php:1
402
+ msgid "OK"
403
+ msgstr "OK"
404
+
405
+ # @ shariff3UU
406
+ #. Text in function
407
+ #: shariff.php:1
408
+ msgid "Options"
409
+ msgstr "Optionen"
410
+
411
+ # @ shariff3UU
412
+ #. Text in function
413
+ #: shariff.php:1
414
+ msgid "PHP-Version 5.4 or better is needed to enable the statistic functionality."
415
+ msgstr "Für die Statistik-Funktion ist PHP-Version 5.4 oder neuer erforderlich."
416
+
417
+ # @ shariff3UU
418
+ #. Text in function
419
+ #: shariff.php:1
420
+ msgid "Pages"
421
+ msgstr "Seiten"
422
+
423
+ # @ shariff3UU
424
+ #. Text in function
425
+ #: shariff.php:1
426
+ msgid "Please check your "
427
+ msgstr "Bitte überprüfe die "
428
+
429
+ # @ shariff3UU
430
+ #. Text in function
431
+ #: shariff.php:1
432
+ msgid "Please share this post:"
433
+ msgstr "Bitte teile diesen Beitrag:"
434
+
435
+ # @ shariff3UU
436
+ #. Text in function
437
+ #: shariff.php:1
438
+ msgid "Posts"
439
+ msgstr "Beiträgen"
440
+
441
+ # @ shariff3UU
442
+ #. Text in function
443
+ #: shariff.php:1
444
+ msgid "Posts (blog page)"
445
+ msgstr "Beiträgen (Blogseite)"
446
+
447
+ # @ shariff3UU
448
+ #. Text in function
449
+ #: shariff.php:1
450
+ msgid "Reduce button size by 30%."
451
+ msgstr "Reduziere die Buttongröße um 30%."
452
+
453
+ # @ shariff3UU
454
+ #. Text in function
455
+ #: shariff.php:1
456
+ msgid "Require sender e-mail address."
457
+ msgstr "Verlange die Eingabe einer Absenderadresse."
458
+
459
+ # @ shariff3UU
460
+ #. Text in function
461
+ #: shariff.php:1
462
+ msgid "Select the desired services in the order you want them to be displayed, where the Shariff buttons should be included automatically and if you want the share counts to be shown."
463
+ msgstr "Wähle die zu aktivierenden Dienste in der gewünschten Reihenfolge, wo die Shariff-Buttons automatisch eingebunden werden sollen und ob die Share-Statistik in den Buttons angezeigt werden soll."
464
+
465
+ # @ shariff3UU
466
+ #. Text in function
467
+ #: shariff.php:1
468
+ msgid "Sets a custom link for the info button."
469
+ msgstr "Legt einen individuellen Link für den Info-Button fest."
470
+
471
+ # @ shariff3UU
472
+ #. Text in function
473
+ #: shariff.php:1
474
+ msgid "Sets the Flattr username."
475
+ msgstr "Legt den Flattr-Benutzernamen fest."
476
+
477
+ # @ shariff3UU
478
+ #. Text in function
479
+ #: shariff.php:1
480
+ msgid "Sets the Twitter via tag."
481
+ msgstr "Bestimmt den Twitter-via-Tag."
482
+
483
+ # @ shariff3UU
484
+ #. Text in function
485
+ #: shariff.php:1
486
+ msgid "Settings"
487
+ msgstr "Einstellungen"
488
+
489
+ # @ shariff3UU
490
+ #. Text in function
491
+ #: shariff.php:1
492
+ msgid "Share this post"
493
+ msgstr "Teile diesen Beitrag"
494
+
495
+ # @ shariff3UU
496
+ #. Text in function
497
+ #: shariff.php:1
498
+ msgid "Shariff Help"
499
+ msgstr "Shariff-Hilfe"
500
+
501
+ # @ shariff3UU
502
+ #. Text in function
503
+ #: shariff.php:1
504
+ msgid "Shariff button design:"
505
+ msgstr "Design der Shariff-Buttons:"
506
+
507
+ # @ shariff3UU
508
+ #. Text in function
509
+ #: shariff.php:1
510
+ msgid "Shariff button language:"
511
+ msgstr "Sprache der Shariff-Buttons:"
512
+
513
+ # @ shariff3UU
514
+ #. Text in function
515
+ #: shariff.php:1
516
+ msgid "Shariff button orientation <b>vertical</b>."
517
+ msgstr "Ordne die Shariff-Buttons <u>vertikal</u> an."
518
+
519
+ # @ shariff3UU
520
+ #. Text in function
521
+ #: shariff.php:1
522
+ msgid "Shariff-Settings</a> - Flattr was selected, but no username was provided! Please enter your <strong>Flattr username</strong> in the shariff options!"
523
+ msgstr "Shariff-Einstellungen</a> - Flattr wurde als Dienst ausgewählt, aber kein Benutzername eingetragen! Bitte in den Shariff-Einstellungen einen <b>Flattr-Benutzernamen</b> festlegen!"
524
+
525
+ # @ shariff3UU
526
+ #. Text in function
527
+ #: shariff.php:1
528
+ msgid "Shariff-Settings</a> - Mail was split into mailform and mailto. Manual shorttags may need to be adjusted accordingly."
529
+ msgstr "Shariff-Einstellungen</a> - Mail wurde in mailform und mailto aufgeteilt. Manuelle Shorttags müssen ggf. angepasst werden."
530
+
531
+ # @ shariff3UU
532
+ #. Text in function
533
+ #: shariff.php:1
534
+ msgid "Shariff-Settings</a> - Mailform has been selected as a service, but mail form functionality is disabled!"
535
+ msgstr "Shariff-Einstellungen</a> - Mailform wurde als Dienst ausgewählt, jedoch die Mailformular-Funktion in den Einstellungen deaktiviert!"
536
+
537
+ # @ shariff3UU
538
+ #. Text in function
539
+ #: shariff.php:1
540
+ msgid "Small reduces the size of all buttons by 30%, regardless of theme."
541
+ msgstr "Small verringert die Größe aller Buttons um 30%, unabhängig vom gewählten Design."
542
+
543
+ # @ shariff3UU
544
+ #. Text in function
545
+ #: shariff.php:1
546
+ msgid "Statistic:"
547
+ msgstr "Statistik:"
548
+
549
+ # @ shariff3UU
550
+ #. Text in function
551
+ #: shariff.php:1
552
+ msgid "Status"
553
+ msgstr "Status"
554
+
555
+ # @ shariff3UU
556
+ #. Text in function
557
+ #: shariff.php:1
558
+ msgid "Stretch buttons horizontally to full width."
559
+ msgstr "Strecke die Buttons horizontal auf volle Breite."
560
+
561
+ # @ shariff3UU
562
+ #. Text in function
563
+ #: shariff.php:1
564
+ msgid "Support Forum</a>."
565
+ msgstr "Support Forum</a>."
566
+
567
+ # @ shariff3UU
568
+ #. Text in function
569
+ #: shariff.php:1
570
+ msgid "The mail form can be completely disabled, if not needed. Otherwise, it is recommended to configure a default sender e-mail address from <u>your domain</u> that actually exists, to prevent spam filters from blocking the e-mails."
571
+ msgstr "Das Mailformular kann bei Bedarf vollständig deaktiviert werden. Ansonsten ist es anzuraten, eine Standard-Absenderadresse der <u>eigenen Domain</u> festzulegen, um zu verhindern, dass Spamfilter die E-Mails aussortieren."
572
+
573
+ # @ shariff3UU
574
+ #. Text in function
575
+ #: shariff.php:1
576
+ msgid "The post featured image or the first image of the post.</div>"
577
+ msgstr "Das Beitragsbild oder das erste Bild des Posts.</div>"
578
+
579
+ # @ shariff3UU
580
+ #. Text in function
581
+ #: shariff.php:1
582
+ msgid "The title of the current post or page.</div>"
583
+ msgstr "Der Titel des aktuellen Beitrags oder der Seite.</div>"
584
+
585
+ # @ shariff3UU
586
+ #. Text in function
587
+ #: shariff.php:1
588
+ msgid "The url of the current post or page.</div>"
589
+ msgstr "Die URL des aktuellen Beitrags oder der Seite.</div>"
590
+
591
+ # @ shariff3UU
592
+ #. Text in function
593
+ #: shariff.php:1
594
+ msgid "This configures the advanced options of Shariff regarding specific services. If you are unsure about an option, take a look at the "
595
+ msgstr "Im Folgenden werden die erweiterten Einstellungen für Shariff in Bezug auf einzelne Dienste festgelegt. Wenn bezüglich einer Einstellung Unsicherheiten bestehen sollten, wirf einen Blick in den "
596
+
597
+ # @ shariff3UU
598
+ #. Text in function
599
+ #: shariff.php:1
600
+ msgid "This configures the default design of the Shariff buttons. Most options can be overwritten for single posts or pages with the options within the <code>[shariff]</code> shorttag. For more information have a look at the "
601
+ msgstr "Im Folgenden wird das Standarddesign der Shariff-Buttons festgelegt. Die meisten Einstellungen können in einzelnen Beiträgen und auf Seiten mit dem Shorttag <code>[Shariff]</code> überschrieben werden. Für mehr Informationen schau in den "
602
+
603
+ # @ shariff3UU
604
+ #. Text in function
605
+ #: shariff.php:1
606
  msgid "Title"
607
  msgstr "Titel"
608
 
609
+ # @ shariff3UU
610
+ #. Text in function
611
+ #: shariff.php:1
612
+ msgid "Tried using the following directory: "
613
+ msgstr "Folgendes Verzeichnis wird aktuell versucht zu verwenden: "
614
 
615
+ # @ shariff3UU
616
+ #. Text in function
617
+ #: shariff.php:1
618
+ msgid "Twitter username for the via tag:"
619
+ msgstr "Twitter-Nutzername für das via-Attribut:"
620
 
621
+ # @ shariff3UU
622
+ #. Text in function
623
+ #: shariff.php:1
624
+ msgid "Type:"
625
+ msgstr "Typ:"
626
+
627
+ # @ shariff3UU
628
+ #. Text in function
629
+ #: shariff.php:1
630
+ msgid "Use the pipe sign | (Alt Gr + &lt; or &#8997; + 7) between two or more services."
631
+ msgstr "Verwende das Pipe-Zeichen | (Alt Gr + &lt; or &#8997; + 7) bei zwei oder mehr Diensten als Trenner. "
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
632
 
633
+ # @ shariff3UU
634
+ #. Text in function
635
+ #: shariff.php:1
636
+ msgid "Username for Flattr is missing!"
637
+ msgstr "Benutzername für Flattr fehlt!"
638
+
639
+ # @ shariff3UU
640
+ #. Text in function
641
+ #: shariff.php:1
642
+ msgid "Using the following directory: "
643
+ msgstr "Folgendes Verzeichnis wird aktuell verwendet: "
644
+
645
+ # @ shariff3UU
646
+ #. Text in function
647
+ #: shariff.php:1
648
+ msgid "auto"
649
+ msgstr "auto"
650
+
651
+ # @ shariff3UU
652
+ #. Text in function
653
+ #: shariff.php:1
654
  msgid "center"
655
+ msgstr "zentriert"
656
+
657
+ # @ shariff3UU
658
+ #. Text in function
659
+ #: shariff.php:1
660
+ msgid "left"
661
+ msgstr "links"
662
 
663
+ # @ shariff3UU
664
+ #. Text in function
665
+ #: shariff.php:1
666
  msgid "right"
667
  msgstr "rechts"
668
 
669
+ # @ shariff3UU
670
+ #. Text in function
671
+ #: shariff.php:1
672
+ msgid "status section</a>! This will help to speed up the process.</p>"
673
+ msgstr "Status-Bereich</a>! Dies hilft die Fehlersuche zu beschleunigen.</p>"
674
 
675
+ # @ shariff3UU
676
+ #. Text in function
677
+ #: shariff.php:1
678
+ msgid "username"
679
+ msgstr "Benutzername"
680
 
681
+ # @ shariff3UU
682
+ #. Text in function
683
+ #: shariff.php:1
684
+ msgid "If you enjoy our plugin, please consider writing a review about it on "
685
+ msgstr "Wenn dir unser Plugin gefällt, würden wir uns über eine Bewertung auf "
686
+
687
+ # @ shariff3UU
688
+ #. Text in function
689
+ #: shariff.php:1
690
+ msgid ". If you want to support us financially, you can donate via "
691
+ msgstr " freuen. Für finanzielle Unterstützung mittels einer Spende stehen "
692
+
693
+ # @ shariff3UU
694
+ #. Text in function
695
+ #: shariff.php:1
696
+ msgid "and"
697
+ msgstr "und"
698
+
699
+ # @ shariff3UU
700
+ #. Text in function
701
+ #: shariff.php:1
702
+ msgid ". Thank you!"
703
+ msgstr " zur Verfügung. Vielen Dank!"
704
+
705
+ # @ shariff3UU
706
+ #. Text in function
707
+ #: shariff.php:1
708
+ msgid "PayPal hosted button ID:"
709
+ msgstr "PayPal Hosted-Button-ID:"
710
+
711
+ # @ shariff3UU
712
+ #. Text in function
713
+ #: shariff.php:1
714
+ msgid "Patreon username:"
715
+ msgstr "Patreon-Benutzername:"
716
+
717
+ # @ shariff3UU
718
+ #. Text in function
719
+ #: shariff.php:1
720
+ msgid "Bitcoin address:"
721
+ msgstr "Bitcoin-Adresse:"
722
+
723
+ # @ shariff3UU
724
+ #. Text in function
725
+ #: shariff.php:1
726
+ msgid "Shariff-Settings</a> - Patreon was selected, but no username was provided! Please enter your <strong>Patreon username</strong> in the shariff options!"
727
+ msgstr "Shariff-Einstellungen</a> - Patreon wurde als Dienst ausgewählt, aber kein Benutzername eingetragen! Bitte in den Shariff-Einstellungen einen <b>Patreon-Benutzernamen</b> festlegen!"
728
 
729
+ # @ shariff3UU
730
+ #. Text in function
731
+ #: shariff.php:1
732
+ msgid "Shariff-Settings</a> - PayPal was selected, but no button ID was provided! Please enter your <strong>Hosted Button ID</strong> in the shariff options!"
733
+ msgstr "Shariff-Einstellungen</a> - PayPal wurde als Dienst ausgewählt, aber keine Button-ID eingetragen! Bitte in den Shariff-Einstellungen eine <b>Hosted-Button-ID</b> festlegen!"
734
+
735
+ # @ shariff3UU
736
+ #. Text in function
737
+ #: shariff.php:1
738
+ msgid "Shariff-Settings</a> - Bitcoin was selected, but no address was provided! Please enter your <strong>Bitcoin Address</strong> in the shariff options!"
739
+ msgstr "Shariff-Einstellungen</a> - Bitcoin wurde als Dienst ausgewählt, aber keine Adresse eingetragen! Bitte in den Shariff-Einstellungen eine <b>Bitcoin-Adresse</b> festlegen!"
740
+
741
+ # @ shariff3UU
742
+ #. Text in function
743
+ #: shariff.php:1
744
+ msgid "Username for patreon is missing!"
745
+ msgstr "Benutzername für Patreon fehlt!"
746
+
747
+ # @ shariff3UU
748
+ #. Text in function
749
+ #: shariff.php:1
750
+ msgid "Button ID for PayPal is missing!"
751
+ msgstr "Button-ID für PayPal fehlt!"
752
+
753
+ # @ shariff3UU
754
+ #. Text in function
755
+ #: shariff.php:1
756
+ msgid "Address for Bitcoin is missing!"
757
+ msgstr "Adresse für Bitcoin fehlt!"
758
+
759
+ # @ shariff3UU
760
+ #. Text in function
761
+ #: shariff.php:1
762
+ msgid "Sets the Patreon username."
763
+ msgstr "Legt den Patreon-Benutzernamen fest."
764
+
765
+ # @ shariff3UU
766
+ #. Text in function
767
+ #: shariff.php:1
768
+ msgid "Sets the PayPal hosted button ID."
769
+ msgstr "Legt die PayPal Hosted-Button-ID fest."
770
+
771
+ # @ shariff3UU
772
+ #. Text in function
773
+ #: shariff.php:1
774
+ msgid "Sets the bitcoin address."
775
+ msgstr "Legt die Bitcoin-Adresse fest."
776
 
777
  # @ shariff3UU
778
+ #. Text in function
779
+ #: shariff.php:1
780
+ msgid "bbPress replies"
781
+ msgstr "bbPress Antworten"
782
 
783
+ # @ shariff3UU
784
+ #. Text in function
785
+ #: shariff.php:1
786
+ msgid "The GD Library is not installed on this server. This is only needed for the QR codes, if your are using the bitcoin button."
787
+ msgstr "Die GD-Library ist auf diesem Server nicht installiert. Diese wird nur für die QR-Codes benötigt, wenn der Bitcoin-Button verwendet wird."
locale/shariff3UU-fr_FR.mo CHANGED
Binary file
locale/shariff3UU-fr_FR.po CHANGED
@@ -1,195 +1,787 @@
1
  msgid ""
2
  msgstr ""
3
- "Project-Id-Version: Shariff for WP posts, pages, themes and as widget v1.2.4\n"
4
- "Report-Msgid-Bugs-To: \n"
5
- "POT-Creation-Date: \n"
6
- "PO-Revision-Date: 2015-04-09 21:07+0100\n"
7
- "Last-Translator: admin3uu <support@3uu.net>\n"
8
- "Language-Team: \n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
  "Content-Transfer-Encoding: 8bit\n"
12
- "Plural-Forms: nplurals=2; plural=n>1;\n"
13
- "X-Generator: Poedit 1.7.5\n"
14
  "X-Poedit-SourceCharset: utf-8\n"
15
  "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
16
- "X-Poedit-Basepath: ../\n"
17
  "X-Textdomain-Support: yes\n"
 
 
 
 
 
 
 
18
  "Language: fr_FR\n"
19
  "X-Poedit-SearchPath-0: .\n"
20
 
21
  # @ shariff3UU
22
- #: shariff.php:44
23
- msgid "Enable Shariff for all post and configure the options with these settings."
24
- msgstr "Autorise Shariff sur tous les articles et configure les options avec ses réglages."
 
25
 
26
  # @ shariff3UU
27
- #: shariff.php:52
28
- msgid "Check to put Shariff at the begin off all posts."
29
- msgstr "Cocher pour activer Shariff à la début de chaque article."
 
30
 
31
  # @ shariff3UU
32
- #: shariff.php:56
33
- msgid "Select button language."
34
- msgstr "Selectionner la langue."
 
 
 
 
 
 
35
 
36
  # @ shariff3UU
37
- #: shariff.php:60
38
- msgid "Select theme (Shariff button design)."
39
- msgstr "Selectionner un thème."
 
40
 
41
  # @ shariff3UU
42
- #: shariff.php:64
43
- msgid "Check this to make orientation of buttons <b>vertical</b>."
44
- msgstr "Cocher pour afficher les boutons <b>verticalement</b>."
 
45
 
46
  # @ shariff3UU
47
- #: shariff.php:69
48
- msgid "Put in the service do you want enable (<code>facebook|twitter|googleplus|whatsapp|mail|mailto|printer| pinterest|linkedin|xing|reddit|stumbleupon|flattr|info</code>). Use the pipe sign | between two or more services."
49
- msgstr "Entrer le service que vous voulez activer (<code>facebook|twitter|googleplus|whatsapp|mail|mailto|printer| pinterest|linkedin|xing|reddit|stumbleupon|flattr|info</code>). Utiliser la séparation | entre deux services ou plus."
 
50
 
51
  # @ shariff3UU
52
- #: shariff.php:73
53
- msgid "Check this to show share statistic."
54
- msgstr "Cliquez ici pour afficher les statistiques."
 
55
 
56
  # @ shariff3UU
57
- #: shariff.php:78
58
- msgid "Change the default link of the \"info\" button to:"
59
- msgstr "Change le lien par défaut du bouton \"info\" par:"
 
60
 
61
  # @ shariff3UU
62
- #: shariff.php:143
63
- msgid "This configures the default behavior of Shariff for your blog. You can overwrite this in single posts or pages with the options within the <code>[shariff]</code> shorttag."
64
- msgstr "Ceci configure le réglage par défaut de Shariff pour ton blog. Tu peux écrire des postes seuls avec les <code>[shariff]</code>."
 
65
 
66
  # @ shariff3UU
67
- #: shariff.php:97
68
- msgid "browser selected"
69
- msgstr "Navigateur selectionné."
 
70
 
71
  # @ shariff3UU
72
- #: shariff.php:281
73
- msgid "Add Shariff as configured in the admin menue."
74
- msgstr "Ajouter Shariff tel que configuré dans la menue admin."
 
75
 
76
  # @ shariff3UU
77
- #: shariff.php:296
78
- msgid "Title"
79
- msgstr "Titre"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
80
 
81
  # @ shariff3UU
82
- #: shariff.php:83
83
- msgid "CSS style attributes for the CSS container _around_ Shariff"
84
- msgstr "Style CSS attributs pour le conteneur de CSS _autour_ Shariff"
 
85
 
86
  # @ shariff3UU
87
- #: shariff.php:149
88
- msgid "please read about it in the FAQ"
89
- msgstr "se il vous plaît lire à ce sujet dans la FAQ"
 
90
 
91
  # @ shariff3UU
92
- #: shariff.php:455
 
 
 
 
 
 
 
 
 
 
 
 
 
93
  msgid "Please check your "
94
- msgstr "Se il vous plaît vérifier votre "
 
 
 
 
 
 
95
 
96
  # @ shariff3UU
97
- #: shariff.php:455
98
- msgid "Shariff-Settings</a> - We have new detailed options where shariff buttons can be displayed! Also please read the FAQ about planed changes of the mail/mailto service functionality."
99
- msgstr "Shariff-Paramètres</a> - Nous avons de nouvelles options détaillées où les boutons de Shariff peuvent être affichées! Se il vous plaît aussi lire la FAQ sur les changements de la rabotés/mailto fonctionnalité du service de messagerie."
 
100
 
101
  # @ shariff3UU
102
- #: shariff.php:48
103
- msgid "Check to put Shariff at the end off all posts."
104
- msgstr "Vérifiez mettre Shariff à la fin de tous les messages."
 
105
 
106
  # @ shariff3UU
107
- #: shariff.php:52
108
- msgid "Check to put Shariff at the beginning off all posts."
109
- msgstr "Vérifiez mettre Shariff au début de tous les messages."
 
110
 
111
  # @ shariff3UU
112
- #: shariff.php:56
113
- msgid "Check to put Shariff at the end off all posts on the overview page."
114
- msgstr "Vérifiez mettre Shariff à la fin de tous les messages sur la page d'aperçu."
 
115
 
116
  # @ shariff3UU
117
- #: shariff.php:60
118
- msgid "Check to put Shariff at the beginning off all posts on the overview page."
119
- msgstr "Vérifiez mettre Shariff au début de tous les messages sur la page de présentation."
 
120
 
121
- #: shariff.php:152
122
- #@ shariff3UU
123
- msgid "Check to put Shariff at the end off all extension pages (e.g. product sites)."
124
- msgstr "Check to put Shariff at the end off all extension pages (e.g. product sites)."
 
125
 
126
  # @ shariff3UU
127
- #: shariff.php:64
128
- msgid "Check to put Shariff at the end off all pages."
129
- msgstr "Vérifiez mettre Shariff à la fin de toutes les pages."
 
130
 
131
  # @ shariff3UU
132
- #: shariff.php:68
133
- msgid "Check to put Shariff at the beginning off all pages."
134
- msgstr "Vérifiez mettre Shariff au début de toutes les pages."
 
135
 
136
  # @ shariff3UU
137
- #: shariff.php:129
138
- msgid "Set the screen name for Twitter (via) to"
139
- msgstr "Définissez le nom d'écran pour Twitter (via) pour"
 
140
 
141
  # @ shariff3UU
142
- #: shariff.php:149
143
- msgid "Select the alignment of the Shariff buttons"
144
- msgstr "PSélectionnez l'alignement des boutons Shariff"
 
145
 
146
  # @ shariff3UU
147
- #: shariff.php:154
148
- msgid "Select the alignment of the Shariff buttons in the widget"
149
- msgstr "Sélectionnez l'alignement des boutons Shariff dans le widget"
 
150
 
151
  # @ shariff3UU
152
- #: shariff.php:144
153
- msgid "Set the username for Flattr to"
154
- msgstr "Définissez le nom d'utilisateur de Flattr"
 
155
 
156
  # @ shariff3UU
157
- #: shariff.php:293
158
- msgid "left"
159
- msgstr "à gauche"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
160
 
161
  # @ shariff3UU
162
- #: shariff.php:294
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  msgid "center"
164
- msgstr "centre"
165
 
166
  # @ shariff3UU
167
- #: shariff.php:294
 
 
 
 
 
 
 
168
  msgid "right"
169
- msgstr "droit"
170
 
171
  # @ shariff3UU
172
- #: shariff.php:667
173
- msgid "Shariff-Settings</a> - Flattr was selected, but no username was provided! Please enter your <strong>Flattr username</strong> in the shariff options!"
174
- msgstr "Shariff-Paramètres</a> - Flattr est sélectionné mais aucun nom d'utilisateur spécifié! Se il vous plaît entrez votre propre <strong>nom d'utilisateur</strong> dans les paramètres Flattr Shariff!"
 
175
 
176
- #: shariff.php:117
177
- #@ shariff3UU
178
- msgid "Settings"
179
- msgstr "Settings"
 
180
 
181
- #: shariff.php:373
182
- #@ shariff3UU
183
- msgid "Choose image"
184
- msgstr "Choose image"
 
 
 
 
 
 
 
185
 
186
- #: shariff.php:216
187
- #@ shariff3UU
188
- msgid "Select the default image for Pinterest in case no other usable image is found."
189
- msgstr "Select the default image for Pinterest in case no other usable image is found."
 
 
 
 
 
 
 
190
 
191
  # @ shariff3UU
192
- #: shariff.php:168
193
- msgid "Check this to make the buttons 30% smaller (all designs)."
194
- msgstr "Check this to make the buttons 30% smaller (all designs)."
 
195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  msgid ""
2
  msgstr ""
3
+ "Project-Id-Version: Shariff Wrapper for Wordpress\n"
4
+ "PO-Revision-Date: 2015-08-15 23:28+0100\n"
5
+ "Last-Translator: JP\n"
6
+ "Plural-Forms: nplurals=2; plural=n != 1;\n"
7
+ "Content-Type: text/plain; charset=utf-8\n"
 
 
 
8
  "Content-Transfer-Encoding: 8bit\n"
 
 
9
  "X-Poedit-SourceCharset: utf-8\n"
10
  "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2\n"
 
11
  "X-Textdomain-Support: yes\n"
12
+ "Project-Id-Version: \n"
13
+ "POT-Creation-Date: \n"
14
+ "PO-Revision-Date: \n"
15
+ "Last-Translator: JP\n"
16
+ "Language-Team: \n"
17
+ "MIME-Version: 1.0\n"
18
+ "X-Generator: Poedit 1.8.1\n"
19
  "Language: fr_FR\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
 
22
  # @ shariff3UU
23
+ #. Text in function
24
+ #: shariff.php:1
25
+ msgid "<p>If you contact us about a problem with the share counts, please <u>always</u> include the information provided in the"
26
+ msgstr "<p>En cas de problème avec les statistiques (share counts), veuillez renseigner les informations demandées"
27
 
28
  # @ shariff3UU
29
+ #. Text in function
30
+ #: shariff.php:1
31
+ msgid "<p>The WordPress plugin \"Shariff Wrapper\" has been developed by <a href=\"http://www.datenverwurstungszentrale.com\" target=\"_blank\">3UU</a> and <a href=\"https://www.jplambeck.de\" target=_blank\">JP</a> in order to help protect the privacy of your visitors. It is based on the original Shariff buttons developed by the German computer magazin <a href=\"http://ct.de/shariff\" target=\"_blank\">c't</a> that fullfill the strict data protection laws in Germany. If you need any help with the plugin, take a look at the <a href=\"https://wordpress.org/plugins/shariff/faq/\" target=\"_blank\">Frequently Asked Questions (FAQ)</a> and the <a href=\"https://wordpress.org/support/plugin/shariff\" target=\"_blank\">Support Forum</a>. For up to date news about the plugin you can also follow <a href=\"https://twitter.com/jplambeck\" target=_blank\">@jplambeck</a> on Twitter.</p>"
32
+ msgstr "<p>Le plugin WordPress \"Shariff Wrapper\" a été développé par <a href=\"http://www.datenverwurstungszentrale.com\" target=\"_blank\">3UU</a> et <a href=\"https://www.jplambeck.de\" target=_blank\">JP</a>, afin de protéger la vie privée des visiteurs. Il se base sur le Shariff original, développé par le journal informatique <a href=\"http://ct.de/shariff\" target=\"_blank\">c't</a>, qui respecte strictement les lois allemandes sur la protection des données. En cas de problème ou de questions, veuillez consulter la <a href=\"https://wordpress.org/plugins/shariff/faq/\" target=\"_blank\">Frequently Asked Questions (FAQ)</a> und das <a href=\"https://wordpress.org/support/plugin/shariff\" target=\"_blank\">Support Forum</a>. Pour être au courant des nouveautés concernant le plugin, vous pouvez également suivre <a href=\"https://twitter.com/jplambeck\" target=_blank\">@jplambeck</a> sur Twitter.</p>"
33
 
34
  # @ shariff3UU
35
+ #. Text in function
36
+ #: shariff.php:1
37
+ msgid "<p>This is a list of all available options for the <code>[shariff]</code> shortcode:</p>"
38
+ msgstr "<p> Voici une liste de toutes les options disponibles concernant le <code>[shariff]</code> shortcode : </p>"
39
+
40
+ #. Text in function
41
+ #: shariff.php:1
42
+ msgid "Add Shariff as configured on the plugin options page."
43
+ msgstr "Ajouter le shariff comme configuré sur la page option du plugin."
44
 
45
  # @ shariff3UU
46
+ #. Text in function
47
+ #: shariff.php:1
48
+ msgid "Add the Shariff buttons <u>after</u> all:"
49
+ msgstr "Ajouter le shariff <u>après</u> : "
50
 
51
  # @ shariff3UU
52
+ #. Text in function
53
+ #: shariff.php:1
54
+ msgid "Add the Shariff buttons <u>before</u> all:"
55
+ msgstr "Ajouter le shariff <u>avant</u> : "
56
 
57
  # @ shariff3UU
58
+ #. Text in function
59
+ #: shariff.php:1
60
+ msgid "Add the post content to the e-mail body."
61
+ msgstr "Ajouter le contenu de l'article dans l'e-mail."
62
 
63
  # @ shariff3UU
64
+ #. Text in function
65
+ #: shariff.php:1
66
+ msgid "Adds a headline above the Shariff buttons. Basic HTML as well as style and class attributes can be used. To remove a headline set on the plugins options page use headline=\"\"."
67
+ msgstr "Ajouter un titre au dessus du Shariff. Du code HTML basic ainsi que des attributs de style et de classe peuvent être utilisés. Pour supprimer un seul titre, veuillez simplement écrire headline=\"\"."
68
 
69
  # @ shariff3UU
70
+ #. Text in function
71
+ #: shariff.php:1
72
+ msgid "Advanced"
73
+ msgstr "Options avançées"
74
 
75
  # @ shariff3UU
76
+ #. Text in function
77
+ #: shariff.php:1
78
+ msgid "Advanced options"
79
+ msgstr "Options avançées"
80
 
81
  # @ shariff3UU
82
+ #. Text in function
83
+ #: shariff.php:1
84
+ msgid "Alignment of the Shariff buttons in the widget:"
85
+ msgstr "Alignement du Shariff dans la zone Widget : "
86
 
87
  # @ shariff3UU
88
+ #. Text in function
89
+ #: shariff.php:1
90
+ msgid "Alignment of the Shariff buttons:"
91
+ msgstr "Alignement du Shariff : "
92
 
93
  # @ shariff3UU
94
+ #. Text in function
95
+ #: shariff.php:1
96
+ msgid "Backend error."
97
+ msgstr "Erreur du Backend."
98
+
99
+ # @ shariff3UU
100
+ #. Text in function
101
+ #: shariff.php:1
102
+ msgid "<p>Basic HTML as well as style and class attributes are allowed - e.g. <code>&lt;h1 class=\"shariff_headline\"&gt;Share this post&lt;/h1&gt;</code></p>"
103
+ msgstr "<p>Le code HTML basique ainsi que les attributs de style et de classe sont autorisés - p. ex. <code>&lt;h1 class=\"shariff_headline\"&gt;Partager ce contenu&lt;/h1&gt;</code></p>"
104
+
105
+ # @ shariff3UU
106
+ #. Text in function
107
+ #: shariff.php:1
108
+ msgid "Basic"
109
+ msgstr "Options de base"
110
+
111
+ # @ shariff3UU
112
+ #. Text in function
113
+ #: shariff.php:1
114
+ msgid "Basic options"
115
+ msgstr "Options de base"
116
+
117
+ # @ shariff3UU
118
+ #. Text in function
119
+ #: shariff.php:1
120
+ msgid "CSS attributes for the container <span style=\"text-decoration: underline;\">around</span> Shariff:"
121
+ msgstr "CSS-Attribute pour le contenant <u>autour</u> du Shariff : "
122
+
123
+ # @ shariff3UU
124
+ #. Text in function
125
+ #: shariff.php:1
126
+ msgid "Cache TTL in seconds (60 - 7200):"
127
+ msgstr "Cache-temporaire (TTL) en secondes (60 - 7200) : "
128
+
129
+ # @ shariff3UU
130
+ #. Text in function
131
+ #: shariff.php:1
132
+ msgid "Cache directory is not writable or cannot be found."
133
+ msgstr "Le Cache-Verzeichnis ."
134
+
135
+ # @ shariff3UU
136
+ #. Text in function
137
+ #: shariff.php:1
138
+ msgid "Cache directory is writable."
139
+ msgstr "Le répertoire cache n'est pas disponible."
140
+
141
+ # @ shariff3UU
142
+ #. Text in function
143
+ #: shariff.php:1
144
+ msgid "Changes the language of the share buttons."
145
+ msgstr "Modifie la langue du Shariff."
146
+
147
+ # @ shariff3UU
148
+ #. Text in function
149
+ #: shariff.php:1
150
+ msgid "Changes the orientation of the buttons."
151
+ msgstr "Modifie l'orientation du Shariff."
152
+
153
+ # @ shariff3UU
154
+ #. Text in function
155
+ #: shariff.php:1
156
+ msgid "Changes the title to share. Only for special use cases."
157
+ msgstr "Modifie le titre du lien de partage. Seulement pour cas particuliers."
158
+
159
+ # @ shariff3UU
160
+ #. Text in function
161
+ #: shariff.php:1
162
+ msgid "Changes the url to share. Only for special use cases."
163
+ msgstr "Modifie l'url du lien de partage. eulement pour cas particuliers."
164
+
165
+ # @ shariff3UU
166
+ #. Text in function
167
+ #: shariff.php:1
168
+ msgid "Choose image"
169
+ msgstr "Choisissez l'image"
170
+
171
+ # @ shariff3UU
172
+ #. Text in function
173
+ #: shariff.php:1
174
+ msgid "Code:"
175
+ msgstr "Code : "
176
+
177
+ # @ shariff3UU
178
+ #. Text in function
179
+ #: shariff.php:1
180
+ msgid "Current share count for "
181
+ msgstr "Nombre de partage pour "
182
+
183
+ # @ shariff3UU
184
+ #. Text in function
185
+ #: shariff.php:1
186
+ msgid "Custom link for the info button:"
187
+ msgstr "Lien personnalisé pour le bouton information : "
188
+
189
+ # @ shariff3UU
190
+ #. Text in function
191
+ #: shariff.php:1
192
+ msgid "Default"
193
+ msgstr "Par défaut"
194
+
195
+ # @ shariff3UU
196
+ #. Text in function
197
+ #: shariff.php:1
198
+ msgid "Default image for Pinterest:"
199
+ msgstr "Image par défaut pour Pinterest : "
200
+
201
+ # @ shariff3UU
202
+ #. Text in function
203
+ #: shariff.php:1
204
+ msgid "Default sender e-mail address:"
205
+ msgstr "Adresse e-mail par défaut : "
206
+
207
+ # @ shariff3UU
208
+ #. Text in function
209
+ #: shariff.php:1
210
+ msgid "Default sender name:"
211
+ msgstr "Expéditeur par défaut : "
212
+
213
+ # @ shariff3UU
214
+ #. Text in function
215
+ #: shariff.php:1
216
+ msgid "Description"
217
+ msgstr "Description"
218
+
219
+ # @ shariff3UU
220
+ #. Text in function
221
+ #: shariff.php:1
222
+ msgid "Design"
223
+ msgstr "Design"
224
+
225
+ # @ shariff3UU
226
+ #. Text in function
227
+ #: shariff.php:1
228
+ msgid "Design options"
229
+ msgstr "Option de design"
230
+
231
+ # @ shariff3UU
232
+ #. Text in function
233
+ #: shariff.php:1
234
+ msgid "Determines the default image to share for Pinterest, if no other usable image is found."
235
+ msgstr "Détermine l'image par défaut partagée sur Pinterest, si aucune autre image n'est trouvée."
236
+
237
+ # @ shariff3UU
238
+ #. Text in function
239
+ #: shariff.php:1
240
+ msgid "Determines the main design of the buttons."
241
+ msgstr "Déternine le design principal du Shariff."
242
+
243
+ # @ shariff3UU
244
+ #. Text in function
245
+ #: shariff.php:1
246
+ msgid "Determines which buttons to show and in which order."
247
+ msgstr "Détermine quels boutons montrer et dans quel ordre."
248
+
249
+ # @ shariff3UU
250
+ #. Text in function
251
+ #: shariff.php:1
252
+ msgid "Disable the Shariff buttons on password protected posts."
253
+ msgstr "Désactive le Shariff sur les articles protégés par mot de passe."
254
+
255
+ # @ shariff3UU
256
+ #. Text in function
257
+ #: shariff.php:1
258
+ msgid "Disable the mail form functionality."
259
+ msgstr "Désactive la fonction de mail formulaire."
260
+
261
+ # @ shariff3UU
262
+ #. Text in function
263
+ #: shariff.php:1
264
+ msgid "Disabled"
265
+ msgstr "Désactivé"
266
+
267
+ # @ shariff3UU
268
+ #. Text in function
269
+ #: shariff.php:1
270
+ msgid "Enable share counts (statistic)."
271
+ msgstr "Active les statistiques (share counts)."
272
+
273
+ # @ shariff3UU
274
+ #. Text in function
275
+ #: shariff.php:1
276
+ msgid "Enable the following services in the provided order:"
277
+ msgstr "Active les services suivants dans cet ordre : "
278
+
279
+ # @ shariff3UU
280
+ #. Text in function
281
+ #: shariff.php:1
282
+ msgid "Enables share counts on the buttons."
283
+ msgstr "Active les statistiques (share counts) dans le Shariff."
284
+
285
+ # @ shariff3UU
286
+ #. Text in function
287
+ #: shariff.php:1
288
+ msgid "Error"
289
+ msgstr "Erreur"
290
+
291
+ # @ shariff3UU
292
+ #. Text in function
293
+ #: shariff.php:1
294
+ msgid "Example"
295
+ msgstr "Exemple"
296
+
297
+ # @ shariff3UU
298
+ #. Text in function
299
+ #: shariff.php:1
300
+ msgid "Extension pages (e.g. product sites)"
301
+ msgstr "Pages d'extension (ex. sites de produits)"
302
+
303
+ # @ shariff3UU
304
+ #. Text in function
305
+ #: shariff.php:1
306
+ msgid "Facebook API (ID):"
307
+ msgstr "Facebook API (ID) : "
308
+
309
+ # @ shariff3UU
310
+ #. Text in function
311
+ #: shariff.php:1
312
+ msgid "Facebook App ID:"
313
+ msgstr "Facebook App ID : "
314
+
315
+ # @ shariff3UU
316
+ #. Text in function
317
+ #: shariff.php:1
318
+ msgid "Facebook App Secret:"
319
+ msgstr "Facebook App Secret : "
320
+
321
+ # @ shariff3UU
322
+ #. Text in function
323
+ #: shariff.php:1
324
+ msgid "Facebook:"
325
+ msgstr "Facebook : "
326
+
327
+ # @ shariff3UU
328
+ #. Text in function
329
+ #: shariff.php:1
330
+ msgid "Flattr username:"
331
+ msgstr "Flattr-nom d'utilisateur : "
332
+
333
+ # @ shariff3UU
334
+ #. Text in function
335
+ #: shariff.php:1
336
+ msgid "Headline above all Shariff buttons:"
337
+ msgstr "Titre au dessus de tous les boutons du Shariff : "
338
+
339
+ # @ shariff3UU
340
+ #. Text in function
341
+ #: shariff.php:1
342
+ msgid "Help"
343
+ msgstr "Aide"
344
+
345
+ # @ shariff3UU
346
+ #. Text in function
347
+ #: shariff.php:1
348
+ msgid "Help Section</a> and the "
349
+ msgstr "Page d'aide </a> et dans le "
350
+
351
+ # @ shariff3UU
352
+ #. Text in function
353
+ #: shariff.php:1
354
+ msgid "Mail Form"
355
+ msgstr "Mail formulaire"
356
+
357
+ # @ shariff3UU
358
+ #. Text in function
359
+ #: shariff.php:1
360
+ msgid "Mail form disabled."
361
+ msgstr "Mail formulaire désactivé."
362
+
363
+ # @ shariff3UU
364
+ #. Text in function
365
+ #: shariff.php:1
366
+ msgid "Mail form options"
367
+ msgstr "Options du mail formulaire"
368
+
369
+ # @ shariff3UU
370
+ #. Text in function
371
+ #: shariff.php:1
372
+ msgid "Mailform language:"
373
+ msgstr "Langue du mail formulaire : "
374
+
375
+ # @ shariff3UU
376
+ #. Text in function
377
+ #: shariff.php:1
378
+ msgid "Message:"
379
+ msgstr "Message : "
380
+
381
+ # @ shariff3UU
382
+ #. Text in function
383
+ #: shariff.php:1
384
+ msgid "More information in the FAQ."
385
+ msgstr "Plus d'information dans la FAQ."
386
+
387
+ # @ shariff3UU
388
+ #. Text in function
389
+ #: shariff.php:1
390
+ msgid "Name"
391
+ msgstr "Nom"
392
+
393
+ # @ shariff3UU
394
+ #. Text in function
395
+ #: shariff.php:1
396
+ msgid "Not configured"
397
+ msgstr "Non configuré."
398
 
399
  # @ shariff3UU
400
+ #. Text in function
401
+ #: shariff.php:1
402
+ msgid "OK"
403
+ msgstr "OK"
404
 
405
  # @ shariff3UU
406
+ #. Text in function
407
+ #: shariff.php:1
408
+ msgid "Options"
409
+ msgstr "Options"
410
 
411
  # @ shariff3UU
412
+ #. Text in function
413
+ #: shariff.php:1
414
+ msgid "PHP-Version 5.4 or better is needed to enable the statistic functionality."
415
+ msgstr "Pour le bon fonctionnement des statistiques, la version > 5.4 du PHP est indispensable."
416
+
417
+ # @ shariff3UU
418
+ #. Text in function
419
+ #: shariff.php:1
420
+ msgid "Pages"
421
+ msgstr "Pages"
422
+
423
+ # @ shariff3UU
424
+ #. Text in function
425
+ #: shariff.php:1
426
  msgid "Please check your "
427
+ msgstr "Veuillez vérifier vos "
428
+
429
+ # @ shariff3UU
430
+ #. Text in function
431
+ #: shariff.php:1
432
+ msgid "Please share this post:"
433
+ msgstr "Veuillez partager cet article : "
434
 
435
  # @ shariff3UU
436
+ #. Text in function
437
+ #: shariff.php:1
438
+ msgid "Posts"
439
+ msgstr "Articles"
440
 
441
  # @ shariff3UU
442
+ #. Text in function
443
+ #: shariff.php:1
444
+ msgid "Posts (blog page)"
445
+ msgstr "Articles (pages de blog)"
446
 
447
  # @ shariff3UU
448
+ #. Text in function
449
+ #: shariff.php:1
450
+ msgid "Reduce button size by 30%."
451
+ msgstr "Réduit la taille du bouton de 30%."
452
 
453
  # @ shariff3UU
454
+ #. Text in function
455
+ #: shariff.php:1
456
+ msgid "Require sender e-mail address."
457
+ msgstr "Requiert l'e-mail de l'expéditeur."
458
 
459
  # @ shariff3UU
460
+ #. Text in function
461
+ #: shariff.php:1
462
+ msgid "Select the desired services in the order you want them to be displayed, where the Shariff buttons should be included automatically and if you want the share counts to be shown."
463
+ msgstr "Sélectionez les services souhaités dans l'ordre dans lequel vous souhaitez les afficher,où vous souhaitez que les Shariff soient automatiquement inclus et si vous souhaitez afficher les statistiques (share counts)."
464
 
465
+ # @ shariff3UU
466
+ #. Text in function
467
+ #: shariff.php:1
468
+ msgid "Sets a custom link for the info button."
469
+ msgstr "Mets en place un lien personnalisé pour le bouton information."
470
 
471
  # @ shariff3UU
472
+ #. Text in function
473
+ #: shariff.php:1
474
+ msgid "Sets the Flattr username."
475
+ msgstr "Mets en place le Flattr-nom d'utilisateur."
476
 
477
  # @ shariff3UU
478
+ #. Text in function
479
+ #: shariff.php:1
480
+ msgid "Sets the Twitter via tag."
481
+ msgstr "Mets en place Twitter via tag."
482
 
483
  # @ shariff3UU
484
+ #. Text in function
485
+ #: shariff.php:1
486
+ msgid "Settings"
487
+ msgstr "Options"
488
 
489
  # @ shariff3UU
490
+ #. Text in function
491
+ #: shariff.php:1
492
+ msgid "Share this post"
493
+ msgstr "Partagez cet article"
494
 
495
  # @ shariff3UU
496
+ #. Text in function
497
+ #: shariff.php:1
498
+ msgid "Shariff Help"
499
+ msgstr "Aide pour le Shariff"
500
 
501
  # @ shariff3UU
502
+ #. Text in function
503
+ #: shariff.php:1
504
+ msgid "Shariff button design:"
505
+ msgstr "Design du Shariff : "
506
 
507
  # @ shariff3UU
508
+ #. Text in function
509
+ #: shariff.php:1
510
+ msgid "Shariff button language:"
511
+ msgstr "Langue du Shariff : "
512
+
513
+ # @ shariff3UU
514
+ #. Text in function
515
+ #: shariff.php:1
516
+ msgid "Shariff button orientation <b>vertical</b>."
517
+ msgstr "Orientation des boutons du Shariff <b>vertical</b>."
518
+
519
+ # @ shariff3UU
520
+ #. Text in function
521
+ #: shariff.php:1
522
+ msgid "Shariff-Settings</a> - Flattr was selected, but no username was provided! Please enter your <strong>Flattr username</strong> in the shariff options!"
523
+ msgstr "Options du Shariff</a> - Vous avez sélectionné Flattr mais vous n'avez pas fourni de nom d'utilisateur! Veuillez entrer un <b>Flattr-nom d'utilisateur</b> dans les options du Shariff!"
524
+
525
+ # @ shariff3UU
526
+ #. Text in function
527
+ #: shariff.php:1
528
+ msgid "Shariff-Settings</a> - Mail was split into mailform and mailto. Manual shorttags may need to be adjusted accordingly."
529
+ msgstr "Options du Shariff</a> - Le mail a été séparé en <code>mailto</code> et <code>mailform</code>. Des modifications manuelles des shorttags peuvent être requises."
530
+
531
+ # @ shariff3UU
532
+ #. Text in function
533
+ #: shariff.php:1
534
+ msgid "Shariff-Settings</a> - Mailform has been selected as a service, but mail form functionality is disabled!"
535
+ msgstr "Shariff-Einstellungen</a> - <code>mailform</code> a été sélectionné, cependant la fonction de formualaire par mail est déseactivé dans les options!"
536
+
537
+ # @ shariff3UU
538
+ #. Text in function
539
+ #: shariff.php:1
540
+ msgid "Small reduces the size of all buttons by 30%, regardless of theme."
541
+ msgstr "Small réduit la taile de tous les boutons de 30%, indépendemment du design sélectionné."
542
+
543
+ # @ shariff3UU
544
+ #. Text in function
545
+ #: shariff.php:1
546
+ msgid "Statistic:"
547
+ msgstr "Statistiques : "
548
+
549
+ # @ shariff3UU
550
+ #. Text in function
551
+ #: shariff.php:1
552
+ msgid "Status"
553
+ msgstr "Statut"
554
+
555
+ # @ shariff3UU
556
+ #. Text in function
557
+ #: shariff.php:1
558
+ msgid "Stretch buttons horizontally to full width."
559
+ msgstr "Etends au maximum les boutons horizontalement."
560
+
561
+ # @ shariff3UU
562
+ #. Text in function
563
+ #: shariff.php:1
564
+ msgid "Support Forum</a>."
565
+ msgstr "Forum d'aide</a>."
566
+
567
+ # @ shariff3UU
568
+ #. Text in function
569
+ #: shariff.php:1
570
+ msgid "The mail form can be completely disabled, if not needed. Otherwise, it is recommended to configure a default sender e-mail address from <u>your domain</u> that actually exists, to prevent spam filters from blocking the e-mails."
571
+ msgstr "Le formulaire par mail peut être complétement désactivé. Si non, il est recommandé de donner une adresse mail expediteur par défaut de votre <u>propre domaine</u>, afin d'éviter aux e-mails d'être bloqués par le filtre de spam."
572
+
573
+ # @ shariff3UU
574
+ #. Text in function
575
+ #: shariff.php:1
576
+ msgid "The post featured image or the first image of the post.</div>"
577
+ msgstr "L'illustration de l'article ou la première illustration de l'article.</div>"
578
 
579
  # @ shariff3UU
580
+ #. Text in function
581
+ #: shariff.php:1
582
+ msgid "The title of the current post or page.</div>"
583
+ msgstr "Le titre de l'article ou de la page, où vous vous trouvez.</div>"
584
+
585
+ # @ shariff3UU
586
+ #. Text in function
587
+ #: shariff.php:1
588
+ msgid "The url of the current post or page.</div>"
589
+ msgstr "L'URL de l'article ou de la page, où vous vous trouvez.</div>"
590
+
591
+ # @ shariff3UU
592
+ #. Text in function
593
+ #: shariff.php:1
594
+ msgid "This configures the advanced options of Shariff regarding specific services. If you are unsure about an option, take a look at the "
595
+ msgstr "Configure les options avancées du Shariff concernant des services particuliers. Si une option ne vous apparait comme certaine, veuillez regarder le "
596
+
597
+ # @ shariff3UU
598
+ #. Text in function
599
+ #: shariff.php:1
600
+ msgid "This configures the default design of the Shariff buttons. Most options can be overwritten for single posts or pages with the options within the <code>[shariff]</code> shorttag. For more information have a look at the "
601
+ msgstr "configure les options par défaut du design des boutons du Shariff. La plupart des options peuvent être modifiées pour chaque article et pour chaque page grâce au Shorttag <code>[Shariff]</code>. Pour plus d'informations, réferez-vous au "
602
+
603
+ # @ shariff3UU
604
+ #. Text in function
605
+ #: shariff.php:1
606
+ msgid "Title"
607
+ msgstr "Titre"
608
+
609
+ # @ shariff3UU
610
+ #. Text in function
611
+ #: shariff.php:1
612
+ msgid "Tried using the following directory: "
613
+ msgstr "Les répertoires suivants sont actuellement utilisés : "
614
+
615
+ # @ shariff3UU
616
+ #. Text in function
617
+ #: shariff.php:1
618
+ msgid "Twitter username for the via tag:"
619
+ msgstr "Nom d'utilisateur Twitter pour le via tag : "
620
+
621
+ # @ shariff3UU
622
+ #. Text in function
623
+ #: shariff.php:1
624
+ msgid "Type:"
625
+ msgstr "Format : "
626
+
627
+ # @ shariff3UU
628
+ #. Text in function
629
+ #: shariff.php:1
630
+ msgid "Use the pipe sign | (Alt Gr + &lt; or &#8997; + 7) between two or more services."
631
+ msgstr "Utilisez le signe Pipe | (Alt Gr + &lt; or &#8997; + 7) entre deux ou plusieurs services. "
632
+
633
+ # @ shariff3UU
634
+ #. Text in function
635
+ #: shariff.php:1
636
+ msgid "Username for Flattr is missing!"
637
+ msgstr "Nom d'utilisqteur pour Flattr manquant!"
638
+
639
+ # @ shariff3UU
640
+ #. Text in function
641
+ #: shariff.php:1
642
+ msgid "Using the following directory: "
643
+ msgstr "Utilisez le répertoire suivant : "
644
+
645
+ # @ shariff3UU
646
+ #. Text in function
647
+ #: shariff.php:1
648
+ msgid "auto"
649
+ msgstr "auto"
650
+
651
+ # @ shariff3UU
652
+ #. Text in function
653
+ #: shariff.php:1
654
  msgid "center"
655
+ msgstr "centré"
656
 
657
  # @ shariff3UU
658
+ #. Text in function
659
+ #: shariff.php:1
660
+ msgid "left"
661
+ msgstr "gauche"
662
+
663
+ # @ shariff3UU
664
+ #. Text in function
665
+ #: shariff.php:1
666
  msgid "right"
667
+ msgstr "droite"
668
 
669
  # @ shariff3UU
670
+ #. Text in function
671
+ #: shariff.php:1
672
+ msgid "status section</a>! This will help to speed up the process.</p>"
673
+ msgstr "section du statut</a>! Le processus pour trouver une solution sera plus rapide.</p>"
674
 
675
+ # @ shariff3UU
676
+ #. Text in function
677
+ #: shariff.php:1
678
+ msgid "username"
679
+ msgstr "Nom d'utilisateur"
680
 
681
+ # @ shariff3UU
682
+ #. Text in function
683
+ #: shariff.php:1
684
+ msgid "If you enjoy our plugin, please consider writing a review about it on "
685
+ msgstr "Si vous aimez notre plugin, merci de donner votre avis sur "
686
+
687
+ # @ shariff3UU
688
+ #. Text in function
689
+ #: shariff.php:1
690
+ msgid ". If you want to support us financially, you can donate via "
691
+ msgstr ". Si vous voulez nous soutenir financièrement, vous pouvez faire un don via "
692
 
693
+ # @ shariff3UU
694
+ #. Text in function
695
+ #: shariff.php:1
696
+ msgid "and"
697
+ msgstr "et"
698
+
699
+ # @ shariff3UU
700
+ #. Text in function
701
+ #: shariff.php:1
702
+ msgid ". Thank you!"
703
+ msgstr ". Merci!"
704
 
705
  # @ shariff3UU
706
+ #. Text in function
707
+ #: shariff.php:1
708
+ msgid "PayPal hosted button ID:"
709
+ msgstr "PayPal hosted button ID:"
710
 
711
+ # @ shariff3UU
712
+ #. Text in function
713
+ #: shariff.php:1
714
+ msgid "Patreon username:"
715
+ msgstr "Nom d'utilisqteur Patreon:"
716
+
717
+ # @ shariff3UU
718
+ #. Text in function
719
+ #: shariff.php:1
720
+ msgid "Bitcoin address:"
721
+ msgstr "Adresse Bitcoin:"
722
+
723
+ # @ shariff3UU
724
+ #. Text in function
725
+ #: shariff.php:1
726
+ msgid "Shariff-Settings</a> - Patreon was selected, but no username was provided! Please enter your <strong>Patreon username</strong> in the shariff options!"
727
+ msgstr "Options du Shariff</a> - Vous avez sélectionné Patreon mais vous n'avez pas fourni de nom d'utilisateur! Veuillez entrer un <b>Patreon-nom d'utilisateur</b> dans les options du Shariff!"
728
+
729
+ # @ shariff3UU
730
+ #. Text in function
731
+ #: shariff.php:1
732
+ msgid "Shariff-Settings</a> - PayPal was selected, but no button ID was provided! Please enter your <strong>Hosted Button ID</strong> in the shariff options!"
733
+ msgstr "Options du Shariff</a> - Vous avez sélectionné PayPal mais vous n'avez pas fourni de button ID! Veuillez entrer un <b>PayPal-Button-ID</b> dans les options du Shariff!"
734
+
735
+ # @ shariff3UU
736
+ #. Text in function
737
+ #: shariff.php:1
738
+ msgid "Shariff-Settings</a> - Bitcoin was selected, but no address was provided! Please enter your <strong>Bitcoin Address</strong> in the shariff options!"
739
+ msgstr "Options du Shariff</a> - Vous avez sélectionné Bitcoin mais vous n'avez pas fourni de adresse! Veuillez entrer un <b>adresse Bitcoin</b> dans les options du Shariff!"
740
+
741
+ # @ shariff3UU
742
+ #. Text in function
743
+ #: shariff.php:1
744
+ msgid "Username for patreon is missing!"
745
+ msgstr "Nom d'utilisqteur pour Patreon manquant!"
746
+
747
+ # @ shariff3UU
748
+ #. Text in function
749
+ #: shariff.php:1
750
+ msgid "Button ID for PayPal is missing!"
751
+ msgstr "Button-ID pour PayPal manquant!"
752
+
753
+ # @ shariff3UU
754
+ #. Text in function
755
+ #: shariff.php:1
756
+ msgid "Address for Bitcoin is missing!"
757
+ msgstr "Adresse pour Bitcoin manquant!"
758
+
759
+ # @ shariff3UU
760
+ #. Text in function
761
+ #: shariff.php:1
762
+ msgid "Sets the Patreon username."
763
+ msgstr "Mets en place le Patreon-nom d'utilisateur."
764
+
765
+ # @ shariff3UU
766
+ #. Text in function
767
+ #: shariff.php:1
768
+ msgid "Sets the PayPal hosted button ID."
769
+ msgstr "Mets en place le PayPal Hosted-Button-ID."
770
+
771
+ # @ shariff3UU
772
+ #. Text in function
773
+ #: shariff.php:1
774
+ msgid "Sets the bitcoin address."
775
+ msgstr "Mets en place le adresse Bitcoin."
776
+
777
+ # @ shariff3UU
778
+ #. Text in function
779
+ #: shariff.php:1
780
+ msgid "bbPress replies"
781
+ msgstr "bbPress réponses"
782
+
783
+ # @ shariff3UU
784
+ #. Text in function
785
+ #: shariff.php:1
786
+ msgid "The GD Library is not installed on this server. This is only needed for the QR codes, if your are using the bitcoin button."
787
+ msgstr "La bibliothèque GD est pas installé sur ce serveur. Ceci est nécessaire uniquement pour les codes QR, si vous utilisez le bouton de Bitcoin."
locale/shariff3UU-it_IT.mo ADDED
Binary file
locale/shariff3UU-it_IT.po ADDED
@@ -0,0 +1,676 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Content-Type: text/plain; charset=utf-8\n"
4
+ "Content-Transfer-Encoding: 8bit\n"
5
+ "Project-Id-Version: \n"
6
+ "POT-Creation-Date: \n"
7
+ "PO-Revision-Date: \n"
8
+ "Last-Translator: JP\n"
9
+ "Language-Team: \n"
10
+ "MIME-Version: 1.0\n"
11
+ "Language: de_DE\n"
12
+ "X-Generator: Poedit 1.8.1\n"
13
+
14
+ #. Text in function
15
+ #: shariff.php:1
16
+ msgid "<p>If you contact us about a problem with the share counts, please <u>always</u> include the information provided in the"
17
+ msgstr "<p>Se ci contattate per un problema sul contatore di condivisione (share counts), per favore includete <u>sempre</u> le informazioni presenti nella "
18
+
19
+ #. Text in function
20
+ #: shariff.php:1
21
+ msgid ""
22
+ "<p>The WordPress plugin \"Shariff Wrapper\" has been developed by <a href=\"http://www.datenverwurstungszentrale.com\" target=\"_blank\">3UU</a> and <a href=\"https://www.jplambeck.de\" target=_blank\">JP</a> in order to help protect the privacy of your visitors. It is based on the original Shariff buttons developed by the German computer magazin <a href="
23
+ "\"http://ct.de/shariff\" target=\"_blank\">c't</a> that fullfill the strict data protection laws in Germany. If you need any help with the plugin, take a look at the <a href=\"https://wordpress.org/plugins/shariff/faq/\" target=\"_blank\">Frequently Asked Questions (FAQ)</a> and the <a href=\"https://wordpress.org/support/plugin/shariff\" target=\"_blank"
24
+ "\">Support Forum</a>. For up to date news about the plugin you can also follow <a href=\"https://twitter.com/jplambeck\" target=_blank\">@jplambeck</a> on Twitter.</p>"
25
+ msgstr ""
26
+ "<p>Il plugin Wordpress \"Shariff Wrapper\" è stato sviluppato da <a href=\"http://www.datenverwurstungszentrale.com\" target=\"_blank\">3UU</a> e <a href=\"https://www.jplambeck.de\" target=_blank\">JP</a> al fine di proteggere la privacy dei visitatori. E' basato sull'originale Shariff-Buttons sviluppato dalla Computer Magazin tedesca <a href=\"http://"
27
+ "ct.de/shariff\" target=\"_blank\">c't</a>, che rispetta le severe leggi sulla protezione dei dati in Germania. Per qualunque problema con il plugin, date un'occhiata alle <a href=\"https://wordpress.org/plugins/shariff/faq/\" target=\"_blank\">Frequently Asked Questions (FAQ)</a> ed al <a href=\"https://wordpress.org/support/plugin/shariff\" target="
28
+ "\"_blank\">Support Forum</a>. Per informazioni aggiornate sul plugin potete seguire <a href=\"https://twitter.com/jplambeck\" target=_blank\">@jplambeck</a> su Twitter.</p>"
29
+
30
+ #. Text in function
31
+ #: shariff.php:1
32
+ msgid "<p>This is a list of all available options for the <code>[shariff]</code> shortcode:</p>"
33
+ msgstr "<p>Questo è un elenco di tutte le opzioni disponibili per lo shortcode <code>[shariff]</code>:</p>"
34
+
35
+ #. Text in function
36
+ #: shariff.php:1
37
+ msgid "Add Shariff as configured on the plugin options page."
38
+ msgstr "Aggiungi Shariff come configurato nella pagina delle opzioni del plugin."
39
+
40
+ #. Text in function
41
+ #: shariff.php:1
42
+ msgid "Add the Shariff buttons <u>after</u> all:"
43
+ msgstr "Inserisci i pulsanti Shariff <u>dopo</u> i contenuti per:"
44
+
45
+ #. Text in function
46
+ #: shariff.php:1
47
+ msgid "Add the Shariff buttons <u>before</u> all:"
48
+ msgstr "Inserisci i pulsanti Shariff <u>prima</u> dei contenuti per:"
49
+
50
+ #. Text in function
51
+ #: shariff.php:1
52
+ msgid "Add the post content to the e-mail body."
53
+ msgstr "Aggiungi il contenuto dell'articolo nel corpo dell'e-mail."
54
+
55
+ #. Text in function
56
+ #: shariff.php:1
57
+ msgid "Adds a headline above the Shariff buttons. Basic HTML as well as style and class attributes can be used. To remove a headline set on the plugins options page use headline=\"\"."
58
+ msgstr "Aggiunge un titolo sopra i pulsanti Shariff. E' possibile utilizzare HTML base, come pure attributi di stile e classe. Per rimuovere un titolo impostato nelle opzioni del plugin utilizzare il titolo=\"\"."
59
+
60
+ #. Text in function
61
+ #: shariff.php:1
62
+ msgid "Advanced"
63
+ msgstr "Avanzate"
64
+
65
+ #. Text in function
66
+ #: shariff.php:1
67
+ msgid "Advanced options"
68
+ msgstr "Opzioni avanzate"
69
+
70
+ #. Text in function
71
+ #: shariff.php:1
72
+ msgid "Alignment of the Shariff buttons in the widget:"
73
+ msgstr "Allineamento dei pulsanti Shariff all'interno del widget:"
74
+
75
+ #. Text in function
76
+ #: shariff.php:1
77
+ msgid "Alignment of the Shariff buttons:"
78
+ msgstr "Allineamento dei pulsanti Shariff:"
79
+
80
+ #. Text in function
81
+ #: shariff.php:1
82
+ msgid "Backend error."
83
+ msgstr "Errore di backend."
84
+
85
+ #. Text in function
86
+ #: shariff.php:1
87
+ msgid "<p>Basic HTML as well as style and class attributes are allowed - e.g. <code>&lt;h1 class=\"shariff_headline\"&gt;Share this post&lt;/h1&gt;</code></p>"
88
+ msgstr "<p>E' possibile utilizzare HTML base, come pure attributi di stile e classe - ad esempio: <code>&lt;h1 class=\"shariff_headline\"&gt;Teile diesen Beitrag&lt;/h1&gt;</code></p>"
89
+
90
+ #. Text in function
91
+ #: shariff.php:1
92
+ msgid "Basic"
93
+ msgstr "Base"
94
+
95
+ #. Text in function
96
+ #: shariff.php:1
97
+ msgid "Basic options"
98
+ msgstr "Opzioni base"
99
+
100
+ #. Text in function
101
+ #: shariff.php:1
102
+ msgid "CSS attributes for the container <span style=\"text-decoration: underline;\">around</span> Shariff:"
103
+ msgstr "Attributi CSS per il Container (DIV) <u>intorno</u> ai pulsanti Shariff:"
104
+
105
+ #. Text in function
106
+ #: shariff.php:1
107
+ msgid "Cache TTL in seconds (60 - 7200):"
108
+ msgstr "Durata cache (TTL) in secondi (60-7200):"
109
+
110
+ #. Text in function
111
+ #: shariff.php:1
112
+ msgid "Cache directory is not writable or cannot be found."
113
+ msgstr "La Cache-Directory non è scrivibile o non può essere trovata:"
114
+
115
+ #. Text in function
116
+ #: shariff.php:1
117
+ msgid "Cache directory is writable."
118
+ msgstr "La Cache-Directory è scrivibile."
119
+
120
+ #. Text in function
121
+ #: shariff.php:1
122
+ msgid "Changes the language of the share buttons."
123
+ msgstr "Cambia la lingua dei pulsanti di condivisione."
124
+
125
+ #. Text in function
126
+ #: shariff.php:1
127
+ msgid "Changes the orientation of the buttons."
128
+ msgstr "Cambia l'orientamento dei pulsanti di condivisione."
129
+
130
+ #. Text in function
131
+ #: shariff.php:1
132
+ msgid "Changes the title to share. Only for special use cases."
133
+ msgstr "Cambia il titolo da condividere. Solo per casi d'uso particolari."
134
+
135
+ #. Text in function
136
+ #: shariff.php:1
137
+ msgid "Changes the url to share. Only for special use cases."
138
+ msgstr "Cambia l'indirizzo (url) da condividere. Solo per casi d'uso particolari."
139
+
140
+ #. Text in function
141
+ #: shariff.php:1
142
+ msgid "Choose image"
143
+ msgstr "Scegli immagine"
144
+
145
+ #. Text in function
146
+ #: shariff.php:1
147
+ msgid "Code:"
148
+ msgstr "Codice:"
149
+
150
+ #. Text in function
151
+ #: shariff.php:1
152
+ msgid "Current share count for "
153
+ msgstr "Contatore effettivo per "
154
+
155
+ #. Text in function
156
+ #: shariff.php:1
157
+ msgid "Custom link for the info button:"
158
+ msgstr "link personalizzato per il pulsante Info:"
159
+
160
+ #. Text in function
161
+ #: shariff.php:1
162
+ msgid "Default"
163
+ msgstr "Predefinito"
164
+
165
+ #. Text in function
166
+ #: shariff.php:1
167
+ msgid "Default image for Pinterest:"
168
+ msgstr "Immagine predefinita per Pinterest:"
169
+
170
+ #. Text in function
171
+ #: shariff.php:1
172
+ msgid "Default sender e-mail address:"
173
+ msgstr "Indirizzo e-mail mittente predefinito:"
174
+
175
+ #. Text in function
176
+ #: shariff.php:1
177
+ msgid "Default sender name:"
178
+ msgstr "Nome mittente predefinito:"
179
+
180
+ #. Text in function
181
+ #: shariff.php:1
182
+ msgid "Description"
183
+ msgstr "Descrizione"
184
+
185
+ #. Text in function
186
+ #: shariff.php:1
187
+ msgid "Design"
188
+ msgstr "Aspetto"
189
+
190
+ #. Text in function
191
+ #: shariff.php:1
192
+ msgid "Design options"
193
+ msgstr "Opzioni per l'aspetto"
194
+
195
+ #. Text in function
196
+ #: shariff.php:1
197
+ msgid "Determines the default image to share for Pinterest, if no other usable image is found."
198
+ msgstr "Determina l'immagine predefinita di condivisione per Pinterest, se non viene trovata alcuna altra immagine utilizzabile."
199
+
200
+ #. Text in function
201
+ #: shariff.php:1
202
+ msgid "Determines the main design of the buttons."
203
+ msgstr "Determina l'aspetto principale per i pulsanti Shariff."
204
+
205
+ #. Text in function
206
+ #: shariff.php:1
207
+ msgid "Determines which buttons to show and in which order."
208
+ msgstr "Stabilisce quali pulsanti mostrare ed in quale ordine."
209
+
210
+ #. Text in function
211
+ #: shariff.php:1
212
+ msgid "Disable the Shariff buttons on password protected posts."
213
+ msgstr "Disabilita i pulsanti Shariff all'interno degli articoli protetti da password."
214
+
215
+ #. Text in function
216
+ #: shariff.php:1
217
+ msgid "Disable the mail form functionality."
218
+ msgstr "Disabilita la funzionalità del modulo Mail."
219
+
220
+ #. Text in function
221
+ #: shariff.php:1
222
+ msgid "Disabled"
223
+ msgstr "Disabilitato"
224
+
225
+ #. Text in function
226
+ #: shariff.php:1
227
+ msgid "Enable share counts (statistic)."
228
+ msgstr "Attiva le statistiche (share counts)."
229
+
230
+ #. Text in function
231
+ #: shariff.php:1
232
+ msgid "Enable the following services in the provided order:"
233
+ msgstr "Attiva i seguenti servizi nell'ordine previsto:"
234
+
235
+ #. Text in function
236
+ #: shariff.php:1
237
+ msgid "Enables share counts on the buttons."
238
+ msgstr "Attiva le statistiche (share counts) sui pulsanti Shariff."
239
+
240
+ #. Text in function
241
+ #: shariff.php:1
242
+ msgid "Error"
243
+ msgstr "Errore"
244
+
245
+ #. Text in function
246
+ #: shariff.php:1
247
+ msgid "Example"
248
+ msgstr "Esempio"
249
+
250
+ #. Text in function
251
+ #: shariff.php:1
252
+ msgid "Extension pages (e.g. product sites)"
253
+ msgstr "Pagine di estensione (ad esempio, pagine di prodotto)"
254
+
255
+ #. Text in function
256
+ #: shariff.php:1
257
+ msgid "Facebook API (ID):"
258
+ msgstr "Facebook API (ID):"
259
+
260
+ #. Text in function
261
+ #: shariff.php:1
262
+ msgid "Facebook App ID:"
263
+ msgstr "Facebook App ID:"
264
+
265
+ #. Text in function
266
+ #: shariff.php:1
267
+ msgid "Facebook App Secret:"
268
+ msgstr "Facebook App Secret:"
269
+
270
+ #. Text in function
271
+ #: shariff.php:1
272
+ msgid "Facebook:"
273
+ msgstr "Facebook:"
274
+
275
+ #. Text in function
276
+ #: shariff.php:1
277
+ msgid "Flattr username:"
278
+ msgstr "Nome utente Flattr:"
279
+
280
+ #. Text in function
281
+ #: shariff.php:1
282
+ msgid "Headline above all Shariff buttons:"
283
+ msgstr "Titolo sopra tutti i pulsanti Shariff:"
284
+
285
+ #. Text in function
286
+ #: shariff.php:1
287
+ msgid "Help"
288
+ msgstr "Aiuto"
289
+
290
+ #. Text in function
291
+ #: shariff.php:1
292
+ msgid "Help Section</a> and the "
293
+ msgstr "Sezione Aiuto</a> ed il "
294
+
295
+ #. Text in function
296
+ #: shariff.php:1
297
+ msgid "Mail Form"
298
+ msgstr "Modulo Mail"
299
+
300
+ #. Text in function
301
+ #: shariff.php:1
302
+ msgid "Mail form disabled."
303
+ msgstr "Modulo Mail disabilitato."
304
+
305
+ #. Text in function
306
+ #: shariff.php:1
307
+ msgid "Mail form options"
308
+ msgstr "Opzioni modulo Mail"
309
+
310
+ #. Text in function
311
+ #: shariff.php:1
312
+ msgid "Mailform language:"
313
+ msgstr "Lingua modulo Mail:"
314
+
315
+ #. Text in function
316
+ #: shariff.php:1
317
+ msgid "Message:"
318
+ msgstr "messaggio:"
319
+
320
+ #. Text in function
321
+ #: shariff.php:1
322
+ msgid "More information in the FAQ."
323
+ msgstr "Maggiori informazioni all'interno delle FAQ."
324
+
325
+ #. Text in function
326
+ #: shariff.php:1
327
+ msgid "Name"
328
+ msgstr "Nome"
329
+
330
+ #. Text in function
331
+ #: shariff.php:1
332
+ msgid "Not configured"
333
+ msgstr "Non configurato"
334
+
335
+ #. Text in function
336
+ #: shariff.php:1
337
+ msgid "OK"
338
+ msgstr "OK"
339
+
340
+ #. Text in function
341
+ #: shariff.php:1
342
+ msgid "Options"
343
+ msgstr "Opzioni"
344
+
345
+ #. Text in function
346
+ #: shariff.php:1
347
+ msgid "PHP-Version 5.4 or better is needed to enable the statistic functionality."
348
+ msgstr "Per le funzioni statistiche è necessario PHP versione 5.4 o superiore."
349
+
350
+ #. Text in function
351
+ #: shariff.php:1
352
+ msgid "Pages"
353
+ msgstr "Pagine"
354
+
355
+ #. Text in function
356
+ #: shariff.php:1
357
+ msgid "Please check your "
358
+ msgstr "Per favore controlla il tuo "
359
+
360
+ #. Text in function
361
+ #: shariff.php:1
362
+ msgid "Please share this post:"
363
+ msgstr "Per favore condividi questo articolo:"
364
+
365
+ #. Text in function
366
+ #: shariff.php:1
367
+ msgid "Posts"
368
+ msgstr "Articoli"
369
+
370
+ #. Text in function
371
+ #: shariff.php:1
372
+ msgid "Posts (blog page)"
373
+ msgstr "Articoli (pagina del Blog)"
374
+
375
+ #. Text in function
376
+ #: shariff.php:1
377
+ msgid "Reduce button size by 30%."
378
+ msgstr "Riduci i pulsanti del 30%."
379
+
380
+ #. Text in function
381
+ #: shariff.php:1
382
+ msgid "Require sender e-mail address."
383
+ msgstr "Richiesto indirizzo e-mail del mittente."
384
+
385
+ #. Text in function
386
+ #: shariff.php:1
387
+ msgid "Select the desired services in the order you want them to be displayed, where the Shariff buttons should be included automatically and if you want the share counts to be shown."
388
+ msgstr "Selezionare i servizi desiderati nell'ordine in cui si preferisce che siano visualizzati, dove i pulsanti Shariff devono essere inclusi automaticamente e se si desidera che siano visualizzate le statistiche di condivisione (share counts)."
389
+
390
+ #. Text in function
391
+ #: shariff.php:1
392
+ msgid "Sets a custom link for the info button."
393
+ msgstr "Imposta un link personalizzato per il pulsante Info."
394
+
395
+ #. Text in function
396
+ #: shariff.php:1
397
+ msgid "Sets the Flattr username."
398
+ msgstr "Imposta il nome utente Flattr."
399
+
400
+ #. Text in function
401
+ #: shariff.php:1
402
+ msgid "Sets the Twitter via tag."
403
+ msgstr "Imposta l'attributo 'via' di Twitter."
404
+
405
+ #. Text in function
406
+ #: shariff.php:1
407
+ msgid "Settings"
408
+ msgstr "Impostazioni"
409
+
410
+ #. Text in function
411
+ #: shariff.php:1
412
+ msgid "Share this post"
413
+ msgstr "Condividi i contenuti"
414
+
415
+ #. Text in function
416
+ #: shariff.php:1
417
+ msgid "Shariff Help"
418
+ msgstr "Shariff Aiuto"
419
+
420
+ #. Text in function
421
+ #: shariff.php:1
422
+ msgid "Shariff button design:"
423
+ msgstr "Aspetto per i pulsanti Shariff:"
424
+
425
+ #. Text in function
426
+ #: shariff.php:1
427
+ msgid "Shariff button language:"
428
+ msgstr "Lingua per i pulsanti Shariff:"
429
+
430
+ #. Text in function
431
+ #: shariff.php:1
432
+ msgid "Shariff button orientation <b>vertical</b>."
433
+ msgstr "Orientamento dei pulsanti Shariff <u>verticale</u>."
434
+
435
+ #. Text in function
436
+ #: shariff.php:1
437
+ msgid "Shariff-Settings</a> - Flattr was selected, but no username was provided! Please enter your <strong>Flattr username</strong> in the shariff options!"
438
+ msgstr "Impostazioni-Shariff</a> - E' stato selezionato Flattr, ma non è stato fornito alcun nome utente! Per favore inserisci il tuo <b>Nome utente Flattr</b> nelle opzioni Shariff!"
439
+
440
+ #. Text in function
441
+ #: shariff.php:1
442
+ msgid "Shariff-Settings</a> - Mail was split into mailform and mailto. Manual shorttags may need to be adjusted accordingly.\""
443
+ msgstr "Impostazioni-Shariff</a> - La Mail è stata suddivisa in 'mailform' e 'mailto'. Gli Shorttag potrebbero dover essere adeguati di conseguenza."
444
+
445
+ #. Text in function
446
+ #: shariff.php:1
447
+ msgid "Shariff-Settings</a> - Mailform has been selected as a service, but mail form functionality is disabled!"
448
+ msgstr "Impostazioni-Shariff</a> - Il modulo Mail è stato selezionato come servizio, ma la funzionalità del modulo Mail è disabilitata!"
449
+
450
+ #. Text in function
451
+ #: shariff.php:1
452
+ msgid "Small reduces the size of all buttons by 30%, regardless of theme."
453
+ msgstr "'Small' riduce le dimensioni di tutti i pulsanti del 30%, indipendentemente dallo stile selezionato."
454
+
455
+ #. Text in function
456
+ #: shariff.php:1
457
+ msgid "Statistic:"
458
+ msgstr "Statistiche:"
459
+
460
+ #. Text in function
461
+ #: shariff.php:1
462
+ msgid "Status"
463
+ msgstr "Stato"
464
+
465
+ #. Text in function
466
+ #: shariff.php:1
467
+ msgid "Stretch buttons horizontally to full width."
468
+ msgstr "Estendi i pulsanti in orizzontale per tutta la larghezza."
469
+
470
+ #. Text in function
471
+ #: shariff.php:1
472
+ msgid "Support Forum</a>."
473
+ msgstr "Forum di supporto</a>."
474
+
475
+ #. Text in function
476
+ #: shariff.php:1
477
+ msgid "The mail form can be completely disabled, if not needed. Otherwise, it is recommended to configure a default sender e-mail address from <u>your domain</u> that actually exists, to prevent spam filters from blocking the e-mails."
478
+ msgstr "Il modulo mail può essere totalmente disabilitato, se non utilizzato. Viceversa si consiglia di impostare un indirizzo e-mail predefinito per il mittente con il <u>tuo dominio</u> che esista realmente, al fine di prevenire il blocco delle email da parte dei filtri anti-spam."
479
+
480
+ #. Text in function
481
+ #: shariff.php:1
482
+ msgid "The post featured image or the first image of the post.</div>"
483
+ msgstr "l'immagine predefinita dell'articolo o la prima immagine dell'articolo.</div>"
484
+
485
+ #. Text in function
486
+ #: shariff.php:1
487
+ msgid "The title of the current post or page.</div>"
488
+ msgstr "Il titolo dell'articolo o pagina corrente .</div>"
489
+
490
+ #. Text in function
491
+ #: shariff.php:1
492
+ msgid "The url of the current post or page.</div>"
493
+ msgstr "La url dell'articolo o pagina corrente .</div>"
494
+
495
+ #. Text in function
496
+ #: shariff.php:1
497
+ msgid "This configures the advanced options of Shariff regarding specific services. If you are unsure about an option, take a look at the "
498
+ msgstr "Definisce le opzioni avanzate di Shariff in relazione a specifici servizi. In caso di dubbi su un'opzione, consultare la "
499
+
500
+ #. Text in function
501
+ #: shariff.php:1
502
+ msgid "This configures the default design of the Shariff buttons. Most options can be overwritten for single posts or pages with the options within the <code>[shariff]</code> shorttag. For more information have a look at the "
503
+ msgstr "Definisce l'aspetto generale dei pulsanti Shariff. Per i singoli articoli o pagine la maggior parte delle opzioni possono essere sovrascritte tramite lo shortcode <code>[Shariff]</code> ed i relativi attributi. Per maggiori informazioni consultare la "
504
+
505
+ #. Text in function
506
+ #: shariff.php:1
507
+ msgid "Title"
508
+ msgstr "Titolo"
509
+
510
+ #. Text in function
511
+ #: shariff.php:1
512
+ msgid "Tried using the following directory: "
513
+ msgstr "Si è cercato di utilizzare la seguente directory: "
514
+
515
+ #. Text in function
516
+ #: shariff.php:1
517
+ msgid "Twitter username for the via tag:"
518
+ msgstr "Nome utente Twitter tramite l'attributo 'via':"
519
+
520
+ #. Text in function
521
+ #: shariff.php:1
522
+ msgid "Type:"
523
+ msgstr "Tipo:"
524
+
525
+ #. Text in function
526
+ #: shariff.php:1
527
+ msgid "Use the pipe sign | (Alt Gr + &lt; or &#8997; + 7) between two or more services."
528
+ msgstr "Utilizzare il carattere Pipe | (Alt Gr + &lt; or &#8997; + 7) tra due o più servizi."
529
+
530
+ #. Text in function
531
+ #: shariff.php:1
532
+ msgid "Username for Flattr is missing!"
533
+ msgstr "Il nome utente per Flattr è assente!"
534
+
535
+ #. Text in function
536
+ #: shariff.php:1
537
+ msgid "Using the following directory: "
538
+ msgstr "Utilizzo della seguente directory: "
539
+
540
+ #. Text in function
541
+ #: shariff.php:1
542
+ msgid "auto"
543
+ msgstr "auto"
544
+
545
+ #. Text in function
546
+ #: shariff.php:1
547
+ msgid "center"
548
+ msgstr "centrale"
549
+
550
+ #. Text in function
551
+ #: shariff.php:1
552
+ msgid "left"
553
+ msgstr "sinistra"
554
+
555
+ #. Text in function
556
+ #: shariff.php:1
557
+ msgid "right"
558
+ msgstr "destra"
559
+
560
+ #. Text in function
561
+ #: shariff.php:1
562
+ msgid "status section</a>! This will help to speed up the process.</p>"
563
+ msgstr "Sezione 'Stato'</a>! Questo ci permetterà di velocizzare il processo.</p>"
564
+
565
+ #. Text in function
566
+ #: shariff.php:1
567
+ msgid "username"
568
+ msgstr "nome utente"
569
+
570
+ # @ shariff3UU
571
+ #. Text in function
572
+ #: shariff.php:1
573
+ msgid "If you enjoy our plugin, please consider writing a review about it on "
574
+ msgstr "Si vous aimez notre plugin, merci de donner votre avis sur "
575
+
576
+ # @ shariff3UU
577
+ #. Text in function
578
+ #: shariff.php:1
579
+ msgid ". If you want to support us financially, you can donate via "
580
+ msgstr ". Se vuoi sostenerci finanziariamente, è possibile donare tramite "
581
+
582
+ # @ shariff3UU
583
+ #. Text in function
584
+ #: shariff.php:1
585
+ msgid "and"
586
+ msgstr "e"
587
+
588
+ # @ shariff3UU
589
+ #. Text in function
590
+ #: shariff.php:1
591
+ msgid ". Thank you!"
592
+ msgstr ". Grazie!"
593
+
594
+ # @ shariff3UU
595
+ #. Text in function
596
+ #: shariff.php:1
597
+ msgid "PayPal hosted button ID:"
598
+ msgstr "PayPal hosted button ID:"
599
+
600
+ # @ shariff3UU
601
+ #. Text in function
602
+ #: shariff.php:1
603
+ msgid "Patreon username:"
604
+ msgstr "Nome utente Patreon:"
605
+
606
+ # @ shariff3UU
607
+ #. Text in function
608
+ #: shariff.php:1
609
+ msgid "Bitcoin address:"
610
+ msgstr "Indirizzo Bitcoin:"
611
+
612
+ # @ shariff3UU
613
+ #. Text in function
614
+ #: shariff.php:1
615
+ msgid "Shariff-Settings</a> - Patreon was selected, but no username was provided! Please enter your <strong>Patreon username</strong> in the shariff options!"
616
+ msgstr "Impostazioni-Shariff</a> - E' stato selezionato Patreon, ma non è stato fornito alcun nome utente! Per favore inserisci il tuo <b>Nome utente Patreon</b> nelle opzioni Shariff!"
617
+
618
+ # @ shariff3UU
619
+ #. Text in function
620
+ #: shariff.php:1
621
+ msgid "Shariff-Settings</a> - PayPal was selected, but no button ID was provided! Please enter your <strong>Hosted Button ID</strong> in the shariff options!"
622
+ msgstr "Impostazioni-Shariff</a> - E' stato selezionato PayPal, ma non è stato fornito alcun button ID! Per favore inserisci il tuo <b>Hosted-Button-ID</b> nelle opzioni Shariff!"
623
+
624
+ # @ shariff3UU
625
+ #. Text in function
626
+ #: shariff.php:1
627
+ msgid "Shariff-Settings</a> - Bitcoin was selected, but no address was provided! Please enter your <strong>Bitcoin Address</strong> in the shariff options!"
628
+ msgstr "Impostazioni-Shariff</a> - E' stato selezionato Bitcoin, ma non è stato fornito alcun indirizzo! Per favore inserisci il tuo <b>Bitcoin indirizzo</b> nelle opzioni Shariff!"
629
+
630
+ # @ shariff3UU
631
+ #. Text in function
632
+ #: shariff.php:1
633
+ msgid "Username for patreon is missing!"
634
+ msgstr "Il nome utente per Patreon è assente!"
635
+
636
+ # @ shariff3UU
637
+ #. Text in function
638
+ #: shariff.php:1
639
+ msgid "Button ID for PayPal is missing!"
640
+ msgstr "Il Button-ID per PayPal è assente!"
641
+
642
+ # @ shariff3UU
643
+ #. Text in function
644
+ #: shariff.php:1
645
+ msgid "Address for Bitcoin is missing!"
646
+ msgstr "Indirizzo per la Bitcoin è mancante!"
647
+
648
+ # @ shariff3UU
649
+ #. Text in function
650
+ #: shariff.php:1
651
+ msgid "Sets the Patreon username."
652
+ msgstr "Imposta il nome utente Patreon."
653
+
654
+ # @ shariff3UU
655
+ #. Text in function
656
+ #: shariff.php:1
657
+ msgid "Sets the PayPal hosted button ID."
658
+ msgstr "Imposta il PayPal hosted button ID."
659
+
660
+ # @ shariff3UU
661
+ #. Text in function
662
+ #: shariff.php:1
663
+ msgid "Sets the bitcoin address."
664
+ msgstr "Imposta il Bitcoin indirizzo."
665
+
666
+ # @ shariff3UU
667
+ #. Text in function
668
+ #: shariff.php:1
669
+ msgid "bbPress replies"
670
+ msgstr "bbPress risposte"
671
+
672
+ # @ shariff3UU
673
+ #. Text in function
674
+ #: shariff.php:1
675
+ msgid "The GD Library is not installed on this server. This is only needed for the QR codes, if your are using the bitcoin button."
676
+ msgstr "La Biblioteca GD non è installato su questo server. Questo è necessario solo per i codici QR, se si sta usando il tasto bitcoin."
phpqrcode.php ADDED
@@ -0,0 +1,3624 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * PHP QR Code encoder
5
+ *
6
+ * This file contains MERGED version of PHP QR Code library.
7
+ * It was auto-generated from full version for your convenience.
8
+ *
9
+ * This merged version was configured to not require any external files,
10
+ * with disabled cache, error logging and weaker but faster mask matching.
11
+ * If you need tune it up please use non-merged version.
12
+ *
13
+ * For full version, documentation, examples of use please visit:
14
+ *
15
+ * http://phpqrcode.sourceforge.net/
16
+ * https://sourceforge.net/projects/phpqrcode/
17
+ * https://github.com/t0k4rt/phpqrcode
18
+ *
19
+ * PHP QR Code is distributed under LGPL 3
20
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
21
+ *
22
+ * This library is free software; you can redistribute it and/or
23
+ * modify it under the terms of the GNU Lesser General Public
24
+ * License as published by the Free Software Foundation; either
25
+ * version 3 of the License, or any later version.
26
+ *
27
+ * This library is distributed in the hope that it will be useful,
28
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
29
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
30
+ * Lesser General Public License for more details.
31
+ *
32
+ * You should have received a copy of the GNU Lesser General Public
33
+ * License along with this library; if not, write to the Free Software
34
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
35
+ */
36
+
37
+
38
+
39
+ /*
40
+ * Version: 1.1.4
41
+ * Build: 2010100721
42
+ */
43
+
44
+
45
+
46
+ //---- qrconst.php -----------------------------
47
+
48
+
49
+
50
+
51
+
52
+ /*
53
+ * PHP QR Code encoder
54
+ *
55
+ * Common constants
56
+ *
57
+ * Based on libqrencode C library distributed under LGPL 2.1
58
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
59
+ *
60
+ * PHP QR Code is distributed under LGPL 3
61
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
62
+ *
63
+ * This library is free software; you can redistribute it and/or
64
+ * modify it under the terms of the GNU Lesser General Public
65
+ * License as published by the Free Software Foundation; either
66
+ * version 3 of the License, or any later version.
67
+ *
68
+ * This library is distributed in the hope that it will be useful,
69
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
70
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
71
+ * Lesser General Public License for more details.
72
+ *
73
+ * You should have received a copy of the GNU Lesser General Public
74
+ * License along with this library; if not, write to the Free Software
75
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
76
+ */
77
+
78
+ // Encoding modes
79
+
80
+ define('QR_MODE_NUL', -1);
81
+ define('QR_MODE_NUM', 0);
82
+ define('QR_MODE_AN', 1);
83
+ define('QR_MODE_8', 2);
84
+ define('QR_MODE_KANJI', 3);
85
+ define('QR_MODE_STRUCTURE', 4);
86
+
87
+ // Levels of error correction.
88
+
89
+ define('QR_ECLEVEL_L', 0);
90
+ define('QR_ECLEVEL_M', 1);
91
+ define('QR_ECLEVEL_Q', 2);
92
+ define('QR_ECLEVEL_H', 3);
93
+
94
+ // Supported output formats
95
+
96
+ define('QR_FORMAT_TEXT', 0);
97
+ define('QR_FORMAT_PNG', 1);
98
+
99
+ class qrstr {
100
+ public static function set(&$srctab, $x, $y, $repl, $replLen = false) {
101
+ $srctab[$y] = substr_replace($srctab[$y], ($replLen !== false)?substr($repl,0,$replLen):$repl, $x, ($replLen !== false)?$replLen:strlen($repl));
102
+ }
103
+ }
104
+
105
+
106
+
107
+ //---- merged_config.php -----------------------------
108
+
109
+
110
+
111
+
112
+ /*
113
+ * PHP QR Code encoder
114
+ *
115
+ * Config file, tuned-up for merged verion
116
+ */
117
+
118
+ define('QR_CACHEABLE', false); // use cache - more disk reads but less CPU power, masks and format templates are stored there
119
+ define('QR_CACHE_DIR', false); // used when QR_CACHEABLE === true
120
+ define('QR_LOG_DIR', false); // default error logs dir
121
+
122
+ define('QR_FIND_BEST_MASK', true); // if true, estimates best mask (spec. default, but extremally slow; set to false to significant performance boost but (propably) worst quality code
123
+ define('QR_FIND_FROM_RANDOM', 2); // if false, checks all masks available, otherwise value tells count of masks need to be checked, mask id are got randomly
124
+ define('QR_DEFAULT_MASK', 2); // when QR_FIND_BEST_MASK === false
125
+
126
+ define('QR_PNG_MAXIMUM_SIZE', 1024); // maximum allowed png image width (in pixels), tune to make sure GD and PHP can handle such big images
127
+
128
+
129
+
130
+
131
+ //---- qrtools.php -----------------------------
132
+
133
+
134
+
135
+
136
+ /*
137
+ * PHP QR Code encoder
138
+ *
139
+ * Toolset, handy and debug utilites.
140
+ *
141
+ * PHP QR Code is distributed under LGPL 3
142
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
143
+ *
144
+ * This library is free software; you can redistribute it and/or
145
+ * modify it under the terms of the GNU Lesser General Public
146
+ * License as published by the Free Software Foundation; either
147
+ * version 3 of the License, or any later version.
148
+ *
149
+ * This library is distributed in the hope that it will be useful,
150
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
151
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
152
+ * Lesser General Public License for more details.
153
+ *
154
+ * You should have received a copy of the GNU Lesser General Public
155
+ * License along with this library; if not, write to the Free Software
156
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
157
+ */
158
+
159
+ class QRtools {
160
+
161
+ //----------------------------------------------------------------------
162
+ public static function binarize($frame)
163
+ {
164
+ $len = count($frame);
165
+ foreach ($frame as &$frameLine) {
166
+
167
+ for($i=0; $i<$len; $i++) {
168
+ $frameLine[$i] = (ord($frameLine[$i])&1)?'1':'0';
169
+ }
170
+ }
171
+
172
+ return $frame;
173
+ }
174
+
175
+ //----------------------------------------------------------------------
176
+ public static function tcpdfBarcodeArray($code, $mode = 'QR,L', $tcPdfVersion = '4.5.037')
177
+ {
178
+ $barcode_array = array();
179
+
180
+ if (!is_array($mode))
181
+ $mode = explode(',', $mode);
182
+
183
+ $eccLevel = 'L';
184
+
185
+ if (count($mode) > 1) {
186
+ $eccLevel = $mode[1];
187
+ }
188
+
189
+ $qrTab = QRcode::text($code, false, $eccLevel);
190
+ $size = count($qrTab);
191
+
192
+ $barcode_array['num_rows'] = $size;
193
+ $barcode_array['num_cols'] = $size;
194
+ $barcode_array['bcode'] = array();
195
+
196
+ foreach ($qrTab as $line) {
197
+ $arrAdd = array();
198
+ foreach(str_split($line) as $char)
199
+ $arrAdd[] = ($char=='1')?1:0;
200
+ $barcode_array['bcode'][] = $arrAdd;
201
+ }
202
+
203
+ return $barcode_array;
204
+ }
205
+
206
+ //----------------------------------------------------------------------
207
+ public static function clearCache()
208
+ {
209
+ self::$frames = array();
210
+ }
211
+
212
+ //----------------------------------------------------------------------
213
+ public static function buildCache()
214
+ {
215
+ QRtools::markTime('before_build_cache');
216
+
217
+ $mask = new QRmask();
218
+ for ($a=1; $a <= QRSPEC_VERSION_MAX; $a++) {
219
+ $frame = QRspec::newFrame($a);
220
+ if (QR_IMAGE) {
221
+ $fileName = QR_CACHE_DIR.'frame_'.$a.'.png';
222
+ QRimage::png(self::binarize($frame), $fileName, 1, 0);
223
+ }
224
+
225
+ $width = count($frame);
226
+ $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
227
+ for ($maskNo=0; $maskNo<8; $maskNo++)
228
+ $mask->makeMaskNo($maskNo, $width, $frame, $bitMask, true);
229
+ }
230
+
231
+ QRtools::markTime('after_build_cache');
232
+ }
233
+
234
+ //----------------------------------------------------------------------
235
+ public static function log($outfile, $err)
236
+ {
237
+ if (QR_LOG_DIR !== false) {
238
+ if ($err != '') {
239
+ if ($outfile !== false) {
240
+ file_put_contents(QR_LOG_DIR.basename($outfile).'-errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
241
+ } else {
242
+ file_put_contents(QR_LOG_DIR.'errors.txt', date('Y-m-d H:i:s').': '.$err, FILE_APPEND);
243
+ }
244
+ }
245
+ }
246
+ }
247
+
248
+ //----------------------------------------------------------------------
249
+ public static function dumpMask($frame)
250
+ {
251
+ $width = count($frame);
252
+ for($y=0;$y<$width;$y++) {
253
+ for($x=0;$x<$width;$x++) {
254
+ echo ord($frame[$y][$x]).',';
255
+ }
256
+ }
257
+ }
258
+
259
+ //----------------------------------------------------------------------
260
+ public static function markTime($markerId)
261
+ {
262
+ list($usec, $sec) = explode(" ", microtime());
263
+ $time = ((float)$usec + (float)$sec);
264
+
265
+ if (!isset($GLOBALS['qr_time_bench']))
266
+ $GLOBALS['qr_time_bench'] = array();
267
+
268
+ $GLOBALS['qr_time_bench'][$markerId] = $time;
269
+ }
270
+
271
+ //----------------------------------------------------------------------
272
+ public static function timeBenchmark()
273
+ {
274
+ self::markTime('finish');
275
+
276
+ $lastTime = 0;
277
+ $startTime = 0;
278
+ $p = 0;
279
+
280
+ echo '<table cellpadding="3" cellspacing="1">
281
+ <thead><tr style="border-bottom:1px solid silver"><td colspan="2" style="text-align:center">BENCHMARK</td></tr></thead>
282
+ <tbody>';
283
+
284
+ foreach($GLOBALS['qr_time_bench'] as $markerId=>$thisTime) {
285
+ if ($p > 0) {
286
+ echo '<tr><th style="text-align:right">till '.$markerId.': </th><td>'.number_format($thisTime-$lastTime, 6).'s</td></tr>';
287
+ } else {
288
+ $startTime = $thisTime;
289
+ }
290
+
291
+ $p++;
292
+ $lastTime = $thisTime;
293
+ }
294
+
295
+ echo '</tbody><tfoot>
296
+ <tr style="border-top:2px solid black"><th style="text-align:right">TOTAL: </th><td>'.number_format($lastTime-$startTime, 6).'s</td></tr>
297
+ </tfoot>
298
+ </table>';
299
+ }
300
+
301
+ public static function save($content, $filename_path)
302
+ {
303
+ try {
304
+ $handle = fopen($filename_path, "w");
305
+ fwrite($handle, $content);
306
+ fclose($handle);
307
+ return true;
308
+ } catch (Exception $e) {
309
+ echo 'Exception reçue : ', $e->getMessage(), "\n";
310
+ }
311
+
312
+ }
313
+
314
+ }
315
+
316
+ //##########################################################################
317
+
318
+ QRtools::markTime('start');
319
+
320
+
321
+
322
+
323
+ //---- qrspec.php -----------------------------
324
+
325
+
326
+
327
+
328
+ /*
329
+ * PHP QR Code encoder
330
+ *
331
+ * QR Code specifications
332
+ *
333
+ * Based on libqrencode C library distributed under LGPL 2.1
334
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
335
+ *
336
+ * PHP QR Code is distributed under LGPL 3
337
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
338
+ *
339
+ * The following data / specifications are taken from
340
+ * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004)
341
+ * or
342
+ * "Automatic identification and data capture techniques --
343
+ * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006)
344
+ *
345
+ * This library is free software; you can redistribute it and/or
346
+ * modify it under the terms of the GNU Lesser General Public
347
+ * License as published by the Free Software Foundation; either
348
+ * version 3 of the License, or any later version.
349
+ *
350
+ * This library is distributed in the hope that it will be useful,
351
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
352
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
353
+ * Lesser General Public License for more details.
354
+ *
355
+ * You should have received a copy of the GNU Lesser General Public
356
+ * License along with this library; if not, write to the Free Software
357
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
358
+ */
359
+
360
+ define('QRSPEC_VERSION_MAX', 40);
361
+ define('QRSPEC_WIDTH_MAX', 177);
362
+
363
+ define('QRCAP_WIDTH', 0);
364
+ define('QRCAP_WORDS', 1);
365
+ define('QRCAP_REMINDER', 2);
366
+ define('QRCAP_EC', 3);
367
+
368
+ class QRspec {
369
+
370
+ public static $capacity = array(
371
+ array( 0, 0, 0, array( 0, 0, 0, 0)),
372
+ array( 21, 26, 0, array( 7, 10, 13, 17)), // 1
373
+ array( 25, 44, 7, array( 10, 16, 22, 28)),
374
+ array( 29, 70, 7, array( 15, 26, 36, 44)),
375
+ array( 33, 100, 7, array( 20, 36, 52, 64)),
376
+ array( 37, 134, 7, array( 26, 48, 72, 88)), // 5
377
+ array( 41, 172, 7, array( 36, 64, 96, 112)),
378
+ array( 45, 196, 0, array( 40, 72, 108, 130)),
379
+ array( 49, 242, 0, array( 48, 88, 132, 156)),
380
+ array( 53, 292, 0, array( 60, 110, 160, 192)),
381
+ array( 57, 346, 0, array( 72, 130, 192, 224)), //10
382
+ array( 61, 404, 0, array( 80, 150, 224, 264)),
383
+ array( 65, 466, 0, array( 96, 176, 260, 308)),
384
+ array( 69, 532, 0, array( 104, 198, 288, 352)),
385
+ array( 73, 581, 3, array( 120, 216, 320, 384)),
386
+ array( 77, 655, 3, array( 132, 240, 360, 432)), //15
387
+ array( 81, 733, 3, array( 144, 280, 408, 480)),
388
+ array( 85, 815, 3, array( 168, 308, 448, 532)),
389
+ array( 89, 901, 3, array( 180, 338, 504, 588)),
390
+ array( 93, 991, 3, array( 196, 364, 546, 650)),
391
+ array( 97, 1085, 3, array( 224, 416, 600, 700)), //20
392
+ array(101, 1156, 4, array( 224, 442, 644, 750)),
393
+ array(105, 1258, 4, array( 252, 476, 690, 816)),
394
+ array(109, 1364, 4, array( 270, 504, 750, 900)),
395
+ array(113, 1474, 4, array( 300, 560, 810, 960)),
396
+ array(117, 1588, 4, array( 312, 588, 870, 1050)), //25
397
+ array(121, 1706, 4, array( 336, 644, 952, 1110)),
398
+ array(125, 1828, 4, array( 360, 700, 1020, 1200)),
399
+ array(129, 1921, 3, array( 390, 728, 1050, 1260)),
400
+ array(133, 2051, 3, array( 420, 784, 1140, 1350)),
401
+ array(137, 2185, 3, array( 450, 812, 1200, 1440)), //30
402
+ array(141, 2323, 3, array( 480, 868, 1290, 1530)),
403
+ array(145, 2465, 3, array( 510, 924, 1350, 1620)),
404
+ array(149, 2611, 3, array( 540, 980, 1440, 1710)),
405
+ array(153, 2761, 3, array( 570, 1036, 1530, 1800)),
406
+ array(157, 2876, 0, array( 570, 1064, 1590, 1890)), //35
407
+ array(161, 3034, 0, array( 600, 1120, 1680, 1980)),
408
+ array(165, 3196, 0, array( 630, 1204, 1770, 2100)),
409
+ array(169, 3362, 0, array( 660, 1260, 1860, 2220)),
410
+ array(173, 3532, 0, array( 720, 1316, 1950, 2310)),
411
+ array(177, 3706, 0, array( 750, 1372, 2040, 2430)) //40
412
+ );
413
+
414
+ //----------------------------------------------------------------------
415
+ public static function getDataLength($version, $level)
416
+ {
417
+ return self::$capacity[$version][QRCAP_WORDS] - self::$capacity[$version][QRCAP_EC][$level];
418
+ }
419
+
420
+ //----------------------------------------------------------------------
421
+ public static function getECCLength($version, $level)
422
+ {
423
+ return self::$capacity[$version][QRCAP_EC][$level];
424
+ }
425
+
426
+ //----------------------------------------------------------------------
427
+ public static function getWidth($version)
428
+ {
429
+ return self::$capacity[$version][QRCAP_WIDTH];
430
+ }
431
+
432
+ //----------------------------------------------------------------------
433
+ public static function getRemainder($version)
434
+ {
435
+ return self::$capacity[$version][QRCAP_REMINDER];
436
+ }
437
+
438
+ //----------------------------------------------------------------------
439
+ public static function getMinimumVersion($size, $level)
440
+ {
441
+
442
+ for($i=1; $i<= QRSPEC_VERSION_MAX; $i++) {
443
+ $words = self::$capacity[$i][QRCAP_WORDS] - self::$capacity[$i][QRCAP_EC][$level];
444
+ if($words >= $size)
445
+ return $i;
446
+ }
447
+
448
+ return -1;
449
+ }
450
+
451
+ //######################################################################
452
+
453
+ public static $lengthTableBits = array(
454
+ array(10, 12, 14),
455
+ array( 9, 11, 13),
456
+ array( 8, 16, 16),
457
+ array( 8, 10, 12)
458
+ );
459
+
460
+ //----------------------------------------------------------------------
461
+ public static function lengthIndicator($mode, $version)
462
+ {
463
+ if ($mode == QR_MODE_STRUCTURE)
464
+ return 0;
465
+
466
+ if ($version <= 9) {
467
+ $l = 0;
468
+ } else if ($version <= 26) {
469
+ $l = 1;
470
+ } else {
471
+ $l = 2;
472
+ }
473
+
474
+ return self::$lengthTableBits[$mode][$l];
475
+ }
476
+
477
+ //----------------------------------------------------------------------
478
+ public static function maximumWords($mode, $version)
479
+ {
480
+ if($mode == QR_MODE_STRUCTURE)
481
+ return 3;
482
+
483
+ if($version <= 9) {
484
+ $l = 0;
485
+ } else if($version <= 26) {
486
+ $l = 1;
487
+ } else {
488
+ $l = 2;
489
+ }
490
+
491
+ $bits = self::$lengthTableBits[$mode][$l];
492
+ $words = (1 << $bits) - 1;
493
+
494
+ if($mode == QR_MODE_KANJI) {
495
+ $words *= 2; // the number of bytes is required
496
+ }
497
+
498
+ return $words;
499
+ }
500
+
501
+ // Error correction code -----------------------------------------------
502
+ // Table of the error correction code (Reed-Solomon block)
503
+ // See Table 12-16 (pp.30-36), JIS X0510:2004.
504
+
505
+ public static $eccTable = array(
506
+ array(array( 0, 0), array( 0, 0), array( 0, 0), array( 0, 0)),
507
+ array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)), // 1
508
+ array(array( 1, 0), array( 1, 0), array( 1, 0), array( 1, 0)),
509
+ array(array( 1, 0), array( 1, 0), array( 2, 0), array( 2, 0)),
510
+ array(array( 1, 0), array( 2, 0), array( 2, 0), array( 4, 0)),
511
+ array(array( 1, 0), array( 2, 0), array( 2, 2), array( 2, 2)), // 5
512
+ array(array( 2, 0), array( 4, 0), array( 4, 0), array( 4, 0)),
513
+ array(array( 2, 0), array( 4, 0), array( 2, 4), array( 4, 1)),
514
+ array(array( 2, 0), array( 2, 2), array( 4, 2), array( 4, 2)),
515
+ array(array( 2, 0), array( 3, 2), array( 4, 4), array( 4, 4)),
516
+ array(array( 2, 2), array( 4, 1), array( 6, 2), array( 6, 2)), //10
517
+ array(array( 4, 0), array( 1, 4), array( 4, 4), array( 3, 8)),
518
+ array(array( 2, 2), array( 6, 2), array( 4, 6), array( 7, 4)),
519
+ array(array( 4, 0), array( 8, 1), array( 8, 4), array(12, 4)),
520
+ array(array( 3, 1), array( 4, 5), array(11, 5), array(11, 5)),
521
+ array(array( 5, 1), array( 5, 5), array( 5, 7), array(11, 7)), //15
522
+ array(array( 5, 1), array( 7, 3), array(15, 2), array( 3, 13)),
523
+ array(array( 1, 5), array(10, 1), array( 1, 15), array( 2, 17)),
524
+ array(array( 5, 1), array( 9, 4), array(17, 1), array( 2, 19)),
525
+ array(array( 3, 4), array( 3, 11), array(17, 4), array( 9, 16)),
526
+ array(array( 3, 5), array( 3, 13), array(15, 5), array(15, 10)), //20
527
+ array(array( 4, 4), array(17, 0), array(17, 6), array(19, 6)),
528
+ array(array( 2, 7), array(17, 0), array( 7, 16), array(34, 0)),
529
+ array(array( 4, 5), array( 4, 14), array(11, 14), array(16, 14)),
530
+ array(array( 6, 4), array( 6, 14), array(11, 16), array(30, 2)),
531
+ array(array( 8, 4), array( 8, 13), array( 7, 22), array(22, 13)), //25
532
+ array(array(10, 2), array(19, 4), array(28, 6), array(33, 4)),
533
+ array(array( 8, 4), array(22, 3), array( 8, 26), array(12, 28)),
534
+ array(array( 3, 10), array( 3, 23), array( 4, 31), array(11, 31)),
535
+ array(array( 7, 7), array(21, 7), array( 1, 37), array(19, 26)),
536
+ array(array( 5, 10), array(19, 10), array(15, 25), array(23, 25)), //30
537
+ array(array(13, 3), array( 2, 29), array(42, 1), array(23, 28)),
538
+ array(array(17, 0), array(10, 23), array(10, 35), array(19, 35)),
539
+ array(array(17, 1), array(14, 21), array(29, 19), array(11, 46)),
540
+ array(array(13, 6), array(14, 23), array(44, 7), array(59, 1)),
541
+ array(array(12, 7), array(12, 26), array(39, 14), array(22, 41)), //35
542
+ array(array( 6, 14), array( 6, 34), array(46, 10), array( 2, 64)),
543
+ array(array(17, 4), array(29, 14), array(49, 10), array(24, 46)),
544
+ array(array( 4, 18), array(13, 32), array(48, 14), array(42, 32)),
545
+ array(array(20, 4), array(40, 7), array(43, 22), array(10, 67)),
546
+ array(array(19, 6), array(18, 31), array(34, 34), array(20, 61)),//40
547
+ );
548
+
549
+ //----------------------------------------------------------------------
550
+ // CACHEABLE!!!
551
+
552
+ public static function getEccSpec($version, $level, array &$spec)
553
+ {
554
+ if (count($spec) < 5) {
555
+ $spec = array(0,0,0,0,0);
556
+ }
557
+
558
+ $b1 = self::$eccTable[$version][$level][0];
559
+ $b2 = self::$eccTable[$version][$level][1];
560
+ $data = self::getDataLength($version, $level);
561
+ $ecc = self::getECCLength($version, $level);
562
+
563
+ if($b2 == 0) {
564
+ $spec[0] = $b1;
565
+ $spec[1] = (int)($data / $b1);
566
+ $spec[2] = (int)($ecc / $b1);
567
+ $spec[3] = 0;
568
+ $spec[4] = 0;
569
+ } else {
570
+ $spec[0] = $b1;
571
+ $spec[1] = (int)($data / ($b1 + $b2));
572
+ $spec[2] = (int)($ecc / ($b1 + $b2));
573
+ $spec[3] = $b2;
574
+ $spec[4] = $spec[1] + 1;
575
+ }
576
+ }
577
+
578
+ // Alignment pattern ---------------------------------------------------
579
+
580
+ // Positions of alignment patterns.
581
+ // This array includes only the second and the third position of the
582
+ // alignment patterns. Rest of them can be calculated from the distance
583
+ // between them.
584
+
585
+ // See Table 1 in Appendix E (pp.71) of JIS X0510:2004.
586
+
587
+ public static $alignmentPattern = array(
588
+ array( 0, 0),
589
+ array( 0, 0), array(18, 0), array(22, 0), array(26, 0), array(30, 0), // 1- 5
590
+ array(34, 0), array(22, 38), array(24, 42), array(26, 46), array(28, 50), // 6-10
591
+ array(30, 54), array(32, 58), array(34, 62), array(26, 46), array(26, 48), //11-15
592
+ array(26, 50), array(30, 54), array(30, 56), array(30, 58), array(34, 62), //16-20
593
+ array(28, 50), array(26, 50), array(30, 54), array(28, 54), array(32, 58), //21-25
594
+ array(30, 58), array(34, 62), array(26, 50), array(30, 54), array(26, 52), //26-30
595
+ array(30, 56), array(34, 60), array(30, 58), array(34, 62), array(30, 54), //31-35
596
+ array(24, 50), array(28, 54), array(32, 58), array(26, 54), array(30, 58), //35-40
597
+ );
598
+
599
+
600
+ /** --------------------------------------------------------------------
601
+ * Put an alignment marker.
602
+ * @param frame
603
+ * @param width
604
+ * @param ox,oy center coordinate of the pattern
605
+ */
606
+ public static function putAlignmentMarker(array &$frame, $ox, $oy)
607
+ {
608
+ $finder = array(
609
+ "\xa1\xa1\xa1\xa1\xa1",
610
+ "\xa1\xa0\xa0\xa0\xa1",
611
+ "\xa1\xa0\xa1\xa0\xa1",
612
+ "\xa1\xa0\xa0\xa0\xa1",
613
+ "\xa1\xa1\xa1\xa1\xa1"
614
+ );
615
+
616
+ $yStart = $oy-2;
617
+ $xStart = $ox-2;
618
+
619
+ for($y=0; $y<5; $y++) {
620
+ QRstr::set($frame, $xStart, $yStart+$y, $finder[$y]);
621
+ }
622
+ }
623
+
624
+ //----------------------------------------------------------------------
625
+ public static function putAlignmentPattern($version, &$frame, $width)
626
+ {
627
+ if($version < 2)
628
+ return;
629
+
630
+ $d = self::$alignmentPattern[$version][1] - self::$alignmentPattern[$version][0];
631
+ if($d < 0) {
632
+ $w = 2;
633
+ } else {
634
+ $w = (int)(($width - self::$alignmentPattern[$version][0]) / $d + 2);
635
+ }
636
+
637
+ if($w * $w - 3 == 1) {
638
+ $x = self::$alignmentPattern[$version][0];
639
+ $y = self::$alignmentPattern[$version][0];
640
+ self::putAlignmentMarker($frame, $x, $y);
641
+ return;
642
+ }
643
+
644
+ $cx = self::$alignmentPattern[$version][0];
645
+ for($x=1; $x<$w - 1; $x++) {
646
+ self::putAlignmentMarker($frame, 6, $cx);
647
+ self::putAlignmentMarker($frame, $cx, 6);
648
+ $cx += $d;
649
+ }
650
+
651
+ $cy = self::$alignmentPattern[$version][0];
652
+ for($y=0; $y<$w-1; $y++) {
653
+ $cx = self::$alignmentPattern[$version][0];
654
+ for($x=0; $x<$w-1; $x++) {
655
+ self::putAlignmentMarker($frame, $cx, $cy);
656
+ $cx += $d;
657
+ }
658
+ $cy += $d;
659
+ }
660
+ }
661
+
662
+ // Version information pattern -----------------------------------------
663
+
664
+ // Version information pattern (BCH coded).
665
+ // See Table 1 in Appendix D (pp.68) of JIS X0510:2004.
666
+
667
+ // size: [QRSPEC_VERSION_MAX - 6]
668
+
669
+ public static $versionPattern = array(
670
+ 0x07c94, 0x085bc, 0x09a99, 0x0a4d3, 0x0bbf6, 0x0c762, 0x0d847, 0x0e60d,
671
+ 0x0f928, 0x10b78, 0x1145d, 0x12a17, 0x13532, 0x149a6, 0x15683, 0x168c9,
672
+ 0x177ec, 0x18ec4, 0x191e1, 0x1afab, 0x1b08e, 0x1cc1a, 0x1d33f, 0x1ed75,
673
+ 0x1f250, 0x209d5, 0x216f0, 0x228ba, 0x2379f, 0x24b0b, 0x2542e, 0x26a64,
674
+ 0x27541, 0x28c69
675
+ );
676
+
677
+ //----------------------------------------------------------------------
678
+ public static function getVersionPattern($version)
679
+ {
680
+ if($version < 7 || $version > QRSPEC_VERSION_MAX)
681
+ return 0;
682
+
683
+ return self::$versionPattern[$version -7];
684
+ }
685
+
686
+ // Format information --------------------------------------------------
687
+ // See calcFormatInfo in tests/test_qrspec.c (orginal qrencode c lib)
688
+
689
+ public static $formatInfo = array(
690
+ array(0x77c4, 0x72f3, 0x7daa, 0x789d, 0x662f, 0x6318, 0x6c41, 0x6976),
691
+ array(0x5412, 0x5125, 0x5e7c, 0x5b4b, 0x45f9, 0x40ce, 0x4f97, 0x4aa0),
692
+ array(0x355f, 0x3068, 0x3f31, 0x3a06, 0x24b4, 0x2183, 0x2eda, 0x2bed),
693
+ array(0x1689, 0x13be, 0x1ce7, 0x19d0, 0x0762, 0x0255, 0x0d0c, 0x083b)
694
+ );
695
+
696
+ public static function getFormatInfo($mask, $level)
697
+ {
698
+ if($mask < 0 || $mask > 7)
699
+ return 0;
700
+
701
+ if($level < 0 || $level > 3)
702
+ return 0;
703
+
704
+ return self::$formatInfo[$level][$mask];
705
+ }
706
+
707
+ // Frame ---------------------------------------------------------------
708
+ // Cache of initial frames.
709
+
710
+ public static $frames = array();
711
+
712
+ /** --------------------------------------------------------------------
713
+ * Put a finder pattern.
714
+ * @param frame
715
+ * @param width
716
+ * @param ox,oy upper-left coordinate of the pattern
717
+ */
718
+ public static function putFinderPattern(&$frame, $ox, $oy)
719
+ {
720
+ $finder = array(
721
+ "\xc1\xc1\xc1\xc1\xc1\xc1\xc1",
722
+ "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
723
+ "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
724
+ "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
725
+ "\xc1\xc0\xc1\xc1\xc1\xc0\xc1",
726
+ "\xc1\xc0\xc0\xc0\xc0\xc0\xc1",
727
+ "\xc1\xc1\xc1\xc1\xc1\xc1\xc1"
728
+ );
729
+
730
+ for($y=0; $y<7; $y++) {
731
+ QRstr::set($frame, $ox, $oy+$y, $finder[$y]);
732
+ }
733
+ }
734
+
735
+ //----------------------------------------------------------------------
736
+ public static function createFrame($version)
737
+ {
738
+ $width = self::$capacity[$version][QRCAP_WIDTH];
739
+ $frameLine = str_repeat ("\0", $width);
740
+ $frame = array_fill(0, $width, $frameLine);
741
+
742
+ // Finder pattern
743
+ self::putFinderPattern($frame, 0, 0);
744
+ self::putFinderPattern($frame, $width - 7, 0);
745
+ self::putFinderPattern($frame, 0, $width - 7);
746
+
747
+ // Separator
748
+ $yOffset = $width - 7;
749
+
750
+ for($y=0; $y<7; $y++) {
751
+ $frame[$y][7] = "\xc0";
752
+ $frame[$y][$width - 8] = "\xc0";
753
+ $frame[$yOffset][7] = "\xc0";
754
+ $yOffset++;
755
+ }
756
+
757
+ $setPattern = str_repeat("\xc0", 8);
758
+
759
+ QRstr::set($frame, 0, 7, $setPattern);
760
+ QRstr::set($frame, $width-8, 7, $setPattern);
761
+ QRstr::set($frame, 0, $width - 8, $setPattern);
762
+
763
+ // Format info
764
+ $setPattern = str_repeat("\x84", 9);
765
+ QRstr::set($frame, 0, 8, $setPattern);
766
+ QRstr::set($frame, $width - 8, 8, $setPattern, 8);
767
+
768
+ $yOffset = $width - 8;
769
+
770
+ for($y=0; $y<8; $y++,$yOffset++) {
771
+ $frame[$y][8] = "\x84";
772
+ $frame[$yOffset][8] = "\x84";
773
+ }
774
+
775
+ // Timing pattern
776
+
777
+ for($i=1; $i<$width-15; $i++) {
778
+ $frame[6][7+$i] = chr(0x90 | ($i & 1));
779
+ $frame[7+$i][6] = chr(0x90 | ($i & 1));
780
+ }
781
+
782
+ // Alignment pattern
783
+ self::putAlignmentPattern($version, $frame, $width);
784
+
785
+ // Version information
786
+ if($version >= 7) {
787
+ $vinf = self::getVersionPattern($version);
788
+
789
+ $v = $vinf;
790
+
791
+ for($x=0; $x<6; $x++) {
792
+ for($y=0; $y<3; $y++) {
793
+ $frame[($width - 11)+$y][$x] = chr(0x88 | ($v & 1));
794
+ $v = $v >> 1;
795
+ }
796
+ }
797
+
798
+ $v = $vinf;
799
+ for($y=0; $y<6; $y++) {
800
+ for($x=0; $x<3; $x++) {
801
+ $frame[$y][$x+($width - 11)] = chr(0x88 | ($v & 1));
802
+ $v = $v >> 1;
803
+ }
804
+ }
805
+ }
806
+
807
+ // and a little bit...
808
+ $frame[$width - 8][8] = "\x81";
809
+
810
+ return $frame;
811
+ }
812
+
813
+ //----------------------------------------------------------------------
814
+ public static function debug($frame, $binary_mode = false)
815
+ {
816
+ if ($binary_mode) {
817
+
818
+ foreach ($frame as &$frameLine) {
819
+ $frameLine = join('<span class="m">&nbsp;&nbsp;</span>', explode('0', $frameLine));
820
+ $frameLine = join('&#9608;&#9608;', explode('1', $frameLine));
821
+ }
822
+
823
+ ?>
824
+ <style>
825
+ .m { background-color: white; }
826
+ </style>
827
+ <?php
828
+ echo '<pre><tt><br/ ><br/ ><br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
829
+ echo join("<br/ >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;", $frame);
830
+ echo '</tt></pre><br/ ><br/ ><br/ ><br/ ><br/ ><br/ >';
831
+
832
+ } else {
833
+
834
+ foreach ($frame as &$frameLine) {
835
+ $frameLine = join('<span class="m">&nbsp;</span>', explode("\xc0", $frameLine));
836
+ $frameLine = join('<span class="m">&#9618;</span>', explode("\xc1", $frameLine));
837
+ $frameLine = join('<span class="p">&nbsp;</span>', explode("\xa0", $frameLine));
838
+ $frameLine = join('<span class="p">&#9618;</span>', explode("\xa1", $frameLine));
839
+ $frameLine = join('<span class="s">&#9671;</span>', explode("\x84", $frameLine)); //format 0
840
+ $frameLine = join('<span class="s">&#9670;</span>', explode("\x85", $frameLine)); //format 1
841
+ $frameLine = join('<span class="x">&#9762;</span>', explode("\x81", $frameLine)); //special bit
842
+ $frameLine = join('<span class="c">&nbsp;</span>', explode("\x90", $frameLine)); //clock 0
843
+ $frameLine = join('<span class="c">&#9719;</span>', explode("\x91", $frameLine)); //clock 1
844
+ $frameLine = join('<span class="f">&nbsp;</span>', explode("\x88", $frameLine)); //version
845
+ $frameLine = join('<span class="f">&#9618;</span>', explode("\x89", $frameLine)); //version
846
+ $frameLine = join('&#9830;', explode("\x01", $frameLine));
847
+ $frameLine = join('&#8901;', explode("\0", $frameLine));
848
+ }
849
+
850
+ ?>
851
+ <style>
852
+ .p { background-color: yellow; }
853
+ .m { background-color: #00FF00; }
854
+ .s { background-color: #FF0000; }
855
+ .c { background-color: aqua; }
856
+ .x { background-color: pink; }
857
+ .f { background-color: gold; }
858
+ </style>
859
+ <?php
860
+ echo "<pre><tt>";
861
+ echo join("<br/ >", $frame);
862
+ echo "</tt></pre>";
863
+
864
+ }
865
+ }
866
+
867
+ //----------------------------------------------------------------------
868
+ public static function serial($frame)
869
+ {
870
+ return gzcompress(join("\n", $frame), 9);
871
+ }
872
+
873
+ //----------------------------------------------------------------------
874
+ public static function unserial($code)
875
+ {
876
+ return explode("\n", gzuncompress($code));
877
+ }
878
+
879
+ //----------------------------------------------------------------------
880
+ public static function newFrame($version)
881
+ {
882
+ if($version < 1 || $version > QRSPEC_VERSION_MAX)
883
+ return null;
884
+
885
+ if(!isset(self::$frames[$version])) {
886
+
887
+ $fileName = QR_CACHE_DIR.'frame_'.$version.'.dat';
888
+
889
+ if (QR_CACHEABLE) {
890
+ if (file_exists($fileName)) {
891
+ self::$frames[$version] = self::unserial(file_get_contents($fileName));
892
+ } else {
893
+ self::$frames[$version] = self::createFrame($version);
894
+ file_put_contents($fileName, self::serial(self::$frames[$version]));
895
+ }
896
+ } else {
897
+ self::$frames[$version] = self::createFrame($version);
898
+ }
899
+ }
900
+
901
+ if(is_null(self::$frames[$version]))
902
+ return null;
903
+
904
+ return self::$frames[$version];
905
+ }
906
+
907
+ //----------------------------------------------------------------------
908
+ public static function rsBlockNum($spec) { return $spec[0] + $spec[3]; }
909
+ public static function rsBlockNum1($spec) { return $spec[0]; }
910
+ public static function rsDataCodes1($spec) { return $spec[1]; }
911
+ public static function rsEccCodes1($spec) { return $spec[2]; }
912
+ public static function rsBlockNum2($spec) { return $spec[3]; }
913
+ public static function rsDataCodes2($spec) { return $spec[4]; }
914
+ public static function rsEccCodes2($spec) { return $spec[2]; }
915
+ public static function rsDataLength($spec) { return ($spec[0] * $spec[1]) + ($spec[3] * $spec[4]); }
916
+ public static function rsEccLength($spec) { return ($spec[0] + $spec[3]) * $spec[2]; }
917
+
918
+ }
919
+
920
+
921
+
922
+ //---- qrimage.php -----------------------------
923
+
924
+
925
+
926
+
927
+ /*
928
+ * PHP QR Code encoder
929
+ *
930
+ * Image output of code using GD2
931
+ *
932
+ * PHP QR Code is distributed under LGPL 3
933
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
934
+ *
935
+ * This library is free software; you can redistribute it and/or
936
+ * modify it under the terms of the GNU Lesser General Public
937
+ * License as published by the Free Software Foundation; either
938
+ * version 3 of the License, or any later version.
939
+ *
940
+ * This library is distributed in the hope that it will be useful,
941
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
942
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
943
+ * Lesser General Public License for more details.
944
+ *
945
+ * You should have received a copy of the GNU Lesser General Public
946
+ * License along with this library; if not, write to the Free Software
947
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
948
+ */
949
+
950
+ define('QR_IMAGE', true);
951
+
952
+ class QRimage {
953
+
954
+ //----------------------------------------------------------------------
955
+ public static function png($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color)
956
+ {
957
+ $image = self::image($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color);
958
+
959
+ if ($filename === false) {
960
+ Header("Content-type: image/png");
961
+ ImagePng($image);
962
+ } else {
963
+ if($saveandprint===TRUE){
964
+ ImagePng($image, $filename);
965
+ header("Content-type: image/png");
966
+ ImagePng($image);
967
+ }else{
968
+ ImagePng($image, $filename);
969
+ }
970
+ }
971
+
972
+ ImageDestroy($image);
973
+ }
974
+
975
+ //----------------------------------------------------------------------
976
+ public static function jpg($frame, $filename = false, $pixelPerPoint = 8, $outerFrame = 4, $q = 85)
977
+ {
978
+ $image = self::image($frame, $pixelPerPoint, $outerFrame);
979
+
980
+ if ($filename === false) {
981
+ Header("Content-type: image/jpeg");
982
+ ImageJpeg($image, null, $q);
983
+ } else {
984
+ ImageJpeg($image, $filename, $q);
985
+ }
986
+
987
+ ImageDestroy($image);
988
+ }
989
+
990
+ //----------------------------------------------------------------------
991
+ private static function image($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000)
992
+ {
993
+ $h = count($frame);
994
+ $w = strlen($frame[0]);
995
+
996
+ $imgW = $w + 2*$outerFrame;
997
+ $imgH = $h + 2*$outerFrame;
998
+
999
+ $base_image =ImageCreate($imgW, $imgH);
1000
+
1001
+ // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
1002
+ $r1 = round((($fore_color & 0xFF0000) >> 16), 5);
1003
+ $b1 = round((($fore_color & 0x00FF00) >> 8), 5);
1004
+ $g1 = round(($fore_color & 0x0000FF), 5);
1005
+
1006
+ // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
1007
+ $r2 = round((($back_color & 0xFF0000) >> 16), 5);
1008
+ $b2 = round((($back_color & 0x00FF00) >> 8), 5);
1009
+ $g2 = round(($back_color & 0x0000FF), 5);
1010
+
1011
+
1012
+
1013
+ $col[0] = ImageColorAllocate($base_image,$r2,$b2,$g2);
1014
+ $col[1] = ImageColorAllocate($base_image,$r1,$b1,$g1);
1015
+
1016
+ imagefill($base_image, 0, 0, $col[0]);
1017
+
1018
+ for($y=0; $y<$h; $y++) {
1019
+ for($x=0; $x<$w; $x++) {
1020
+ if ($frame[$y][$x] == '1') {
1021
+ ImageSetPixel($base_image,$x+$outerFrame,$y+$outerFrame,$col[1]);
1022
+ }
1023
+ }
1024
+ }
1025
+
1026
+ $target_image =ImageCreate($imgW * $pixelPerPoint, $imgH * $pixelPerPoint);
1027
+ ImageCopyResized($target_image, $base_image, 0, 0, 0, 0, $imgW * $pixelPerPoint, $imgH * $pixelPerPoint, $imgW, $imgH);
1028
+ ImageDestroy($base_image);
1029
+
1030
+ return $target_image;
1031
+ }
1032
+ }
1033
+
1034
+
1035
+
1036
+ //---- qrinput.php -----------------------------
1037
+
1038
+
1039
+
1040
+
1041
+ /*
1042
+ * PHP QR Code encoder
1043
+ *
1044
+ * Input encoding class
1045
+ *
1046
+ * Based on libqrencode C library distributed under LGPL 2.1
1047
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
1048
+ *
1049
+ * PHP QR Code is distributed under LGPL 3
1050
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
1051
+ *
1052
+ * This library is free software; you can redistribute it and/or
1053
+ * modify it under the terms of the GNU Lesser General Public
1054
+ * License as published by the Free Software Foundation; either
1055
+ * version 3 of the License, or any later version.
1056
+ *
1057
+ * This library is distributed in the hope that it will be useful,
1058
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1059
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1060
+ * Lesser General Public License for more details.
1061
+ *
1062
+ * You should have received a copy of the GNU Lesser General Public
1063
+ * License along with this library; if not, write to the Free Software
1064
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1065
+ */
1066
+
1067
+ define('STRUCTURE_HEADER_BITS', 20);
1068
+ define('MAX_STRUCTURED_SYMBOLS', 16);
1069
+
1070
+ class QRinputItem {
1071
+
1072
+ public $mode;
1073
+ public $size;
1074
+ public $data;
1075
+ public $bstream;
1076
+
1077
+ public function __construct($mode, $size, $data, $bstream = null)
1078
+ {
1079
+ $setData = array_slice($data, 0, $size);
1080
+
1081
+ if (count($setData) < $size) {
1082
+ $setData = array_merge($setData, array_fill(0,$size-count($setData),0));
1083
+ }
1084
+
1085
+ if(!QRinput::check($mode, $size, $setData)) {
1086
+ throw new Exception('Error m:'.$mode.',s:'.$size.',d:'.join(',',$setData));
1087
+ return null;
1088
+ }
1089
+
1090
+ $this->mode = $mode;
1091
+ $this->size = $size;
1092
+ $this->data = $setData;
1093
+ $this->bstream = $bstream;
1094
+ }
1095
+
1096
+ //----------------------------------------------------------------------
1097
+ public function encodeModeNum($version)
1098
+ {
1099
+ try {
1100
+
1101
+ $words = (int)($this->size / 3);
1102
+ $bs = new QRbitstream();
1103
+
1104
+ $val = 0x1;
1105
+ $bs->appendNum(4, $val);
1106
+ $bs->appendNum(QRspec::lengthIndicator(QR_MODE_NUM, $version), $this->size);
1107
+
1108
+ for($i=0; $i<$words; $i++) {
1109
+ $val = (ord($this->data[$i*3 ]) - ord('0')) * 100;
1110
+ $val += (ord($this->data[$i*3+1]) - ord('0')) * 10;
1111
+ $val += (ord($this->data[$i*3+2]) - ord('0'));
1112
+ $bs->appendNum(10, $val);
1113
+ }
1114
+
1115
+ if($this->size - $words * 3 == 1) {
1116
+ $val = ord($this->data[$words*3]) - ord('0');
1117
+ $bs->appendNum(4, $val);
1118
+ } else if($this->size - $words * 3 == 2) {
1119
+ $val = (ord($this->data[$words*3 ]) - ord('0')) * 10;
1120
+ $val += (ord($this->data[$words*3+1]) - ord('0'));
1121
+ $bs->appendNum(7, $val);
1122
+ }
1123
+
1124
+ $this->bstream = $bs;
1125
+ return 0;
1126
+
1127
+ } catch (Exception $e) {
1128
+ return -1;
1129
+ }
1130
+ }
1131
+
1132
+ //----------------------------------------------------------------------
1133
+ public function encodeModeAn($version)
1134
+ {
1135
+ try {
1136
+ $words = (int)($this->size / 2);
1137
+ $bs = new QRbitstream();
1138
+
1139
+ $bs->appendNum(4, 0x02);
1140
+ $bs->appendNum(QRspec::lengthIndicator(QR_MODE_AN, $version), $this->size);
1141
+
1142
+ for($i=0; $i<$words; $i++) {
1143
+ $val = (int)QRinput::lookAnTable(ord($this->data[$i*2 ])) * 45;
1144
+ $val += (int)QRinput::lookAnTable(ord($this->data[$i*2+1]));
1145
+
1146
+ $bs->appendNum(11, $val);
1147
+ }
1148
+
1149
+ if($this->size & 1) {
1150
+ $val = QRinput::lookAnTable(ord($this->data[$words * 2]));
1151
+ $bs->appendNum(6, $val);
1152
+ }
1153
+
1154
+ $this->bstream = $bs;
1155
+ return 0;
1156
+
1157
+ } catch (Exception $e) {
1158
+ return -1;
1159
+ }
1160
+ }
1161
+
1162
+ //----------------------------------------------------------------------
1163
+ public function encodeMode8($version)
1164
+ {
1165
+ try {
1166
+ $bs = new QRbitstream();
1167
+
1168
+ $bs->appendNum(4, 0x4);
1169
+ $bs->appendNum(QRspec::lengthIndicator(QR_MODE_8, $version), $this->size);
1170
+
1171
+ for($i=0; $i<$this->size; $i++) {
1172
+ $bs->appendNum(8, ord($this->data[$i]));
1173
+ }
1174
+
1175
+ $this->bstream = $bs;
1176
+ return 0;
1177
+
1178
+ } catch (Exception $e) {
1179
+ return -1;
1180
+ }
1181
+ }
1182
+
1183
+ //----------------------------------------------------------------------
1184
+ public function encodeModeKanji($version)
1185
+ {
1186
+ try {
1187
+
1188
+ $bs = new QRbitrtream();
1189
+
1190
+ $bs->appendNum(4, 0x8);
1191
+ $bs->appendNum(QRspec::lengthIndicator(QR_MODE_KANJI, $version), (int)($this->size / 2));
1192
+
1193
+ for($i=0; $i<$this->size; $i+=2) {
1194
+ $val = (ord($this->data[$i]) << 8) | ord($this->data[$i+1]);
1195
+ if($val <= 0x9ffc) {
1196
+ $val -= 0x8140;
1197
+ } else {
1198
+ $val -= 0xc140;
1199
+ }
1200
+
1201
+ $h = ($val >> 8) * 0xc0;
1202
+ $val = ($val & 0xff) + $h;
1203
+
1204
+ $bs->appendNum(13, $val);
1205
+ }
1206
+
1207
+ $this->bstream = $bs;
1208
+ return 0;
1209
+
1210
+ } catch (Exception $e) {
1211
+ return -1;
1212
+ }
1213
+ }
1214
+
1215
+ //----------------------------------------------------------------------
1216
+ public function encodeModeStructure()
1217
+ {
1218
+ try {
1219
+ $bs = new QRbitstream();
1220
+
1221
+ $bs->appendNum(4, 0x03);
1222
+ $bs->appendNum(4, ord($this->data[1]) - 1);
1223
+ $bs->appendNum(4, ord($this->data[0]) - 1);
1224
+ $bs->appendNum(8, ord($this->data[2]));
1225
+
1226
+ $this->bstream = $bs;
1227
+ return 0;
1228
+
1229
+ } catch (Exception $e) {
1230
+ return -1;
1231
+ }
1232
+ }
1233
+
1234
+ //----------------------------------------------------------------------
1235
+ public function estimateBitStreamSizeOfEntry($version)
1236
+ {
1237
+ $bits = 0;
1238
+
1239
+ if($version == 0)
1240
+ $version = 1;
1241
+
1242
+ switch($this->mode) {
1243
+ case QR_MODE_NUM: $bits = QRinput::estimateBitsModeNum($this->size); break;
1244
+ case QR_MODE_AN: $bits = QRinput::estimateBitsModeAn($this->size); break;
1245
+ case QR_MODE_8: $bits = QRinput::estimateBitsMode8($this->size); break;
1246
+ case QR_MODE_KANJI: $bits = QRinput::estimateBitsModeKanji($this->size);break;
1247
+ case QR_MODE_STRUCTURE: return STRUCTURE_HEADER_BITS;
1248
+ default:
1249
+ return 0;
1250
+ }
1251
+
1252
+ $l = QRspec::lengthIndicator($this->mode, $version);
1253
+ $m = 1 << $l;
1254
+ $num = (int)(($this->size + $m - 1) / $m);
1255
+
1256
+ $bits += $num * (4 + $l);
1257
+
1258
+ return $bits;
1259
+ }
1260
+
1261
+ //----------------------------------------------------------------------
1262
+ public function encodeBitStream($version)
1263
+ {
1264
+ try {
1265
+
1266
+ unset($this->bstream);
1267
+ $words = QRspec::maximumWords($this->mode, $version);
1268
+
1269
+ if($this->size > $words) {
1270
+
1271
+ $st1 = new QRinputItem($this->mode, $words, $this->data);
1272
+ $st2 = new QRinputItem($this->mode, $this->size - $words, array_slice($this->data, $words));
1273
+
1274
+ $st1->encodeBitStream($version);
1275
+ $st2->encodeBitStream($version);
1276
+
1277
+ $this->bstream = new QRbitstream();
1278
+ $this->bstream->append($st1->bstream);
1279
+ $this->bstream->append($st2->bstream);
1280
+
1281
+ unset($st1);
1282
+ unset($st2);
1283
+
1284
+ } else {
1285
+
1286
+ $ret = 0;
1287
+
1288
+ switch($this->mode) {
1289
+ case QR_MODE_NUM: $ret = $this->encodeModeNum($version); break;
1290
+ case QR_MODE_AN: $ret = $this->encodeModeAn($version); break;
1291
+ case QR_MODE_8: $ret = $this->encodeMode8($version); break;
1292
+ case QR_MODE_KANJI: $ret = $this->encodeModeKanji($version);break;
1293
+ case QR_MODE_STRUCTURE: $ret = $this->encodeModeStructure(); break;
1294
+
1295
+ default:
1296
+ break;
1297
+ }
1298
+
1299
+ if($ret < 0)
1300
+ return -1;
1301
+ }
1302
+
1303
+ return $this->bstream->size();
1304
+
1305
+ } catch (Exception $e) {
1306
+ return -1;
1307
+ }
1308
+ }
1309
+ };
1310
+
1311
+ //##########################################################################
1312
+
1313
+ class QRinput {
1314
+
1315
+ public $items;
1316
+
1317
+ private $version;
1318
+ private $level;
1319
+
1320
+ //----------------------------------------------------------------------
1321
+ public function __construct($version = 0, $level = QR_ECLEVEL_L)
1322
+ {
1323
+ if ($version < 0 || $version > QRSPEC_VERSION_MAX || $level > QR_ECLEVEL_H) {
1324
+ throw new Exception('Invalid version no');
1325
+ return NULL;
1326
+ }
1327
+
1328
+ $this->version = $version;
1329
+ $this->level = $level;
1330
+ }
1331
+
1332
+ //----------------------------------------------------------------------
1333
+ public function getVersion()
1334
+ {
1335
+ return $this->version;
1336
+ }
1337
+
1338
+ //----------------------------------------------------------------------
1339
+ public function setVersion($version)
1340
+ {
1341
+ if($version < 0 || $version > QRSPEC_VERSION_MAX) {
1342
+ throw new Exception('Invalid version no');
1343
+ return -1;
1344
+ }
1345
+
1346
+ $this->version = $version;
1347
+
1348
+ return 0;
1349
+ }
1350
+
1351
+ //----------------------------------------------------------------------
1352
+ public function getErrorCorrectionLevel()
1353
+ {
1354
+ return $this->level;
1355
+ }
1356
+
1357
+ //----------------------------------------------------------------------
1358
+ public function setErrorCorrectionLevel($level)
1359
+ {
1360
+ if($level > QR_ECLEVEL_H) {
1361
+ throw new Exception('Invalid ECLEVEL');
1362
+ return -1;
1363
+ }
1364
+
1365
+ $this->level = $level;
1366
+
1367
+ return 0;
1368
+ }
1369
+
1370
+ //----------------------------------------------------------------------
1371
+ public function appendEntry(QRinputItem $entry)
1372
+ {
1373
+ $this->items[] = $entry;
1374
+ }
1375
+
1376
+ //----------------------------------------------------------------------
1377
+ public function append($mode, $size, $data)
1378
+ {
1379
+ try {
1380
+ $entry = new QRinputItem($mode, $size, $data);
1381
+ $this->items[] = $entry;
1382
+ return 0;
1383
+ } catch (Exception $e) {
1384
+ return -1;
1385
+ }
1386
+ }
1387
+
1388
+ //----------------------------------------------------------------------
1389
+
1390
+ public function insertStructuredAppendHeader($size, $index, $parity)
1391
+ {
1392
+ if( $size > MAX_STRUCTURED_SYMBOLS ) {
1393
+ throw new Exception('insertStructuredAppendHeader wrong size');
1394
+ }
1395
+
1396
+ if( $index <= 0 || $index > MAX_STRUCTURED_SYMBOLS ) {
1397
+ throw new Exception('insertStructuredAppendHeader wrong index');
1398
+ }
1399
+
1400
+ $buf = array($size, $index, $parity);
1401
+
1402
+ try {
1403
+ $entry = new QRinputItem(QR_MODE_STRUCTURE, 3, buf);
1404
+ array_unshift($this->items, $entry);
1405
+ return 0;
1406
+ } catch (Exception $e) {
1407
+ return -1;
1408
+ }
1409
+ }
1410
+
1411
+ //----------------------------------------------------------------------
1412
+ public function calcParity()
1413
+ {
1414
+ $parity = 0;
1415
+
1416
+ foreach($this->items as $item) {
1417
+ if($item->mode != QR_MODE_STRUCTURE) {
1418
+ for($i=$item->size-1; $i>=0; $i--) {
1419
+ $parity ^= $item->data[$i];
1420
+ }
1421
+ }
1422
+ }
1423
+
1424
+ return $parity;
1425
+ }
1426
+
1427
+ //----------------------------------------------------------------------
1428
+ public static function checkModeNum($size, $data)
1429
+ {
1430
+ for($i=0; $i<$size; $i++) {
1431
+ if((ord($data[$i]) < ord('0')) || (ord($data[$i]) > ord('9'))){
1432
+ return false;
1433
+ }
1434
+ }
1435
+
1436
+ return true;
1437
+ }
1438
+
1439
+ //----------------------------------------------------------------------
1440
+ public static function estimateBitsModeNum($size)
1441
+ {
1442
+ $w = (int)$size / 3;
1443
+ $bits = $w * 10;
1444
+
1445
+ switch($size - $w * 3) {
1446
+ case 1:
1447
+ $bits += 4;
1448
+ break;
1449
+ case 2:
1450
+ $bits += 7;
1451
+ break;
1452
+ default:
1453
+ break;
1454
+ }
1455
+
1456
+ return $bits;
1457
+ }
1458
+
1459
+ //----------------------------------------------------------------------
1460
+ public static $anTable = array(
1461
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1462
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1463
+ 36, -1, -1, -1, 37, 38, -1, -1, -1, -1, 39, 40, -1, 41, 42, 43,
1464
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 44, -1, -1, -1, -1, -1,
1465
+ -1, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1466
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, -1, -1, -1, -1, -1,
1467
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
1468
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
1469
+ );
1470
+
1471
+ //----------------------------------------------------------------------
1472
+ public static function lookAnTable($c)
1473
+ {
1474
+ return (($c > 127)?-1:self::$anTable[$c]);
1475
+ }
1476
+
1477
+ //----------------------------------------------------------------------
1478
+ public static function checkModeAn($size, $data)
1479
+ {
1480
+ for($i=0; $i<$size; $i++) {
1481
+ if (self::lookAnTable(ord($data[$i])) == -1) {
1482
+ return false;
1483
+ }
1484
+ }
1485
+
1486
+ return true;
1487
+ }
1488
+
1489
+ //----------------------------------------------------------------------
1490
+ public static function estimateBitsModeAn($size)
1491
+ {
1492
+ $w = (int)($size / 2);
1493
+ $bits = $w * 11;
1494
+
1495
+ if($size & 1) {
1496
+ $bits += 6;
1497
+ }
1498
+
1499
+ return $bits;
1500
+ }
1501
+
1502
+ //----------------------------------------------------------------------
1503
+ public static function estimateBitsMode8($size)
1504
+ {
1505
+ return $size * 8;
1506
+ }
1507
+
1508
+ //----------------------------------------------------------------------
1509
+ public function estimateBitsModeKanji($size)
1510
+ {
1511
+ return (int)(($size / 2) * 13);
1512
+ }
1513
+
1514
+ //----------------------------------------------------------------------
1515
+ public static function checkModeKanji($size, $data)
1516
+ {
1517
+ if($size & 1)
1518
+ return false;
1519
+
1520
+ for($i=0; $i<$size; $i+=2) {
1521
+ $val = (ord($data[$i]) << 8) | ord($data[$i+1]);
1522
+ if( $val < 0x8140
1523
+ || ($val > 0x9ffc && $val < 0xe040)
1524
+ || $val > 0xebbf) {
1525
+ return false;
1526
+ }
1527
+ }
1528
+
1529
+ return true;
1530
+ }
1531
+
1532
+ /***********************************************************************
1533
+ * Validation
1534
+ **********************************************************************/
1535
+
1536
+ public static function check($mode, $size, $data)
1537
+ {
1538
+ if($size <= 0)
1539
+ return false;
1540
+
1541
+ switch($mode) {
1542
+ case QR_MODE_NUM: return self::checkModeNum($size, $data); break;
1543
+ case QR_MODE_AN: return self::checkModeAn($size, $data); break;
1544
+ case QR_MODE_KANJI: return self::checkModeKanji($size, $data); break;
1545
+ case QR_MODE_8: return true; break;
1546
+ case QR_MODE_STRUCTURE: return true; break;
1547
+
1548
+ default:
1549
+ break;
1550
+ }
1551
+
1552
+ return false;
1553
+ }
1554
+
1555
+
1556
+ //----------------------------------------------------------------------
1557
+ public function estimateBitStreamSize($version)
1558
+ {
1559
+ $bits = 0;
1560
+
1561
+ foreach($this->items as $item) {
1562
+ $bits += $item->estimateBitStreamSizeOfEntry($version);
1563
+ }
1564
+
1565
+ return $bits;
1566
+ }
1567
+
1568
+ //----------------------------------------------------------------------
1569
+ public function estimateVersion()
1570
+ {
1571
+ $version = 0;
1572
+ $prev = 0;
1573
+ do {
1574
+ $prev = $version;
1575
+ $bits = $this->estimateBitStreamSize($prev);
1576
+ $version = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
1577
+ if ($version < 0) {
1578
+ return -1;
1579
+ }
1580
+ } while ($version > $prev);
1581
+
1582
+ return $version;
1583
+ }
1584
+
1585
+ //----------------------------------------------------------------------
1586
+ public static function lengthOfCode($mode, $version, $bits)
1587
+ {
1588
+ $payload = $bits - 4 - QRspec::lengthIndicator($mode, $version);
1589
+ switch($mode) {
1590
+ case QR_MODE_NUM:
1591
+ $chunks = (int)($payload / 10);
1592
+ $remain = $payload - $chunks * 10;
1593
+ $size = $chunks * 3;
1594
+ if($remain >= 7) {
1595
+ $size += 2;
1596
+ } else if($remain >= 4) {
1597
+ $size += 1;
1598
+ }
1599
+ break;
1600
+ case QR_MODE_AN:
1601
+ $chunks = (int)($payload / 11);
1602
+ $remain = $payload - $chunks * 11;
1603
+ $size = $chunks * 2;
1604
+ if($remain >= 6)
1605
+ $size++;
1606
+ break;
1607
+ case QR_MODE_8:
1608
+ $size = (int)($payload / 8);
1609
+ break;
1610
+ case QR_MODE_KANJI:
1611
+ $size = (int)(($payload / 13) * 2);
1612
+ break;
1613
+ case QR_MODE_STRUCTURE:
1614
+ $size = (int)($payload / 8);
1615
+ break;
1616
+ default:
1617
+ $size = 0;
1618
+ break;
1619
+ }
1620
+
1621
+ $maxsize = QRspec::maximumWords($mode, $version);
1622
+ if($size < 0) $size = 0;
1623
+ if($size > $maxsize) $size = $maxsize;
1624
+
1625
+ return $size;
1626
+ }
1627
+
1628
+ //----------------------------------------------------------------------
1629
+ public function createBitStream()
1630
+ {
1631
+ $total = 0;
1632
+
1633
+ foreach($this->items as $item) {
1634
+ $bits = $item->encodeBitStream($this->version);
1635
+
1636
+ if($bits < 0)
1637
+ return -1;
1638
+
1639
+ $total += $bits;
1640
+ }
1641
+
1642
+ return $total;
1643
+ }
1644
+
1645
+ //----------------------------------------------------------------------
1646
+ public function convertData()
1647
+ {
1648
+ $ver = $this->estimateVersion();
1649
+ if($ver > $this->getVersion()) {
1650
+ $this->setVersion($ver);
1651
+ }
1652
+
1653
+ for(;;) {
1654
+ $bits = $this->createBitStream();
1655
+
1656
+ if($bits < 0)
1657
+ return -1;
1658
+
1659
+ $ver = QRspec::getMinimumVersion((int)(($bits + 7) / 8), $this->level);
1660
+ if($ver < 0) {
1661
+ throw new Exception('WRONG VERSION');
1662
+ return -1;
1663
+ } else if($ver > $this->getVersion()) {
1664
+ $this->setVersion($ver);
1665
+ } else {
1666
+ break;
1667
+ }
1668
+ }
1669
+
1670
+ return 0;
1671
+ }
1672
+
1673
+ //----------------------------------------------------------------------
1674
+ public function appendPaddingBit(&$bstream)
1675
+ {
1676
+ $bits = $bstream->size();
1677
+ $maxwords = QRspec::getDataLength($this->version, $this->level);
1678
+ $maxbits = $maxwords * 8;
1679
+
1680
+ if ($maxbits == $bits) {
1681
+ return 0;
1682
+ }
1683
+
1684
+ if ($maxbits - $bits < 5) {
1685
+ return $bstream->appendNum($maxbits - $bits, 0);
1686
+ }
1687
+
1688
+ $bits += 4;
1689
+ $words = (int)(($bits + 7) / 8);
1690
+
1691
+ $padding = new QRbitstream();
1692
+ $ret = $padding->appendNum($words * 8 - $bits + 4, 0);
1693
+
1694
+ if($ret < 0)
1695
+ return $ret;
1696
+
1697
+ $padlen = $maxwords - $words;
1698
+
1699
+ if($padlen > 0) {
1700
+
1701
+ $padbuf = array();
1702
+ for($i=0; $i<$padlen; $i++) {
1703
+ $padbuf[$i] = ($i&1)?0x11:0xec;
1704
+ }
1705
+
1706
+ $ret = $padding->appendBytes($padlen, $padbuf);
1707
+
1708
+ if($ret < 0)
1709
+ return $ret;
1710
+
1711
+ }
1712
+
1713
+ $ret = $bstream->append($padding);
1714
+
1715
+ return $ret;
1716
+ }
1717
+
1718
+ //----------------------------------------------------------------------
1719
+ public function mergeBitStream()
1720
+ {
1721
+ if($this->convertData() < 0) {
1722
+ return null;
1723
+ }
1724
+
1725
+ $bstream = new QRbitstream();
1726
+
1727
+ foreach($this->items as $item) {
1728
+ $ret = $bstream->append($item->bstream);
1729
+ if($ret < 0) {
1730
+ return null;
1731
+ }
1732
+ }
1733
+
1734
+ return $bstream;
1735
+ }
1736
+
1737
+ //----------------------------------------------------------------------
1738
+ public function getBitStream()
1739
+ {
1740
+
1741
+ $bstream = $this->mergeBitStream();
1742
+
1743
+ if($bstream == null) {
1744
+ return null;
1745
+ }
1746
+
1747
+ $ret = $this->appendPaddingBit($bstream);
1748
+ if($ret < 0) {
1749
+ return null;
1750
+ }
1751
+
1752
+ return $bstream;
1753
+ }
1754
+
1755
+ //----------------------------------------------------------------------
1756
+ public function getByteStream()
1757
+ {
1758
+ $bstream = $this->getBitStream();
1759
+ if($bstream == null) {
1760
+ return null;
1761
+ }
1762
+
1763
+ return $bstream->toByte();
1764
+ }
1765
+ }
1766
+
1767
+
1768
+
1769
+
1770
+
1771
+
1772
+ //---- qrbitstream.php -----------------------------
1773
+
1774
+
1775
+
1776
+
1777
+ /*
1778
+ * PHP QR Code encoder
1779
+ *
1780
+ * Bitstream class
1781
+ *
1782
+ * Based on libqrencode C library distributed under LGPL 2.1
1783
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
1784
+ *
1785
+ * PHP QR Code is distributed under LGPL 3
1786
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
1787
+ *
1788
+ * This library is free software; you can redistribute it and/or
1789
+ * modify it under the terms of the GNU Lesser General Public
1790
+ * License as published by the Free Software Foundation; either
1791
+ * version 3 of the License, or any later version.
1792
+ *
1793
+ * This library is distributed in the hope that it will be useful,
1794
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1795
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1796
+ * Lesser General Public License for more details.
1797
+ *
1798
+ * You should have received a copy of the GNU Lesser General Public
1799
+ * License along with this library; if not, write to the Free Software
1800
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1801
+ */
1802
+
1803
+ class QRbitstream {
1804
+
1805
+ public $data = array();
1806
+
1807
+ //----------------------------------------------------------------------
1808
+ public function size()
1809
+ {
1810
+ return count($this->data);
1811
+ }
1812
+
1813
+ //----------------------------------------------------------------------
1814
+ public function allocate($setLength)
1815
+ {
1816
+ $this->data = array_fill(0, $setLength, 0);
1817
+ return 0;
1818
+ }
1819
+
1820
+ //----------------------------------------------------------------------
1821
+ public static function newFromNum($bits, $num)
1822
+ {
1823
+ $bstream = new QRbitstream();
1824
+ $bstream->allocate($bits);
1825
+
1826
+ $mask = 1 << ($bits - 1);
1827
+ for($i=0; $i<$bits; $i++) {
1828
+ if($num & $mask) {
1829
+ $bstream->data[$i] = 1;
1830
+ } else {
1831
+ $bstream->data[$i] = 0;
1832
+ }
1833
+ $mask = $mask >> 1;
1834
+ }
1835
+
1836
+ return $bstream;
1837
+ }
1838
+
1839
+ //----------------------------------------------------------------------
1840
+ public static function newFromBytes($size, $data)
1841
+ {
1842
+ $bstream = new QRbitstream();
1843
+ $bstream->allocate($size * 8);
1844
+ $p=0;
1845
+
1846
+ for($i=0; $i<$size; $i++) {
1847
+ $mask = 0x80;
1848
+ for($j=0; $j<8; $j++) {
1849
+ if($data[$i] & $mask) {
1850
+ $bstream->data[$p] = 1;
1851
+ } else {
1852
+ $bstream->data[$p] = 0;
1853
+ }
1854
+ $p++;
1855
+ $mask = $mask >> 1;
1856
+ }
1857
+ }
1858
+
1859
+ return $bstream;
1860
+ }
1861
+
1862
+ //----------------------------------------------------------------------
1863
+ public function append(QRbitstream $arg)
1864
+ {
1865
+ if (is_null($arg)) {
1866
+ return -1;
1867
+ }
1868
+
1869
+ if($arg->size() == 0) {
1870
+ return 0;
1871
+ }
1872
+
1873
+ if($this->size() == 0) {
1874
+ $this->data = $arg->data;
1875
+ return 0;
1876
+ }
1877
+
1878
+ $this->data = array_values(array_merge($this->data, $arg->data));
1879
+
1880
+ return 0;
1881
+ }
1882
+
1883
+ //----------------------------------------------------------------------
1884
+ public function appendNum($bits, $num)
1885
+ {
1886
+ if ($bits == 0)
1887
+ return 0;
1888
+
1889
+ $b = QRbitstream::newFromNum($bits, $num);
1890
+
1891
+ if(is_null($b))
1892
+ return -1;
1893
+
1894
+ $ret = $this->append($b);
1895
+ unset($b);
1896
+
1897
+ return $ret;
1898
+ }
1899
+
1900
+ //----------------------------------------------------------------------
1901
+ public function appendBytes($size, $data)
1902
+ {
1903
+ if ($size == 0)
1904
+ return 0;
1905
+
1906
+ $b = QRbitstream::newFromBytes($size, $data);
1907
+
1908
+ if(is_null($b))
1909
+ return -1;
1910
+
1911
+ $ret = $this->append($b);
1912
+ unset($b);
1913
+
1914
+ return $ret;
1915
+ }
1916
+
1917
+ //----------------------------------------------------------------------
1918
+ public function toByte()
1919
+ {
1920
+
1921
+ $size = $this->size();
1922
+
1923
+ if($size == 0) {
1924
+ return array();
1925
+ }
1926
+
1927
+ $data = array_fill(0, (int)(($size + 7) / 8), 0);
1928
+ $bytes = (int)($size / 8);
1929
+
1930
+ $p = 0;
1931
+
1932
+ for($i=0; $i<$bytes; $i++) {
1933
+ $v = 0;
1934
+ for($j=0; $j<8; $j++) {
1935
+ $v = $v << 1;
1936
+ $v |= $this->data[$p];
1937
+ $p++;
1938
+ }
1939
+ $data[$i] = $v;
1940
+ }
1941
+
1942
+ if($size & 7) {
1943
+ $v = 0;
1944
+ for($j=0; $j<($size & 7); $j++) {
1945
+ $v = $v << 1;
1946
+ $v |= $this->data[$p];
1947
+ $p++;
1948
+ }
1949
+ $data[$bytes] = $v;
1950
+ }
1951
+
1952
+ return $data;
1953
+ }
1954
+
1955
+ }
1956
+
1957
+
1958
+
1959
+
1960
+ //---- qrsplit.php -----------------------------
1961
+
1962
+
1963
+
1964
+
1965
+ /*
1966
+ * PHP QR Code encoder
1967
+ *
1968
+ * Input splitting classes
1969
+ *
1970
+ * Based on libqrencode C library distributed under LGPL 2.1
1971
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
1972
+ *
1973
+ * PHP QR Code is distributed under LGPL 3
1974
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
1975
+ *
1976
+ * The following data / specifications are taken from
1977
+ * "Two dimensional symbol -- QR-code -- Basic Specification" (JIS X0510:2004)
1978
+ * or
1979
+ * "Automatic identification and data capture techniques --
1980
+ * QR Code 2005 bar code symbology specification" (ISO/IEC 18004:2006)
1981
+ *
1982
+ * This library is free software; you can redistribute it and/or
1983
+ * modify it under the terms of the GNU Lesser General Public
1984
+ * License as published by the Free Software Foundation; either
1985
+ * version 3 of the License, or any later version.
1986
+ *
1987
+ * This library is distributed in the hope that it will be useful,
1988
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
1989
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
1990
+ * Lesser General Public License for more details.
1991
+ *
1992
+ * You should have received a copy of the GNU Lesser General Public
1993
+ * License along with this library; if not, write to the Free Software
1994
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1995
+ */
1996
+ class QRsplit {
1997
+
1998
+ public $dataStr = '';
1999
+ public $input;
2000
+ public $modeHint;
2001
+
2002
+ //----------------------------------------------------------------------
2003
+ public function __construct($dataStr, $input, $modeHint)
2004
+ {
2005
+ $this->dataStr = $dataStr;
2006
+ $this->input = $input;
2007
+ $this->modeHint = $modeHint;
2008
+ }
2009
+
2010
+ //----------------------------------------------------------------------
2011
+ public static function isdigitat($str, $pos)
2012
+ {
2013
+ if ($pos >= strlen($str))
2014
+ return false;
2015
+
2016
+ return ((ord($str[$pos]) >= ord('0'))&&(ord($str[$pos]) <= ord('9')));
2017
+ }
2018
+
2019
+ //----------------------------------------------------------------------
2020
+ public static function isalnumat($str, $pos)
2021
+ {
2022
+ if ($pos >= strlen($str))
2023
+ return false;
2024
+
2025
+ return (QRinput::lookAnTable(ord($str[$pos])) >= 0);
2026
+ }
2027
+
2028
+ //----------------------------------------------------------------------
2029
+ public function identifyMode($pos)
2030
+ {
2031
+ if ($pos >= strlen($this->dataStr))
2032
+ return QR_MODE_NUL;
2033
+
2034
+ $c = $this->dataStr[$pos];
2035
+
2036
+ if(self::isdigitat($this->dataStr, $pos)) {
2037
+ return QR_MODE_NUM;
2038
+ } else if(self::isalnumat($this->dataStr, $pos)) {
2039
+ return QR_MODE_AN;
2040
+ } else if($this->modeHint == QR_MODE_KANJI) {
2041
+
2042
+ if ($pos+1 < strlen($this->dataStr))
2043
+ {
2044
+ $d = $this->dataStr[$pos+1];
2045
+ $word = (ord($c) << 8) | ord($d);
2046
+ if(($word >= 0x8140 && $word <= 0x9ffc) || ($word >= 0xe040 && $word <= 0xebbf)) {
2047
+ return QR_MODE_KANJI;
2048
+ }
2049
+ }
2050
+ }
2051
+
2052
+ return QR_MODE_8;
2053
+ }
2054
+
2055
+ //----------------------------------------------------------------------
2056
+ public function eatNum()
2057
+ {
2058
+ $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());
2059
+
2060
+ $p = 0;
2061
+ while(self::isdigitat($this->dataStr, $p)) {
2062
+ $p++;
2063
+ }
2064
+
2065
+ $run = $p;
2066
+ $mode = $this->identifyMode($p);
2067
+
2068
+ if($mode == QR_MODE_8) {
2069
+ $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln
2070
+ + QRinput::estimateBitsMode8(1) // + 4 + l8
2071
+ - QRinput::estimateBitsMode8($run + 1); // - 4 - l8
2072
+ if($dif > 0) {
2073
+ return $this->eat8();
2074
+ }
2075
+ }
2076
+ if($mode == QR_MODE_AN) {
2077
+ $dif = QRinput::estimateBitsModeNum($run) + 4 + $ln
2078
+ + QRinput::estimateBitsModeAn(1) // + 4 + la
2079
+ - QRinput::estimateBitsModeAn($run + 1);// - 4 - la
2080
+ if($dif > 0) {
2081
+ return $this->eatAn();
2082
+ }
2083
+ }
2084
+
2085
+ $ret = $this->input->append(QR_MODE_NUM, $run, str_split($this->dataStr));
2086
+ if($ret < 0)
2087
+ return -1;
2088
+
2089
+ return $run;
2090
+ }
2091
+
2092
+ //----------------------------------------------------------------------
2093
+ public function eatAn()
2094
+ {
2095
+ $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());
2096
+ $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());
2097
+
2098
+ $p = 0;
2099
+
2100
+ while(self::isalnumat($this->dataStr, $p)) {
2101
+ if(self::isdigitat($this->dataStr, $p)) {
2102
+ $q = $p;
2103
+ while(self::isdigitat($this->dataStr, $q)) {
2104
+ $q++;
2105
+ }
2106
+
2107
+ $dif = QRinput::estimateBitsModeAn($p) // + 4 + la
2108
+ + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln
2109
+ - QRinput::estimateBitsModeAn($q); // - 4 - la
2110
+
2111
+ if($dif < 0) {
2112
+ break;
2113
+ } else {
2114
+ $p = $q;
2115
+ }
2116
+ } else {
2117
+ $p++;
2118
+ }
2119
+ }
2120
+
2121
+ $run = $p;
2122
+
2123
+ if(!self::isalnumat($this->dataStr, $p)) {
2124
+ $dif = QRinput::estimateBitsModeAn($run) + 4 + $la
2125
+ + QRinput::estimateBitsMode8(1) // + 4 + l8
2126
+ - QRinput::estimateBitsMode8($run + 1); // - 4 - l8
2127
+ if($dif > 0) {
2128
+ return $this->eat8();
2129
+ }
2130
+ }
2131
+
2132
+ $ret = $this->input->append(QR_MODE_AN, $run, str_split($this->dataStr));
2133
+ if($ret < 0)
2134
+ return -1;
2135
+
2136
+ return $run;
2137
+ }
2138
+
2139
+ //----------------------------------------------------------------------
2140
+ public function eatKanji()
2141
+ {
2142
+ $p = 0;
2143
+
2144
+ while($this->identifyMode($p) == QR_MODE_KANJI) {
2145
+ $p += 2;
2146
+ }
2147
+
2148
+ $ret = $this->input->append(QR_MODE_KANJI, $p, str_split($this->dataStr));
2149
+ if($ret < 0)
2150
+ return -1;
2151
+
2152
+ return $ret;
2153
+ }
2154
+
2155
+ //----------------------------------------------------------------------
2156
+ public function eat8()
2157
+ {
2158
+ $la = QRspec::lengthIndicator(QR_MODE_AN, $this->input->getVersion());
2159
+ $ln = QRspec::lengthIndicator(QR_MODE_NUM, $this->input->getVersion());
2160
+
2161
+ $p = 1;
2162
+ $dataStrLen = strlen($this->dataStr);
2163
+
2164
+ while($p < $dataStrLen) {
2165
+
2166
+ $mode = $this->identifyMode($p);
2167
+ if($mode == QR_MODE_KANJI) {
2168
+ break;
2169
+ }
2170
+ if($mode == QR_MODE_NUM) {
2171
+ $q = $p;
2172
+ while(self::isdigitat($this->dataStr, $q)) {
2173
+ $q++;
2174
+ }
2175
+ $dif = QRinput::estimateBitsMode8($p) // + 4 + l8
2176
+ + QRinput::estimateBitsModeNum($q - $p) + 4 + $ln
2177
+ - QRinput::estimateBitsMode8($q); // - 4 - l8
2178
+ if($dif < 0) {
2179
+ break;
2180
+ } else {
2181
+ $p = $q;
2182
+ }
2183
+ } else if($mode == QR_MODE_AN) {
2184
+ $q = $p;
2185
+ while(self::isalnumat($this->dataStr, $q)) {
2186
+ $q++;
2187
+ }
2188
+ $dif = QRinput::estimateBitsMode8($p) // + 4 + l8
2189
+ + QRinput::estimateBitsModeAn($q - $p) + 4 + $la
2190
+ - QRinput::estimateBitsMode8($q); // - 4 - l8
2191
+ if($dif < 0) {
2192
+ break;
2193
+ } else {
2194
+ $p = $q;
2195
+ }
2196
+ } else {
2197
+ $p++;
2198
+ }
2199
+ }
2200
+
2201
+ $run = $p;
2202
+ $ret = $this->input->append(QR_MODE_8, $run, str_split($this->dataStr));
2203
+
2204
+ if($ret < 0)
2205
+ return -1;
2206
+
2207
+ return $run;
2208
+ }
2209
+
2210
+ //----------------------------------------------------------------------
2211
+ public function splitString()
2212
+ {
2213
+ while (strlen($this->dataStr) > 0)
2214
+ {
2215
+ if($this->dataStr == '')
2216
+ return 0;
2217
+
2218
+ $mode = $this->identifyMode(0);
2219
+
2220
+ switch ($mode) {
2221
+ case QR_MODE_NUM: $length = $this->eatNum(); break;
2222
+ case QR_MODE_AN: $length = $this->eatAn(); break;
2223
+ case QR_MODE_KANJI:
2224
+ if ($mode == QR_MODE_KANJI)
2225
+ $length = $this->eatKanji();
2226
+ else $length = $this->eat8();
2227
+ break;
2228
+ default: $length = $this->eat8(); break;
2229
+
2230
+ }
2231
+
2232
+ if($length == 0) return 0;
2233
+ if($length < 0) return -1;
2234
+
2235
+ $this->dataStr = substr($this->dataStr, $length);
2236
+ }
2237
+ }
2238
+
2239
+ //----------------------------------------------------------------------
2240
+ public function toUpper()
2241
+ {
2242
+ $stringLen = strlen($this->dataStr);
2243
+ $p = 0;
2244
+
2245
+ while ($p<$stringLen) {
2246
+ $mode = self::identifyMode(substr($this->dataStr, $p), $this->modeHint);
2247
+ if($mode == QR_MODE_KANJI) {
2248
+ $p += 2;
2249
+ } else {
2250
+ if (ord($this->dataStr[$p]) >= ord('a') && ord($this->dataStr[$p]) <= ord('z')) {
2251
+ $this->dataStr[$p] = chr(ord($this->dataStr[$p]) - 32);
2252
+ }
2253
+ $p++;
2254
+ }
2255
+ }
2256
+
2257
+ return $this->dataStr;
2258
+ }
2259
+
2260
+ //----------------------------------------------------------------------
2261
+ public static function splitStringToQRinput($string, QRinput $input, $modeHint, $casesensitive = true)
2262
+ {
2263
+ if(is_null($string) || $string == '\0' || $string == '') {
2264
+ throw new Exception('empty string!!!');
2265
+ }
2266
+
2267
+ $split = new QRsplit($string, $input, $modeHint);
2268
+
2269
+ if(!$casesensitive)
2270
+ $split->toUpper();
2271
+
2272
+ return $split->splitString();
2273
+ }
2274
+ }
2275
+
2276
+
2277
+
2278
+ //---- qrrscode.php -----------------------------
2279
+
2280
+
2281
+
2282
+
2283
+ /*
2284
+ * PHP QR Code encoder
2285
+ *
2286
+ * Reed-Solomon error correction support
2287
+ *
2288
+ * Copyright (C) 2002, 2003, 2004, 2006 Phil Karn, KA9Q
2289
+ * (libfec is released under the GNU Lesser General Public License.)
2290
+ *
2291
+ * Based on libqrencode C library distributed under LGPL 2.1
2292
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
2293
+ *
2294
+ * PHP QR Code is distributed under LGPL 3
2295
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
2296
+ *
2297
+ * This library is free software; you can redistribute it and/or
2298
+ * modify it under the terms of the GNU Lesser General Public
2299
+ * License as published by the Free Software Foundation; either
2300
+ * version 3 of the License, or any later version.
2301
+ *
2302
+ * This library is distributed in the hope that it will be useful,
2303
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2304
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2305
+ * Lesser General Public License for more details.
2306
+ *
2307
+ * You should have received a copy of the GNU Lesser General Public
2308
+ * License along with this library; if not, write to the Free Software
2309
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2310
+ */
2311
+
2312
+ class QRrsItem {
2313
+
2314
+ public $mm; // Bits per symbol
2315
+ public $nn; // Symbols per block (= (1<<mm)-1)
2316
+ public $alpha_to = array(); // log lookup table
2317
+ public $index_of = array(); // Antilog lookup table
2318
+ public $genpoly = array(); // Generator polynomial
2319
+ public $nroots; // Number of generator roots = number of parity symbols
2320
+ public $fcr; // First consecutive root, index form
2321
+ public $prim; // Primitive element, index form
2322
+ public $iprim; // prim-th root of 1, index form
2323
+ public $pad; // Padding bytes in shortened block
2324
+ public $gfpoly;
2325
+
2326
+ //----------------------------------------------------------------------
2327
+ public function modnn($x)
2328
+ {
2329
+ while ($x >= $this->nn) {
2330
+ $x -= $this->nn;
2331
+ $x = ($x >> $this->mm) + ($x & $this->nn);
2332
+ }
2333
+
2334
+ return $x;
2335
+ }
2336
+
2337
+ //----------------------------------------------------------------------
2338
+ public static function init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
2339
+ {
2340
+ // Common code for intializing a Reed-Solomon control block (char or int symbols)
2341
+ // Copyright 2004 Phil Karn, KA9Q
2342
+ // May be used under the terms of the GNU Lesser General Public License (LGPL)
2343
+
2344
+ $rs = null;
2345
+
2346
+ // Check parameter ranges
2347
+ if($symsize < 0 || $symsize > 8) return $rs;
2348
+ if($fcr < 0 || $fcr >= (1<<$symsize)) return $rs;
2349
+ if($prim <= 0 || $prim >= (1<<$symsize)) return $rs;
2350
+ if($nroots < 0 || $nroots >= (1<<$symsize)) return $rs; // Can't have more roots than symbol values!
2351
+ if($pad < 0 || $pad >= ((1<<$symsize) -1 - $nroots)) return $rs; // Too much padding
2352
+
2353
+ $rs = new QRrsItem();
2354
+ $rs->mm = $symsize;
2355
+ $rs->nn = (1<<$symsize)-1;
2356
+ $rs->pad = $pad;
2357
+
2358
+ $rs->alpha_to = array_fill(0, $rs->nn+1, 0);
2359
+ $rs->index_of = array_fill(0, $rs->nn+1, 0);
2360
+
2361
+ // PHP style macro replacement ;)
2362
+ $NN =& $rs->nn;
2363
+ $A0 =& $NN;
2364
+
2365
+ // Generate Galois field lookup tables
2366
+ $rs->index_of[0] = $A0; // log(zero) = -inf
2367
+ $rs->alpha_to[$A0] = 0; // alpha**-inf = 0
2368
+ $sr = 1;
2369
+
2370
+ for($i=0; $i<$rs->nn; $i++) {
2371
+ $rs->index_of[$sr] = $i;
2372
+ $rs->alpha_to[$i] = $sr;
2373
+ $sr <<= 1;
2374
+ if($sr & (1<<$symsize)) {
2375
+ $sr ^= $gfpoly;
2376
+ }
2377
+ $sr &= $rs->nn;
2378
+ }
2379
+
2380
+ if($sr != 1){
2381
+ // field generator polynomial is not primitive!
2382
+ $rs = NULL;
2383
+ return $rs;
2384
+ }
2385
+
2386
+ /* Form RS code generator polynomial from its roots */
2387
+ $rs->genpoly = array_fill(0, $nroots+1, 0);
2388
+
2389
+ $rs->fcr = $fcr;
2390
+ $rs->prim = $prim;
2391
+ $rs->nroots = $nroots;
2392
+ $rs->gfpoly = $gfpoly;
2393
+
2394
+ /* Find prim-th root of 1, used in decoding */
2395
+ for($iprim=1;($iprim % $prim) != 0;$iprim += $rs->nn)
2396
+ ; // intentional empty-body loop!
2397
+
2398
+ $rs->iprim = (int)($iprim / $prim);
2399
+ $rs->genpoly[0] = 1;
2400
+
2401
+ for ($i = 0,$root=$fcr*$prim; $i < $nroots; $i++, $root += $prim) {
2402
+ $rs->genpoly[$i+1] = 1;
2403
+
2404
+ // Multiply rs->genpoly[] by @**(root + x)
2405
+ for ($j = $i; $j > 0; $j--) {
2406
+ if ($rs->genpoly[$j] != 0) {
2407
+ $rs->genpoly[$j] = $rs->genpoly[$j-1] ^ $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[$j]] + $root)];
2408
+ } else {
2409
+ $rs->genpoly[$j] = $rs->genpoly[$j-1];
2410
+ }
2411
+ }
2412
+ // rs->genpoly[0] can never be zero
2413
+ $rs->genpoly[0] = $rs->alpha_to[$rs->modnn($rs->index_of[$rs->genpoly[0]] + $root)];
2414
+ }
2415
+
2416
+ // convert rs->genpoly[] to index form for quicker encoding
2417
+ for ($i = 0; $i <= $nroots; $i++)
2418
+ $rs->genpoly[$i] = $rs->index_of[$rs->genpoly[$i]];
2419
+
2420
+ return $rs;
2421
+ }
2422
+
2423
+ //----------------------------------------------------------------------
2424
+ public function encode_rs_char($data, &$parity)
2425
+ {
2426
+ $MM =& $this->mm;
2427
+ $NN =& $this->nn;
2428
+ $ALPHA_TO =& $this->alpha_to;
2429
+ $INDEX_OF =& $this->index_of;
2430
+ $GENPOLY =& $this->genpoly;
2431
+ $NROOTS =& $this->nroots;
2432
+ $FCR =& $this->fcr;
2433
+ $PRIM =& $this->prim;
2434
+ $IPRIM =& $this->iprim;
2435
+ $PAD =& $this->pad;
2436
+ $A0 =& $NN;
2437
+
2438
+ $parity = array_fill(0, $NROOTS, 0);
2439
+
2440
+ for($i=0; $i< ($NN-$NROOTS-$PAD); $i++) {
2441
+
2442
+ $feedback = $INDEX_OF[$data[$i] ^ $parity[0]];
2443
+ if($feedback != $A0) {
2444
+ // feedback term is non-zero
2445
+
2446
+ // This line is unnecessary when GENPOLY[NROOTS] is unity, as it must
2447
+ // always be for the polynomials constructed by init_rs()
2448
+ $feedback = $this->modnn($NN - $GENPOLY[$NROOTS] + $feedback);
2449
+
2450
+ for($j=1;$j<$NROOTS;$j++) {
2451
+ $parity[$j] ^= $ALPHA_TO[$this->modnn($feedback + $GENPOLY[$NROOTS-$j])];
2452
+ }
2453
+ }
2454
+
2455
+ // Shift
2456
+ array_shift($parity);
2457
+ if($feedback != $A0) {
2458
+ array_push($parity, $ALPHA_TO[$this->modnn($feedback + $GENPOLY[0])]);
2459
+ } else {
2460
+ array_push($parity, 0);
2461
+ }
2462
+ }
2463
+ }
2464
+ }
2465
+
2466
+ //##########################################################################
2467
+
2468
+ class QRrs {
2469
+
2470
+ public static $items = array();
2471
+
2472
+ //----------------------------------------------------------------------
2473
+ public static function init_rs($symsize, $gfpoly, $fcr, $prim, $nroots, $pad)
2474
+ {
2475
+ foreach(self::$items as $rs) {
2476
+ if($rs->pad != $pad) continue;
2477
+ if($rs->nroots != $nroots) continue;
2478
+ if($rs->mm != $symsize) continue;
2479
+ if($rs->gfpoly != $gfpoly) continue;
2480
+ if($rs->fcr != $fcr) continue;
2481
+ if($rs->prim != $prim) continue;
2482
+
2483
+ return $rs;
2484
+ }
2485
+
2486
+ $rs = QRrsItem::init_rs_char($symsize, $gfpoly, $fcr, $prim, $nroots, $pad);
2487
+ array_unshift(self::$items, $rs);
2488
+
2489
+ return $rs;
2490
+ }
2491
+ }
2492
+
2493
+
2494
+
2495
+ //---- qrmask.php -----------------------------
2496
+
2497
+
2498
+
2499
+
2500
+ /*
2501
+ * PHP QR Code encoder
2502
+ *
2503
+ * Masking
2504
+ *
2505
+ * Based on libqrencode C library distributed under LGPL 2.1
2506
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
2507
+ *
2508
+ * PHP QR Code is distributed under LGPL 3
2509
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
2510
+ *
2511
+ * This library is free software; you can redistribute it and/or
2512
+ * modify it under the terms of the GNU Lesser General Public
2513
+ * License as published by the Free Software Foundation; either
2514
+ * version 3 of the License, or any later version.
2515
+ *
2516
+ * This library is distributed in the hope that it will be useful,
2517
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2518
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2519
+ * Lesser General Public License for more details.
2520
+ *
2521
+ * You should have received a copy of the GNU Lesser General Public
2522
+ * License along with this library; if not, write to the Free Software
2523
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2524
+ */
2525
+
2526
+ define('N1', 3);
2527
+ define('N2', 3);
2528
+ define('N3', 40);
2529
+ define('N4', 10);
2530
+
2531
+ class QRmask {
2532
+
2533
+ public $runLength = array();
2534
+
2535
+ //----------------------------------------------------------------------
2536
+ public function __construct()
2537
+ {
2538
+ $this->runLength = array_fill(0, QRSPEC_WIDTH_MAX + 1, 0);
2539
+ }
2540
+
2541
+ //----------------------------------------------------------------------
2542
+ public function writeFormatInformation($width, &$frame, $mask, $level)
2543
+ {
2544
+ $blacks = 0;
2545
+ $format = QRspec::getFormatInfo($mask, $level);
2546
+
2547
+ for($i=0; $i<8; $i++) {
2548
+ if($format & 1) {
2549
+ $blacks += 2;
2550
+ $v = 0x85;
2551
+ } else {
2552
+ $v = 0x84;
2553
+ }
2554
+
2555
+ $frame[8][$width - 1 - $i] = chr($v);
2556
+ if($i < 6) {
2557
+ $frame[$i][8] = chr($v);
2558
+ } else {
2559
+ $frame[$i + 1][8] = chr($v);
2560
+ }
2561
+ $format = $format >> 1;
2562
+ }
2563
+
2564
+ for($i=0; $i<7; $i++) {
2565
+ if($format & 1) {
2566
+ $blacks += 2;
2567
+ $v = 0x85;
2568
+ } else {
2569
+ $v = 0x84;
2570
+ }
2571
+
2572
+ $frame[$width - 7 + $i][8] = chr($v);
2573
+ if($i == 0) {
2574
+ $frame[8][7] = chr($v);
2575
+ } else {
2576
+ $frame[8][6 - $i] = chr($v);
2577
+ }
2578
+
2579
+ $format = $format >> 1;
2580
+ }
2581
+
2582
+ return $blacks;
2583
+ }
2584
+
2585
+ //----------------------------------------------------------------------
2586
+ public function mask0($x, $y) { return ($x+$y)&1; }
2587
+ public function mask1($x, $y) { return ($y&1); }
2588
+ public function mask2($x, $y) { return ($x%3); }
2589
+ public function mask3($x, $y) { return ($x+$y)%3; }
2590
+ public function mask4($x, $y) { return (((int)($y/2))+((int)($x/3)))&1; }
2591
+ public function mask5($x, $y) { return (($x*$y)&1)+($x*$y)%3; }
2592
+ public function mask6($x, $y) { return ((($x*$y)&1)+($x*$y)%3)&1; }
2593
+ public function mask7($x, $y) { return ((($x*$y)%3)+(($x+$y)&1))&1; }
2594
+
2595
+ //----------------------------------------------------------------------
2596
+ private function generateMaskNo($maskNo, $width, $frame)
2597
+ {
2598
+ $bitMask = array_fill(0, $width, array_fill(0, $width, 0));
2599
+
2600
+ for($y=0; $y<$width; $y++) {
2601
+ for($x=0; $x<$width; $x++) {
2602
+ if(ord($frame[$y][$x]) & 0x80) {
2603
+ $bitMask[$y][$x] = 0;
2604
+ } else {
2605
+ $maskFunc = call_user_func(array($this, 'mask'.$maskNo), $x, $y);
2606
+ $bitMask[$y][$x] = ($maskFunc == 0)?1:0;
2607
+ }
2608
+
2609
+ }
2610
+ }
2611
+
2612
+ return $bitMask;
2613
+ }
2614
+
2615
+ //----------------------------------------------------------------------
2616
+ public static function serial($bitFrame)
2617
+ {
2618
+ $codeArr = array();
2619
+
2620
+ foreach ($bitFrame as $line)
2621
+ $codeArr[] = join('', $line);
2622
+
2623
+ return gzcompress(join("\n", $codeArr), 9);
2624
+ }
2625
+
2626
+ //----------------------------------------------------------------------
2627
+ public static function unserial($code)
2628
+ {
2629
+ $codeArr = array();
2630
+
2631
+ $codeLines = explode("\n", gzuncompress($code));
2632
+ foreach ($codeLines as $line)
2633
+ $codeArr[] = str_split($line);
2634
+
2635
+ return $codeArr;
2636
+ }
2637
+
2638
+ //----------------------------------------------------------------------
2639
+ public function makeMaskNo($maskNo, $width, $s, &$d, $maskGenOnly = false)
2640
+ {
2641
+ $b = 0;
2642
+ $bitMask = array();
2643
+
2644
+ $fileName = QR_CACHE_DIR.'mask_'.$maskNo.DIRECTORY_SEPARATOR.'mask_'.$width.'_'.$maskNo.'.dat';
2645
+
2646
+ if (QR_CACHEABLE) {
2647
+ if (file_exists($fileName)) {
2648
+ $bitMask = self::unserial(file_get_contents($fileName));
2649
+ } else {
2650
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
2651
+ if (!file_exists(QR_CACHE_DIR.'mask_'.$maskNo))
2652
+ mkdir(QR_CACHE_DIR.'mask_'.$maskNo);
2653
+ file_put_contents($fileName, self::serial($bitMask));
2654
+ }
2655
+ } else {
2656
+ $bitMask = $this->generateMaskNo($maskNo, $width, $s, $d);
2657
+ }
2658
+
2659
+ if ($maskGenOnly)
2660
+ return;
2661
+
2662
+ $d = $s;
2663
+
2664
+ for($y=0; $y<$width; $y++) {
2665
+ for($x=0; $x<$width; $x++) {
2666
+ if($bitMask[$y][$x] == 1) {
2667
+ $d[$y][$x] = chr(ord($s[$y][$x]) ^ (int)$bitMask[$y][$x]);
2668
+ }
2669
+ $b += (int)(ord($d[$y][$x]) & 1);
2670
+ }
2671
+ }
2672
+
2673
+ return $b;
2674
+ }
2675
+
2676
+ //----------------------------------------------------------------------
2677
+ public function makeMask($width, $frame, $maskNo, $level)
2678
+ {
2679
+ $masked = array_fill(0, $width, str_repeat("\0", $width));
2680
+ $this->makeMaskNo($maskNo, $width, $frame, $masked);
2681
+ $this->writeFormatInformation($width, $masked, $maskNo, $level);
2682
+
2683
+ return $masked;
2684
+ }
2685
+
2686
+ //----------------------------------------------------------------------
2687
+ public function calcN1N3($length)
2688
+ {
2689
+ $demerit = 0;
2690
+
2691
+ for($i=0; $i<$length; $i++) {
2692
+
2693
+ if($this->runLength[$i] >= 5) {
2694
+ $demerit += (N1 + ($this->runLength[$i] - 5));
2695
+ }
2696
+ if($i & 1) {
2697
+ if(($i >= 3) && ($i < ($length-2)) && ($this->runLength[$i] % 3 == 0)) {
2698
+ $fact = (int)($this->runLength[$i] / 3);
2699
+ if(($this->runLength[$i-2] == $fact) &&
2700
+ ($this->runLength[$i-1] == $fact) &&
2701
+ ($this->runLength[$i+1] == $fact) &&
2702
+ ($this->runLength[$i+2] == $fact)) {
2703
+ if(($this->runLength[$i-3] < 0) || ($this->runLength[$i-3] >= (4 * $fact))) {
2704
+ $demerit += N3;
2705
+ } else if((($i+3) >= $length) || ($this->runLength[$i+3] >= (4 * $fact))) {
2706
+ $demerit += N3;
2707
+ }
2708
+ }
2709
+ }
2710
+ }
2711
+ }
2712
+ return $demerit;
2713
+ }
2714
+
2715
+ //----------------------------------------------------------------------
2716
+ public function evaluateSymbol($width, $frame)
2717
+ {
2718
+ $head = 0;
2719
+ $demerit = 0;
2720
+
2721
+ for($y=0; $y<$width; $y++) {
2722
+ $head = 0;
2723
+ $this->runLength[0] = 1;
2724
+
2725
+ $frameY = $frame[$y];
2726
+
2727
+ if ($y>0)
2728
+ $frameYM = $frame[$y-1];
2729
+
2730
+ for($x=0; $x<$width; $x++) {
2731
+ if(($x > 0) && ($y > 0)) {
2732
+ $b22 = ord($frameY[$x]) & ord($frameY[$x-1]) & ord($frameYM[$x]) & ord($frameYM[$x-1]);
2733
+ $w22 = ord($frameY[$x]) | ord($frameY[$x-1]) | ord($frameYM[$x]) | ord($frameYM[$x-1]);
2734
+
2735
+ if(($b22 | ($w22 ^ 1))&1) {
2736
+ $demerit += N2;
2737
+ }
2738
+ }
2739
+ if(($x == 0) && (ord($frameY[$x]) & 1)) {
2740
+ $this->runLength[0] = -1;
2741
+ $head = 1;
2742
+ $this->runLength[$head] = 1;
2743
+ } else if($x > 0) {
2744
+ if((ord($frameY[$x]) ^ ord($frameY[$x-1])) & 1) {
2745
+ $head++;
2746
+ $this->runLength[$head] = 1;
2747
+ } else {
2748
+ $this->runLength[$head]++;
2749
+ }
2750
+ }
2751
+ }
2752
+
2753
+ $demerit += $this->calcN1N3($head+1);
2754
+ }
2755
+
2756
+ for($x=0; $x<$width; $x++) {
2757
+ $head = 0;
2758
+ $this->runLength[0] = 1;
2759
+
2760
+ for($y=0; $y<$width; $y++) {
2761
+ if($y == 0 && (ord($frame[$y][$x]) & 1)) {
2762
+ $this->runLength[0] = -1;
2763
+ $head = 1;
2764
+ $this->runLength[$head] = 1;
2765
+ } else if($y > 0) {
2766
+ if((ord($frame[$y][$x]) ^ ord($frame[$y-1][$x])) & 1) {
2767
+ $head++;
2768
+ $this->runLength[$head] = 1;
2769
+ } else {
2770
+ $this->runLength[$head]++;
2771
+ }
2772
+ }
2773
+ }
2774
+
2775
+ $demerit += $this->calcN1N3($head+1);
2776
+ }
2777
+
2778
+ return $demerit;
2779
+ }
2780
+
2781
+
2782
+ //----------------------------------------------------------------------
2783
+ public function mask($width, $frame, $level)
2784
+ {
2785
+ $minDemerit = PHP_INT_MAX;
2786
+ $bestMaskNum = 0;
2787
+ $bestMask = array();
2788
+
2789
+ $checked_masks = array(0,1,2,3,4,5,6,7);
2790
+
2791
+ if (QR_FIND_FROM_RANDOM !== false) {
2792
+
2793
+ $howManuOut = 8-(QR_FIND_FROM_RANDOM % 9);
2794
+ for ($i = 0; $i < $howManuOut; $i++) {
2795
+ $remPos = rand (0, count($checked_masks)-1);
2796
+ unset($checked_masks[$remPos]);
2797
+ $checked_masks = array_values($checked_masks);
2798
+ }
2799
+
2800
+ }
2801
+
2802
+ $bestMask = $frame;
2803
+
2804
+ foreach($checked_masks as $i) {
2805
+ $mask = array_fill(0, $width, str_repeat("\0", $width));
2806
+
2807
+ $demerit = 0;
2808
+ $blacks = 0;
2809
+ $blacks = $this->makeMaskNo($i, $width, $frame, $mask);
2810
+ $blacks += $this->writeFormatInformation($width, $mask, $i, $level);
2811
+ $blacks = (int)(100 * $blacks / ($width * $width));
2812
+ $demerit = (int)((int)(abs($blacks - 50) / 5) * N4);
2813
+ $demerit += $this->evaluateSymbol($width, $mask);
2814
+
2815
+ if($demerit < $minDemerit) {
2816
+ $minDemerit = $demerit;
2817
+ $bestMask = $mask;
2818
+ $bestMaskNum = $i;
2819
+ }
2820
+ }
2821
+
2822
+ return $bestMask;
2823
+ }
2824
+
2825
+ //----------------------------------------------------------------------
2826
+ }
2827
+
2828
+
2829
+
2830
+
2831
+ //---- qrencode.php -----------------------------
2832
+
2833
+
2834
+
2835
+
2836
+ /*
2837
+ * PHP QR Code encoder
2838
+ *
2839
+ * Main encoder classes.
2840
+ *
2841
+ * Based on libqrencode C library distributed under LGPL 2.1
2842
+ * Copyright (C) 2006, 2007, 2008, 2009 Kentaro Fukuchi <fukuchi@megaui.net>
2843
+ *
2844
+ * PHP QR Code is distributed under LGPL 3
2845
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
2846
+ *
2847
+ * This library is free software; you can redistribute it and/or
2848
+ * modify it under the terms of the GNU Lesser General Public
2849
+ * License as published by the Free Software Foundation; either
2850
+ * version 3 of the License, or any later version.
2851
+ *
2852
+ * This library is distributed in the hope that it will be useful,
2853
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
2854
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
2855
+ * Lesser General Public License for more details.
2856
+ *
2857
+ * You should have received a copy of the GNU Lesser General Public
2858
+ * License along with this library; if not, write to the Free Software
2859
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
2860
+ */
2861
+
2862
+ class QRrsblock {
2863
+ public $dataLength;
2864
+ public $data = array();
2865
+ public $eccLength;
2866
+ public $ecc = array();
2867
+
2868
+ public function __construct($dl, $data, $el, &$ecc, QRrsItem $rs)
2869
+ {
2870
+ $rs->encode_rs_char($data, $ecc);
2871
+
2872
+ $this->dataLength = $dl;
2873
+ $this->data = $data;
2874
+ $this->eccLength = $el;
2875
+ $this->ecc = $ecc;
2876
+ }
2877
+ };
2878
+
2879
+ //##########################################################################
2880
+
2881
+ class QRrawcode {
2882
+ public $version;
2883
+ public $datacode = array();
2884
+ public $ecccode = array();
2885
+ public $blocks;
2886
+ public $rsblocks = array(); //of RSblock
2887
+ public $count;
2888
+ public $dataLength;
2889
+ public $eccLength;
2890
+ public $b1;
2891
+
2892
+ //----------------------------------------------------------------------
2893
+ public function __construct(QRinput $input)
2894
+ {
2895
+ $spec = array(0,0,0,0,0);
2896
+
2897
+ $this->datacode = $input->getByteStream();
2898
+ if(is_null($this->datacode)) {
2899
+ throw new Exception('null imput string');
2900
+ }
2901
+
2902
+ QRspec::getEccSpec($input->getVersion(), $input->getErrorCorrectionLevel(), $spec);
2903
+
2904
+ $this->version = $input->getVersion();
2905
+ $this->b1 = QRspec::rsBlockNum1($spec);
2906
+ $this->dataLength = QRspec::rsDataLength($spec);
2907
+ $this->eccLength = QRspec::rsEccLength($spec);
2908
+ $this->ecccode = array_fill(0, $this->eccLength, 0);
2909
+ $this->blocks = QRspec::rsBlockNum($spec);
2910
+
2911
+ $ret = $this->init($spec);
2912
+ if($ret < 0) {
2913
+ throw new Exception('block alloc error');
2914
+ return null;
2915
+ }
2916
+
2917
+ $this->count = 0;
2918
+ }
2919
+
2920
+ //----------------------------------------------------------------------
2921
+ public function init(array $spec)
2922
+ {
2923
+ $dl = QRspec::rsDataCodes1($spec);
2924
+ $el = QRspec::rsEccCodes1($spec);
2925
+ $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
2926
+
2927
+
2928
+ $blockNo = 0;
2929
+ $dataPos = 0;
2930
+ $eccPos = 0;
2931
+ for($i=0; $i<QRspec::rsBlockNum1($spec); $i++) {
2932
+ $ecc = array_slice($this->ecccode,$eccPos);
2933
+ $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs);
2934
+ $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
2935
+
2936
+ $dataPos += $dl;
2937
+ $eccPos += $el;
2938
+ $blockNo++;
2939
+ }
2940
+
2941
+ if(QRspec::rsBlockNum2($spec) == 0)
2942
+ return 0;
2943
+
2944
+ $dl = QRspec::rsDataCodes2($spec);
2945
+ $el = QRspec::rsEccCodes2($spec);
2946
+ $rs = QRrs::init_rs(8, 0x11d, 0, 1, $el, 255 - $dl - $el);
2947
+
2948
+ if($rs == NULL) return -1;
2949
+
2950
+ for($i=0; $i<QRspec::rsBlockNum2($spec); $i++) {
2951
+ $ecc = array_slice($this->ecccode,$eccPos);
2952
+ $this->rsblocks[$blockNo] = new QRrsblock($dl, array_slice($this->datacode, $dataPos), $el, $ecc, $rs);
2953
+ $this->ecccode = array_merge(array_slice($this->ecccode,0, $eccPos), $ecc);
2954
+
2955
+ $dataPos += $dl;
2956
+ $eccPos += $el;
2957
+ $blockNo++;
2958
+ }
2959
+
2960
+ return 0;
2961
+ }
2962
+
2963
+ //----------------------------------------------------------------------
2964
+ public function getCode()
2965
+ {
2966
+ $ret;
2967
+
2968
+ if($this->count < $this->dataLength) {
2969
+ $row = $this->count % $this->blocks;
2970
+ $col = $this->count / $this->blocks;
2971
+ if($col >= $this->rsblocks[0]->dataLength) {
2972
+ $row += $this->b1;
2973
+ }
2974
+ $ret = $this->rsblocks[$row]->data[$col];
2975
+ } else if($this->count < $this->dataLength + $this->eccLength) {
2976
+ $row = ($this->count - $this->dataLength) % $this->blocks;
2977
+ $col = ($this->count - $this->dataLength) / $this->blocks;
2978
+ $ret = $this->rsblocks[$row]->ecc[$col];
2979
+ } else {
2980
+ return 0;
2981
+ }
2982
+ $this->count++;
2983
+
2984
+ return $ret;
2985
+ }
2986
+ }
2987
+
2988
+ //##########################################################################
2989
+
2990
+ class QRcode {
2991
+
2992
+ public $version;
2993
+ public $width;
2994
+ public $data;
2995
+
2996
+ //----------------------------------------------------------------------
2997
+ public function encodeMask(QRinput $input, $mask)
2998
+ {
2999
+ if($input->getVersion() < 0 || $input->getVersion() > QRSPEC_VERSION_MAX) {
3000
+ throw new Exception('wrong version');
3001
+ }
3002
+ if($input->getErrorCorrectionLevel() > QR_ECLEVEL_H) {
3003
+ throw new Exception('wrong level');
3004
+ }
3005
+
3006
+ $raw = new QRrawcode($input);
3007
+
3008
+ QRtools::markTime('after_raw');
3009
+
3010
+ $version = $raw->version;
3011
+ $width = QRspec::getWidth($version);
3012
+ $frame = QRspec::newFrame($version);
3013
+
3014
+ $filler = new FrameFiller($width, $frame);
3015
+ if(is_null($filler)) {
3016
+ return NULL;
3017
+ }
3018
+
3019
+ // inteleaved data and ecc codes
3020
+ for($i=0; $i<$raw->dataLength + $raw->eccLength; $i++) {
3021
+ $code = $raw->getCode();
3022
+ $bit = 0x80;
3023
+ for($j=0; $j<8; $j++) {
3024
+ $addr = $filler->next();
3025
+ $filler->setFrameAt($addr, 0x02 | (($bit & $code) != 0));
3026
+ $bit = $bit >> 1;
3027
+ }
3028
+ }
3029
+
3030
+ QRtools::markTime('after_filler');
3031
+
3032
+ unset($raw);
3033
+
3034
+ // remainder bits
3035
+ $j = QRspec::getRemainder($version);
3036
+ for($i=0; $i<$j; $i++) {
3037
+ $addr = $filler->next();
3038
+ $filler->setFrameAt($addr, 0x02);
3039
+ }
3040
+
3041
+ $frame = $filler->frame;
3042
+ unset($filler);
3043
+
3044
+
3045
+ // masking
3046
+ $maskObj = new QRmask();
3047
+ if($mask < 0) {
3048
+
3049
+ if (QR_FIND_BEST_MASK) {
3050
+ $masked = $maskObj->mask($width, $frame, $input->getErrorCorrectionLevel());
3051
+ } else {
3052
+ $masked = $maskObj->makeMask($width, $frame, (intval(QR_DEFAULT_MASK) % 8), $input->getErrorCorrectionLevel());
3053
+ }
3054
+ } else {
3055
+ $masked = $maskObj->makeMask($width, $frame, $mask, $input->getErrorCorrectionLevel());
3056
+ }
3057
+
3058
+ if($masked == NULL) {
3059
+ return NULL;
3060
+ }
3061
+
3062
+ QRtools::markTime('after_mask');
3063
+
3064
+ $this->version = $version;
3065
+ $this->width = $width;
3066
+ $this->data = $masked;
3067
+
3068
+ return $this;
3069
+ }
3070
+
3071
+ //----------------------------------------------------------------------
3072
+ public function encodeInput(QRinput $input)
3073
+ {
3074
+ return $this->encodeMask($input, -1);
3075
+ }
3076
+
3077
+ //----------------------------------------------------------------------
3078
+ public function encodeString8bit($string, $version, $level)
3079
+ {
3080
+ if(string == NULL) {
3081
+ throw new Exception('empty string!');
3082
+ return NULL;
3083
+ }
3084
+
3085
+ $input = new QRinput($version, $level);
3086
+ if($input == NULL) return NULL;
3087
+
3088
+ $ret = $input->append($input, QR_MODE_8, strlen($string), str_split($string));
3089
+ if($ret < 0) {
3090
+ unset($input);
3091
+ return NULL;
3092
+ }
3093
+ return $this->encodeInput($input);
3094
+ }
3095
+
3096
+ //----------------------------------------------------------------------
3097
+ public function encodeString($string, $version, $level, $hint, $casesensitive)
3098
+ {
3099
+
3100
+ if($hint != QR_MODE_8 && $hint != QR_MODE_KANJI) {
3101
+ throw new Exception('bad hint');
3102
+ return NULL;
3103
+ }
3104
+
3105
+ $input = new QRinput($version, $level);
3106
+ if($input == NULL) return NULL;
3107
+
3108
+ $ret = QRsplit::splitStringToQRinput($string, $input, $hint, $casesensitive);
3109
+ if($ret < 0) {
3110
+ return NULL;
3111
+ }
3112
+
3113
+ return $this->encodeInput($input);
3114
+ }
3115
+
3116
+ //----------------------------------------------------------------------
3117
+ public static function png($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000)
3118
+ {
3119
+ $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color);
3120
+ return $enc->encodePNG($text, $outfile, $saveandprint=false);
3121
+ }
3122
+
3123
+ //----------------------------------------------------------------------
3124
+ public static function text($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)
3125
+ {
3126
+ $enc = QRencode::factory($level, $size, $margin);
3127
+ return $enc->encode($text, $outfile);
3128
+ }
3129
+
3130
+ //----------------------------------------------------------------------
3131
+ public static function eps($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
3132
+ {
3133
+ $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color, $cmyk);
3134
+ return $enc->encodeEPS($text, $outfile, $saveandprint=false);
3135
+ }
3136
+
3137
+ //----------------------------------------------------------------------
3138
+ public static function svg($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4, $saveandprint=false, $back_color = 0xFFFFFF, $fore_color = 0x000000)
3139
+ {
3140
+ $enc = QRencode::factory($level, $size, $margin, $back_color, $fore_color);
3141
+ return $enc->encodeSVG($text, $outfile, $saveandprint=false);
3142
+ }
3143
+
3144
+ //----------------------------------------------------------------------
3145
+ public static function raw($text, $outfile = false, $level = QR_ECLEVEL_L, $size = 3, $margin = 4)
3146
+ {
3147
+ $enc = QRencode::factory($level, $size, $margin);
3148
+ return $enc->encodeRAW($text, $outfile);
3149
+ }
3150
+ }
3151
+
3152
+ //##########################################################################
3153
+
3154
+ class FrameFiller {
3155
+
3156
+ public $width;
3157
+ public $frame;
3158
+ public $x;
3159
+ public $y;
3160
+ public $dir;
3161
+ public $bit;
3162
+
3163
+ //----------------------------------------------------------------------
3164
+ public function __construct($width, &$frame)
3165
+ {
3166
+ $this->width = $width;
3167
+ $this->frame = $frame;
3168
+ $this->x = $width - 1;
3169
+ $this->y = $width - 1;
3170
+ $this->dir = -1;
3171
+ $this->bit = -1;
3172
+ }
3173
+
3174
+ //----------------------------------------------------------------------
3175
+ public function setFrameAt($at, $val)
3176
+ {
3177
+ $this->frame[$at['y']][$at['x']] = chr($val);
3178
+ }
3179
+
3180
+ //----------------------------------------------------------------------
3181
+ public function getFrameAt($at)
3182
+ {
3183
+ return ord($this->frame[$at['y']][$at['x']]);
3184
+ }
3185
+
3186
+ //----------------------------------------------------------------------
3187
+ public function next()
3188
+ {
3189
+ do {
3190
+
3191
+ if($this->bit == -1) {
3192
+ $this->bit = 0;
3193
+ return array('x'=>$this->x, 'y'=>$this->y);
3194
+ }
3195
+
3196
+ $x = $this->x;
3197
+ $y = $this->y;
3198
+ $w = $this->width;
3199
+
3200
+ if($this->bit == 0) {
3201
+ $x--;
3202
+ $this->bit++;
3203
+ } else {
3204
+ $x++;
3205
+ $y += $this->dir;
3206
+ $this->bit--;
3207
+ }
3208
+
3209
+ if($this->dir < 0) {
3210
+ if($y < 0) {
3211
+ $y = 0;
3212
+ $x -= 2;
3213
+ $this->dir = 1;
3214
+ if($x == 6) {
3215
+ $x--;
3216
+ $y = 9;
3217
+ }
3218
+ }
3219
+ } else {
3220
+ if($y == $w) {
3221
+ $y = $w - 1;
3222
+ $x -= 2;
3223
+ $this->dir = -1;
3224
+ if($x == 6) {
3225
+ $x--;
3226
+ $y -= 8;
3227
+ }
3228
+ }
3229
+ }
3230
+ if($x < 0 || $y < 0) return null;
3231
+
3232
+ $this->x = $x;
3233
+ $this->y = $y;
3234
+
3235
+ } while(ord($this->frame[$y][$x]) & 0x80);
3236
+
3237
+ return array('x'=>$x, 'y'=>$y);
3238
+ }
3239
+
3240
+ } ;
3241
+
3242
+ //##########################################################################
3243
+
3244
+ class QRencode {
3245
+
3246
+ public $casesensitive = true;
3247
+ public $eightbit = false;
3248
+
3249
+ public $version = 0;
3250
+ public $size = 3;
3251
+ public $margin = 4;
3252
+ public $back_color = 0xFFFFFF;
3253
+ public $fore_color = 0x000000;
3254
+
3255
+ public $structured = 0; // not supported yet
3256
+
3257
+ public $level = QR_ECLEVEL_L;
3258
+ public $hint = QR_MODE_8;
3259
+
3260
+ //----------------------------------------------------------------------
3261
+ public static function factory($level = QR_ECLEVEL_L, $size = 3, $margin = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
3262
+ {
3263
+ $enc = new QRencode();
3264
+ $enc->size = $size;
3265
+ $enc->margin = $margin;
3266
+ $enc->fore_color = $fore_color;
3267
+ $enc->back_color = $back_color;
3268
+ $enc->cmyk = $cmyk;
3269
+
3270
+ switch ($level.'') {
3271
+ case '0':
3272
+ case '1':
3273
+ case '2':
3274
+ case '3':
3275
+ $enc->level = $level;
3276
+ break;
3277
+ case 'l':
3278
+ case 'L':
3279
+ $enc->level = QR_ECLEVEL_L;
3280
+ break;
3281
+ case 'm':
3282
+ case 'M':
3283
+ $enc->level = QR_ECLEVEL_M;
3284
+ break;
3285
+ case 'q':
3286
+ case 'Q':
3287
+ $enc->level = QR_ECLEVEL_Q;
3288
+ break;
3289
+ case 'h':
3290
+ case 'H':
3291
+ $enc->level = QR_ECLEVEL_H;
3292
+ break;
3293
+ }
3294
+
3295
+ return $enc;
3296
+ }
3297
+
3298
+ //----------------------------------------------------------------------
3299
+ public function encodeRAW($intext, $outfile = false)
3300
+ {
3301
+ $code = new QRcode();
3302
+
3303
+ if($this->eightbit) {
3304
+ $code->encodeString8bit($intext, $this->version, $this->level);
3305
+ } else {
3306
+ $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);
3307
+ }
3308
+
3309
+ return $code->data;
3310
+ }
3311
+
3312
+ //----------------------------------------------------------------------
3313
+ public function encode($intext, $outfile = false)
3314
+ {
3315
+ $code = new QRcode();
3316
+
3317
+ if($this->eightbit) {
3318
+ $code->encodeString8bit($intext, $this->version, $this->level);
3319
+ } else {
3320
+ $code->encodeString($intext, $this->version, $this->level, $this->hint, $this->casesensitive);
3321
+ }
3322
+
3323
+ QRtools::markTime('after_encode');
3324
+
3325
+ if ($outfile!== false) {
3326
+ file_put_contents($outfile, join("\n", QRtools::binarize($code->data)));
3327
+ } else {
3328
+ return QRtools::binarize($code->data);
3329
+ }
3330
+ }
3331
+
3332
+ //----------------------------------------------------------------------
3333
+ public function encodePNG($intext, $outfile = false,$saveandprint=false)
3334
+ {
3335
+ try {
3336
+
3337
+ ob_start();
3338
+ $tab = $this->encode($intext);
3339
+ $err = ob_get_contents();
3340
+ ob_end_clean();
3341
+
3342
+ if ($err != '')
3343
+ QRtools::log($outfile, $err);
3344
+
3345
+ $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
3346
+
3347
+ QRimage::png($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color);
3348
+
3349
+ } catch (Exception $e) {
3350
+
3351
+ QRtools::log($outfile, $e->getMessage());
3352
+
3353
+ }
3354
+ }
3355
+
3356
+ //----------------------------------------------------------------------
3357
+ public function encodeEPS($intext, $outfile = false,$saveandprint=false)
3358
+ {
3359
+ try {
3360
+
3361
+ ob_start();
3362
+ $tab = $this->encode($intext);
3363
+ $err = ob_get_contents();
3364
+ ob_end_clean();
3365
+
3366
+ if ($err != '')
3367
+ QRtools::log($outfile, $err);
3368
+
3369
+ $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
3370
+
3371
+ QRvect::eps($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color, $this->cmyk);
3372
+
3373
+ } catch (Exception $e) {
3374
+
3375
+ QRtools::log($outfile, $e->getMessage());
3376
+
3377
+ }
3378
+ }
3379
+
3380
+ //----------------------------------------------------------------------
3381
+ public function encodeSVG($intext, $outfile = false,$saveandprint=false)
3382
+ {
3383
+ try {
3384
+
3385
+ ob_start();
3386
+ $tab = $this->encode($intext);
3387
+ $err = ob_get_contents();
3388
+ ob_end_clean();
3389
+
3390
+ if ($err != '')
3391
+ QRtools::log($outfile, $err);
3392
+
3393
+ $maxSize = (int)(QR_PNG_MAXIMUM_SIZE / (count($tab)+2*$this->margin));
3394
+
3395
+ QRvect::svg($tab, $outfile, min(max(1, $this->size), $maxSize), $this->margin,$saveandprint, $this->back_color, $this->fore_color);
3396
+
3397
+ } catch (Exception $e) {
3398
+
3399
+ QRtools::log($outfile, $e->getMessage());
3400
+
3401
+ }
3402
+ }
3403
+ }
3404
+
3405
+
3406
+
3407
+
3408
+ //---- qrvect.php -----------------------------
3409
+
3410
+
3411
+
3412
+
3413
+ /*
3414
+ * PHP QR Code encoder
3415
+ *
3416
+ * Image output of code using GD2
3417
+ *
3418
+ * PHP QR Code is distributed under LGPL 3
3419
+ * Copyright (C) 2010 Dominik Dzienia <deltalab at poczta dot fm>
3420
+ *
3421
+ * This library is free software; you can redistribute it and/or
3422
+ * modify it under the terms of the GNU Lesser General Public
3423
+ * License as published by the Free Software Foundation; either
3424
+ * version 3 of the License, or any later version.
3425
+ *
3426
+ * This library is distributed in the hope that it will be useful,
3427
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3428
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
3429
+ * Lesser General Public License for more details.
3430
+ *
3431
+ * You should have received a copy of the GNU Lesser General Public
3432
+ * License along with this library; if not, write to the Free Software
3433
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
3434
+ */
3435
+
3436
+ define('QR_VECT', true);
3437
+
3438
+ class QRvect {
3439
+
3440
+ //----------------------------------------------------------------------
3441
+ public static function eps($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
3442
+ {
3443
+ $vect = self::vectEPS($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color, $cmyk);
3444
+
3445
+ if ($filename === false) {
3446
+ header("Content-Type: application/postscript");
3447
+ header('Content-Disposition: filename="qrcode.eps"');
3448
+ echo $vect;
3449
+ } else {
3450
+ if($saveandprint===TRUE){
3451
+ QRtools::save($vect, $filename);
3452
+ header("Content-Type: application/postscript");
3453
+ header('Content-Disposition: filename="qrcode.eps"');
3454
+ echo $vect;
3455
+ }else{
3456
+ QRtools::save($vect, $filename);
3457
+ }
3458
+ }
3459
+ }
3460
+
3461
+
3462
+ //----------------------------------------------------------------------
3463
+ private static function vectEPS($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000, $cmyk = false)
3464
+ {
3465
+ $h = count($frame);
3466
+ $w = strlen($frame[0]);
3467
+
3468
+ $imgW = $w + 2*$outerFrame;
3469
+ $imgH = $h + 2*$outerFrame;
3470
+
3471
+ if ($cmyk)
3472
+ {
3473
+ // convert color value into decimal eps format
3474
+ $c = round((($fore_color & 0xFF000000) >> 16) / 255, 5);
3475
+ $m = round((($fore_color & 0x00FF0000) >> 16) / 255, 5);
3476
+ $y = round((($fore_color & 0x0000FF00) >> 8) / 255, 5);
3477
+ $k = round(($fore_color & 0x000000FF) / 255, 5);
3478
+ $fore_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n";
3479
+
3480
+ // convert color value into decimal eps format
3481
+ $c = round((($back_color & 0xFF000000) >> 16) / 255, 5);
3482
+ $m = round((($back_color & 0x00FF0000) >> 16) / 255, 5);
3483
+ $y = round((($back_color & 0x0000FF00) >> 8) / 255, 5);
3484
+ $k = round(($back_color & 0x000000FF) / 255, 5);
3485
+ $back_color_string = $c.' '.$m.' '.$y.' '.$k.' setcmykcolor'."\n";
3486
+ }
3487
+ else
3488
+ {
3489
+ // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
3490
+ $r = round((($fore_color & 0xFF0000) >> 16) / 255, 5);
3491
+ $b = round((($fore_color & 0x00FF00) >> 8) / 255, 5);
3492
+ $g = round(($fore_color & 0x0000FF) / 255, 5);
3493
+ $fore_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n";
3494
+
3495
+ // convert a hexadecimal color code into decimal eps format (green = 0 1 0, blue = 0 0 1, ...)
3496
+ $r = round((($back_color & 0xFF0000) >> 16) / 255, 5);
3497
+ $b = round((($back_color & 0x00FF00) >> 8) / 255, 5);
3498
+ $g = round(($back_color & 0x0000FF) / 255, 5);
3499
+ $back_color_string = $r.' '.$b.' '.$g.' setrgbcolor'."\n";
3500
+ }
3501
+
3502
+ $output =
3503
+ '%!PS-Adobe EPSF-3.0'."\n".
3504
+ '%%Creator: PHPQrcodeLib'."\n".
3505
+ '%%Title: QRcode'."\n".
3506
+ '%%CreationDate: '.date('Y-m-d')."\n".
3507
+ '%%DocumentData: Clean7Bit'."\n".
3508
+ '%%LanguageLevel: 2'."\n".
3509
+ '%%Pages: 1'."\n".
3510
+ '%%BoundingBox: 0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint."\n";
3511
+
3512
+ // set the scale
3513
+ $output .= $pixelPerPoint.' '.$pixelPerPoint.' scale'."\n";
3514
+ // position the center of the coordinate system
3515
+
3516
+ $output .= $outerFrame.' '.$outerFrame.' translate'."\n";
3517
+
3518
+
3519
+
3520
+
3521
+ // redefine the 'rectfill' operator to shorten the syntax
3522
+ $output .= '/F { rectfill } def'."\n";
3523
+
3524
+ // set the symbol color
3525
+ $output .= $back_color_string;
3526
+ $output .= '-'.$outerFrame.' -'.$outerFrame.' '.($w + 2*$outerFrame).' '.($h + 2*$outerFrame).' F'."\n";
3527
+
3528
+
3529
+ // set the symbol color
3530
+ $output .= $fore_color_string;
3531
+
3532
+ // Convert the matrix into pixels
3533
+
3534
+ for($i=0; $i<$h; $i++) {
3535
+ for($j=0; $j<$w; $j++) {
3536
+ if( $frame[$i][$j] == '1') {
3537
+ $y = $h - 1 - $i;
3538
+ $x = $j;
3539
+ $output .= $x.' '.$y.' 1 1 F'."\n";
3540
+ }
3541
+ }
3542
+ }
3543
+
3544
+
3545
+ $output .='%%EOF';
3546
+
3547
+ return $output;
3548
+ }
3549
+
3550
+ //----------------------------------------------------------------------
3551
+ public static function svg($frame, $filename = false, $pixelPerPoint = 4, $outerFrame = 4,$saveandprint=FALSE, $back_color, $fore_color)
3552
+ {
3553
+ $vect = self::vectSVG($frame, $pixelPerPoint, $outerFrame, $back_color, $fore_color);
3554
+
3555
+ if ($filename === false) {
3556
+ //header("Content-Type: image/svg+xml");
3557
+ //header('Content-Disposition: attachment, filename="qrcode.svg"');
3558
+ echo $vect;
3559
+ } else {
3560
+ if($saveandprint===TRUE){
3561
+ QRtools::save($vect, $filename);
3562
+ header("Content-Type: image/svg+xml");
3563
+ //header('Content-Disposition: filename="'.$filename.'"');
3564
+ echo $vect;
3565
+ }else{
3566
+ QRtools::save($vect, $filename);
3567
+ }
3568
+ }
3569
+ }
3570
+
3571
+
3572
+ //----------------------------------------------------------------------
3573
+ private static function vectSVG($frame, $pixelPerPoint = 4, $outerFrame = 4, $back_color = 0xFFFFFF, $fore_color = 0x000000)
3574
+ {
3575
+ $h = count($frame);
3576
+ $w = strlen($frame[0]);
3577
+
3578
+ $imgW = $w + 2*$outerFrame;
3579
+ $imgH = $h + 2*$outerFrame;
3580
+
3581
+
3582
+ $output =
3583
+ '<?xml version="1.0" encoding="utf-8"?>'."\n".
3584
+ '<svg version="1.1" baseProfile="full" width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" viewBox="0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint.'"
3585
+ xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ev="http://www.w3.org/2001/xml-events">'."\n".
3586
+ '<desc></desc>'."\n";
3587
+
3588
+ $output =
3589
+ '<?xml version="1.0" encoding="utf-8"?>'."\n".
3590
+ '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN" "http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">'."\n".
3591
+ '<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" xmlns:xlink="http://www.w3.org/1999/xlink" width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" viewBox="0 0 '.$imgW * $pixelPerPoint.' '.$imgH * $pixelPerPoint.'">'."\n".
3592
+ '<desc></desc>'."\n";
3593
+
3594
+ if(!empty($back_color)) {
3595
+ $backgroundcolor = str_pad(dechex($back_color), 6, "0", STR_PAD_LEFT);
3596
+ $output .= '<rect width="'.$imgW * $pixelPerPoint.'" height="'.$imgH * $pixelPerPoint.'" fill="#'.$backgroundcolor.'" cx="0" cy="0" />'."\n";
3597
+ }
3598
+
3599
+ $output .=
3600
+ '<defs>'."\n".
3601
+ '<rect id="p" width="'.$pixelPerPoint.'" height="'.$pixelPerPoint.'" />'."\n".
3602
+ '</defs>'."\n".
3603
+ '<g fill="#'.str_pad(dechex($fore_color), 6, "0", STR_PAD_LEFT).'">'."\n";
3604
+
3605
+
3606
+ // Convert the matrix into pixels
3607
+
3608
+ for($i=0; $i<$h; $i++) {
3609
+ for($j=0; $j<$w; $j++) {
3610
+ if( $frame[$i][$j] == '1') {
3611
+ $y = ($i + $outerFrame) * $pixelPerPoint;
3612
+ $x = ($j + $outerFrame) * $pixelPerPoint;
3613
+ $output .= '<use x="'.$x.'" y="'.$y.'" xlink:href="#p" />'."\n";
3614
+ }
3615
+ }
3616
+ }
3617
+ $output .=
3618
+ '</g>'."\n".
3619
+ '</svg>';
3620
+
3621
+ return $output;
3622
+ }
3623
+ }
3624
+ ?>
pictos/colorBtns.png CHANGED
Binary file
pictos/defaultBtns.png CHANGED
Binary file
pictos/defaultHint.jpg DELETED
Binary file
pictos/defaultHint.png ADDED
Binary file
pictos/greyBtns.png CHANGED
Binary file
pictos/roundBtns.png CHANGED
Binary file
pictos/smallBtns.png CHANGED
Binary file
pictos/stretchBtns.png ADDED
Binary file
pictos/verticalBtns.png CHANGED
Binary file
pictos/whiteBtns.png CHANGED
Binary file
readme.txt CHANGED
@@ -2,7 +2,7 @@
2
  Contributors: 3UU, starguide
3
  Tags: Twitter, Facebook, GooglePlus, sharebutton, sharing, privacy, social, whatsapp
4
  Requires at least: 3.0.1
5
- Tested up to: 4.2
6
  Stable tag: trunk
7
  License: MIT
8
  License URI: http://opensource.org/licenses/MIT
@@ -14,7 +14,7 @@ This is a wrapper to Shariff. It enables shares with Twitter, Facebook ... on po
14
 
15
  The "original" share buttons send data of your visitors to the social
16
  network sites, even if they do not click on a share button. The
17
- german computer magazin CT has developed "Shariff" `(/ˈʃɛɹɪf/)` that
18
  fullfills the strict data protection laws in Germany. This plugin is a
19
  wrapper to this software. It allows you to use it within your posts
20
  with the shorttag `[shariff]` and provides all design options of the
@@ -37,128 +37,237 @@ To enable it for all posts please check the options in the admin menu.
37
 
38
  == Screenshots ==
39
 
40
- 1. Insert as shorttag with options in a post.
41
- 2. Share-Buttons on the site in vertical order.
42
- 3. Options menu.
43
- 4. Widget menu. Shorttag works like in posts.
44
- 5. Also any widget can have its own design.
 
 
 
45
 
46
  == Frequently Asked Questions ==
47
 
48
- = Q: How can I change the position of all buttons =
49
- A: Have a look at the alignment options in the admin menu or checkout the
50
- style option.
51
-
52
  = Q: Can I use it in my theme? =
53
  A: Yes.
54
  `<?=do_shortcode('[shariff backend="on"]')?>`
55
- Backend is an example. You can use all options of the shorttag. But first
56
- you should have a look at the widget.
57
 
58
  = Q: How can I configure the widget? =
59
- A: It uses the same options that have been configured in the admin menu.
60
- However, you can put in a shorttag that overwrites the default options. It
61
- has the same format as you use in posts.
 
62
 
63
  = Q: Why are shares not listed? =
64
- A: Shariff tries to protect your visitors. In order to do this, the statistics have to
65
- be requested by your server, so social networks only see a request of your blog
66
- server and not from your visitor. However, I am not sure if you want this. Therefore it
67
- is not enabled by default.
68
 
69
  = Q: How can I show the share counts? =
70
- A: Enable it in admin menu in general or add `backend="on"` to the shariff shorttag in your post.
71
-
72
- = Q: I do not see counts =
73
- A: First make sure the you have it enabled. If so, please have a
74
- look at the bottom of the admin menu. There is a hint, which
75
- directory shariff tries to use for the cache.
76
-
77
- = Q: How can I change the options of the backend? =
78
- A: The backend should work well with all common configurations. If the
79
- backend does not work and you do not have very special needs for your
80
- configuration perhaps you should think about another hoster ;-) However,
81
- there are some very special servers e.g. some load balancer that need
82
- adjustments. You can set the directory to use for temporary files of the
83
- backend with the PHP constant
84
  `define("SHARIFF_BACKEND_TMPDIR","/example/path/to/tmp");`
85
- There is also the option to change the default TTL from 60s with
86
- `define("SHARIFF_BACKEND_TTL","88");`
87
 
88
- = Q: I need some more options. How could I get them? =
89
- A: This plugin is a wrapper to the original project files of Shariff. As
90
- long as the original will not get more options, we will not add more to this
91
- plugin.
92
 
93
  = Q: How can I change the design? =
94
- A: Have a look at the parameters "theme" and "orientation" and "buttonsize". They work
95
- mostly like the original code parameters that are explained at
96
- http://heiseonline.github.io/shariff/ Or you can have a look at my test page
97
- at http://shariff.3uu.net/shariff-sample-page-with-all-options to get an
98
- overview. But please be warned: This is my test page! It is possible that you
99
- find features that are only provided in the development version. Use it
100
- only to get an impression of the design options.
101
 
102
  = Q: How can I change the design of a single button? =
103
- A: If you are a CSS guru please feel free to modify the css file. But of course this
104
- is a bad idea, because all changes will be destroyed with the next update! Have a look
105
- at the style attribute of the shorttag. If you put in any value it will create
106
- a DIV container with the ID "ShariffSC" around the buttons. If you are
107
- really a CSS guru you will know what does the magic from here on out. ;-)
108
 
109
- = Q: Can I add [shariff] on all posts? =
110
- A: Yes, use the first checkbox in the admin menu to enable it.
 
 
 
 
 
 
 
 
 
 
 
111
 
112
- = Q: Can I change the design on a single post? =
113
- A: Yes. If the [shariff...] shortcut is found in a post, it has priority over all settings
114
- from the admin menu.
115
 
116
  = Q: But I want to hide it on a single post! =
117
- A: Do you really know what you want? ;-) However it is possible. Write
118
- anywhere in your post "hideshariff". It will be removed and Shariff will
119
- not be added. This will make it compatible with the other plugin "Shariff for
120
- Wordpress" that has been published at the same day. You can also use
121
- "/hideshariff" to write "hideshariff" in your post.
122
 
123
  = Q: What are the differences between these two plugins? =
124
- A: One is developed by us, one by someone else. ;-) The main difference is that
125
- this plugin has a few more options.
126
-
127
- = Q: The fonts load slowly, can I use a CDN? =
128
- A: The best way would be to use a CDN for your blog host. The original
129
- shariff project has references to CDN hosted fonts. But it is possible that
130
- the hoster sends headers that force the browser to reload the fonts on any
131
- page. This would enable tracking again, depending on how honest the font
132
- hoster is. So I strongly suggest to use the copy that is within the plugin
133
- directory on your server.
134
-
135
- = Q: I do not get the numbers / Got error "tmp dir must be writable" =
136
- A: Your webserver must be able to connect to other webservers. Please check
137
- your PHP configuration and firewall settings. If you get the error "tmp dir
138
- must be writable" your webserver does not have a directory to write
139
- temporary data. Also please have in mind that the plugin has a timeout of 60
140
- seconds, because most services do not accept more request.
 
 
 
141
 
142
  = Q: Pinterest does not show an image =
143
  A: You can add media="http://wwww.example.com/yourImage.png"
144
- within the [shariff...] shorttag or add it in the admin menu. Of course with
145
- the link to your image. ;-)
146
 
147
  = Q: Can I set a fixed URL to share? =
148
  A: You can use the "url" parameter within the shortcode
149
  `[shariff url="http://www.example.com/"]`
150
- This is also available within widgets. However, I think it is not a good idea
151
- to manipulate the URI, because it could mislead your visitors.
152
- So you should only use it, if this is really needed and you do really know
153
- what you are doing. Therefore it is not available within the admin menu.
 
 
 
154
 
155
- = Migration needed =
156
- Version 2.0: We plan to change the behavior of the service "mail" back to
157
- the original one that provides an e-mail form on the side and not a mailto-link.
158
- Therfore a new service "mailto" has been defined that provides the current mailto
159
- functionality. So please change you configuration asap.
160
 
161
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
162
 
163
  = 1.9.9 =
164
  - fix widget bug (wrong share links)
@@ -323,62 +432,53 @@ functionality. So please change you configuration asap.
323
  - add stumbleupon
324
 
325
  = 1.2.3 =
326
- * add round theme to the admin menu
327
 
328
  = 1.2.2 =
329
- * tested with WP 4.1
330
- * added french language for buttons
331
- * added theme "round" (round buttons without text but with fixed width)
332
 
333
  = 1.2.1 =
334
- * typos
335
 
336
  = 1.2 =
337
- * add widget support
338
 
339
  = create a Stable1.0 tag =
340
- * no new funtionality to this tag. Only bugfixes!
341
 
342
  = 1.1.1 =
343
- * add french language for the admin menu (thanks Celine ;-)
344
- * fix backend problem on shared hosting with no writeable tmp dir
345
 
346
  = 1.1 =
347
- * add whatsapp|pinterest|linkedin|xing
348
- * include latest upstream changes (fix mail etc.)
349
- * add old default selection of services to make it backward compatible
350
 
351
  = 1.0.2 =
352
- * add German translation to the admin menu (Admin-Menue in Deutsch)
353
- * code cleanup
354
 
355
  = 1.0.1 =
356
- * add PHP version check (5.4 is needed by the backend option)
357
 
358
  = 1.0 =
359
- * add admin menu page
360
- * disable the default add on a post if a special formed tag was found
361
- * add support for the theme attribute
362
 
363
  = 0.4 =
364
- * Include latest upstream changes
365
- * use get_permalink() to set the parameter data-url
366
 
367
  = 0.3 =
368
- * add support for "hideshariff"
369
- * add screenshots
370
 
371
  = 0.2 =
372
- * removed the private update server and changed test domain
373
-
374
- = 0.1 =
375
- * initial
376
-
377
- == Upgrade Notice ==
378
-
379
- = 1.0 =
380
- Added admin menu. Support for SHARIFF_ALL_POSTS constant can be
381
- removed with next major release!
382
 
383
  = 0.1 =
384
- Initial code. See README
2
  Contributors: 3UU, starguide
3
  Tags: Twitter, Facebook, GooglePlus, sharebutton, sharing, privacy, social, whatsapp
4
  Requires at least: 3.0.1
5
+ Tested up to: 4.3
6
  Stable tag: trunk
7
  License: MIT
8
  License URI: http://opensource.org/licenses/MIT
14
 
15
  The "original" share buttons send data of your visitors to the social
16
  network sites, even if they do not click on a share button. The
17
+ German computer magazin CT has developed "Shariff" `(/ˈʃɛɹɪf/)` that
18
  fullfills the strict data protection laws in Germany. This plugin is a
19
  wrapper to this software. It allows you to use it within your posts
20
  with the shorttag `[shariff]` and provides all design options of the
37
 
38
  == Screenshots ==
39
 
40
+ 1. Differently styled share buttons (all small).
41
+ 2. Basic options.
42
+ 3. Design options.
43
+ 4. Advanced options.
44
+ 5. Mail form options.
45
+ 6. Help section.
46
+ 7. Manual shorttag with options in a post.
47
+ 8. Widget menu. Shorttag works like in posts.
48
 
49
  == Frequently Asked Questions ==
50
 
 
 
 
 
51
  = Q: Can I use it in my theme? =
52
  A: Yes.
53
  `<?=do_shortcode('[shariff backend="on"]')?>`
54
+ Backend is an example. You can use all options of the shorttag, but first you should have a look at the widget.
 
55
 
56
  = Q: How can I configure the widget? =
57
+ A: It uses the same options that have been configured on the plugin options page. However, you can put in a shorttag that overwrites the default options. It has the same format as you use in posts. Take a look at the help section of the plugin options page for more information.
58
+
59
+ = Q: Can I change the options on a single post? =
60
+ A: Yes. If the [shariff...] shortcut is found in a post, it has priority over all settings from the plugin options page.
61
 
62
  = Q: Why are shares not listed? =
63
+ A: Shariff tries to protect the privacy of your visitors. In order to do this, the statistics have to be requested by your server, so social networks only see a request of your blog server and not from your visitor. However, we do not know, if you want this. Therefore it is not enabled by default.
 
 
 
64
 
65
  = Q: How can I show the share counts? =
66
+ A: Enable it on the plugin options page in general or add `backend="on"` to the shariff shorttag in your post.
67
+
68
+ = Q: I still do not see share counts =
69
+ A: Please have a look at the status section of the plugin options page. It states wether share counts are enabled and if there is a problem with the cache directory. Please also keep in mind that the plugin has a minimum refresh time of 60 seconds.
70
+
71
+ = Q: Why can't I change the TTL to a smaller / bigger value? =
72
+ A: The time to live (TTL) value determines, if a share count of a post or page gets refreshed when someone visits this specific page / post of your blog. Too small values create too much useless traffic, too high values negate the goal of motivating visitors to also share a post. The value can be adjusted betweeen 60 and 7200 seconds.
73
+
74
+ = Q: I get the Facebook API error message "request limit reached" =
75
+ A: Facebook has a rate limit of 600 requests per 600 seconds per IP address. Especially in shared hosting enviroments many domains share the same IP address and therefore the same limit. To avoid this you can try to raise the TTL value or provide a Facebook App ID and Secret. Google "facebook app id secret" will provide many guides on how to get these.
76
+
77
+ = Q: How can I change the options of the backend that provide the share counts? =
78
+ A: The backend should work well with all common configurations. If needed, you can change the cache directory with the PHP constant
 
79
  `define("SHARIFF_BACKEND_TMPDIR","/example/path/to/tmp");`
 
 
80
 
81
+ = Q: How can I change the position of all buttons =
82
+ A: Have a look at the alignment options in the admin menu or checkout the
83
+ style option.
 
84
 
85
  = Q: How can I change the design? =
86
+ A: Have a look at the parameters "theme", "orientation" and "buttonsize". They work mostly like the original code parameters that are explained at http://heiseonline.github.io/shariff/ Or you can have a look at the test page at http://shariff.3uu.net/shariff-sample-page-with-all-options to get an
87
+ overview. But please be warned: This is a test page! It is possible that you find features that are only provided in the development version. Use it only to get an impression of the design options.
 
 
 
 
 
88
 
89
  = Q: How can I change the design of a single button? =
90
+ A: If you are a CSS guru please feel free to modify the css file. But of course this is a bad idea, because all changes will be destroyed with the next update! Instead take a look at the style attribute of the shorttag. If you put in any value it will create a DIV container with the ID "ShariffSC" around the buttons. If you are really a CSS guru you will know what does the magic from here on out. ;-)
 
 
 
 
91
 
92
+ = Q: I want the buttons to stay fixed while scrolling! =
93
+ A: No problem. Just use the style attribute to add some CSS to the shorttag. For example in a widget (adjust the width as needed):
94
+ `[shariff style="position:fixed;width:250px"]`
95
+ Of course you can use all other options in that shorttag as well. It also works with the CSS style option on the plugins design options page, if you really want this applied to all buttons on your page.
96
+
97
+ = Q: I want a horizontal line above my Shariff buttons! =
98
+ A: You can use the headline option on the design tab. For example, enter the following code to create a horizontal line and a headline:
99
+ `<hr style='margin:20px 0'><p>Please share this post:</p>`
100
+
101
+ = Q: I want a different or no headline in a single widget, post or page! =
102
+ A: Use the headline attribute to add or remove it. For example, you can use the following shorttag to remove a headline set on the plugins options page in a single widget:
103
+ `[shariff headline=""]`
104
+ Of course you can use all other options in that shorttag as well.
105
 
106
+ = Q: Can I add [shariff] on all posts? =
107
+ A: Yes, check out the plugin options page.
 
108
 
109
  = Q: But I want to hide it on a single post! =
110
+ A: Do you really know what you want? ;-) However, it is possible. Write anywhere in your post "hideshariff". It will be removed and Shariff will not be added. This will make it compatible with the other plugin "Shariff for Wordpress". You can also use "/hideshariff" to write "hideshariff" in your post.
 
 
 
 
111
 
112
  = Q: What are the differences between these two plugins? =
113
+ A: One is developed by us, one by someone else. ;-) The main difference is that this plugin has a few more options and great support. :-) Neither of the plugins are "official" or directly developed by Heise.
114
+
115
+ = Q: Does it work with a CDN? =
116
+ A: Yes, but in order for the font-icons to be loaded you have to exclude
117
+ `​{plugins_dir}/shariff/fonts/*
118
+ {plugins_dir}/shariff/shariff.min.local.css`
119
+ from it (e.g. for W3TC enter this at "Rejected Files").
120
+
121
+ = Q: But I want shariff.min.local.css on my CDN as well! =
122
+ A: In this case edit your themes style.css to include
123
+ `@font-face {
124
+ font-family: "shariff3uu";
125
+ font-style: normal;
126
+ font-weight: 400;
127
+ src: url("http://www.EXAMPLE.com/wp-content/plugins/shariff/fonts/shariff3uu.eot") format("embedded-opentype"),
128
+ url("http://www.EXAMPLE.com/wp-content/plugins/shariff/fonts/shariff3uu.woff") format("woff"),
129
+ url("http://www.EXAMPLE.com/wp-content/plugins/shariff/fonts/shariff3uu.ttf") format("truetype"),
130
+ url("http://www.EXAMPLE.com/wp-content/plugins/shariff/fonts/shariff3uu.svg") format("svg");
131
+ }`
132
+ Be sure to replace www.EXAMPLE.com!
133
 
134
  = Q: Pinterest does not show an image =
135
  A: You can add media="http://wwww.example.com/yourImage.png"
136
+ within the [shariff...] shorttag or add it in on the plugin options page - of course with the link to your image.
 
137
 
138
  = Q: Can I set a fixed URL to share? =
139
  A: You can use the "url" parameter within the shortcode
140
  `[shariff url="http://www.example.com/"]`
141
+ This is also available within widgets. However, it is not a good idea to manipulate the URI, because it could mislead your visitors. So you should only use it, if this is really needed and you do really know what you are doing. Therefore it is not available on the plugin options page in general.
142
+
143
+ = Q: What is the differenz between the services `mailform` and `mailto´? =
144
+ A: mailform will provide an e-mail form on top of the post or page and mailto will draw a link with the mailto-protocol to open the default e-mail application of the client.
145
+
146
+ = Q: What happend to `mail`? =
147
+ A: mail was replaced with mailform to provide an easier way of distinguishing between the two types of mail buttons.
148
 
149
+ = Q: Can I disable the mail form completely? =
150
+ A: Yes, take a look at the Mail Form tab on the plugin options page.
 
 
 
151
 
152
  == Changelog ==
153
+ = 2.4.3 =
154
+ - fix proxy settings
155
+ - fix PHP error notice caused by a race condition around concurrent requests in Zend_Cache
156
+ - fix PHP notice and error in backend on multisite
157
+
158
+ = 2.4.2 =
159
+ - fix lang attribute again
160
+ - fix update notice
161
+
162
+ = 2.4.1 =
163
+ - fix lang attribute
164
+ - nicer support hints about GD lib
165
+ - cleanup readme.txt
166
+
167
+ = 2.4.0 =
168
+ - ensure compatibility to WordPress 4.3
169
+ - new service Tumblr
170
+ - new service Patreon
171
+ - new service PayPal
172
+ - new service Bitcoin
173
+ - new supporting bbpress
174
+ - new using proxy settings from wp_config (thanks to Shogathu)
175
+ - fix automatic button language
176
+ - fix button language for Facebook
177
+ - fix problems with plugin "Hide Title"
178
+ - fix backend (statistic) for multisite environments
179
+ - fix backend (statistic) if WP_DEBUG is set to true
180
+ - fix language info in help section
181
+ - update to Heise version 1.16.0
182
+ - remove unnesseray guzzle docs
183
+
184
+ = 2.3.4 =
185
+ - add Italian language to the mailform
186
+
187
+ = 2.3.3 =
188
+ - fix Pinterest button, if pinit.js is present
189
+ - small css fixes
190
+
191
+ = 2.3.2 =
192
+ - add French (thanks Charlotte) and Italian (thanks Pier) translations
193
+ - improve screen reader compatibility
194
+ - fix: prefill mail_comment in case of an error
195
+ - fix: do not send more than 1 email as CC. Use a new mail for all recipients.
196
+ - fix: fallback to English at the email form only if language is not supported by this plugin
197
+ - cleanup mf_wait + extend time to wait of robots blocker to 2 sec
198
+
199
+ = 2.3.1 =
200
+ - fix facebook api (app id & secret)
201
+ - fix CSS mailform label
202
+
203
+ = 2.3.0 =
204
+ - redesing of the plugins options page
205
+ - mail form improved (a lot)
206
+ - split mail into mailform and mailto (check your manual shorttags!)
207
+ - new backend status section
208
+ - new option to use Facebook Graph API ID in case of rate limit problems
209
+ - new option to stretch the buttons horizontally
210
+ - new option to add a headline above the Shariff buttons
211
+ - many new button languages
212
+ - new default cache directory
213
+ - fix creation of default cache directory in case it is not month / year based
214
+ - fix url-shorttag-option in widget
215
+ - fix widget mailform link, if pressed twice
216
+ - fix widget mailform on blog page
217
+ - fix responsive flow of buttons in IE
218
+ - fix Twitter: prevent double encoding with text longer than 120 chars
219
+ - update shariff backend to 1.5.0 (Heise)
220
+ - update shariff JS to 1.14.0 (Heise)
221
+ - many more minor improvements
222
+ - code cleanup
223
+
224
+ = 2.2.4 =
225
+ - security fix
226
+
227
+ = 2.2.3 =
228
+ - extend blocking of shariff buttons within password protected posts
229
+
230
+ = 2.2.2 =
231
+ - allow email functionality only if service email is configured within the
232
+ admin menu as common service for all posts
233
+
234
+ = 2.2.1 =
235
+ - "fix" fallback to old twitter api again
236
+
237
+ = 2.2.0 =
238
+ - add option to hide Shariff on password protected posts
239
+ - tested up to WP 4.2.2
240
+ - "fix" fallback to old twitter api if another twitter script is found in order to avoid opening the share window twice
241
+ - share text of the mailto link now is "email"
242
+ - fix typo and cleanup code
243
+
244
+ = 2.1.2 =
245
+ - fix to make it work with PHP < 5.3 (you should really update your PHP version or change your hoster)
246
+
247
+ = 2.1.1 =
248
+ - change code because of a error with some PHP versions
249
+
250
+ = 2.1.0 =
251
+ - replace sender name if a name is provided with the mail form or set in admin menu
252
+ - add option to append the post content to the mail
253
+ - add mail header "Precedence: bulk" to avoid answers of autoresponder
254
+ - fix: rename a function to avoid problems with other plugins
255
+ - improve css
256
+
257
+ = 2.0.2 =
258
+ - fix: mail URLs must be a real link and not url-encoded
259
+ - hotfix: mail form disabled if not on single post. Avoid the
260
+ self destruction by the DOS-checker ;-)
261
+ - cleanup Shariff JS code (mailURL no longer needed)
262
+
263
+ = 2.0.1 =
264
+ - fix email form method POST
265
+
266
+ = 2.0.0 =
267
+ - changes to stay compatible to Heise implementation
268
+ - remove obsolet SHARIFF_ALL_POSTS
269
+ - fix some small css attributes (size)
270
+ - code clean up
271
 
272
  = 1.9.9 =
273
  - fix widget bug (wrong share links)
432
  - add stumbleupon
433
 
434
  = 1.2.3 =
435
+ - add round theme to the admin menu
436
 
437
  = 1.2.2 =
438
+ - tested with WP 4.1
439
+ - added french language for buttons
440
+ - added theme "round" (round buttons without text but with fixed width)
441
 
442
  = 1.2.1 =
443
+ - typos
444
 
445
  = 1.2 =
446
+ - add widget support
447
 
448
  = create a Stable1.0 tag =
449
+ - no new funtionality to this tag. Only bugfixes!
450
 
451
  = 1.1.1 =
452
+ - add french language for the admin menu (thanks Celine ;-)
453
+ - fix backend problem on shared hosting with no writeable tmp dir
454
 
455
  = 1.1 =
456
+ - add whatsapp|pinterest|linkedin|xing
457
+ - include latest upstream changes (fix mail etc.)
458
+ - add old default selection of services to make it backward compatible
459
 
460
  = 1.0.2 =
461
+ - add German translation to the admin menu (Admin-Menue in Deutsch)
462
+ - code cleanup
463
 
464
  = 1.0.1 =
465
+ - add PHP version check (5.4 is needed by the backend option)
466
 
467
  = 1.0 =
468
+ - add admin menu page
469
+ - disable the default add on a post if a special formed tag was found
470
+ - add support for the theme attribute
471
 
472
  = 0.4 =
473
+ - Include latest upstream changes
474
+ - use get_permalink() to set the parameter data-url
475
 
476
  = 0.3 =
477
+ - add support for "hideshariff"
478
+ - add screenshots
479
 
480
  = 0.2 =
481
+ - removed the private update server and changed test domain
 
 
 
 
 
 
 
 
 
482
 
483
  = 0.1 =
484
+ - initial release
shariff.js CHANGED
@@ -1,9 +1,9 @@
1
 
2
  /*!
3
- * shariff - v1.9.3 - 25.04.2015
4
  * https://github.com/heiseonline/shariff
5
  * Copyright (c) 2015 Ines Pauer, Philipp Busse, Sebastian Hilbig, Erich Kramer, Deniz Sesli
6
- * Licensed under the MIT <http://www.opensource.org/licenses/mit-license.php> license
7
  */
8
 
9
 
@@ -34,65 +34,81 @@ function Url(){this.protocol=null,this.slashes=null,this.auth=null,this.host=nul
34
 
35
 
36
  },{"punycode":2,"querystring":5}],7:[function(require,module,exports){
37
- "use strict";module.exports=function(e){var o=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{de:"teilen",en:"share",es:"compartir",fr:"partager",it:"condividi",da:"del",nl:"delen"},name:"facebook",faName:"s3uu-facebook",title:{de:"Bei Facebook teilen",en:"Share on Facebook",es:"Compartir en Facebook",fr:"Partager sur Facebook",it:"Condividi su Facebook",da:"Del Facebook",nl:"Delen op Facebook"},shareUrl:"https://www.facebook.com/sharer/sharer.php?u="+o+e.getReferrerTrack()}};
38
 
39
 
40
  },{}],8:[function(require,module,exports){
41
- "use strict";module.exports=function(t){var e=encodeURIComponent(t.getURL()),r=t.getMeta("DC.title"),a=t.getMeta("DC.creator"),n="",o="";return r.length>0&&a.length>0?r+=" - "+a:r=t.getTitle(),null!==t.options.flattruser&&(n=t.options.flattruser),o="de"===t.options.lang||"fr"===t.options.lang||"es"===t.options.lang?t.options.lang+"_"+t.options.lang.toUpperCase():"en_US",{popup:!0,noblank:!1,mobileonly:!1,shareText:"flattr",name:"flattr",faName:"s3uu-flattr",title:{de:"Beitrag flattrn!",en:"Flattr this!",fr:"Flattré!",es:"Flattr!"},shareUrl:"https://flattr.com/submit/auto?url="+e+t.getReferrerTrack()+"&title="+encodeURIComponent(r)+"&description=&language="+o+"&tags=&category=text&user_id="+n}};
42
 
43
 
44
  },{}],9:[function(require,module,exports){
45
- "use strict";module.exports=function(e){var o=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:"+1",name:"googleplus",faName:"s3uu-google-plus",title:{de:"Bei Google+ teilen",en:"Share on Google+",es:"Compartir en Google+",fr:"Partager sur Goolge+",it:"Condividi su Google+",da:"Del på Google+",nl:"Delen op Google+"},shareUrl:"https://plus.google.com/share?url="+o+e.getReferrerTrack()}};
46
 
47
 
48
  },{}],10:[function(require,module,exports){
49
- "use strict";module.exports=function(e){return{popup:!1,blank:!0,mobileonly:!1,shareText:"Info",name:"info",faName:"s3uu-info",title:{de:"weitere Informationen",en:"more information",es:"más informaciones",fr:"plus d'informations",it:"maggiori informazioni",da:"flere oplysninger",nl:"verdere informatie"},shareUrl:e.getInfoUrl()}};
50
 
51
 
52
  },{}],11:[function(require,module,exports){
53
- "use strict";module.exports=function(e){var n=encodeURIComponent(e.getURL()),t=e.getMeta("DC.title"),i=e.getMeta("DC.creator");return t.length>0&&i.length>0?t+=" - "+i:t=e.getTitle(),{popup:!0,mobileonly:!1,shareText:{de:"teilen",en:"share",es:"compartir",fr:"partager",it:"condividi",da:"del",nl:"delen"},name:"linkedin",faName:"s3uu-linkedin",title:{de:"Bei LinkedIn teilen",en:"Share on LinkedIn",es:"Compartir en LinkedIn",fr:"Partager sur LinkedIn",it:"Condividi su LinkedIn",da:"Del på LinkedIn",nl:"Delen op LinkedIn"},shareUrl:"https://www.linkedin.com/shareArticle?mini=true&url="+n+e.getReferrerTrack()+"&title="+encodeURIComponent(t)}};
54
 
55
 
56
  },{}],12:[function(require,module,exports){
57
- "use strict";module.exports=function(e){var a=encodeURIComponent(e.getURL()),t=e.getMeta("DC.title"),n=e.getMeta("DC.creator");return t.length>0&&n.length>0?t+=" - "+n:t=e.getTitle(),{popup:!1,mobileonly:!1,blank:!1,shareText:"mail",name:"mail",faName:"s3uu-envelope",title:{de:"Per E-Mail versenden",en:"Send by email",es:"Enviar por email",fr:"Envoyer par courriel",it:"Inviare via email",da:"Sende via e-mail",nl:"Sturen via e-mail "},shareUrl:"mailto:?body="+a+e.getReferrerTrack()+"&subject="+encodeURIComponent(t)}};
58
 
59
 
60
  },{}],13:[function(require,module,exports){
61
- "use strict";module.exports=function(e){var t=encodeURIComponent(e.getURL()),a=e.getMeta("DC.title"),n=e.getMeta("DC.creator");return a.length>0&&n.length>0?a+=" - "+n:a=e.getTitle(),{popup:!1,mobileonly:!1,blank:!1,shareText:"mail to",name:"mailto",faName:"s3uu-envelope",title:{de:"Per E-Mail versenden",en:"Send by email",es:"Enviar por email",fr:"Envoyer par courriel",it:"Inviare via email",da:"Sende via e-mail",nl:"Sturen via e-mail "},shareUrl:"mailto:?body="+t+e.getReferrerTrack()+"&subject="+encodeURIComponent(a)}};
62
 
63
 
64
  },{}],14:[function(require,module,exports){
65
- "use strict";module.exports=function(e){var t=encodeURIComponent(e.getURL()),n=e.getMeta("DC.title"),r=e.getMeta("DC.creator");return n.length>0&&r.length>0?n+=" - "+r:n=e.getTitle(),{popup:!0,mobileonly:!1,shareText:"Pin it",name:"pinterest",faName:"s3uu-pinterest",title:{de:"Bei Pinterest pinnen",en:"Pin it on Pinterest",es:"Compartir en Pinterest",fr:"Partager sur Pinterest",it:"Condividi su Pinterest",da:"Del Pinterest",nl:"Delen op Pinterest"},shareUrl:"https://www.pinterest.com/pin/create/button/?url="+t+e.getReferrerTrack()+"&media="+e.getMedia()+"&description="+encodeURIComponent(n)}};
66
 
67
 
68
  },{}],15:[function(require,module,exports){
69
- "use strict";module.exports=function(r){return{popup:!1,mobileonly:!1,shareText:{de:"drucken",en:"print",fr:"imprimer",es:"imprimir"},name:"printer",faName:"s3uu-print",title:{de:"drucken",en:"print",fr:"imprimer",es:"imprimir",it:"imprimere",da:"dat trykke",nl:"drukken"},shareUrl:"javascript:window.print()"}};
70
 
71
 
72
  },{}],16:[function(require,module,exports){
73
- "use strict";module.exports=function(e){var d=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{de:"teilen",en:"share",es:"compartir",fr:"partager",it:"condividi",da:"del",nl:"delen"},name:"reddit",faName:"s3uu-reddit",title:{de:"Bei Reddit teilen",en:"Share on Reddit",es:"Compartir en Reddit",fr:"Partager sur Reddit",it:"Condividi su Reddit",da:"Del Reddit",nl:"Delen op Reddit"},shareUrl:"https://www.reddit.com/submit?url="+d+e.getReferrerTrack()}};
74
 
75
 
76
  },{}],17:[function(require,module,exports){
77
- "use strict";module.exports=function(e){var t=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{de:"teilen",en:"share",es:"compartir",fr:"partager",it:"condividi",da:"del",nl:"delen"},name:"stumbleupon",faName:"s3uu-stumbleupon",title:{de:"Bei StumbleUpon teilen",en:"Share on StumbleUpon",es:"Compartir en StumbleUpon",fr:"Partager sur StumbleUpon",it:"Condividi su StumbleUpon",da:"Del på StumbleUpon",nl:"Delen op StumbleUpon"},shareUrl:"https://www.stumbleupon.com/submit?url="+t+e.getReferrerTrack()}};
78
 
79
 
80
  },{}],18:[function(require,module,exports){
81
- (function (global){
82
- "use strict";var url=require("url"),$=(typeof window !== "undefined" ? window.jQuery : typeof global !== "undefined" ? global.jQuery : null),abbreviateText=function(e,t){var r=$("<div/>").html(e).text();if(r.length<=t)return e;var i=r.substring(0,t-1).lastIndexOf(" ");return r=encodeURIComponent(r.substring(0,i))+"…"};module.exports=function(e){var t=url.parse("https://twitter.com/intent/tweet",!0),r=e.getMeta("DC.title"),i=e.getMeta("DC.creator");return r.length>0&&i.length>0?r+=" - "+i:r=e.getTitle(),t.query.text=abbreviateText(r,120),t.query.url=e.getURL(),null!==e.options.twitterVia&&(t.query.via=e.options.twitterVia),delete t.search,{popup:!0,mobileonly:!1,shareText:"tweet",name:"twitter",faName:"s3uu-twitter",title:{de:"Bei Twitter teilen",en:"Share on Twitter",es:"Compartir en Twitter",fr:"Partager sur Twitter",it:"Condividi su Twitter",da:"Del på Twitter",nl:"Delen op Twitter"},shareUrl:url.format(t)+e.getReferrerTrack()}};
83
 
84
 
85
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
86
- },{"url":6}],19:[function(require,module,exports){
87
- "use strict";module.exports=function(e){var t=encodeURIComponent(e.getURL()),a=e.getMeta("DC.title"),p=e.getMeta("DC.creator");return a.length>0&&p.length>0?a+=" - "+p:a=e.getTitle(),{popup:!1,mobileonly:!0,shareText:{de:"teilen",en:"share",es:"compartir",fr:"partager",it:"condividi",da:"del",nl:"delen"},name:"whatsapp",faName:"s3uu-whatsapp",title:{de:"Bei Whatsapp teilen",en:"Share on Whatsapp",es:"Compartir en Whatsapp",fr:"Partager sur Whatsapp",it:"Condividi su Whatsapp",da:"Del på Whatsapp",nl:"Delen op Whatsapp"},shareUrl:"whatsapp://send?text="+encodeURIComponent(a)+"%20"+t+e.getReferrerTrack()}};
88
 
89
 
90
  },{}],20:[function(require,module,exports){
91
- "use strict";module.exports=function(e){var r=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{de:"teilen",en:"share",es:"compartir",fr:"partager",it:"condividi",da:"del",nl:"delen"},name:"xing",faName:"s3uu-xing",title:{de:"Bei XING teilen",en:"Share on XING",es:"Compartir en XING",fr:"Partager sur XING",it:"Condividi su XING",da:"Del på XING",nl:"Delen op XING"},shareUrl:"https://www.xing.com/social_plugins/share?url="+r+e.getReferrerTrack()}};
92
 
93
 
94
  },{}],21:[function(require,module,exports){
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
95
  (function (global){
96
- "use strict";var $=(typeof window !== "undefined" ? window.jQuery : typeof global !== "undefined" ? global.jQuery : null),url=require("url"),window=require("browserify-window"),Shariff=function(e,t){var r=this;this.element=e,$(e).empty(),this.options=$.extend({},this.defaults,t,$(e).data());var i=[require("./services/facebook"),require("./services/googleplus"),require("./services/twitter"),require("./services/whatsapp"),require("./services/mail"),require("./services/info"),require("./services/mailto"),require("./services/linkedin"),require("./services/xing"),require("./services/pinterest"),require("./services/reddit"),require("./services/stumbleupon"),require("./services/printer"),require("./services/flattr")];this.services=$.map(this.options.services,function(e){var t;return i.forEach(function(i){return i=i(r),i.name===e?(t=i,null):void 0}),t}),this._addButtonList(),null!==this.options.backendUrl&&this.getShares().then($.proxy(this._updateCounts,this))};Shariff.prototype={defaults:{theme:"default",backendUrl:null,infoUrl:"http://ct.de/-2467514",lang:"de",mailUrl:function(){var e=url.parse(this.getURL(),!0);return e.query.view="mail",delete e.search,url.format(e)},orientation:"horizontal",buttonsize:"big",referrerTrack:null,services:["twitter","facebook","googleplus","info"],title:function(){return $("title").text()},twitterVia:null,url:function(){var e=global.document.location.href,t=$("link[rel=canonical]").attr("href")||this.getMeta("og:url")||"";return t.length>0&&(t.indexOf("http")<0&&(t=global.document.location.protocol+"//"+global.document.location.host+t),e=t),e}},$socialshareElement:function(){return $(this.element)},getLocalized:function(e,t){return"object"==typeof e[t]?e[t][this.options.lang]:"string"==typeof e[t]?e[t]:void 0},getMeta:function(e){var t=$('meta[name="'+e+'"],[property="'+e+'"]').attr("content");return t||""},getInfoUrl:function(){return this.options.infoUrl},getURL:function(){return this.getOption("url")},getOption:function(e){var t=this.options[e];return"function"==typeof t?$.proxy(t,this)():t},getTitle:function(){return this.getOption("title")},getReferrerTrack:function(){return this.options.referrerTrack||""},getMedia:function(){return this.getOption("media")},getShares:function(){var e=url.parse(this.options.backendUrl,!0);return e.query.url=this.getURL(),delete e.search,$.getJSON(url.format(e))},_updateCounts:function(e){var t=this;$.each(e,function(e,r){r>=1e3&&(r=Math.round(r/1e3)+"k"),$(t.element).find("."+e+" a").append('<span class="share_count">'+r)})},_addButtonList:function(){var e=this,t=this.$socialshareElement(),r="theme-"+this.options.theme,i="orientation-"+this.options.orientation,n="col-"+this.options.services.length,o="buttonsize-"+this.options.buttonsize,s=$("<ul>").addClass(r).addClass(i).addClass(n).addClass(o);this.services.forEach(function(t){if(!t.mobileonly||"undefined"!=typeof window.orientation||"object"==typeof window.document.ontouchstart){var r=$('<li class="shariff-button">').addClass(t.name),i='<span class="share_text">'+e.getLocalized(t,"shareText"),n=$("<a>").attr("href",t.shareUrl).append(i);"undefined"!=typeof t.faName&&n.prepend('<span class="s3uu '+t.faName+'">'),t.popup?n.attr("rel","popup"):t.blank&&n.attr("target","_blank"),n.attr("title",e.getLocalized(t,"title")),r.append(n),s.append(r)}}),s.on("click",'[rel="popup"]',function(e){e.preventDefault();var t=$(this).attr("href"),r="_blank",i="1000",n="500",o="width="+i+",height="+n;global.window.open(t,r,o)}),t.append(s)}},module.exports=Shariff,global.Shariff=Shariff,$(".shariff").each(function(){this.hasOwnProperty("shariff")||(this.shariff=new Shariff(this))});
97
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
98
- },{"./services/facebook":7,"./services/flattr":8,"./services/googleplus":9,"./services/info":10,"./services/linkedin":11,"./services/mail":12,"./services/mailto":13,"./services/pinterest":14,"./services/printer":15,"./services/reddit":16,"./services/stumbleupon":17,"./services/twitter":18,"./services/whatsapp":19,"./services/xing":20,"browserify-window":1,"url":6}]},{},[21]);
1
 
2
  /*!
3
+ * shariff - v1.16.0 - 15.08.2015
4
  * https://github.com/heiseonline/shariff
5
  * Copyright (c) 2015 Ines Pauer, Philipp Busse, Sebastian Hilbig, Erich Kramer, Deniz Sesli
6
+ * Licensed under the MIT license
7
  */
8
 
9
 
34
 
35
 
36
  },{"punycode":2,"querystring":5}],7:[function(require,module,exports){
37
+ "use strict";module.exports=function(n){var i="",o="";return null!==n.options.bitcoinaddress&&(i=n.options.bitcoinaddress),null!==n.options.bitcoinurl&&(o=n.options.bitcoinurl),{popup:!0,noblank:!1,mobileonly:!1,shareText:{de:"spenden",en:"donate",fr:"faire un don",es:"donar"},name:"bitcoin",faName:"s3uu-bitcoin",title:{de:"Spenden mit Bitcoin",en:"Donate with Bitcoin",fr:"Faire un don via Bitcoin",es:"Donar via Bitcoin"},shareUrl:o+"bitcoin.php?bitcoinaddress="+i}};
38
 
39
 
40
  },{}],8:[function(require,module,exports){
41
+ "use strict";module.exports=function(e){var o=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{bg:"cподеляне",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"共有",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"partajează",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"facebook",faName:"s3uu-facebook",title:{bg:"Сподели във Facebook",da:"Del på Facebook",de:"Bei Facebook teilen",en:"Share on Facebook",es:"Compartir en Facebook",fi:"Jaa Facebookissa",fr:"Partager sur Facebook",hr:"Podijelite na Facebooku",hu:"Megosztás Facebookon",it:"Condividi su Facebook",ja:"フェイスブック上で共有",ko:"페이스북에서 공유하기",nl:"Delen op Facebook",no:"Del på Facebook",pl:"Udostępnij na Facebooku",pt:"Compartilhar no Facebook",ro:"Partajează pe Facebook",ru:"Поделиться на Facebook",sk:"Zdieľať na Facebooku",sl:"Deli na Facebooku",sr:"Podeli na Facebook-u",sv:"Dela på Facebook",tr:"Facebook'ta paylaş",zh:"在Facebook上分享"},shareUrl:"https://www.facebook.com/sharer/sharer.php?u="+o+e.getReferrerTrack()}};
42
 
43
 
44
  },{}],9:[function(require,module,exports){
45
+ "use strict";module.exports=function(t){var e=encodeURIComponent(t.getURL()),r=t.getMeta("DC.title"),a=t.getMeta("DC.creator"),n="",o="";return r.length>0&&a.length>0?r+=" - "+a:r=t.getTitle(),null!==t.options.flattruser&&(n=t.options.flattruser),o="de"===t.options.lang||"fr"===t.options.lang||"es"===t.options.lang?t.options.lang+"_"+t.options.lang.toUpperCase():"en_US",{popup:!0,noblank:!1,mobileonly:!1,shareText:"flattr",name:"flattr",faName:"s3uu-flattr",title:{de:"Beitrag flattrn!",en:"Flattr this!",fr:"Flattré!",es:"Flattr!"},shareUrl:"https://flattr.com/submit/auto?url="+e+t.getReferrerTrack()+"&title="+encodeURIComponent(r)+"&description=&language="+o+"&tags=&category=text&user_id="+n}};
46
 
47
 
48
  },{}],10:[function(require,module,exports){
49
+ "use strict";module.exports=function(o){var e=encodeURIComponent(o.getURL());return{popup:!0,mobileonly:!1,shareText:"+1",name:"googleplus",faName:"s3uu-google-plus",title:{bg:"Сподели в Google+",da:"Del på Google+",de:"Bei Google+ teilen",en:"Share on Google+",es:"Compartir en Google+",fi:"Jaa Google+:ssa",fr:"Partager sur Goolge+",hr:"Podijelite na Google+",hu:"Megosztás Google+on",it:"Condividi su Google+",ja:"Google+上で共有",ko:"Google+에서 공유하기",nl:"Delen op Google+",no:"Del på Google+",pl:"Udostępnij na Google+",pt:"Compartilhar no Google+",ro:"Partajează pe Google+",ru:"Поделиться на Google+",sk:"Zdieľať na Google+",sl:"Deli na Google+",sr:"Podeli na Google+",sv:"Dela på Google+",tr:"Google+'da paylaş",zh:"在Google+上分享"},shareUrl:"https://plus.google.com/share?url="+e+o.getReferrerTrack()}};
50
 
51
 
52
  },{}],11:[function(require,module,exports){
53
+ "use strict";module.exports=function(e){return{popup:!1,blank:!0,mobileonly:!1,shareText:"Info",name:"info",faName:"s3uu-info",title:{de:"weitere Informationen",en:"more information",es:"más informaciones",fr:"plus d'informations",it:"maggiori informazioni",da:"flere oplysninger",nl:"verdere informatie"},shareUrl:e.getInfoUrl()}};
54
 
55
 
56
  },{}],12:[function(require,module,exports){
57
+ "use strict";module.exports=function(e){var n=encodeURIComponent(e.getURL()),i=e.getMeta("DC.title"),t=e.getMeta("DC.creator");return i.length>0&&t.length>0?i+=" - "+t:i=e.getTitle(),{popup:!0,mobileonly:!1,shareText:{de:"mitteilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"シェア",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"distribuiți",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"linkedin",faName:"s3uu-linkedin",title:{bg:"Сподели в LinkedIn",da:"Del på LinkedIn",de:"Bei LinkedIn teilen",en:"Share on LinkedIn",es:"Compartir en LinkedIn",fi:"Jaa LinkedInissä",fr:"Partager sur LinkedIn",hr:"Podijelite na LinkedIn",hu:"Megosztás LinkedInen",it:"Condividi su LinkedIn",ja:"LinkedIn上で共有",ko:"LinkedIn에서 공유하기",nl:"Delen op LinkedIn",no:"Del på LinkedIn",pl:"Udostępnij przez LinkedIn",pt:"Compartilhar no LinkedIn",ro:"Partajează pe LinkedIn",ru:"Поделиться на LinkedIn",sk:"Zdieľať na LinkedIn",sl:"Deli na LinkedIn",sr:"Podeli na LinkedIn-u",sv:"Dela på LinkedIn",tr:"LinkedIn'ta paylaş",zh:"在LinkedIn上分享"},shareUrl:"https://www.linkedin.com/shareArticle?mini=true&url="+n+e.getReferrerTrack()+"&title="+encodeURIComponent(i)}};
58
 
59
 
60
  },{}],13:[function(require,module,exports){
61
+ "use strict";module.exports=function(e){var i=e.getURL();return{popup:!1,mobileonly:!1,blank:!1,shareText:{bg:"имейл",da:"e-mail",de:"e-mail",en:"e-mail",es:"emilio",fi:"sähköpostitse",fr:"courriel",hr:"e-pošta",hu:"e-mail",it:"e-mail",ja:"e-mail",ko:"e-mail",nl:"e-mail",no:"e-post",pl:"e-mail",pt:"e-mail",ro:"e-mail",ru:"e-mail",sk:"e-mail",sl:"e-mail",sr:"e-mail",sv:"e-post",tr:"e-posta",zh:"e-mail"},name:"mailform",faName:"s3uu-envelope",title:{bg:"Изпрати по имейл",da:"Sende via e-mail",de:"Per E-Mail versenden",en:"Send by email",es:"Enviar por email",fi:"Lähetä sähköpostitse",fr:"Envoyer par courriel",hr:"Pošaljite emailom",hu:"Elküldés e-mailben",it:"Inviare via e-mail",ja:"電子メールで送信",ko:"이메일로 보내기",nl:"Sturen via e-mail",no:"Send via epost",pl:"Wyślij e-mailem",pt:"Enviar por e-mail",ro:"Trimite prin e-mail",ru:"Отправить по эл. почте",sk:"Poslať e-mailom",sl:"Pošlji po elektronski pošti",sr:"Pošalji putem email-a",sv:"Skicka via e-post",tr:"E-posta ile gönder",zh:"通过电子邮件传送"},shareUrl:i+"?view=mail#shariff_mailform"}};
62
 
63
 
64
  },{}],14:[function(require,module,exports){
65
+ "use strict";module.exports=function(e){var i=encodeURIComponent(e.getURL()),a=e.getMeta("DC.title"),l=e.getMeta("DC.creator");return a.length>0&&l.length>0?a+=" - "+l:a=e.getTitle(),{popup:!1,mobileonly:!1,blank:!1,shareText:{bg:"имейл",da:"e-mail",de:"e-mail",en:"e-mail",es:"emilio",fi:"sähköpostitse",fr:"courriel",hr:"e-pošta",hu:"e-mail",it:"e-mail",ja:"e-mail",ko:"e-mail",nl:"e-mail",no:"e-post",pl:"e-mail",pt:"e-mail",ro:"e-mail",ru:"e-mail",sk:"e-mail",sl:"e-mail",sr:"e-mail",sv:"e-post",tr:"e-posta",zh:"e-mail"},name:"mailto",faName:"s3uu-envelope",title:{bg:"Изпрати по имейл",da:"Sende via e-mail",de:"Per E-Mail versenden",en:"Send by email",es:"Enviar por email",fi:"Lähetä sähköpostitse",fr:"Envoyer par courriel",hr:"Pošaljite emailom",hu:"Elküldés e-mailben",it:"Inviare via e-mail",ja:"電子メールで送信",ko:"이메일로 보내기",nl:"Sturen via e-mail",no:"Send via epost",pl:"Wyślij e-mailem",pt:"Enviar por e-mail",ro:"Trimite prin e-mail",ru:"Отправить по эл. почте",sk:"Poslať e-mailom",sl:"Pošlji po elektronski pošti",sr:"Pošalji putem email-a",sv:"Skicka via e-post",tr:"E-posta ile gönder",zh:"通过电子邮件传送"},shareUrl:"mailto:?body="+i+e.getReferrerTrack()+"&subject="+encodeURIComponent(a)}};
66
 
67
 
68
  },{}],15:[function(require,module,exports){
69
+ "use strict";module.exports=function(e){var n="";return null!==e.options.patreonid&&(n=e.options.patreonid),{popup:!0,mobileonly:!1,shareText:"patreon",name:"patreon",faName:"s3uu-patreon",title:{de:"Werde ein patron!",en:"Become a patron!",es:"Conviértete en un patron!",fr:"Devenez un patron!"},shareUrl:"https://www.patreon.com/"+n}};
70
 
71
 
72
  },{}],16:[function(require,module,exports){
73
+ "use strict";module.exports=function(a){var n="";return null!==a.options.paypalbuttonid&&(n=a.options.paypalbuttonid),{popup:!0,noblank:!1,mobileonly:!1,shareText:{de:"spenden",en:"donate",fr:"faire un don",es:"donar"},name:"paypal",faName:"s3uu-paypal",title:{de:"Spenden mit PayPal",en:"Donate with PayPal",fr:"Faire un don via PayPal",es:"Donar via PayPal"},shareUrl:"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id="+n}};
74
 
75
 
76
  },{}],17:[function(require,module,exports){
77
+ "use strict";module.exports=function(e){var t=encodeURIComponent(e.getURL()),n=e.getMeta("DC.title"),i=e.getMeta("DC.creator");return n.length>0&&i.length>0?n+=" - "+i:n=e.getTitle(),{popup:!0,mobileonly:!1,shareText:{de:"pinnen",en:"pin it"},name:"pinterest",faName:"s3uu-pinterest",title:{de:"Bei Pinterest pinnen",en:"Pin it on Pinterest",es:"Compartir en Pinterest",fr:"Partager sur Pinterest",it:"Condividi su Pinterest",da:"Del på Pinterest",nl:"Delen op Pinterest"},shareUrl:"https://www.pinterest.com/pin/create/link/?url="+t+e.getReferrerTrack()+"&media="+e.getMedia()+"&description="+encodeURIComponent(n)}};
78
 
79
 
80
  },{}],18:[function(require,module,exports){
81
+ "use strict";module.exports=function(r){return{popup:!1,mobileonly:!1,blank:!1,shareText:{de:"drucken",en:"print",fr:"imprimer",es:"imprimir",it:"imprimere",da:"dat trykke",nl:"drukken"},name:"printer",faName:"s3uu-print",title:{de:"drucken",en:"print",fr:"imprimer",es:"imprimir",it:"imprimere",da:"dat trykke",nl:"drukken"},shareUrl:"javascript:window.print()"}};
 
82
 
83
 
84
+ },{}],19:[function(require,module,exports){
85
+ "use strict";module.exports=function(e){var d=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{bg:"cподеляне",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"共有",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"partajează",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"reddit",faName:"s3uu-reddit",title:{de:"Bei Reddit teilen",en:"Share on Reddit",es:"Compartir en Reddit",fr:"Partager sur Reddit",it:"Condividi su Reddit",da:"Del på Reddit",nl:"Delen op Reddit"},shareUrl:"https://www.reddit.com/submit?url="+d+e.getReferrerTrack()}};
 
86
 
87
 
88
  },{}],20:[function(require,module,exports){
89
+ "use strict";module.exports=function(e){var t=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{bg:"cподеляне",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"共有",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"partajează",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"stumbleupon",faName:"s3uu-stumbleupon",title:{de:"Bei StumbleUpon teilen",en:"Share on StumbleUpon",es:"Compartir en StumbleUpon",fr:"Partager sur StumbleUpon",it:"Condividi su StumbleUpon",da:"Del på StumbleUpon",nl:"Delen op StumbleUpon"},shareUrl:"https://www.stumbleupon.com/submit?url="+t+e.getReferrerTrack()}};
90
 
91
 
92
  },{}],21:[function(require,module,exports){
93
+ "use strict";module.exports=function(e){var r=encodeURIComponent(e.getURL()),l=e.getMeta("DC.title"),t=e.getMeta("DC.creator");l.length>0&&t.length>0?l+=" - "+t:l=e.getTitle();var a=e.getURL(),u=a.replace("http://","").replace("https://","").replace("www.","").split(/[/?#]/),i=u[0];return{popup:!0,mobileonly:!1,shareText:{bg:"cподеляне",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"共有",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"partajează",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"tumblr",faName:"s3uu-tumblr",title:{bg:"Сподели във Tumblr",da:"Del på Tumblr",de:"Bei Tumblr teilen",en:"Share on Tumblr",es:"Compartir en Tumblr",fi:"Jaa Tumblrissa",fr:"Partager sur Tumblr",hr:"Podijelite na Tumblru",hu:"Megosztás Tumblron",it:"Condividi su Tumblr",ja:"フェイスブック上で共有",ko:"페이스북에서 공유하기",nl:"Delen op Tumblr",no:"Del på Tumblr",pl:"Udostępnij na Tumblru",pt:"Compartilhar no Tumblr",ro:"Partajează pe Tumblr",ru:"Поделиться на Tumblr",sk:"Zdieľať na Tumblru",sl:"Deli na Tumblru",sr:"Podeli na Tumblr-u",sv:"Dela på Tumblr",tr:"Tumblr'ta paylaş",zh:"在Tumblr上分享"},shareUrl:"https://www.tumblr.com/widgets/share/tool?posttype=link&canonicalUrl="+r+e.getReferrerTrack()+"&tags="+i}};
94
+
95
+
96
+ },{}],22:[function(require,module,exports){
97
+ (function (global){
98
+ "use strict";var url=require("url"),$=(typeof window !== "undefined" ? window.jQuery : typeof global !== "undefined" ? global.jQuery : null),abbreviateText=function(t,e){var r=$("<div/>").html(t).text();if(r.length<=e)return t;var i=r.substring(0,e-1).lastIndexOf(" ");return r=r.substring(0,i)+"…"};module.exports=function(t){var e;e=window.twttr?url.parse("https://twitter.com/share",!0):url.parse("https://twitter.com/intent/tweet",!0);var r=t.getMeta("DC.title"),i=t.getMeta("DC.creator");return r.length>0&&i.length>0?r+=" - "+i:r=t.getTitle(),e.query.text=abbreviateText(r,120),e.query.url=t.getURL(),null!==t.options.twitterVia&&(e.query.via=t.options.twitterVia),delete e.search,{popup:!0,mobileonly:!1,shareText:{de:"twittern",en:"tweet"},name:"twitter",faName:"s3uu-twitter",title:{bg:"Сподели в Twitter",da:"Del på Twitter",de:"Bei Twitter teilen",en:"Share on Twitter",es:"Compartir en Twitter",fi:"Jaa Twitterissä",fr:"Partager sur Twitter",hr:"Podijelite na Twitteru",hu:"Megosztás Twitteren",it:"Condividi su Twitter",ja:"ツイッター上で共有",ko:"트위터에서 공유하기",nl:"Delen op Twitter",no:"Del på Twitter",pl:"Udostępnij na Twitterze",pt:"Compartilhar no Twitter",ro:"Partajează pe Twitter",ru:"Поделиться на Twitter",sk:"Zdieľať na Twitteri",sl:"Deli na Twitterju",sr:"Podeli na Twitter-u",sv:"Dela på Twitter",tr:"Twitter'da paylaş",zh:"在Twitter上分享"},shareUrl:url.format(e)+t.getReferrerTrack()}};
99
+
100
+
101
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
102
+ },{"url":6}],23:[function(require,module,exports){
103
+ "use strict";module.exports=function(a){var p=encodeURIComponent(a.getURL()),e=a.getMeta("DC.title"),t=a.getMeta("DC.creator");return e.length>0&&t.length>0?e+=" - "+t:e=a.getTitle(),{popup:!1,mobileonly:!0,shareText:{bg:"cподеляне",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"共有",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"partajează",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"whatsapp",faName:"s3uu-whatsapp",title:{bg:"Сподели в Whatsapp",da:"Del på Whatsapp",de:"Bei Whatsapp teilen",en:"Share on Whatsapp",es:"Compartir en Whatsapp",fi:"Jaa WhatsAppissä",fr:"Partager sur Whatsapp",hr:"Podijelite na Whatsapp",hu:"Megosztás WhatsAppen",it:"Condividi su Whatsapp",ja:"Whatsapp上で共有",ko:"Whatsapp에서 공유하기",nl:"Delen op Whatsapp",no:"Del på Whatsapp",pl:"Udostępnij przez WhatsApp",pt:"Compartilhar no Whatsapp",ro:"Partajează pe Whatsapp",ru:"Поделиться на Whatsapp",sk:"Zdieľať na Whatsapp",sl:"Deli na Whatsapp",sr:"Podeli na WhatsApp-u",sv:"Dela på Whatsapp",tr:"Whatsapp'ta paylaş",zh:"在Whatsapp上分享"},shareUrl:"whatsapp://send?text="+encodeURIComponent(e)+"%20"+p+a.getReferrerTrack()}};
104
+
105
+
106
+ },{}],24:[function(require,module,exports){
107
+ "use strict";module.exports=function(e){var r=encodeURIComponent(e.getURL());return{popup:!0,mobileonly:!1,shareText:{bg:"cподеляне",da:"del",de:"teilen",en:"share",es:"compartir",fi:"Jaa",fr:"partager",hr:"podijelite",hu:"megosztás",it:"condividi",ja:"共有",ko:"공유하기",nl:"delen",no:"del",pl:"udostępnij",pt:"compartilhar",ro:"partajează",ru:"поделиться",sk:"zdieľať",sl:"deli",sr:"podeli",sv:"dela",tr:"paylaş",zh:"分享"},name:"xing",faName:"s3uu-xing",title:{de:"Bei XING teilen",en:"Share on XING",es:"Compartir en XING",fr:"Partager sur XING",it:"Condividi su XING",da:"Del på XING",nl:"Delen op XING"},shareUrl:"https://www.xing.com/social_plugins/share?url="+r+e.getReferrerTrack()}};
108
+
109
+
110
+ },{}],25:[function(require,module,exports){
111
  (function (global){
112
+ "use strict";var $=(typeof window !== "undefined" ? window.jQuery : typeof global !== "undefined" ? global.jQuery : null),url=require("url"),window=require("browserify-window"),Shariff=function(e,t){var r=this;this.element=e,$(e).empty(),this.options=$.extend({},this.defaults,t,$(e).data());var i=[require("./services/facebook.js"),require("./services/googleplus.js"),require("./services/twitter.js"),require("./services/whatsapp.js"),require("./services/mailform.js"),require("./services/info.js"),require("./services/mailto.js"),require("./services/linkedin.js"),require("./services/xing.js"),require("./services/pinterest.js"),require("./services/reddit.js"),require("./services/stumbleupon.js"),require("./services/printer.js"),require("./services/flattr.js"),require("./services/paypal.js"),require("./services/bitcoin.js"),require("./services/tumblr.js"),require("./services/patreon.js")];this.services=$.map(this.options.services,function(e){var t;return i.forEach(function(i){return i=i(r),"mail"===e&&(e="mailform"),i.name===e?(t=i,null):void 0}),t}),this._addButtonList(),null!==this.options.backendUrl&&this.getShares().then($.proxy(this._updateCounts,this))};Shariff.prototype={defaults:{theme:"default",backendUrl:null,infoUrl:"http://ct.de/-2467514",lang:"de",langFallback:"en",mailUrl:function(){var e=url.parse(this.getURL(),!0);return e.query.view="mail",delete e.search,url.format(e)},mailSubject:function(){return this.getMeta("DC.title")||this.getTitle()},mailBody:function(){return"<"+this.getURL()+">"},mediaUrl:null,orientation:"horizontal",buttonsize:"big",referrerTrack:null,services:["twitter","facebook","googleplus","info"],title:function(){return $("title").text()},twitterVia:null,url:function(){var e=global.document.location.href,t=$("link[rel=canonical]").attr("href")||this.getMeta("og:url")||"";return t.length>0&&(t.indexOf("http")<0&&(t=global.document.location.protocol+"//"+global.document.location.host+t),e=t),e}},$socialshareElement:function(){return $(this.element)},getLocalized:function(e,t){return"object"==typeof e[t]?"undefined"==typeof e[t][this.options.lang]?e[t][this.options.langFallback]:e[t][this.options.lang]:"string"==typeof e[t]?e[t]:void 0},getMeta:function(e){var t=$('meta[name="'+e+'"],[property="'+e+'"]').attr("content");return t||""},getInfoUrl:function(){return this.options.infoUrl},getURL:function(){return this.getOption("url")},getOption:function(e){var t=this.options[e];return"function"==typeof t?$.proxy(t,this)():t},getTitle:function(){return this.getOption("title")},getReferrerTrack:function(){return this.options.referrerTrack||""},getMedia:function(){return this.getOption("media")},getShares:function(){var e=url.parse(this.options.backendUrl,!0);return e.query.url=this.getURL(),delete e.search,$.getJSON(url.format(e))},_updateCounts:function(e){var t=this;$.each(e,function(e,r){r>=1e3&&(r=Math.round(r/1e3)+"k"),$(t.element).find("."+e+" a").append('<span class="share_count">'+r)})},_addButtonList:function(){var e=this,t=this.$socialshareElement(),r="theme-"+this.options.theme,i="orientation-"+this.options.orientation,n="col-"+this.options.services.length,s="buttonsize-"+this.options.buttonsize,o=$("<ul>").addClass(r).addClass(i).addClass(n).addClass(s);this.services.forEach(function(t){if(!t.mobileonly||"undefined"!=typeof window.orientation||"object"==typeof window.document.ontouchstart){var r=$('<li class="shariff-button">').addClass(t.name),i='<span class="share_text">'+e.getLocalized(t,"shareText"),n=$("<a>").attr("href",t.shareUrl).append(i);"undefined"!=typeof t.faName&&n.prepend('<span class="s3uu '+t.faName+'">'),t.popup?n.attr("rel","popup"):t.blank&&n.attr("target","_blank"),n.attr("title",e.getLocalized(t,"title")),n.attr("role","button"),n.attr("aria-label",e.getLocalized(t,"title")),r.append(n),o.append(r)}}),o.on("click",'[rel="popup"]',function(e){e.preventDefault();var t=$(this).attr("href"),r="_blank",i="1000",n="500",s="width="+i+",height="+n+",scrollbars=yes";global.window.open(t,r,s)}),t.append(o)}},module.exports=Shariff,global.Shariff=Shariff,$(".shariff").each(function(){this.hasOwnProperty("shariff")||(this.shariff=new Shariff(this))});
113
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
114
+ },{"./services/bitcoin.js":7,"./services/facebook.js":8,"./services/flattr.js":9,"./services/googleplus.js":10,"./services/info.js":11,"./services/linkedin.js":12,"./services/mailform.js":13,"./services/mailto.js":14,"./services/patreon.js":15,"./services/paypal.js":16,"./services/pinterest.js":17,"./services/printer.js":18,"./services/reddit.js":19,"./services/stumbleupon.js":20,"./services/tumblr.js":21,"./services/twitter.js":22,"./services/whatsapp.js":23,"./services/xing.js":24,"browserify-window":1,"url":6}]},{},[25]);
shariff.min.local.css DELETED
@@ -1,6 +0,0 @@
1
- /*!
2
- * shariff - v1.9.3 - 27.04.2015
3
- * https://github.com/heiseonline/shariff
4
- * Copyright (c) 2015 Ines Pauer, Philipp Busse, Sebastian Hilbig, Erich Kramer, Deniz Sesli
5
- * Licensed under the MIT <http://www.opensource.org/licenses/mit-license.php> license
6
- */@font-face{font-family:shariff3uu;src:url(fonts/shariff3uu.eot);src:url(fonts/shariff3uu.eot)format('embedded-opentype'),url(fonts/shariff3uu.woff)format('woff'),url(fonts/shariff3uu.ttf)format('truetype'),url(fonts/shariff3uu.svg)format('svg');font-weight:400;font-style:normal}.shariff .s3uu{font-family:shariff3uu;speak:none;font-variant:normal;text-transform:none;line-height:1;display:inline-block;-webkit-font-feature-settings:normal;-moz-font-feature-settings:normal;font-feature-settings:normal;-webkit-font-kerning:auto;-moz-font-kerning:auto;font-kerning:auto;-webkit-font-language-override:normal;-moz-font-language-override:normal;font-language-override:normal;font-size:inherit;font-size-adjust:none;font-stretch:normal;font-synthesis:weight style;text-rendering:auto;width:35px;line-height:35px;text-align:center;vertical-align:middle;font-size:20px;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shariff .s3uu-facebook:before{content:"\e800"}.shariff .s3uu-twitter:before{content:"\e801"}.shariff .s3uu-google-plus:before{content:"\e802"}.shariff .s3uu-pinterest:before{content:"\e803"}.shariff .s3uu-xing:before{content:"\e804"}.shariff .s3uu-linkedin:before{content:"\e805"}.shariff .s3uu-reddit:before{content:"\e806"}.shariff .s3uu-stumbleupon:before{content:"\e807"}.shariff .s3uu-envelope:before{content:"\e808"}.shariff .s3uu-print:before{content:"\e809"}.shariff .s3uu-info:before{content:"\e80a"}.shariff .s3uu-flattr:before{content:"\e80b"}.shariff .s3uu-whatsapp:before{content:"\f232"}.shariff .icon-vk:before{content:"\e600"}.shariff{display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start}.shariff::after,.shariff::before{content:" ";display:table}.shariff::after{clear:both}.shariff span{color:inherit}.shariff ul{display:-webkit-flex;display:-ms-flexbox;display:flex;display:-webkit-inline;-webkit-flex-flow:row wrap;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;padding:0;margin:0}.shariff ul li{list-style-type:none}.shariff ul li::before{content:normal!important}.shariff li{height:35px;box-sizing:border-box;overflow:hidden;margin:5px!important;padding:0!important;text-indent:0!important}.shariff li a{color:#fff;position:relative;display:block;height:35px;text-decoration:none;box-sizing:border-box}.shariff li .share_count,.shariff li .share_text{font-family:Arial,Helvetica,sans-serif;font-size:12px;vertical-align:middle;line-height:36px}.shariff li .s3uu{width:35px;line-height:35px;text-align:center;vertical-align:top;font-size:20px}.shariff li .share_count{padding:0 8px;height:33px;position:absolute;top:0;right:0;margin:1px;background-color:rgba(255,255,255,.5)}.shariff .orientation-horizontal li{-webkit-box-flex:1}.shariff .orientation-horizontal .info{-webkit-box-flex:0}.shariff .orientation-horizontal li{float:left;-webkit-flex:none;-ms-flex:none;flex:none}.shariff .orientation-horizontal li .share_text{display:block;text-indent:-9999px;padding-left:3px}.shariff .orientation-horizontal li .share_count{display:none}.shariff .theme-default .shariff-button a{color:#fff}.shariff .theme-color .share_count{background-color:transparent!important;color:#fff}.shariff .theme-color a{color:#fff!important}.shariff .theme-color a:hover{color:#fff}.shariff .theme-grey .share_count{background-color:transparent}.shariff .theme-grey .shariff-button a{background-color:#b0b0b0;color:#fff}.shariff .theme-white .share_count{background-color:transparent}.shariff .theme-white .shariff-button{border:1px solid #ddd}.shariff .theme-white .shariff-button a{background-color:#fff;color:0}.shariff .theme-white .shariff-button a:hover{background-color:#eee}.shariff .theme-round .share_count{display:inline;height:100%;padding:0;right:0;left:0;top:0;margin:0;width:100%;background-color:transparent;color:transparent!important}.shariff .theme-round .shariff-button{width:35px!important;min-width:35px!important;height:35px;border-radius:50%;margin:5px}.shariff .theme-round .share_text{display:block;text-indent:-9999px}.shariff .theme-round li{background:0 0}.shariff .theme-round li .s3uu{vertical-align:baseline}.shariff .theme-round li a{color:#fff}.shariff .theme-round a{text-align:center;color:#fff;position:relative;height:35px}.shariff .theme-round li.facebook .share_count:hover{background-color:#99adcf!important;color:#183a75!important}.shariff .theme-round li.twitter .share_count:hover{background-color:#96d4ee!important;color:#0174a4!important}.shariff .theme-round li.googleplus .share_count:hover{background-color:#eda79d!important;color:#a31601!important}.shariff .theme-round li.pinterest .share_count:hover{background-color:#ff050f!important;color:#fff!important}.shariff .theme-round li.linkedin .share_count:hover{background-color:#99adcf!important;color:#183a75!important}.shariff .theme-round li.xing .share_count:hover{background-color:#4fa5a7!important;color:#15686a!important}.shariff .theme-round li.reddit .share_count:hover{background-color:#e9f2fa!important;color:#000!important}.shariff .theme-round li.stumbleupon .share_count:hover{background-color:#fb613c!important;color:#fff!important}.shariff .theme-round li.flattr .share_count:hover{background-color:#f67c1a!important;color:#fff!important}.shariff .orientation-vertical{width:120px}.shariff .orientation-vertical li{width:100%}.shariff .orientation-vertical li a{color:#fff}.shariff .orientation-vertical.theme-round{width:50px!important}.shariff .buttonsize-small li{height:25px}.shariff .buttonsize-small li a{height:25px}.shariff .buttonsize-small li .share_count,.shariff .buttonsize-small li .share_text{font-size:11px;line-height:25px}.shariff .buttonsize-small li .s3uu{width:25px;line-height:25px;font-size:16px}.shariff .buttonsize-small li .share_text{padding-left:1px!important}.shariff .buttonsize-small li .share_count{padding:0 5px;height:23px}.shariff .orientation-vertical.buttonsize-small{width:90px}.shariff .theme-round.buttonsize-small li .s3uu{margin-top:0}.shariff .theme-round.buttonsize-small .shariff-button{width:25px!important;min-width:25px!important;height:25px!important}.shariff .theme-round.buttonsize-small .share_count{padding:0!important;height:25px!important}.widget .shariff .theme-color li a,.widget .shariff .theme-default li a,.widget .shariff .theme-grey li a,.widget .shariff .theme-round li a{color:#fff}.widget .shariff .theme-color li a:hover,.widget .shariff .theme-default li a:hover,.widget .shariff .theme-grey li a:hover,.widget .shariff .theme-round li a:hover{color:#fff}@media only screen and (max-width:360px){.shariff .orientation-horizontal li{min-width:35px;max-width:35px}.shariff .orientation-horizontal.buttonsize-small li{min-width:25px;max-width:25px}}@media only screen and (min-width:360px){.shariff .orientation-horizontal li{min-width:80px;width:auto}.shariff .orientation-horizontal li .share_count{display:block}.shariff .orientation-horizontal.col-1 li,.shariff .orientation-horizontal.col-2 li{min-width:120px;max-width:120px}.shariff .orientation-horizontal.col-1 li .share_text,.shariff .orientation-horizontal.col-2 li .share_text{text-indent:0;display:inline}.shariff .orientation-horizontal.col-5 li,.shariff .orientation-horizontal.col-6 li{-webkit-flex:none;-ms-flex:none;flex:none}}@media only screen and (min-width:640px){.shariff .orientation-horizontal.col-3 li{min-width:120px;max-width:120px}.shariff .orientation-horizontal.col-3 li .share_text{text-indent:0;display:inline}.shariff .orientation-horizontal.col-3.buttonsize-small li{min-width:90px;max-width:90px}.shariff .orientation-horizontal.col-3.buttonsize-small li .share_text{text-indent:0;display:inline}}@media only screen and (min-width:768px){.shariff .orientation-horizontal li{min-width:120px;max-width:120px}.shariff .orientation-horizontal li .share_text{text-indent:0;display:inline}.shariff .orientation-horizontal.col-5 li,.shariff .orientation-horizontal.col-6 li{-webkit-flex:1;-ms-flex:1;flex:1}.shariff .orientation-horizontal.buttonsize-small li{min-width:90px;max-width:90px}.shariff .orientation-horizontal.buttonsize-small li .share_text{text-indent:0;display:inline}.shariff .orientation-horizontal.buttonsize-small.col-5 li,.shariff .orientation-horizontal.buttonsize-small.col-6 li{-webkit-flex:1;-ms-flex:1;flex:1}}@media only screen and (min-width:1024px){.shariff li{height:35px}.shariff li a{height:35px}.shariff li .s3uu{width:35px;line-height:35px}.shariff .buttonsize-small li{height:25px}.shariff .buttonsize-small li a{height:25px}.shariff .buttonsize-small li .s3uu{width:25px;line-height:25px}}.shariff .twitter a{background-color:#55acee}.shariff .twitter a:hover{background-color:#32bbf5}.shariff .theme-default .twitter .share_count{color:#147bc9}.shariff .theme-white .twitter a{color:#55acee}.shariff .theme-white .twitter a:hover{color:#55acee}.shariff .facebook a{background-color:#3b5998;color:#fff}.shariff .facebook a:hover{background-color:#4273c8}.shariff .theme-default .facebook .share_count{color:#1e2e4f}.shariff .theme-white .facebook a{color:#3b5998!important}.shariff .theme-white .facebook a:hover{color:#3b5998}.shariff .googleplus a{background-color:#d34836}.shariff .googleplus a:hover{background-color:#f75b44}.shariff .theme-default .googleplus .share_count{color:#86291d}.shariff .theme-white .googleplus a{color:#d34836}.shariff .theme-white .googleplus a:hover{color:#d34836}.shariff .mail a{background-color:#999}.shariff .mail a:hover{background-color:#a8a8a8}.shariff .theme-white .mail a{color:#999}.shariff .theme-white .mail a:hover{color:#999}.shariff .buttonsize-small .mail .s3uu{font-size:14px!important}.shariff .mailto a{background-color:#999}.shariff .mailto a:hover{background-color:#a8a8a8}.shariff .theme-white .mailto a{color:#999}.shariff .theme-white .mailto a:hover{color:#999}.shariff .buttonsize-small .mailto .s3uu{font-size:14px!important}.shariff .info{border:1px solid #ccc}.shariff .info a{color:#666!important;background-color:#fff;text-align:center}.shariff .info a:hover{background-color:#efefef}.shariff .info .s3uu-info{width:35px}.shariff .info .share_text{display:block!important;text-indent:-9999px!important}.shariff .theme-grey .info a{background-color:#fff}.shariff .theme-grey .info a:hover{background-color:#efefef}.shariff .orientation-vertical .info{width:35px;float:left}.shariff .orientation-vertical.buttonsize-small .info{width:25px;float:left}@media only screen and (min-width:360px){.shariff .orientation-horizontal .info{lex:none!important;width:35px;min-width:35px}.shariff .orientation-vertical .info{width:35px}.shariff .orientation-vertical.buttonsize-small .info{width:25px}.shariff .orientation-vertical.buttonsize-small .info .s3uu{line-height:24px;width:24px}.shariff .orientation-horizontal.buttonsize-small .info{width:25px;min-width:25px}.shariff .orientation-horizontal.buttonsize-small .info .s3uu{line-height:24px;width:24px}}.shariff .whatsapp a{background-color:#5cbe4a}.shariff .whatsapp a:hover{background-color:#34af23}.shariff .s3uu-whatsapp{margin-left:1px}.shariff .theme-white .whatsapp a{color:#5cbe4a}.shariff .theme-white .whatsapp a:hover{color:#5cbe4a}.shariff .xing a{background-color:#126567;color:#fff}.shariff .xing a:hover{background-color:#29888a}.shariff .theme-default .xing .share_count{color:#031010}.shariff .theme-white .xing a{color:#126567}.shariff .theme-white .xing a:hover{color:#126567}.shariff .pinterest a{background-color:#cb2027;color:#fff}.shariff .pinterest a:hover{background-color:#e70f18}.shariff .theme-default .pinterest .share_count{color:#731216}.shariff .theme-white .pinterest a{color:#cb2027!important}.shariff .theme-white .pinterest a:hover{color:#cb2027}.shariff .stumbleupon a{background-color:#eb4b24}.shariff .stumbleupon a:hover{background-color:#e1370e}.shariff .stumbleupon .s3uu-stumbleupon{font-size:20px}.shariff .stumbleupon .s3uu-stumbleupon .buttonsize-small{font-size:16px}.shariff .theme-default .stumbleupon .share_count{color:#9b2a0e}.shariff .theme-white .stumbleupon a{color:#eb4b24!important}.shariff .theme-white .stumbleupon a:hover{color:#eb4b24}.shariff .printer a{background-color:#999}.shariff .printer a:hover{background-color:#a8a8a8}.shariff .theme-white .printer a{color:#999}.shariff .theme-white .printer a:hover{color:#999}.shariff .reddit a{background-color:#cee3f8;color:#000!important}.shariff .reddit a:hover{background-color:#bedcf9}.shariff .reddit .share_count{color:#000}.shariff .theme-white .reddit a{color:#000!important}.shariff .theme-grey .reddit a{color:#fff!important}.shariff .theme-grey .reddit a .share_count{color:#fff!important}.widget .shariff .theme-color .reddit a,.widget .shariff .theme-round .reddit a,.widget .shariff .theme-white .reddit a{color:#000!important}.shariff .linkedin a{background-color:#007bb6}.shariff .linkedin a:hover{background-color:#1488bf}.shariff .theme-default .linkedin .share_count{color:#003650}.shariff .theme-white .linkedin a{color:#007bb6}.shariff .theme-white .linkedin a:hover{color:#007bb6}.shariff .flattr a{background-color:#7ea352;color:#fff}.shariff .flattr a .s3uu{font-size:18px}.shariff .flattr a:hover{background-color:#f67c1a}.shariff .theme-default .flattr .share_count{color:#4a5f30}.shariff .theme-default .flattr a:hover .share_count{color:#a44c06}.shariff .theme-white .flattr a{color:#7ea352}.shariff .theme-white .flattr a:hover{color:#7ea352}.shariff .buttonsize-small .flattr a .s3uu{font-size:14px}
 
 
 
 
 
 
shariff.php CHANGED
@@ -2,9 +2,9 @@
2
  /**
3
  * Plugin Name: Shariff Wrapper
4
  * Plugin URI: http://www.3uu.org/plugins.htm
5
- * Description: This is a wrapper to Shariff. Enables shares in posts and/or themes with Twitter, Facebook, GooglePlus... with no harm for visitors privacy.
6
- * Version: 1.9.9
7
- * Author: 3UU
8
  * Author URI: http://www.DatenVerwurstungsZentrale.com/
9
  * License: http://opensource.org/licenses/MIT
10
  * Donate link: http://folge.link/?bitcoin:1Ritz1iUaLaxuYcXhUCoFhkVRH6GWiMTP
@@ -12,388 +12,795 @@
12
  * Text Domain: shariff3UU
13
  *
14
  * ### Supported options ###
15
- * services: [facebook|twitter|googleplus|whatsapp|mail|mailto|printer|pinterest|linkedin|xing|reddit|stumbleupon|info]
16
  * info_url: http://ct.de/-2467514
17
- * lang: de|en|fr
18
  * theme: default|color|grey|white|round
19
  * orientation: vertical
20
  * twitter_via: screenname
21
- * style: CSS code that will be used in a DIV container arround shariff
 
22
  */
23
 
24
  // prevent direct calls to shariff.php
25
  if ( ! class_exists('WP') ) { die(); }
26
-
27
  // the admin page
28
  if ( is_admin() ){
29
- add_action( 'admin_menu', 'shariff3UU_add_admin_menu' );
30
- add_action( 'admin_init', 'shariff3UU_options_init' );
31
- add_action( 'init', 'shariff3UU_init_locale' );
32
  }
33
 
34
- // brachen wir eh sowohl im FE wie im Adminbereich, also koennen wir es auch gleich global EINMAL holen
35
- // get options
36
- $shariff3UU=get_option( 'shariff3UU' );
 
 
 
 
 
 
 
 
 
 
37
 
38
- // Update function to perform tasks _once_ after an update, based on version number to work for automatic as well as manual updates
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  function shariff3UU_update() {
40
 
41
- /******************** VERSION ANPASSEN *******************************/
42
- $code_version = "1.9.9"; // Set code version - needs to be adjusted for every new version!
43
- /******************** VERSION ANPASSEN *******************************/
44
-
45
- $do_admin_notice=false;
46
-
47
- if(empty($GLOBALS["shariff3UU"]["version"]) || ( isset($GLOBALS["shariff3UU"]["version"]) && version_compare($GLOBALS["shariff3UU"]["version"], $code_version) == '-1') ) {
48
-
49
- include(plugin_dir_path(__FILE__).'updates.php');
50
-
51
- if(!isset($wpdb)) { global $wpdb; }
52
-
53
- /* Delete user meta entry shariff3UU_ignore_notice to display update message again after an update */
54
- // check for multisite
55
- if (is_multisite() && $do_admin_notice==true) {
56
- $blogs = $wpdb->get_results("SELECT blog_id FROM {$wpdb->blogs}", ARRAY_A);
57
- if ($blogs) {
58
- foreach($blogs as $blog) {
59
- // switch to each blog
60
- switch_to_blog($blog['blog_id']);
61
- // delete user meta entry shariff3UU_ignore_notice
62
- $users = get_users('role=administrator');
63
- foreach ($users as $user) { if ( !get_user_meta($user, 'shariff3UU_ignore_notice' )) { delete_user_meta($user->ID, 'shariff3UU_ignore_notice'); } }
64
- // switch back to main
65
- restore_current_blog();
66
- }
67
- }
68
- } elseif($do_admin_notice==true) {
69
- $users = get_users('role=administrator');
70
- foreach ($users as $user) { if ( !get_user_meta($user, 'shariff3UU_ignore_notice' )) { delete_user_meta($user->ID, 'shariff3UU_ignore_notice'); } }
71
- }
72
-
73
- /* Clear cache direcotry */
74
- // check for multisite
75
- if (is_multisite()) {
76
- global $wpdb;
77
- $current_blog_id=get_current_blog_id();
78
- $blogs = $wpdb->get_results("SELECT blog_id FROM {$wpdb->blogs}", ARRAY_A);
79
- if ($blogs) {
80
- foreach($blogs as $blog) {
81
- // switch to each blog
82
- switch_to_blog($blog['blog_id']);
83
- // delete cache dir
84
- shariff_removecachedir();
85
- // switch back to main
86
- restore_current_blog();
87
- }
88
- }
89
- } else {
90
- // delete cache dir
91
- shariff_removecachedir();
92
- }
93
-
94
- // set new version
95
- $GLOBALS["shariff3UU"]["version"]=$code_version;
96
-
97
- // Remove empty elements and save to options table
98
- $shariff3UU = array_filter($GLOBALS["shariff3UU"]);
99
- update_option( 'shariff3UU', $shariff3UU );
100
- }
101
- }
102
- add_action('admin_init', 'shariff3UU_update');
103
-
104
- // Add settings link on plugin page
105
- function shariff3UU_settings_link($links) {
106
- $settings_link = '<a href="options-general.php?page=shariff3uu">' . __( 'Settings', 'shariff3UU' ) . '</a>';
107
- array_unshift($links, $settings_link);
108
- return $links;
109
- }
110
- $plugin = plugin_basename(__FILE__);
111
- add_filter("plugin_action_links_$plugin", 'shariff3UU_settings_link' );
112
-
113
- // scyrpts and styles for admin pages e.g. info notice
114
- function admin_style() {
115
- // styles for admin info notice
116
- wp_enqueue_style('admin_css', plugins_url('admin.css', __FILE__));
117
- // scripts for pinterest default image media uploader
118
- wp_enqueue_script('jquery');
119
- wp_enqueue_media();
120
- }
121
- add_action('admin_enqueue_scripts', 'admin_style');
122
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
123
  // translations
124
- function shariff3UU_init_locale() { if(function_exists('load_plugin_textdomain')) { load_plugin_textdomain('shariff3UU', false, dirname(plugin_basename(__FILE__)).'/locale' ); } }
 
 
 
 
125
 
126
  // register shortcode
127
- add_shortcode('shariff', 'RenderShariff' );
128
 
129
  // add admin menu
130
- function shariff3UU_add_admin_menu(){ add_options_page( 'Shariff', 'Shariff', 'manage_options', 'shariff3uu', 'shariff3uu_options_page' ); }
131
- // menu options
 
 
 
132
  function shariff3UU_options_init(){
133
- // register settings and call sanitize function
134
- register_setting( 'pluginPage', 'shariff3UU', 'shariff3UU_options_sanitize' );
135
-
136
- add_settings_section( 'shariff3UU_pluginPage_section', __( 'Enable Shariff for all post and configure the options with these settings.', 'shariff3UU' ),
137
- 'shariff3UU_options_section_callback', 'pluginPage'
138
- );
139
-
140
- add_settings_field( 'shariff3UU_checkbox_add_after_all_posts', __( 'Check to put Shariff at the end off all posts.', 'shariff3UU' ),
141
- 'shariff3UU_checkbox_add_after_all_posts_render', 'pluginPage', 'shariff3UU_pluginPage_section'
142
- );
143
-
144
- add_settings_field( 'shariff3UU_checkbox_add_after_all_pages', __( 'Check to put Shariff at the end off all pages.', 'shariff3UU' ),
145
- 'shariff3UU_checkbox_add_after_all_pages_render', 'pluginPage', 'shariff3UU_pluginPage_section'
146
- );
147
-
148
- add_settings_field( 'shariff3UU_checkbox_add_after_all_overview', __( 'Check to put Shariff at the end off all posts on the overview page.', 'shariff3UU' ),
149
- 'shariff3UU_checkbox_add_after_all_overview_render', 'pluginPage', 'shariff3UU_pluginPage_section'
150
- );
151
-
152
- add_settings_field( 'shariff3UU_checkbox_add_after_all_custom_type', __( 'Check to put Shariff at the end off all extension pages (e.g. product sites).', 'shariff3UU' ),
153
- 'shariff3UU_checkbox_add_after_all_custom_type_render', 'pluginPage', 'shariff3UU_pluginPage_section'
154
- );
155
-
156
- add_settings_field( 'shariff3UU_checkbox_add_before_all_posts', __( 'Check to put Shariff at the beginning off all posts.', 'shariff3UU' ),
157
- 'shariff3UU_checkbox_add_before_all_posts_render', 'pluginPage', 'shariff3UU_pluginPage_section'
158
- );
159
-
160
- add_settings_field( 'shariff3UU_checkbox_add_before_all_pages', __( 'Check to put Shariff at the beginning off all pages.', 'shariff3UU' ),
161
- 'shariff3UU_checkbox_add_before_all_pages_render', 'pluginPage', 'shariff3UU_pluginPage_section'
162
- );
163
-
164
- add_settings_field( 'shariff3UU_checkbox_add_before_all_overview', __( 'Check to put Shariff at the beginning off all posts on the overview page.', 'shariff3UU' ),
165
- 'shariff3UU_checkbox_add_before_all_overview_render', 'pluginPage', 'shariff3UU_pluginPage_section'
166
- );
167
-
168
- add_settings_field( 'shariff3UU_select_language', __( 'Select button language.', 'shariff3UU' ),
169
- 'shariff3UU_select_language_render', 'pluginPage', 'shariff3UU_pluginPage_section'
170
- );
171
-
172
- add_settings_field( 'shariff3UU_radio_theme', __( 'Select theme (Shariff button design).', 'shariff3UU' ),
173
- 'shariff3UU_radio_theme_render', 'pluginPage', 'shariff3UU_pluginPage_section'
174
- );
175
-
176
- add_settings_field( 'shariff3UU_checkbox_buttonsize', __( 'Check this to make the buttons 30% smaller (all designs).', 'shariff3UU' ),
177
- 'shariff3UU_checkbox_buttonsize_render', 'pluginPage', 'shariff3UU_pluginPage_section'
178
- );
179
-
180
- add_settings_field( 'shariff3UU_checkbox_vertical', __( 'Check this to make orientation of buttons <b>vertical</b>.', 'shariff3UU' ),
181
- 'shariff3UU_checkbox_vertical_render', 'pluginPage', 'shariff3UU_pluginPage_section'
182
- );
183
-
184
- add_settings_field( 'shariff3UU_text_services',
185
- __( 'Put in the service do you want enable (<code>facebook|twitter|googleplus|whatsapp|mail|mailto|printer|pinterest|linkedin| xing|reddit|stumbleupon|flattr|info</code>). Use the pipe sign | between two or more services.', 'shariff3UU' ),
186
- 'shariff3UU_text_services_render', 'pluginPage', 'shariff3UU_pluginPage_section'
187
- );
188
-
189
- add_settings_field( 'shariff3UU_checkbox_backend', __( 'Check this to show share statistic.', 'shariff3UU' ),
190
- 'shariff3UU_checkbox_backend_render', 'pluginPage', 'shariff3UU_pluginPage_section'
191
- );
192
-
193
- add_settings_field(
194
- 'shariff3UU_text_info_url', __( 'Change the default link of the "info" button to:', 'shariff3UU' ),
195
- 'shariff3UU_text_info_url_render', 'pluginPage', 'shariff3UU_pluginPage_section'
196
- );
197
-
198
- add_settings_field(
199
- 'shariff3UU_text_twittervia', __( 'Set the screen name for Twitter (via) to', 'shariff3UU' ),
200
- 'shariff3UU_text_twittervia_render', 'pluginPage', 'shariff3UU_pluginPage_section'
201
- );
202
-
203
- add_settings_field(
204
- 'shariff3UU_text_flattruser', __( 'Set the username for Flattr to', 'shariff3UU' ),
205
- 'shariff3UU_text_flattruser_render', 'pluginPage', 'shariff3UU_pluginPage_section'
206
- );
207
-
208
- add_settings_field(
209
- 'shariff3UU_text_style', __( 'CSS style attributes for the CSS container _around_ Shariff', 'shariff3UU' ),
210
- 'shariff3UU_text_style_render', 'pluginPage', 'shariff3UU_pluginPage_section'
211
- );
212
-
213
- // New alignment option
214
- add_settings_field( 'shariff3UU_radio_align', __( 'Select the alignment of the Shariff buttons', 'shariff3UU' ),
215
- 'shariff3UU_radio_align_render', 'pluginPage', 'shariff3UU_pluginPage_section'
216
- );
217
-
218
- // New alignment option for the widget
219
- add_settings_field( 'shariff3UU_radio_align_widget', __( 'Select the alignment of the Shariff buttons in the widget', 'shariff3UU' ),
220
- 'shariff3UU_radio_align_widget_render', 'pluginPage', 'shariff3UU_pluginPage_section'
221
- );
222
-
223
- // default image for pinterest
224
- add_settings_field( 'shariff3UU_text_default_pinterest', __( 'Select the default image for Pinterest in case no other usable image is found.', 'shariff3UU' ),
225
- 'shariff3UU_text_default_pinterest_render', 'pluginPage', 'shariff3UU_pluginPage_section'
226
- );
227
-
228
- }
229
-
230
- // sanitize input from the settings page
231
- function shariff3UU_options_sanitize( $input ){
232
- $valid = array();
233
- if(isset($input["version"])) $valid["version"] = sanitize_text_field( $input["version"] );
234
- if(isset($input["add_after_all_posts"])) $valid["add_after_all_posts"] = $input["add_after_all_posts"];
235
- if(isset($input["add_before_all_posts"])) $valid["add_before_all_posts"] = absint( $input["add_before_all_posts"] );
236
- if(isset($input["add_after_all_overview"])) $valid["add_after_all_overview"] = absint( $input["add_after_all_overview"] );
237
- if(isset($input["add_before_all_overview"])) $valid["add_before_all_overview"] = absint( $input["add_before_all_overview"] );
238
- if(isset($input["add_after_all_pages"])) $valid["add_after_all_pages"] = absint( $input["add_after_all_pages"] );
239
- if(isset($input["add_before_all_pages"])) $valid["add_before_all_pages"] = absint( $input["add_before_all_pages"] );
240
- if(isset($input["add_after_all_custom_type"]))$valid["add_after_all_custom_type"] = absint( $input["add_after_all_custom_type"] );
241
- if(isset($input["language"])) $valid["language"] = sanitize_text_field( $input["language"] );
242
- if(isset($input["theme"])) $valid["theme"] = sanitize_text_field( $input["theme"] );
243
- if(isset($input["buttonsize"])) $valid["buttonsize"] = absint( $input["buttonsize"] );
244
- if(isset($input["vertical"])) $valid["vertical"] = absint( $input["vertical"] );
245
- if(isset($input["services"])) $valid["services"] = str_replace(' ', '',sanitize_text_field( $input["services"] ));
246
- if(isset($input["backend"])) $valid["backend"] = absint( $input["backend"] );
247
- if(isset($input["twitter_via"])) $valid["twitter_via"] = str_replace('@', '', sanitize_text_field( $input["twitter_via"] ));
248
- if(isset($input["flattruser"])) $valid["flattruser"] = str_replace('@', '', sanitize_text_field( $input["flattruser"] ));
249
- // waiting for fix https://core.trac.wordpress.org/ticket/28015 in order to use esc_url_raw instead for info_url
250
- if(isset($input["info_url"])) $valid["info_url"] = sanitize_text_field( $input["info_url"] );
251
- if(isset($input["style"])) $valid["style"] = sanitize_text_field( $input["style"] );
252
- if(isset($input["align"])) $valid["align"] = sanitize_text_field( $input["align"] );
253
- if(isset($input["align_widget"])) $valid["align_widget"] = sanitize_text_field( $input["align_widget"] );
254
- if(isset($input["default_pinterest"])) $valid["default_pinterest"] = sanitize_text_field( $input["default_pinterest"] );
255
- // remove empty elements
256
- $valid = array_filter($valid);
257
- return $valid;
258
- }
259
-
260
- // render admin options: use isset() to prevent errors while debug mode is on
261
- function shariff3UU_checkbox_add_after_all_posts_render(){
262
- echo "<input type='checkbox' name='shariff3UU[add_after_all_posts]' ";
263
- if(isset($GLOBALS["shariff3UU"]["add_after_all_posts"])) echo checked( $GLOBALS["shariff3UU"]["add_after_all_posts"], 1, 0 );
264
- echo " value='1'>";
265
- }
266
-
267
- function shariff3UU_checkbox_add_after_all_pages_render(){
268
- echo "<input type='checkbox' name='shariff3UU[add_after_all_pages]' ";
269
- if(isset($GLOBALS["shariff3UU"]["add_after_all_pages"])) echo checked( $GLOBALS["shariff3UU"]["add_after_all_pages"], 1, 0 );
270
- echo " value='1'>";
271
- }
272
-
273
- function shariff3UU_checkbox_add_after_all_overview_render(){
274
- echo "<input type='checkbox' name='shariff3UU[add_after_all_overview]' ";
275
- if(isset($GLOBALS["shariff3UU"]["add_after_all_overview"])) echo checked( $GLOBALS["shariff3UU"]["add_after_all_overview"], 1, 0 );
276
- echo " value='1'>";
277
- }
278
-
279
- function shariff3UU_checkbox_add_after_all_custom_type_render(){
280
- echo "<input type='checkbox' name='shariff3UU[add_after_all_custom_type]' ";
281
- if(isset($GLOBALS["shariff3UU"]["add_after_all_custom_type"])) echo checked( $GLOBALS["shariff3UU"]["add_after_all_custom_type"], 1, 0 );
282
- echo " value='1'>";
283
- }
284
-
285
- function shariff3UU_checkbox_add_before_all_posts_render(){
286
- echo "<input type='checkbox' name='shariff3UU[add_before_all_posts]' ";
287
- if(isset($GLOBALS["shariff3UU"]["add_before_all_posts"])) echo checked( $GLOBALS["shariff3UU"]["add_before_all_posts"], 1, 0 );
288
- echo " value='1'>";
289
- }
290
-
291
- function shariff3UU_checkbox_add_before_all_pages_render(){
292
- echo "<input type='checkbox' name='shariff3UU[add_before_all_pages]' ";
293
- if(isset($GLOBALS["shariff3UU"]["add_before_all_pages"])) echo checked( $GLOBALS["shariff3UU"]["add_before_all_pages"], 1, 0 );
294
- echo " value='1'>";
295
- }
296
-
297
- function shariff3UU_checkbox_add_before_all_overview_render(){
298
- echo "<input type='checkbox' name='shariff3UU[add_before_all_overview]' ";
299
- if(isset($GLOBALS["shariff3UU"]["add_before_all_overview"])) echo checked( $GLOBALS["shariff3UU"]["add_before_all_overview"], 1, 0 );
300
- echo " value='1'>";
301
- }
302
-
303
- function shariff3UU_select_language_render(){
304
- $options = $GLOBALS["shariff3UU"]; if(!isset($options["language"]))$options["language"]='';
305
- echo "<select name='shariff3UU[language]'>
306
- <option value='' ". selected( $options['language'], '', 0 ) .">". __( 'browser selected', 'shariff3UU') ."</option>
307
- <option value='en' ". selected( $options['language'], 'en', 0 ) .">English</option>
308
- <option value='de' ". selected( $options['language'], 'de', 0 ) .">Deutsch</option>
309
- <option value='fr' ". selected( $options['language'], 'fr', 0 ) .">Français</option>
310
- <option value='es' ". selected( $options['language'], 'es', 0 ) .">Español</option></select>";
311
- }
312
-
313
- function shariff3UU_radio_theme_render(){
314
- $options = $GLOBALS["shariff3UU"]; if(!isset($options["theme"]))$options["theme"]='';
315
- # $wpurl=site_url();
316
- echo "<table border='0'>
317
- <tr><td><input type='radio' name='shariff3UU[theme]' value='' ". checked( $options['theme'], '',0 ) .">default</td><td><img src='".WP_CONTENT_URL."/plugins/shariff/pictos/defaultBtns.png'></td></tr>
318
- <tr><td><input type='radio' name='shariff3UU[theme]' value='color' ". checked( $options['theme'], 'color',0 ) .">color</td><td><img src='".WP_CONTENT_URL."/plugins/shariff/pictos/colorBtns.png'><br></td></tr>
319
- <tr><td><input type='radio' name='shariff3UU[theme]' value='grey' ". checked( $options['theme'], 'grey',0 ) .">grey</td><td><img src='".WP_CONTENT_URL."/plugins/shariff/pictos/greyBtns.png'><br></td></tr>
320
- <tr><td><input type='radio' name='shariff3UU[theme]' value='white' ". checked( $options['theme'], 'white',0 ) .">white</td><td><img src='".WP_CONTENT_URL."/plugins/shariff/pictos/whiteBtns.png'><br></td></tr>
321
- <tr><td><input type='radio' name='shariff3UU[theme]' value='round' ". checked( $options['theme'], 'round',0 ) .">round</td><td><img src='".WP_CONTENT_URL."/plugins/shariff/pictos/roundBtns.png'><br></td></tr>
322
- </table>";
323
- }
324
-
325
- function shariff3UU_checkbox_buttonsize_render(){
326
- echo "<input type='checkbox' name='shariff3UU[buttonsize]' ";
327
- if(isset($GLOBALS['shariff3UU']['buttonsize'])) echo checked( $GLOBALS['shariff3UU']['buttonsize'], 1,0 );
328
- echo " value='1'><img src='". WP_CONTENT_URL ."/plugins/shariff/pictos/smallBtns.png' align='middle'>";
329
- }
330
-
331
- function shariff3UU_checkbox_vertical_render(){
332
- echo "<input type='checkbox' name='shariff3UU[vertical]' ";
333
- if(isset($GLOBALS['shariff3UU']['vertical'])) echo checked( $GLOBALS['shariff3UU']['vertical'], 1,0 );
334
- echo " value='1'><img src='". WP_CONTENT_URL ."/plugins/shariff/pictos/verticalBtns.png' align='top'>";
335
  }
336
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
337
  function shariff3UU_text_services_render(){
338
- (isset($GLOBALS["shariff3UU"]["services"])) ? $services = $GLOBALS["shariff3UU"]["services"] : $services = '';
339
- echo "<input type='text' name='shariff3UU[services]' value='". esc_html($services) ."' size='50' placeholder='twitter|facebook|googleplus|info'>";
 
 
 
 
 
 
 
2
  /**
3
  * Plugin Name: Shariff Wrapper
4
  * Plugin URI: http://www.3uu.org/plugins.htm
5
+ * Description: This is a wrapper to Shariff. It enables shares with Twitter, Facebook ... on posts, pages and themes with no harm for visitors privacy.
6
+ * Version: 2.4.3
7
+ * Author: 3UU, JP
8
  * Author URI: http://www.DatenVerwurstungsZentrale.com/
9
  * License: http://opensource.org/licenses/MIT
10
  * Donate link: http://folge.link/?bitcoin:1Ritz1iUaLaxuYcXhUCoFhkVRH6GWiMTP
12
  * Text Domain: shariff3UU
13
  *
14
  * ### Supported options ###
15
+ * services: [facebook|twitter|googleplus|whatsapp|pinterest|linkedin|xing|reddit|stumbleupon|tumblr|flattr|patreon|paypal|bitcoin|mailform|mailto|printer|info]
16
  * info_url: http://ct.de/-2467514
17
+ * lang: de|en
18
  * theme: default|color|grey|white|round
19
  * orientation: vertical
20
  * twitter_via: screenname
21
+ * flattr_user: username
22
+ * style: CSS code that will be used in a DIV container around shariff
23
  */
24
 
25
  // prevent direct calls to shariff.php
26
  if ( ! class_exists('WP') ) { die(); }
27
+
28
  // the admin page
29
  if ( is_admin() ){
30
+ add_action( 'admin_menu', 'shariff3UU_add_admin_menu' );
31
+ add_action( 'admin_init', 'shariff3UU_options_init' );
32
+ add_action( 'init', 'shariff3UU_init_locale' );
33
  }
34
 
35
+ // get options (needed for front- and backend)
36
+ if ( ! get_option( 'shariff3UU_basic' ) ) {
37
+ // version < 2.3
38
+ $shariff3UU = get_option( 'shariff3UU' ); $shariff3UU_basic = array(); $shariff3UU_design = array(); $shariff3UU_advanced = array(); $shariff3UU_mailform = array();
39
+ }
40
+ else {
41
+ // version >= 2.3
42
+ $shariff3UU_basic = (array) get_option( 'shariff3UU_basic' );
43
+ $shariff3UU_design = (array) get_option( 'shariff3UU_design' );
44
+ $shariff3UU_advanced = (array) get_option( 'shariff3UU_advanced' );
45
+ $shariff3UU_mailform = (array) get_option( 'shariff3UU_mailform' );
46
+ $shariff3UU = array_merge( $shariff3UU_basic, $shariff3UU_design, $shariff3UU_advanced, $shariff3UU_mailform );
47
+ }
48
 
49
+ // allowed tags for headline
50
+ $allowed_tags = array(
51
+ // direct formatting e.g. <strong>
52
+ 'strong' => array(),
53
+ 'em' => array(),
54
+ 'b' => array(),
55
+ 'i' => array(),
56
+ 'br' => array(),
57
+ // elements that can be formatted via CSS
58
+ 'span' => array
59
+ (
60
+ 'class' => array(),
61
+ 'style' => array(),
62
+ 'id' => array()
63
+ ),
64
+ 'p' => array
65
+ (
66
+ 'class' => array(),
67
+ 'style' => array(),
68
+ 'id' => array()
69
+ ),
70
+ 'h1' => array
71
+ (
72
+ 'class' => array(),
73
+ 'style' => array(),
74
+ 'id' => array()
75
+ ),
76
+ 'h2' => array
77
+ (
78
+ 'class' => array(),
79
+ 'style' => array(),
80
+ 'id' => array()
81
+ ),
82
+ 'hr' => array
83
+ (
84
+ 'class' => array(),
85
+ 'style' => array(),
86
+ 'id' => array()
87
+ )
88
+ );
89
+
90
+ // update function to perform tasks _once_ after an update, based on version number to work for automatic as well as manual updates
91
  function shariff3UU_update() {
92
 
93
+ /******************** ADJUST VERSION ********************/
94
+ $code_version = "2.4.3"; // set code version - needs to be adjusted for every new version!
95
+ /******************** ADJUST VERSION ********************/
96
+
97
+ // do we want to display an admin notice after the update?
98
+ $do_admin_notice = false;
99
+
100
+ // check if the installed version is older than the code version
101
+ if( empty( $GLOBALS["shariff3UU"]["version"] ) || ( isset( $GLOBALS["shariff3UU"]["version"] ) && version_compare( $GLOBALS["shariff3UU"]["version"], $code_version ) == '-1' ) ) {
102
+
103
+ // include update file
104
+ include( plugin_dir_path( __FILE__ ) . 'updates.php' );
105
+
106
+ // make sure we have the $wpdb class ready
107
+ if( ! isset($wpdb) ) { global $wpdb; }
108
+
109
+ // Delete user meta entry shariff3UU_ignore_notice to display update message again after an update (check for multisite)
110
+ if ( is_multisite() && $do_admin_notice == true ) {
111
+ $blogs = $wpdb -> get_results( 'SELECT blog_id FROM {$wpdb->blogs}', ARRAY_A );
112
+ if ( $blogs ) {
113
+ foreach( $blogs as $blog ) {
114
+ // switch to each blog
115
+ switch_to_blog( $blog['blog_id'] );
116
+ // delete user meta entry shariff3UU_ignore_notice
117
+ $users = get_users( 'role=administrator' );
118
+ foreach ( $users as $user ) {
119
+ if ( ! get_user_meta($user, 'shariff3UU_ignore_notice' ) ) {
120
+ delete_user_meta( $user -> ID, 'shariff3UU_ignore_notice' );
121
+ }
122
+ }
123
+ // switch back to main
124
+ restore_current_blog();
125
+ }
126
+ }
127
+ } elseif( $do_admin_notice == true ) {
128
+ $users = get_users( 'role=administrator' );
129
+ foreach ( $users as $user ) {
130
+ if ( ! get_user_meta( $user, 'shariff3UU_ignore_notice' ) ) {
131
+ delete_user_meta( $user -> ID, 'shariff3UU_ignore_notice' );
132
+ }
133
+ }
134
+ }
135
+
136
+ // clear cache directory (check for multisite)
137
+ if ( is_multisite() ) {
138
+ $current_blog_id = get_current_blog_id();
139
+ $blogs = $wpdb -> get_results('SELECT blog_id FROM { $wpdb -> blogs }', ARRAY_A);
140
+ if ( $blogs ) {
141
+ foreach( $blogs as $blog ) {
142
+ // switch to each blog
143
+ switch_to_blog( $blog['blog_id'] );
144
+ // delete cache dir
145
+ shariff_removecachedir();
146
+ // switch back to main
147
+ restore_current_blog();
148
+ }
149
+ }
150
+ } else {
151
+ // delete cache dir
152
+ shariff_removecachedir();
153
+ }
154
+
155
+ // set new version
156
+ $GLOBALS["shariff3UU"]["version"] = $code_version;
157
+ $GLOBALS["shariff3UU_basic"]["version"] = $code_version;
158
+
159
+ // set update notice true / false
160
+ $GLOBALS["shariff3UU"]["update_notice"] = $do_admin_notice;
161
+
162
+ // remove empty elements and save to options table
163
+
164
+ // basic
165
+ $shariff3UU_basic = array_filter( $GLOBALS['shariff3UU_basic'] );
166
+ update_option( 'shariff3UU_basic', $shariff3UU_basic );
167
+ // design
168
+ $shariff3UU_design = array_filter( $GLOBALS['shariff3UU_design'] );
169
+ update_option( 'shariff3UU_design', $shariff3UU_design );
170
+ // advanced
171
+ $shariff3UU_advanced = array_filter( $GLOBALS['shariff3UU_advanced'] );
172
+ update_option( 'shariff3UU_advanced', $shariff3UU_advanced );
173
+ // mailform
174
+ $shariff3UU_mailform = array_filter( $GLOBALS['shariff3UU_mailform'] );
175
+ update_option( 'shariff3UU_mailform', $shariff3UU_mailform );
176
+ }
177
+ }
178
+ add_action( 'admin_init', 'shariff3UU_update' );
179
+
180
+ // add settings link on plugin page
181
+ function shariff3UU_settings_link( $links ) {
182
+ $settings_link = '<a href="options-general.php?page=shariff3uu">' . __( 'Settings', 'shariff3UU' ) . '</a>';
183
+ array_unshift( $links, $settings_link );
184
+ return $links;
185
+ }
186
+ $plugin = plugin_basename( __FILE__ );
187
+ add_filter( "plugin_action_links_$plugin", 'shariff3UU_settings_link' );
188
+
189
+ // scripts and styles for admin pages e.g. info notice
190
+ function shariff3UU_admin_style( $hook ) {
191
+ // styles for admin notice - needed on _ALL_ admin pages
192
+ wp_enqueue_style( 'shariff_admin-notice', plugins_url( '/css/shariff_admin-notice.css', __FILE__ ) );
193
+ // styles and scripts only needed on our plugin options page - no need to load them on _ALL_ admin pages
194
+ if ( $hook == 'settings_page_shariff3uu' ) {
195
+ // styles for our plugin options page
196
+ wp_enqueue_style( 'shariff_options', plugins_url( '/css/shariff_options.css', __FILE__ ) );
197
+ // scripts for pinterest default image media uploader
198
+ wp_enqueue_script( 'jquery' ); // just in case
199
+ wp_enqueue_media();
200
+ }
201
+ }
202
+ add_action( 'admin_enqueue_scripts', 'shariff3UU_admin_style' );
203
+
204
  // translations
205
+ function shariff3UU_init_locale() {
206
+ if ( function_exists( 'load_plugin_textdomain' ) ) {
207
+ load_plugin_textdomain( 'shariff3UU', false, dirname( plugin_basename( __FILE__ ) ) . '/locale' );
208
+ }
209
+ }
210
 
211
  // register shortcode
212
+ add_shortcode( 'shariff', 'Render3UUShariff' );
213
 
214
  // add admin menu
215
+ function shariff3UU_add_admin_menu() {
216
+ add_options_page( 'Shariff', 'Shariff', 'manage_options', 'shariff3uu', 'shariff3UU_options_page' );
217
+ }
218
+
219
+ // plugin options page
220
  function shariff3UU_options_init(){
221
+
222
+ // first tab - basic
223
+
224
+ // register first tab (basic) settings and call sanitize function
225
+ register_setting( 'basic', 'shariff3UU_basic', 'shariff3UU_basic_sanitize' );
226
+
227
+ // first tab - basic options
228
+ add_settings_section( 'shariff3UU_basic_section', __( 'Basic options', 'shariff3UU' ),
229
+ 'shariff3UU_basic_section_callback', 'basic' );
230
+
231
+ // services
232
+ add_settings_field( 'shariff3UU_text_services', '<div class="shariff_status-col">' . __( 'Enable the following services in the provided order:', 'shariff3UU' ) . '</div>',
233
+ 'shariff3UU_text_services_render', 'basic', 'shariff3UU_basic_section' );
234
+
235
+ // add after
236
+ add_settings_field( 'shariff3UU_multiplecheckbox_add_after', __( 'Add the Shariff buttons <u>after</u> all:', 'shariff3UU' ),
237
+ 'shariff3UU_multiplecheckbox_add_after_render', 'basic', 'shariff3UU_basic_section' );
238
+
239
+ // add before
240
+ add_settings_field( 'shariff3UU_checkbox_add_before', __( 'Add the Shariff buttons <u>before</u> all:', 'shariff3UU' ),
241
+ 'shariff3UU_multiplecheckbox_add_before_render', 'basic', 'shariff3UU_basic_section' );
242
+
243
+ // disable on protected posts
244
+ add_settings_field( 'shariff3UU_checkbox_disable_on_protected', __( 'Disable the Shariff buttons on password protected posts.', 'shariff3UU' ),
245
+ 'shariff3UU_checkbox_disable_on_protected_render', 'basic', 'shariff3UU_basic_section' );
246
+
247
+ // share counts
248
+ add_settings_field( 'shariff3UU_checkbox_backend', __( 'Enable share counts (statistic).', 'shariff3UU' ),
249
+ 'shariff3UU_checkbox_backend_render', 'basic', 'shariff3UU_basic_section' );
250
+
251
+ // service status section
252
+ add_settings_section( 'shariff3UU_status_section', __( 'Status', 'shariff3UU' ),
253
+ 'shariff3UU_status_section_callback', 'status' );
254
+
255
+ // second tab - design
256
+
257
+ // register second tab (design) settings and call sanitize function
258
+ register_setting( 'design', 'shariff3UU_design', 'shariff3UU_design_sanitize' );
259
+
260
+ // second tab - design options
261
+ add_settings_section( 'shariff3UU_design_section', __( 'Design options', 'shariff3UU' ),
262
+ 'shariff3UU_design_section_callback', 'design' );
263
+
264
+ // button language
265
+ add_settings_field( 'shariff3UU_select_language', '<div class="shariff_status-col">' . __( 'Shariff button language:', 'shariff3UU' ) . '</div>',
266
+ 'shariff3UU_select_language_render', 'design', 'shariff3UU_design_section' );
267
+
268
+ // theme
269
+ add_settings_field( 'shariff3UU_radio_theme', __( 'Shariff button design:', 'shariff3UU' ),
270
+ 'shariff3UU_radio_theme_render', 'design', 'shariff3UU_design_section' );
271
+
272
+ // button size
273
+ add_settings_field( 'shariff3UU_checkbox_buttonsize', __( 'Reduce button size by 30%.', 'shariff3UU' ),
274
+ 'shariff3UU_checkbox_buttonsize_render', 'design', 'shariff3UU_design_section' );
275
+
276
+ // button stretch
277
+ add_settings_field( 'shariff3UU_checkbox_buttonsstretch', __( 'Stretch buttons horizontally to full width.', 'shariff3UU' ),
278
+ 'shariff3UU_checkbox_buttonstretch_render', 'design', 'shariff3UU_design_section' );
279
+
280
+ // vertical
281
+ add_settings_field( 'shariff3UU_checkbox_vertical', __( 'Shariff button orientation <b>vertical</b>.', 'shariff3UU' ),
282
+ 'shariff3UU_checkbox_vertical_render', 'design', 'shariff3UU_design_section' );
283
+
284
+ // alignment option
285
+ add_settings_field( 'shariff3UU_radio_align', __( 'Alignment of the Shariff buttons:', 'shariff3UU' ),
286
+ 'shariff3UU_radio_align_render', 'design', 'shariff3UU_design_section' );
287
+
288
+ // alignment option for the widget
289
+ add_settings_field( 'shariff3UU_radio_align_widget', __( 'Alignment of the Shariff buttons in the widget:', 'shariff3UU' ),
290
+ 'shariff3UU_radio_align_widget_render', 'design', 'shariff3UU_design_section' );
291
+
292
+ // headline
293
+ add_settings_field( 'shariff3UU_text_headline', __( 'Headline above all Shariff buttons:', 'shariff3UU' ),
294
+ 'shariff3UU_text_headline_render', 'design', 'shariff3UU_design_section' );
295
+
296
+ // custom css
297
+ add_settings_field( 'shariff3UU_text_style', __( 'CSS attributes for the container <span style="text-decoration: underline;">around</span> Shariff:', 'shariff3UU' ),
298
+ 'shariff3UU_text_style_render', 'design', 'shariff3UU_design_section' );
299
+
300
+ // third tab - advanced
301
+
302
+ // register third tab (advanced) settings and call sanitize function
303
+ register_setting( 'advanced', 'shariff3UU_advanced', 'shariff3UU_advanced_sanitize' );
304
+
305
+ // third tab - advanced options
306
+ add_settings_section( 'shariff3UU_advanced_section', __( 'Advanced options', 'shariff3UU' ),
307
+ 'shariff3UU_advanced_section_callback', 'advanced' );
308
+
309
+ // info url
310
+ add_settings_field(
311
+ 'shariff3UU_text_info_url', '<div class="shariff_status-col">' . __( 'Custom link for the info button:', 'shariff3UU' ) . '</div>',
312
+ 'shariff3UU_text_info_url_render', 'advanced', 'shariff3UU_advanced_section' );
313
+
314
+ // twitter via
315
+ add_settings_field(
316
+ 'shariff3UU_text_twittervia', __( 'Twitter username for the via tag:', 'shariff3UU' ),
317
+ 'shariff3UU_text_twittervia_render', 'advanced', 'shariff3UU_advanced_section' );
318
+
319
+ // flattr username
320
+ add_settings_field(
321
+ 'shariff3UU_text_flattruser', __( 'Flattr username:', 'shariff3UU' ),
322
+ 'shariff3UU_text_flattruser_render', 'advanced', 'shariff3UU_advanced_section' );
323
+
324
+ // patreon username
325
+ add_settings_field(
326
+ 'shariff3UU_text_patreonid', __( 'Patreon username:', 'shariff3UU' ),
327
+ 'shariff3UU_text_patreonid_render', 'advanced', 'shariff3UU_advanced_section' );
328
+
329
+ // paypal button id
330
+ add_settings_field(
331
+ 'shariff3UU_text_paypalbuttonid', __( 'PayPal hosted button ID:', 'shariff3UU' ),
332
+ 'shariff3UU_text_paypalbuttonid_render', 'advanced', 'shariff3UU_advanced_section' );
333
+
334
+ // bitcoin address
335
+ add_settings_field(
336
+ 'shariff3UU_text_bitcoinaddress', __( 'Bitcoin address:', 'shariff3UU' ),
337
+ 'shariff3UU_text_bitcoinaddress_render', 'advanced', 'shariff3UU_advanced_section' );
338
+
339
+ // default image for pinterest
340
+ add_settings_field( 'shariff3UU_text_default_pinterest', __( 'Default image for Pinterest:', 'shariff3UU' ),
341
+ 'shariff3UU_text_default_pinterest_render', 'advanced', 'shariff3UU_advanced_section' );
342
+
343
+ // Facebook App ID
344
+ add_settings_field( 'shariff3UU_text_fb_id', __( 'Facebook App ID:', 'shariff3UU' ),
345
+ 'shariff3UU_text_fb_id_render', 'advanced', 'shariff3UU_advanced_section' );
346
+
347
+ // Facebook App Secret
348
+ add_settings_field( 'shariff3UU_text_fb_secret', __( 'Facebook App Secret:', 'shariff3UU' ),
349
+ 'shariff3UU_text_fb_secret_render', 'advanced', 'shariff3UU_advanced_section' );
350
+
351
+ // ttl
352
+ add_settings_field( 'shariff3UU_number_ttl', __( 'Cache TTL in seconds (60 - 7200):', 'shariff3UU' ),
353
+ 'shariff3UU_number_ttl_render', 'advanced', 'shariff3UU_advanced_section' );
354
+
355
+ // fourth tab - mailform
356
+
357
+ // register fourth tab (mailform) settings and call sanitize function
358
+ register_setting( 'mailform', 'shariff3UU_mailform', 'shariff3UU_mailform_sanitize' );
359
+
360
+ // fourth tab - mailform options
361
+ add_settings_section( 'shariff3UU_mailform_section', __( 'Mail form options', 'shariff3UU' ),
362
+ 'shariff3UU_mailform_section_callback', 'mailform' );
363
+
364
+ // disable mailform
365
+ add_settings_field(
366
+ 'shariff3UU_checkbox_disable_mailform', '<div class="shariff_status-col">' . __( 'Disable the mail form functionality.', 'shariff3UU' ) .'</div>',
367
+ 'shariff3UU_checkbox_disable_mailform_render', 'mailform', 'shariff3UU_mailform_section' );
368
+
369
+ // require sender e-mail address
370
+ add_settings_field(
371
+ 'shariff3UU_checkbox_require_sender', '<div class="shariff_status-col">' . __( 'Require sender e-mail address.', 'shariff3UU' ) .'</div>',
372
+ 'shariff3UU_checkbox_require_sender_render', 'mailform', 'shariff3UU_mailform_section' );
373
+
374
+ // mailform language
375
+ add_settings_field(
376
+ 'shariff3UU_select_mailform_language', '<div class="shariff_status-col">' . __( 'Mailform language:', 'shariff3UU' ) .'</div>',
377
+ 'shariff3UU_select_mailform_language_render', 'mailform', 'shariff3UU_mailform_section' );
378
+
379
+ // add content of the post to e-mails
380
+ add_settings_field(
381
+ 'shariff3UU_checkbox_mail_add_post_content', '<div class="shariff_status-col">' . __( 'Add the post content to the e-mail body.', 'shariff3UU' ) .'</div>',
382
+ 'shariff3UU_checkbox_mail_add_post_content_render', 'mailform', 'shariff3UU_mailform_section' );
383
+
384
+ // mail sender name
385
+ add_settings_field(
386
+ 'shariff3UU_text_mail_sender_name', __( 'Default sender name:', 'shariff3UU' ),
387
+ 'shariff3UU_text_mail_sender_name_render', 'mailform', 'shariff3UU_mailform_section' );
388
+
389
+ // mail sender address
390
+ add_settings_field(
391
+ 'shariff3UU_text_mail_sender_from', __( 'Default sender e-mail address:', 'shariff3UU' ),
392
+ 'shariff3UU_text_mail_sender_from_render', 'mailform', 'shariff3UU_mailform_section' );
393
+
394
+ // fifth tab - help
395
+
396
+ // fifth tab - help
397
+ add_settings_section( 'shariff3UU_help_section', __( 'Shariff Help', 'shariff3UU' ),
398
+ 'shariff3UU_help_section_callback', 'help' );
399
+ }
400
+
401
+ // sanitize input from the basic settings page
402
+ function shariff3UU_basic_sanitize( $input ) {
403
+ // create array
404
+ $valid = array();
405
+
406
+ if ( isset( $input["version"] ) ) $valid["version"] = sanitize_text_field( $input["version"] );
407
+ if ( isset( $input["services"] ) ) $valid["services"] = str_replace( ' ', '', sanitize_text_field( $input["services"] ) );
408
+ if ( isset( $input["add_after"] ) ) $valid["add_after"] = sani_add_arrays( $input["add_after"] );
409
+ if ( isset( $input["add_before"] ) ) $valid["add_before"] = sani_add_arrays( $input["add_before"] );
410
+ if ( isset( $input["disable_on_protected"] ) ) $valid["disable_on_protected"] = absint( $input["disable_on_protected"] );
411
+ if ( isset( $input["backend"] ) ) $valid["backend"] = absint( $input["backend"] );
412
+
413
+ // remove empty elements
414
+ $valid = array_filter($valid);
415
+
416
+ return $valid;
 
 
 
 
 
 
417
  }
418
 
419
+ // sanitize input from the design settings page
420
+ function shariff3UU_design_sanitize( $input ) {
421
+ // create array
422
+ $valid = array();
423
+
424
+ if ( isset( $input["lang"] ) ) $valid["lang"] = sanitize_text_field( $input["lang"] );
425
+ if ( isset( $input["theme"] ) ) $valid["theme"] = sanitize_text_field( $input["theme"] );
426
+ if ( isset( $input["buttonsize"] ) ) $valid["buttonsize"] = absint( $input["buttonsize"] );
427
+ if ( isset( $input["buttonstretch"] ) ) $valid["buttonstretch"] = absint( $input["buttonstretch"] );
428
+ if ( isset( $input["vertical"] ) ) $valid["vertical"] = absint( $input["vertical"] );
429
+ if ( isset( $input["align"] ) ) $valid["align"] = sanitize_text_field( $input["align"] );
430
+ if ( isset( $input["align_widget"] ) ) $valid["align_widget"] = sanitize_text_field( $input["align_widget"] );
431
+ if ( isset( $input["style"] ) ) $valid["style"] = sanitize_text_field( $input["style"] );
432
+ if ( isset( $input["headline"] ) ) $valid["headline"] = wp_kses( $input["headline"], $GLOBALS["allowed_tags"] );
433
+
434
+ // remove empty elements
435
+ $valid = array_filter($valid);
436
+
437
+ return $valid;
438
+ }
439
+
440
+ // sanitize input from the advanced settings page
441
+ function shariff3UU_advanced_sanitize( $input ) {
442
+ // create array
443
+ $valid = array();
444
+
445
+ // waiting for fix https://core.trac.wordpress.org/ticket/28015 in order to use esc_url_raw instead for info_url
446
+ if ( isset($input["info_url"] ) ) $valid["info_url"] = sanitize_text_field( $input["info_url"] );
447
+ if ( isset($input["twitter_via"] ) ) $valid["twitter_via"] = str_replace( '@', '', sanitize_text_field( $input["twitter_via"] ) );
448
+ if ( isset($input["flattruser"] ) ) $valid["flattruser"] = str_replace( '@', '', sanitize_text_field( $input["flattruser"] ) );
449
+ if ( isset($input["patreonid"] ) ) $valid["patreonid"] = str_replace( '@', '', sanitize_text_field( $input["patreonid"] ) );
450
+ if ( isset($input["paypalbuttonid"] ) ) $valid["paypalbuttonid"] = str_replace( '@', '', sanitize_text_field( $input["paypalbuttonid"] ) );
451
+ if ( isset($input["bitcoinaddress"] ) ) $valid["bitcoinaddress"] = str_replace( '@', '', sanitize_text_field( $input["bitcoinaddress"] ) );
452
+ if ( isset($input["default_pinterest"] ) ) $valid["default_pinterest"] = sanitize_text_field( $input["default_pinterest"] );
453
+ if ( isset($input["fb_id"] ) ) $valid["fb_id"] = sanitize_text_field( $input["fb_id"] );
454
+ if ( isset($input["fb_secret"] ) ) $valid["fb_secret"] = sanitize_text_field( $input["fb_secret"] );
455
+ if ( isset($input["ttl"] ) ) $valid["ttl"] = absint( $input["ttl"] );
456
+
457
+ // protect users from themselfs
458
+ if ( isset( $valid["ttl"] ) && $valid["ttl"] < '60' ) $valid["ttl"] = '';
459
+ elseif ( isset( $valid["ttl"] ) && $valid["ttl"] > '7200' ) $valid["ttl"] = '7200';
460
+
461
+ // remove empty elements
462
+ $valid = array_filter($valid);
463
+
464
+ return $valid;
465
+ }
466
+
467
+ // sanitize input from the mailform settings page
468
+ function shariff3UU_mailform_sanitize( $input ) {
469
+ // create array
470
+ $valid = array();
471
+
472
+ if ( isset( $input["disable_mailform"] ) ) $valid["disable_mailform"] = absint( $input["disable_mailform"] );
473
+ if ( isset( $input["require_sender"] ) ) $valid["require_sender"] = absint( $input["require_sender"] );
474
+ if ( isset( $input["mailform_language"] ) ) $valid["mailform_language"] = sanitize_text_field( $input["mailform_language"] );
475
+ if ( isset( $input["mail_add_post_content"] ) ) $valid["mail_add_post_content"] = absint( $input["mail_add_post_content"] );
476
+ if ( isset( $input["mail_sender_name"] ) ) $valid["mail_sender_name"] = sanitize_text_field( $input["mail_sender_name"] );
477
+ if ( isset( $input["mail_sender_from"] ) && is_email( $input["mail_sender_from"] ) != false ) $valid["mail_sender_from"] = sanitize_email( $input["mail_sender_from"] );
478
+
479
+ // remove empty elements
480
+ $valid = array_filter($valid);
481
+
482
+ return $valid;
483
+ }
484
+
485
+ // helper function to sanitize add arrays
486
+ function sani_add_arrays( $data = array() ) {
487
+ if ( ! is_array($data) || ! count( $data ) ) {
488
+ return array();
489
+ }
490
+ foreach ( $data as $k => $v ) {
491
+ if ( ! is_array( $v ) && ! is_object( $v ) ) {
492
+ $data[ $k ] = absint( trim( $v ) );
493
+ }
494
+ if ( is_array( $v ) ) {
495
+ $data[ $k ] = sani_add_arrays( $v );
496
+ }
497
+ }
498
+ return $data;
499
+ }
500
+
501
+ // render admin options: use isset() to prevent errors while debug mode is on
502
+
503
+ // basic options
504
+
505
+ // description basic options
506
+ function shariff3UU_basic_section_callback(){
507
+ echo __( "Select the desired services in the order you want them to be displayed, where the Shariff buttons should be included automatically and if you want the share counts to be shown.", "shariff3UU" );
508
+ }
509
+
510
+ // services
511
  function shariff3UU_text_services_render(){
512
+ if ( isset( $GLOBALS["shariff3UU_basic"]["services"] ) ) {
513
+ $services = $GLOBALS["shariff3UU_basic"]["services"];
514
+ }
515
+ else {
516
+ $services = '';
517
+ }
518
+ echo '<input type="text" name="shariff3UU_basic[services]" value="' . esc_html($services) . '" size="50" placeholder="twitter|facebook|googleplus|info">';
519
+ echo '<p><code>facebook|twitter|googleplus|whatsapp|pinterest|xing|linkedin|reddit</code></p>';
520
+ echo '<p><code>stumbleupo