NextGEN Gallery – WordPress Gallery Plugin - Version 3.3.0

Version Description

Download this release

Release Info

Developer photocrati
Plugin Icon 128x128 NextGEN Gallery – WordPress Gallery Plugin
Version 3.3.0
Comparing to
See all releases

Code changes from version 3.2.23 to 3.3.0

Files changed (268) hide show
  1. LICENSE +339 -0
  2. changelog.txt +19 -0
  3. composer.json +11 -4
  4. composer.lock +120 -0
  5. nggallery.php +6 -8
  6. non_pope/class.nextgen_shortcode_manager.php +9 -1
  7. products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.css +8 -7
  8. products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.css +1 -1
  9. products/photocrati_nextgen/modules/attach_to_post/static/iframely.css +0 -15
  10. products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.css +1 -1
  11. products/photocrati_nextgen/modules/i18n/lang/nggallery-da_DK.po +2 -2
  12. products/photocrati_nextgen/modules/i18n/lang/nggallery-sv_SE.po +4 -4
  13. products/photocrati_nextgen/modules/i18n/lang/{nggallery.po → nggallery.pot} +1844 -1854
  14. products/photocrati_nextgen/modules/lightbox/static/simplelightbox/nextgen_simple_lightbox_init.js +2 -1
  15. products/photocrati_nextgen/modules/lightbox/static/simplelightbox/nextgen_simple_lightbox_init.min.js +1 -1
  16. products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php +1 -1
  17. products/photocrati_nextgen/modules/nextgen_block/package.module.nextgen_block.php +21 -9
  18. products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php +21 -7
  19. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.6/class.exif_writer.php +1 -1
  20. products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php +4 -0
  21. products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php +11 -1
  22. products/photocrati_nextgen/modules/nextgen_other_options/templates/watermarks_tab.php +52 -5
  23. products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php +1 -0
  24. products/photocrati_nextgen/modules/ngglegacy/admin/admin.php +2 -59
  25. products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css +66 -11
  26. products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.min.css +1 -1
  27. products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php +637 -463
  28. products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php +795 -704
  29. products/photocrati_nextgen/modules/ngglegacy/admin/manage.php +35 -2
  30. products/photocrati_nextgen/modules/ngglegacy/lib/media-rss.php +1 -1
  31. products/photocrati_nextgen/modules/ngglegacy/nggallery.php +4 -2
  32. products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php +12 -3
  33. products/photocrati_nextgen/modules/widget/package.module.widget.php +2 -2
  34. readme.txt +23 -4
  35. vendor/autoload.php +7 -0
  36. vendor/bin/php-parse +205 -0
  37. vendor/composer/ClassLoader.php +445 -0
  38. vendor/composer/LICENSE +21 -0
  39. vendor/composer/autoload_classmap.php +9 -0
  40. vendor/composer/autoload_files.php +10 -0
  41. vendor/composer/autoload_namespaces.php +9 -0
  42. vendor/composer/autoload_psr4.php +10 -0
  43. vendor/composer/autoload_real.php +70 -0
  44. vendor/composer/autoload_static.php +35 -0
  45. vendor/composer/installed.json +107 -0
  46. vendor/nikic/php-parser/LICENSE +31 -0
  47. vendor/nikic/php-parser/README.md +225 -0
  48. vendor/nikic/php-parser/bin/php-parse +205 -0
  49. vendor/nikic/php-parser/composer.json +41 -0
  50. vendor/nikic/php-parser/grammar/README.md +30 -0
  51. vendor/nikic/php-parser/grammar/parser.template +106 -0
  52. vendor/nikic/php-parser/grammar/php5.y +1026 -0
  53. vendor/nikic/php-parser/grammar/php7.y +1029 -0
  54. vendor/nikic/php-parser/grammar/rebuildParsers.php +261 -0
  55. vendor/nikic/php-parser/grammar/tokens.template +17 -0
  56. vendor/nikic/php-parser/grammar/tokens.y +114 -0
  57. vendor/nikic/php-parser/lib/PhpParser/Builder.php +13 -0
  58. vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +122 -0
  59. vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +43 -0
  60. vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +74 -0
  61. vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +50 -0
  62. vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +75 -0
  63. vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +129 -0
  64. vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +45 -0
  65. vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +106 -0
  66. vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +132 -0
  67. vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +64 -0
  68. vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +148 -0
  69. vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +60 -0
  70. vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +49 -0
  71. vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +348 -0
  72. vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +277 -0
  73. vendor/nikic/php-parser/lib/PhpParser/Comment.php +167 -0
  74. vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +7 -0
  75. vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php +6 -0
  76. vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php +226 -0
  77. vendor/nikic/php-parser/lib/PhpParser/Error.php +180 -0
  78. vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +13 -0
  79. vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php +46 -0
  80. vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +18 -0
  81. vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php +27 -0
  82. vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +164 -0
  83. vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +57 -0
  84. vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +256 -0
  85. vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +101 -0
  86. vendor/nikic/php-parser/lib/PhpParser/Lexer.php +416 -0
  87. vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +250 -0
  88. vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php +41 -0
  89. vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php +53 -0
  90. vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php +98 -0
  91. vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php +14 -0
  92. vendor/nikic/php-parser/lib/PhpParser/NameContext.php +285 -0
  93. vendor/nikic/php-parser/lib/PhpParser/Node.php +153 -0
  94. vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +38 -0
  95. vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php +37 -0
  96. vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +9 -0
  97. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php +34 -0
  98. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +41 -0
  99. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php +34 -0
  100. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +71 -0
  101. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +34 -0
  102. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +30 -0
  103. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +12 -0
  104. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php +12 -0
  105. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php +12 -0
  106. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php +12 -0
  107. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php +12 -0
  108. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php +12 -0
  109. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php +12 -0
  110. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php +12 -0
  111. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php +12 -0
  112. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php +12 -0
  113. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php +12 -0
  114. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php +12 -0
  115. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php +12 -0
  116. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php +34 -0
  117. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +40 -0
  118. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +16 -0
  119. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php +16 -0
  120. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php +16 -0
  121. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php +16 -0
  122. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php +16 -0
  123. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php +16 -0
  124. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php +16 -0
  125. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php +16 -0
  126. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php +16 -0
  127. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php +16 -0
  128. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +16 -0
  129. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +16 -0
  130. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php +16 -0
  131. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php +16 -0
  132. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php +16 -0
  133. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php +16 -0
  134. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php +16 -0
  135. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php +16 -0
  136. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php +16 -0
  137. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php +16 -0
  138. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php +16 -0
  139. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php +16 -0
  140. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php +16 -0
  141. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php +16 -0
  142. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +16 -0
  143. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php +16 -0
  144. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php +16 -0
  145. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +30 -0
  146. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +30 -0
  147. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +26 -0
  148. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +12 -0
  149. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php +12 -0
  150. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php +17 -0
  151. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php +12 -0
  152. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php +12 -0
  153. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php +12 -0
  154. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php +12 -0
  155. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php +36 -0
  156. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +30 -0
  157. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +71 -0
  158. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +34 -0
  159. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php +31 -0
  160. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +30 -0
  161. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +31 -0
  162. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +30 -0
  163. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +30 -0
  164. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +34 -0
  165. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +35 -0
  166. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +39 -0
  167. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +35 -0
  168. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +30 -0
  169. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +30 -0
  170. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +40 -0
  171. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +35 -0
  172. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +30 -0
  173. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +30 -0
  174. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +30 -0
  175. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +30 -0
  176. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +30 -0
  177. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +35 -0
  178. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +30 -0
  179. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +40 -0
  180. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +36 -0
  181. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +38 -0
  182. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +30 -0
  183. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +30 -0
  184. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +30 -0
  185. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +30 -0
  186. vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +34 -0
  187. vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +36 -0
  188. vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php +75 -0
  189. vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +242 -0
  190. vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +50 -0
  191. vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +50 -0
  192. vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +30 -0
  193. vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +49 -0
  194. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +7 -0
  195. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php +70 -0
  196. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php +31 -0
  197. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php +30 -0
  198. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +73 -0
  199. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php +28 -0
  200. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +16 -0
  201. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php +16 -0
  202. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php +16 -0
  203. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php +16 -0
  204. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php +16 -0
  205. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php +16 -0
  206. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php +16 -0
  207. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php +16 -0
  208. vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php +141 -0
  209. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +9 -0
  210. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +30 -0
  211. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +34 -0
  212. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +41 -0
  213. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +62 -0
  214. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +87 -0
  215. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +151 -0
  216. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +105 -0
  217. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +30 -0
  218. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +30 -0
  219. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +34 -0
  220. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php +34 -0
  221. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +34 -0
  222. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +30 -0
  223. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +34 -0
  224. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +30 -0
  225. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +33 -0
  226. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +30 -0
  227. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +43 -0
  228. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +47 -0
  229. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +69 -0
  230. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +30 -0
  231. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +31 -0
  232. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +39 -0
  233. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +30 -0
  234. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +43 -0
  235. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +30 -0
  236. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +35 -0
  237. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +31 -0
  238. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +38 -0
  239. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +17 -0
  240. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php +79 -0
  241. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +34 -0
  242. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php +30 -0
  243. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +37 -0
  244. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php +30 -0
  245. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +34 -0
  246. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php +30 -0
  247. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +34 -0
  248. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +13 -0
  249. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php +38 -0
  250. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +34 -0
  251. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +30 -0
  252. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +38 -0
  253. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +30 -0
  254. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +52 -0
  255. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php +47 -0
  256. vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +34 -0
  257. vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +30 -0
  258. vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +17 -0
  259. vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +181 -0
  260. vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +203 -0
  261. vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +81 -0
  262. vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +291 -0
  263. vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +29 -0
  264. vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php +72 -0
  265. vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +20 -0
  266. vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +48 -0
  267. vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +50 -0
  268. vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +187 -0
LICENSE ADDED
@@ -0,0 +1,339 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
5
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Lesser General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License along
307
+ with this program; if not, write to the Free Software Foundation, Inc.,
308
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
309
+
310
+ Also add information on how to contact you by electronic and paper mail.
311
+
312
+ If the program is interactive, make it output a short notice like this
313
+ when it starts in an interactive mode:
314
+
315
+ Gnomovision version 69, Copyright (C) year name of author
316
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317
+ This is free software, and you are welcome to redistribute it
318
+ under certain conditions; type `show c' for details.
319
+
320
+ The hypothetical commands `show w' and `show c' should show the appropriate
321
+ parts of the General Public License. Of course, the commands you use may
322
+ be called something other than `show w' and `show c'; they could even be
323
+ mouse-clicks or menu items--whatever suits your program.
324
+
325
+ You should also get your employer (if you work as a programmer) or your
326
+ school, if any, to sign a "copyright disclaimer" for the program, if
327
+ necessary. Here is a sample; alter the names:
328
+
329
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
+
332
+ <signature of Ty Coon>, 1 April 1989
333
+ Ty Coon, President of Vice
334
+
335
+ This General Public License does not permit incorporating your program into
336
+ proprietary programs. If your program is a subroutine library, you may
337
+ consider it more useful to permit linking proprietary applications with the
338
+ library. If this is what you want to do, use the GNU Lesser General
339
+ Public License instead of this License.
changelog.txt CHANGED
@@ -1,6 +1,25 @@
1
  NextGEN Gallery
2
  by Imagely
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  = V3.2.23 - 12.02.2019 =
5
  * NEW: There is a new setting under Other Options > Misc to disable enqueueing FontAwesome entirely
6
  * Changed: WP-CLI commands have been namespaced and numerous new commands have been added
1
  NextGEN Gallery
2
  by Imagely
3
 
4
+ = V3.3.0 - 03.10.2020 =
5
+ * NEW: Added feature on Manage Galleries page to search gallery names
6
+ * NEW: Added filter 'ngg_disable_shortcodes_in_request_api' to disable rendering of NextGen shortcodes in REST
7
+ * NEW: Added option to automatically watermark images during upload
8
+ * Changed: Minimum PHP version supported is now 5.4
9
+ * Changed: Pope framework now included via Composer
10
+ * Changed: Removed use of 'contextual_help' filter which is deprecated
11
+ * Changed: Renamed nggallery.po to nggallery.pot for better compatibility with Loco Translate
12
+ * Fixed: Compatibility with Divi Booster
13
+ * Fixed: Copying images to another gallery caused a PHP warning
14
+ * Fixed: Featured Image feature was not working
15
+ * Fixed: Fixed PHP warning sometimes displayed with album breadcrumbs
16
+ * Fixed: Fixed PHP warning when displaying certain albums
17
+ * Fixed: No notification was given when moving or copying images on Manage Gallery
18
+ * Fixed: PHP warning would be displayed when MediaRSS feature was enabled
19
+ * Fixed: SimpleLightbox would not use image alttext attribute for titles
20
+ * Fixed: Uploading zip files containing images with uppercase file extensions would fail to extract any images
21
+ * Fixed: Uploading images with invalid EXIF would reject the image entirely
22
+
23
  = V3.2.23 - 12.02.2019 =
24
  * NEW: There is a new setting under Other Options > Misc to disable enqueueing FontAwesome entirely
25
  * Changed: WP-CLI commands have been namespaced and numerous new commands have been added
composer.json CHANGED
@@ -1,12 +1,19 @@
1
  {
2
- "name": "imagely/nextgen-gallery",
3
- "description": "The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 27 million downloads.",
 
4
  "keywords": ["nextgen", "nextgen gallery", "gallery", "galleries", "image", "images", "image gallery", "photo", "photos", "photo gallery", "picture", "pictures", "picture gallery", "album", "albums", "photo albums", "image album", "media", "media gallery", "thumbnails", "thumbnail gallery", "thumbnail galleries", "slideshow", "slideshows", "slideshow gallery", "slideshow galleries", "fancybox", "lightbox", "responsive", "responsive gallery", "responsive galleries", "singlepic", "watermarks", "watermarking", "photography", "photographer"],
5
  "homepage": "https://www.imagely.com/",
6
  "license": "GPLv2",
7
  "type": "wordpress-plugin",
 
 
 
 
8
  "require": {
9
- "php": ">=5.2",
10
- "composer/installers": "v1.0.6"
 
 
11
  }
12
  }
1
  {
2
+ "name": "reactr-io/nextgen-gallery",
3
+ "version": "3.3.0",
4
+ "description": "The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 28 million downloads.",
5
  "keywords": ["nextgen", "nextgen gallery", "gallery", "galleries", "image", "images", "image gallery", "photo", "photos", "photo gallery", "picture", "pictures", "picture gallery", "album", "albums", "photo albums", "image album", "media", "media gallery", "thumbnails", "thumbnail gallery", "thumbnail galleries", "slideshow", "slideshows", "slideshow gallery", "slideshow galleries", "fancybox", "lightbox", "responsive", "responsive gallery", "responsive galleries", "singlepic", "watermarks", "watermarking", "photography", "photographer"],
6
  "homepage": "https://www.imagely.com/",
7
  "license": "GPLv2",
8
  "type": "wordpress-plugin",
9
+ "repositories": [
10
+ {"type": "composer", "url": "https://repo.packagist.com/reactr-io/"},
11
+ {"packagist.org": false}
12
+ ],
13
  "require": {
14
+ "reactr-io/pope-framework": "v0.14"
15
+ },
16
+ "require-dev": {
17
+ "nikic/php-parser": "^4.3"
18
  }
19
  }
composer.lock ADDED
@@ -0,0 +1,120 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "_readme": [
3
+ "This file locks the dependencies of your project to a known state",
4
+ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
5
+ "This file is @generated automatically"
6
+ ],
7
+ "content-hash": "225bb075e183bbcb8bf66528d238ac68",
8
+ "packages": [
9
+ {
10
+ "name": "reactr-io/pope-framework",
11
+ "version": "v0.14",
12
+ "source": {
13
+ "type": "git",
14
+ "url": "https://github.com/reactr-io/pope-framework.git",
15
+ "reference": "a157586db8705910b33f7f05157dddcb88631110"
16
+ },
17
+ "dist": {
18
+ "type": "zip",
19
+ "url": "https://api.github.com/repos/reactr-io/pope-framework/zipball/a157586db8705910b33f7f05157dddcb88631110",
20
+ "reference": "a157586db8705910b33f7f05157dddcb88631110",
21
+ "shasum": "",
22
+ "mirrors": [
23
+ {
24
+ "url": "https://repo.packagist.com/reactr-io/dists/%package%/%version%/%reference%.%type%",
25
+ "preferred": true
26
+ }
27
+ ]
28
+ },
29
+ "type": "library",
30
+ "autoload": {
31
+ "files": [
32
+ "./lib/autoload.php"
33
+ ]
34
+ },
35
+ "notification-url": "https://repo.packagist.com/reactr-io/downloads/",
36
+ "license": [
37
+ "GPL-2.0-only"
38
+ ],
39
+ "authors": [
40
+ {
41
+ "name": "Imagely",
42
+ "email": "support@imagely.com"
43
+ }
44
+ ],
45
+ "description": "A component framework inspired by Zope 3. Pope is \"PHP's Zope\".",
46
+ "support": {
47
+ "source": "https://github.com/reactr-io/pope-framework/tree/v0.14",
48
+ "issues": "https://github.com/reactr-io/pope-framework/issues"
49
+ },
50
+ "time": "2020-02-10T18:04:47+00:00"
51
+ }
52
+ ],
53
+ "packages-dev": [
54
+ {
55
+ "name": "nikic/php-parser",
56
+ "version": "v4.3.0",
57
+ "source": {
58
+ "type": "git",
59
+ "url": "https://github.com/nikic/PHP-Parser.git",
60
+ "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc"
61
+ },
62
+ "dist": {
63
+ "type": "zip",
64
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc",
65
+ "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc",
66
+ "shasum": "",
67
+ "mirrors": [
68
+ {
69
+ "url": "https://repo.packagist.com/reactr-io/dists/%package%/%version%/%reference%.%type%",
70
+ "preferred": true
71
+ }
72
+ ]
73
+ },
74
+ "require": {
75
+ "ext-tokenizer": "*",
76
+ "php": ">=7.0"
77
+ },
78
+ "require-dev": {
79
+ "ircmaxell/php-yacc": "0.0.5",
80
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
81
+ },
82
+ "bin": [
83
+ "bin/php-parse"
84
+ ],
85
+ "type": "library",
86
+ "extra": {
87
+ "branch-alias": {
88
+ "dev-master": "4.3-dev"
89
+ }
90
+ },
91
+ "autoload": {
92
+ "psr-4": {
93
+ "PhpParser\\": "lib/PhpParser"
94
+ }
95
+ },
96
+ "notification-url": "https://repo.packagist.com/reactr-io/downloads/",
97
+ "license": [
98
+ "BSD-3-Clause"
99
+ ],
100
+ "authors": [
101
+ {
102
+ "name": "Nikita Popov"
103
+ }
104
+ ],
105
+ "description": "A PHP parser written in PHP",
106
+ "keywords": [
107
+ "parser",
108
+ "php"
109
+ ],
110
+ "time": "2019-11-08T13:50:10+00:00"
111
+ }
112
+ ],
113
+ "aliases": [],
114
+ "minimum-stability": "stable",
115
+ "stability-flags": [],
116
+ "prefer-stable": false,
117
+ "prefer-lowest": false,
118
+ "platform": [],
119
+ "platform-dev": []
120
+ }
nggallery.php CHANGED
@@ -3,15 +3,15 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You
3
 
4
  /**
5
  * Plugin Name: NextGEN Gallery
6
- * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 27 million downloads.
7
- * Version: 3.2.23
8
  * Author: Imagely
9
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
10
  * Author URI: https://www.imagely.com
11
  * License: GPLv2
12
  * Text Domain: nggallery
13
- * Requires PHP: 5.4
14
  * Domain Path: /products/photocrati_nextgen/modules/i18n/lang
 
15
  */
16
 
17
  if (!class_exists('E_Clean_Exit')) { class E_Clean_Exit extends RuntimeException {} }
@@ -270,9 +270,7 @@ class C_NextGEN_Bootstrap
270
  if ($tmp && (int)$tmp <= 300) @ini_set('xdebug.max_nesting_level', 300);
271
 
272
  // Include pope framework
273
- require_once(implode(
274
- DIRECTORY_SEPARATOR, array(NGG_PLUGIN_DIR, 'pope','lib','autoload.php')
275
- ));
276
 
277
  // Enable/disable pope caching. For now, the pope cache will not be used in multisite environments
278
  if (class_exists('C_Pope_Cache')) {
@@ -715,7 +713,7 @@ class C_NextGEN_Bootstrap
715
  define('NGG_PRODUCT_URL', path_join(str_replace("\\" , '/', NGG_PLUGIN_URL), 'products'));
716
  define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
717
  define('NGG_PLUGIN_STARTED_AT', microtime());
718
- define('NGG_PLUGIN_VERSION', '3.2.23');
719
 
720
  define(
721
  'NGG_SCRIPT_VERSION',
@@ -1077,4 +1075,4 @@ if (!defined('NGG_DISABLE_FREEMIUS') || !NGG_DISABLE_FREEMIUS)
1077
 
1078
  // #endregion Freemius
1079
 
1080
- new C_NextGEN_Bootstrap();
3
 
4
  /**
5
  * Plugin Name: NextGEN Gallery
6
+ * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 28 million downloads.
7
+ * Version: 3.3.0
8
  * Author: Imagely
9
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
10
  * Author URI: https://www.imagely.com
11
  * License: GPLv2
12
  * Text Domain: nggallery
 
13
  * Domain Path: /products/photocrati_nextgen/modules/i18n/lang
14
+ * Requires PHP: 5.4
15
  */
16
 
17
  if (!class_exists('E_Clean_Exit')) { class E_Clean_Exit extends RuntimeException {} }
270
  if ($tmp && (int)$tmp <= 300) @ini_set('xdebug.max_nesting_level', 300);
271
 
272
  // Include pope framework
273
+ require_once('vendor/autoload.php');
 
 
274
 
275
  // Enable/disable pope caching. For now, the pope cache will not be used in multisite environments
276
  if (class_exists('C_Pope_Cache')) {
713
  define('NGG_PRODUCT_URL', path_join(str_replace("\\" , '/', NGG_PLUGIN_URL), 'products'));
714
  define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
715
  define('NGG_PLUGIN_STARTED_AT', microtime());
716
+ define('NGG_PLUGIN_VERSION', '3.3.0');
717
 
718
  define(
719
  'NGG_SCRIPT_VERSION',
1075
 
1076
  // #endregion Freemius
1077
 
1078
+ new C_NextGEN_Bootstrap();
non_pope/class.nextgen_shortcode_manager.php CHANGED
@@ -185,7 +185,15 @@ class C_NextGen_Shortcode_Manager
185
  }
186
  }
187
 
188
- if ($this->is_rest_request()) ob_end_clean();
 
 
 
 
 
 
 
 
189
 
190
  return $content;
191
  }
185
  }
186
  }
187
 
188
+ if ($this->is_rest_request())
189
+ {
190
+ // Pre-generating displayed gallery cache by executing shortcodes in the REST API can prevent users
191
+ // from being able to add and save blocks with lots of images and no pagination (for example a very large
192
+ // basic slideshow or pro masonry / mosaic / tile display)
193
+ if (apply_filters('ngg_disable_shortcodes_in_request_api', FALSE))
194
+ return $content;
195
+ ob_start();
196
+ }
197
 
198
  return $content;
199
  }
products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.css CHANGED
@@ -22,12 +22,13 @@
22
  /* 1. Overall IGW Window */
23
 
24
  html, body {
25
- width: 100%;
26
- height: 100%;
27
- padding: 0px;
28
- margin: 0px;
29
- font-size: 13px;
30
- overflow: hidden;
 
31
  }
32
 
33
  body {
@@ -852,4 +853,4 @@ h3#preview_tab {
852
  margin: 20px auto;
853
  width: 170px;
854
  }
855
- }
22
  /* 1. Overall IGW Window */
23
 
24
  html, body {
25
+ width: 100% !important;
26
+ height: 100% !important;
27
+ padding: 0 !important;
28
+ margin: 0 !important;
29
+ max-width: 100% !important;
30
+ font-size: 13px;
31
+ overflow: hidden;
32
  }
33
 
34
  body {
853
  margin: 20px auto;
854
  width: 170px;
855
  }
856
+ }
products/photocrati_nextgen/modules/attach_to_post/static/attach_to_post.min.css CHANGED
@@ -1 +1 @@
1
- .ui-helper-reset,body,html{font-size:13px}#attach_to_post_tabs,body,html{overflow:hidden;height:100%;padding:0}body,html{width:100%;margin:0}body{position:absolute;visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;height:100%}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#attach_to_post_tabs{border:0;background:0 0;position:relative;visibility:visible}#attach_to_post_tabs #attach_to_post_tabs.ui-tabs-hide{display:block!important;visibility:hidden;position:absolute;top:-5000px}#attach_to_post_tabs h3{text-transform:uppercase;color:#000;margin-top:0;letter-spacing:2px;font-size:18px;font-weight:900}h3#choose_display{margin-bottom:24px}#attach_to_post_tabs .main_menu_tab{padding:0;position:absolute;left:220px;right:0;top:0;bottom:0}#attach_to_post_tabs.ngg_atp_ios_detected{overflow-y:scroll;-webkit-overflow-scrolling:touch}#attach_to_post_tabs .ui-widget-header{border:0;border-bottom:1px solid #dfdfdf;background:0 0}iframe{width:100%;min-height:100%;border:none;padding:0;margin:0;background:0 0}.chrome_70_hack_frames{z-index:100000000!important}.chrome_70_hack_noframes{z-index:0!important}.clear{clear:both;float:none}table{font-size:13px}.select2-search input{width:100%!important}.select2-result-label{white-space:nowrap}.select2-results{font-family:'segoe ui',Arial,sans-serif;font-size:13px}.select2-container a{color:#444!important}#ngg_page_content .ngg_page_content_main .select2-container{width:100%!important;max-width:500px!important}#attach_to_post_tabs .ui-tabs-icon{box-sizing:border-box;color:#fff;font-family:Lato,sans-serif;float:none;font-size:20px;font-weight:700;height:100%;letter-spacing:1px;line-height:60px;margin-bottom:0;position:fixed;text-transform:uppercase;width:220px;padding:0}#attach_to_post_tabs img.attach_to_post_logo{height:80px;padding:50px 0 30px;float:right;margin-right:26px}#attach_to_post_tabs .ui-tabs-nav{border:none;background:0 0;padding:0;margin-top:110px;list-style:none}#attach_to_post_tabs .ui-tabs-nav li{background:0 0;border:none;display:block;height:auto;margin:0;width:100%;border-radius:0;box-sizing:border-box;padding:24px 30px 24px 20px}#attach_to_post_tabs .ui-tabs-nav li.active,#attach_to_post_tabs .ui-tabs-nav li.ui-state-active,#attach_to_post_tabs .ui-tabs-nav li.ui-state-focus,#attach_to_post_tabs .ui-tabs-nav li:focus{outline:0}#attach_to_post_tabs ul.ui-tabs-nav li:nth-of-type(1),#attach_to_post_tabs:not(.ngg_atp_ios_detected) ul.ui-tabs-nav li:nth-of-type(2){list-style:none}#attach_to_post_tabs ul.ui-tabs-nav li:nth-of-type(2) a,#attach_to_post_tabs:not(.ngg_atp_ios_detected) ul.ui-tabs-nav li:nth-of-type(1) a{display:list-item}#attach_to_post_tabs .ui-tabs-nav li a{color:#555;float:right;font-size:13px;font-weight:400;font-family:lato,sans-serif;letter-spacing:1.5px;line-height:1;text-transform:uppercase;padding:0!important}#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-active{border-left:6px solid #9dbd1b}#attach_to_post_tabs .ui-tabs-nav li.ui-state-disabled a,#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-active a,#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:pointer}#attach_to_post_tabs .ui-tabs-nav li a.active_tab{font-weight:800;color:#000}#displayed_tab.main_menu_tab{overflow-y:scroll;overflow-x:hidden}#displayed_tab #ngg_page_content{margin:0;width:100%}#displayed_tab #attach_to_post_tabs .ngg_page_content_header{display:none}#displayed_tab #ngg_page_content .ngg_page_content_menu{background:0 0;border:none;padding:0 20px 10px 27px;float:none;height:25px;margin-top:0;width:auto;position:relative;top:100px}#displayed_tab #ngg_page_content .ngg_page_content_menu a,#displayed_tab #ngg_page_content .ngg_page_content_menu a:active{border:none;color:#000;display:inline;font-weight:300;text-decoration:none;line-height:25px;padding:4px;font-size:12px;background:0 0;margin-right:10px}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active{font-weight:500;color:#000;border-bottom:3px solid #9ebc1b}#displayed_tab #ngg_page_content .ngg_page_content_menu a:active:after,#displayed_tab #ngg_page_content .ngg_page_content_menu a:before{display:none}#displayed_tab #ngg_page_content .ngg_page_content_main{padding:20px 30px 30px;width:100%;box-shadow:none}#displayed_tab #ngg_page_content.ngg_settings_page{border:none}#displayed_tab .ngg_igw_promo{display:block!important;padding:10px 20px;position:relative;top:-187px;left:608px;background:#9ebc1b;color:#fff;font-family:Lato,sans-serif;letter-spacing:.5px;box-sizing:border-box;width:200px;height:172px;margin-bottom:-170px}#displayed_tab .ngg_igw_promo p:nth-of-type(1){margin-top:10px}#displayed_tab .ngg_igw_promo p:nth-of-type(2){margin:20px 0}#displayed_tab .ngg_igw_promo a{text-decoration:none;font-weight:600;background:#000;color:#fff;padding:10px 16px;font-size:11px;text-transform:uppercase}#displayed_tab .ngg_igw_promo a:after{content:"\f345";font:400 12px dashicons;color:#fff!important;display:inline-block;position:relative;top:2px;left:6px}#displayed_tab .ngg_igw_coupon{font-size:12px;margin-top:10px}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main>div.ngg_igw_video{display:block!important;position:absolute;left:280px;top:71px}#displayed_tab .ngg_igw_video_open{background:#000;cursor:pointer;margin:0;font-weight:400;height:28px!important;line-height:28px!important;font-size:10px}#displayed_tab .ngg_igw_video_inner{display:none;box-shadow:0 0 10px 5px rgba(0,0,0,.2);background:#fff}#displayed_tab .ngg_igw_video_close{width:100%;height:50px;display:block;text-align:center;line-height:50px;font-size:13px;font-weight:600;cursor:pointer;font-family:Lato,sans-serif;background:#000;color:#fff;text-transform:uppercase;letter-spacing:1.5px}#displayed_tab .ngg_igw_video iframe{width:630px;height:350px!important;min-height:auto;margin-bottom:-3px}#choose_display_content,#display_settings_tab_content,#preview_tab_content{margin-top:80px}#displayed_tab #displayed_gallery_source{width:400px}#displayed_tab #display_tip{color:rgba(42,52,61,.6);display:block;font-size:14px;width:960px;max-width:100%;padding:10px 0 0}#displayed_tab #slug_configuration{display:none}#displayed_tab #slug_configuration td,#displayed_tab #source_configuration td{vertical-align:top;padding:4px 0!important;min-width:200px}#displayed_tab #source_configuration label{color:#777!important;font-size:13px!important}#attach_to_post_tabs #displayed_tab #ngg_page_content #source_configuration tr td:first-of-type{white-space:normal;line-height:1.2;width:265px}#displayed_tab #ngg_page_content .select2-container{width:250px!important;line-height:20px}#displayed_tab #ngg_page_content .ngg_page_content_main .select2-selection--multiple,#displayed_tab #ngg_page_content .ngg_page_content_main .select2-selection--single{height:auto;line-height:21px}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#9fbb1a}#displayed_tab #slug_configuration #slug_label{width:52px}#displayed_tab #slug_configuration #slug_column input[type=text]{width:498px}#displayed_tab #display_type_selector{margin-top:14px}#displayed_tab .display_type_preview{float:left;margin:0 5px 5px 0;border:1px solid #ddd;background:#fff;width:145px;height:170px}#displayed_tab .display_type_preview .image_container{width:100%;vertical-align:middle;text-align:center;font-size:12px;font-weight:500;padding:8px;box-sizing:border-box}#displayed_tab .display_type_preview .image_container img{margin-top:10px;margin-bottom:10px;box-sizing:border-box;max-width:100px}#displayed_tab .display_type_preview .image_container p{display:inline-block}.display_type_preview label>div{font-size:12px}#displayed_tab .select2-chosen{color:#666!important}#ngg_page_content #save_displayed_gallery.button{font-weight:700;height:50px!important;line-height:50px!important;padding:0 30px!important;font-size:13px}#save_displayed_gallery:disabled{background:gray!important}#display_settings_tab #display_settings_form table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;width:180px}#display_settings_tab #display_settings_form table td{text-align:left}#display_settings_tab #display_settings_form table textarea{height:60px}#display_settings_tab #display_settings_form input[type=number],#display_settings_tab #display_settings_form input[type=text],#display_settings_tab #display_settings_form select,#display_settings_tab #display_settings_form textarea{width:157px}#display_settings_tab #display_settings_form .ngg_slideshow_gallery_height,#display_settings_tab #display_settings_form .ngg_slideshow_gallery_width,#display_settings_tab #display_settings_form .ngg_thumbnail_dimension_height,#display_settings_tab #display_settings_form .ngg_thumbnail_dimension_width{width:65px!important}#display_settings_tab #display_settings_form .nextgen_settings_colorpicker{width:85px!important;text-align:center}h3#preview_tab{margin-bottom:0}#preview_tab_content{padding:10px 0}#preview_tab_content a{text-decoration:none;font-weight:300}#preview_tab_content .previewed_entity{width:100%;border-bottom:solid 1px #E0E0D6;background-color:#FAFAF0}#preview_tab_content .previewed_entity .container{padding-top:15px}#preview_tab_content .previewed_entity.header{background-color:#F0F0E6;padding-bottom:5px;padding-top:5px}#preview_tab_content .header label{font-size:12px;color:#649664;font-weight:600}#preview_tab_content .ui-sortable-helper{background:0 0}#preview_tab_content ul{list-style-type:none;display:block;padding:0;position:relative;margin-top:20px}#preview_tab_content .inclusion_checkbox{margin-right:7px;display:block;float:left}#preview_tab_content .preview_item{background-color:#fff;width:100px;padding:10px 10px 30px;margin:0 5px 5px 0;border:1px solid #eee;display:block;vertical-align:middle;text-align:center;position:relative}#preview_tab_content .image_container{background-repeat:no-repeat;background-position:center;background-size:cover;display:block;width:100%;height:75px}#preview_tab_content .image_container img{border:0}#preview_tab_content #entity_list li{float:left}#preview_tab_content #entity_list .ui-state-default{background:0 0;border:none}#preview_tab_content .placeholder{background-color:#e0ddc1;position:relative}#preview_tab_content #entity_list .exclude_container{background:#fff;display:block;text-align:center;margin:0 auto;color:#000;font-weight:400;height:1.4em;line-height:1.1em;font-size:.8em;position:absolute;bottom:.2em;left:0;width:100%;padding:5px 0}#preview_tab_content #entity_list .exclude_container input{vertical-align:middle;line-height:1.2em;margin:0 .5em}#preview_tab_content .header_row{margin-bottom:5px;font-weight:300}#preview_tab_content .header_row strong{width:70px;display:inline-block}#preview_tab_content .header_row .separator{display:inline-block;margin:0 5px}#preview_tab_content .header_row .selected{font-weight:700}#preview_tab_content #entity_list li.clear{float:none;clear:both}#preview_tab_content .refresh_button{float:right}@media (max-width:1120px){#displayed_tab .ngg_igw_promo{position:static;width:602px;height:125px;max-width:100%;margin-bottom:10px}#displayed_tab .ngg_igw_coupon{margin-top:10px}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main>div.ngg_igw_video,#displayed_tab .ngg_igw_video_inner{display:none!important}}@media (max-width:800px){#attach_to_post_tabs .ui-tabs-nav li a.active_tab::before,#attach_to_post_tabs img.attach_to_post_logo,#attach_to_post_tabs:not(.ngg_atp_ios_detected) .ui-tabs-nav li:nth-of-type(2)::after{display:none}#attach_to_post_tabs .ui-tabs-icon{width:100%;position:static;border-right:none;border-bottom:3px solid #9fbb1a;text-align:center;height:150px;padding:20px}#attach_to_post_tabs .ui-tabs-nav{margin-top:0}#attach_to_post_tabs .ui-tabs-nav li{padding:5px;list-style:none!important;border-bottom:none;border-top:none!important}#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-active{background:0 0}#attach_to_post_tabs .ui-tabs-nav li a{float:none;padding:0!important;font-weight:400}#attach_to_post_tabs .ui-tabs-nav li a.active_tab{color:#9ebc1b}#attach_to_post_tabs .main_menu_tab{margin-left:0;min-height:auto;position:absolute;top:150px;right:0;left:0;bottom:0;height:auto}#displayed_tab #ngg_page_content .ngg_page_content_menu{padding:5px 0 0;background:0 0;border:none}#displayed_tab #ngg_page_content .ngg_page_content_menu a{display:block;width:100%;float:left;padding:0;text-align:center;box-sizing:border-box}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active,#displayed_tab #ngg_page_content .ngg_page_content_menu a:active{background:0 0}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active:after{display:none}#displayed_tab #ngg_page_content .ngg_page_content_menu a:last-of-type{padding-bottom:5px}#displayed_tab #slug_configuration tr,#displayed_tab #source_configuration tr{margin-bottom:24px}#ngg_page_content #save_displayed_gallery.button{position:static;margin-left:0;padding:0}}@media (max-width:781px){#attach_to_post_tabs.ngg_atp_ios_detected .ui-tabs-nav li:nth-of-type(1)::after{display:none}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main table tr td{width:100%!important}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main #source_configuration{display:table!important}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main #source_configuration tbody{display:table-row-group!important}#displayed_tab #ngg_page_content .responsive-menu-icon{padding:10px 0 15px!important}}@media (max-width:400px){#displayed_tab .display_type_preview{float:none;margin:20px auto;width:170px}}
1
+ .ui-helper-reset,body,html{font-size:13px}body,html{width:100%!important;height:100%!important;padding:0!important;margin:0!important;max-width:100%!important;overflow:hidden}body{position:absolute;visibility:hidden;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;height:100%}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#attach_to_post_tabs{border:0;background:0 0;height:100%;overflow:hidden;padding:0;position:relative;visibility:visible}#attach_to_post_tabs #attach_to_post_tabs.ui-tabs-hide{display:block!important;visibility:hidden;position:absolute;top:-5000px}#attach_to_post_tabs h3{text-transform:uppercase;color:#000;margin-top:0;letter-spacing:2px;font-size:18px;font-weight:900}h3#choose_display{margin-bottom:24px}#attach_to_post_tabs .main_menu_tab{padding:0;position:absolute;left:220px;right:0;top:0;bottom:0}#attach_to_post_tabs.ngg_atp_ios_detected{overflow-y:scroll;-webkit-overflow-scrolling:touch}#attach_to_post_tabs .ui-widget-header{border:0;border-bottom:1px solid #dfdfdf;background:0 0}iframe{width:100%;min-height:100%;border:none;padding:0;margin:0;background:0 0}.chrome_70_hack_frames{z-index:100000000!important}.chrome_70_hack_noframes{z-index:0!important}.clear{clear:both;float:none}table{font-size:13px}.select2-search input{width:100%!important}.select2-result-label{white-space:nowrap}.select2-results{font-family:'segoe ui',Arial,sans-serif;font-size:13px}.select2-container a{color:#444!important}#ngg_page_content .ngg_page_content_main .select2-container{width:100%!important;max-width:500px!important}#attach_to_post_tabs .ui-tabs-icon{box-sizing:border-box;color:#fff;font-family:Lato,sans-serif;float:none;font-size:20px;font-weight:700;height:100%;letter-spacing:1px;line-height:60px;margin-bottom:0;position:fixed;text-transform:uppercase;width:220px;padding:0}#attach_to_post_tabs img.attach_to_post_logo{height:80px;padding:50px 0 30px;float:right;margin-right:26px}#attach_to_post_tabs .ui-tabs-nav{border:none;background:0 0;padding:0;margin-top:110px;list-style:none}#attach_to_post_tabs .ui-tabs-nav li{background:0 0;border:none;display:block;height:auto;margin:0;width:100%;border-radius:0;box-sizing:border-box;padding:24px 30px 24px 20px}#attach_to_post_tabs .ui-tabs-nav li.active,#attach_to_post_tabs .ui-tabs-nav li.ui-state-active,#attach_to_post_tabs .ui-tabs-nav li.ui-state-focus,#attach_to_post_tabs .ui-tabs-nav li:focus{outline:0}#attach_to_post_tabs ul.ui-tabs-nav li:nth-of-type(1),#attach_to_post_tabs:not(.ngg_atp_ios_detected) ul.ui-tabs-nav li:nth-of-type(2){list-style:none}#attach_to_post_tabs ul.ui-tabs-nav li:nth-of-type(2) a,#attach_to_post_tabs:not(.ngg_atp_ios_detected) ul.ui-tabs-nav li:nth-of-type(1) a{display:list-item}#attach_to_post_tabs .ui-tabs-nav li a{color:#555;float:right;font-size:13px;font-weight:400;font-family:lato,sans-serif;letter-spacing:1.5px;line-height:1;text-transform:uppercase;padding:0!important}#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-active{border-left:6px solid #9dbd1b}#attach_to_post_tabs .ui-tabs-nav li.ui-state-disabled a,#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-active a,#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-loading a{cursor:pointer}#attach_to_post_tabs .ui-tabs-nav li a.active_tab{font-weight:800;color:#000}#displayed_tab.main_menu_tab{overflow-y:scroll;overflow-x:hidden}#displayed_tab #ngg_page_content{margin:0;width:100%}#displayed_tab #attach_to_post_tabs .ngg_page_content_header{display:none}#displayed_tab #ngg_page_content .ngg_page_content_menu{background:0 0;border:none;padding:0 20px 10px 27px;float:none;height:25px;margin-top:0;width:auto;position:relative;top:100px}#displayed_tab #ngg_page_content .ngg_page_content_menu a,#displayed_tab #ngg_page_content .ngg_page_content_menu a:active{border:none;color:#000;display:inline;font-weight:300;text-decoration:none;line-height:25px;padding:4px;font-size:12px;background:0 0;margin-right:10px}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active{font-weight:500;color:#000;border-bottom:3px solid #9ebc1b}#displayed_tab #ngg_page_content .ngg_page_content_menu a:active:after,#displayed_tab #ngg_page_content .ngg_page_content_menu a:before{display:none}#displayed_tab #ngg_page_content .ngg_page_content_main{padding:20px 30px 30px;width:100%;box-shadow:none}#displayed_tab #ngg_page_content.ngg_settings_page{border:none}#displayed_tab .ngg_igw_promo{display:block!important;padding:10px 20px;position:relative;top:-187px;left:608px;background:#9ebc1b;color:#fff;font-family:Lato,sans-serif;letter-spacing:.5px;box-sizing:border-box;width:200px;height:172px;margin-bottom:-170px}#displayed_tab .ngg_igw_promo p:nth-of-type(1){margin-top:10px}#displayed_tab .ngg_igw_promo p:nth-of-type(2){margin:20px 0}#displayed_tab .ngg_igw_promo a{text-decoration:none;font-weight:600;background:#000;color:#fff;padding:10px 16px;font-size:11px;text-transform:uppercase}#displayed_tab .ngg_igw_promo a:after{content:"\f345";font:400 12px dashicons;color:#fff!important;display:inline-block;position:relative;top:2px;left:6px}#displayed_tab .ngg_igw_coupon{font-size:12px;margin-top:10px}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main>div.ngg_igw_video{display:block!important;position:absolute;left:280px;top:71px}#displayed_tab .ngg_igw_video_open{background:#000;cursor:pointer;margin:0;font-weight:400;height:28px!important;line-height:28px!important;font-size:10px}#displayed_tab .ngg_igw_video_inner{display:none;box-shadow:0 0 10px 5px rgba(0,0,0,.2);background:#fff}#displayed_tab .ngg_igw_video_close{width:100%;height:50px;display:block;text-align:center;line-height:50px;font-size:13px;font-weight:600;cursor:pointer;font-family:Lato,sans-serif;background:#000;color:#fff;text-transform:uppercase;letter-spacing:1.5px}#displayed_tab .ngg_igw_video iframe{width:630px;height:350px!important;min-height:auto;margin-bottom:-3px}#choose_display_content,#display_settings_tab_content,#preview_tab_content{margin-top:80px}#displayed_tab #displayed_gallery_source{width:400px}#displayed_tab #display_tip{color:rgba(42,52,61,.6);display:block;font-size:14px;width:960px;max-width:100%;padding:10px 0 0}#displayed_tab #slug_configuration{display:none}#displayed_tab #slug_configuration td,#displayed_tab #source_configuration td{vertical-align:top;padding:4px 0!important;min-width:200px}#displayed_tab #source_configuration label{color:#777!important;font-size:13px!important}#attach_to_post_tabs #displayed_tab #ngg_page_content #source_configuration tr td:first-of-type{white-space:normal;line-height:1.2;width:265px}#displayed_tab #ngg_page_content .select2-container{width:250px!important;line-height:20px}#displayed_tab #ngg_page_content .ngg_page_content_main .select2-selection--multiple,#displayed_tab #ngg_page_content .ngg_page_content_main .select2-selection--single{height:auto;line-height:21px}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#9fbb1a}#displayed_tab #slug_configuration #slug_label{width:52px}#displayed_tab #slug_configuration #slug_column input[type=text]{width:498px}#displayed_tab #display_type_selector{margin-top:14px}#displayed_tab .display_type_preview{float:left;margin:0 5px 5px 0;border:1px solid #ddd;background:#fff;width:145px;height:170px}#displayed_tab .display_type_preview .image_container{width:100%;vertical-align:middle;text-align:center;font-size:12px;font-weight:500;padding:8px;box-sizing:border-box}#displayed_tab .display_type_preview .image_container img{margin-top:10px;margin-bottom:10px;box-sizing:border-box;max-width:100px}#displayed_tab .display_type_preview .image_container p{display:inline-block}.display_type_preview label>div{font-size:12px}#displayed_tab .select2-chosen{color:#666!important}#ngg_page_content #save_displayed_gallery.button{font-weight:700;height:50px!important;line-height:50px!important;padding:0 30px!important;font-size:13px}#save_displayed_gallery:disabled{background:gray!important}#display_settings_tab #display_settings_form table tr td:first-child{vertical-align:top;text-align:right;padding-right:7px;width:180px}#display_settings_tab #display_settings_form table td{text-align:left}#display_settings_tab #display_settings_form table textarea{height:60px}#display_settings_tab #display_settings_form input[type=number],#display_settings_tab #display_settings_form input[type=text],#display_settings_tab #display_settings_form select,#display_settings_tab #display_settings_form textarea{width:157px}#display_settings_tab #display_settings_form .ngg_slideshow_gallery_height,#display_settings_tab #display_settings_form .ngg_slideshow_gallery_width,#display_settings_tab #display_settings_form .ngg_thumbnail_dimension_height,#display_settings_tab #display_settings_form .ngg_thumbnail_dimension_width{width:65px!important}#display_settings_tab #display_settings_form .nextgen_settings_colorpicker{width:85px!important;text-align:center}h3#preview_tab{margin-bottom:0}#preview_tab_content{padding:10px 0}#preview_tab_content a{text-decoration:none;font-weight:300}#preview_tab_content .previewed_entity{width:100%;border-bottom:solid 1px #E0E0D6;background-color:#FAFAF0}#preview_tab_content .previewed_entity .container{padding-top:15px}#preview_tab_content .previewed_entity.header{background-color:#F0F0E6;padding-bottom:5px;padding-top:5px}#preview_tab_content .header label{font-size:12px;color:#649664;font-weight:600}#preview_tab_content .ui-sortable-helper{background:0 0}#preview_tab_content ul{list-style-type:none;display:block;padding:0;position:relative;margin-top:20px}#preview_tab_content .inclusion_checkbox{margin-right:7px;display:block;float:left}#preview_tab_content .preview_item{background-color:#fff;width:100px;padding:10px 10px 30px;margin:0 5px 5px 0;border:1px solid #eee;display:block;vertical-align:middle;text-align:center;position:relative}#preview_tab_content .image_container{background-repeat:no-repeat;background-position:center;background-size:cover;display:block;width:100%;height:75px}#preview_tab_content .image_container img{border:0}#preview_tab_content #entity_list li{float:left}#preview_tab_content #entity_list .ui-state-default{background:0 0;border:none}#preview_tab_content .placeholder{background-color:#e0ddc1;position:relative}#preview_tab_content #entity_list .exclude_container{background:#fff;display:block;text-align:center;margin:0 auto;color:#000;font-weight:400;height:1.4em;line-height:1.1em;font-size:.8em;position:absolute;bottom:.2em;left:0;width:100%;padding:5px 0}#preview_tab_content #entity_list .exclude_container input{vertical-align:middle;line-height:1.2em;margin:0 .5em}#preview_tab_content .header_row{margin-bottom:5px;font-weight:300}#preview_tab_content .header_row strong{width:70px;display:inline-block}#preview_tab_content .header_row .separator{display:inline-block;margin:0 5px}#preview_tab_content .header_row .selected{font-weight:700}#preview_tab_content #entity_list li.clear{float:none;clear:both}#preview_tab_content .refresh_button{float:right}@media (max-width:1120px){#displayed_tab .ngg_igw_promo{position:static;width:602px;height:125px;max-width:100%;margin-bottom:10px}#displayed_tab .ngg_igw_coupon{margin-top:10px}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main>div.ngg_igw_video,#displayed_tab .ngg_igw_video_inner{display:none!important}}@media (max-width:800px){#attach_to_post_tabs .ui-tabs-nav li a.active_tab::before,#attach_to_post_tabs img.attach_to_post_logo,#attach_to_post_tabs:not(.ngg_atp_ios_detected) .ui-tabs-nav li:nth-of-type(2)::after{display:none}#attach_to_post_tabs .ui-tabs-icon{width:100%;position:static;border-right:none;border-bottom:3px solid #9fbb1a;text-align:center;height:150px;padding:20px}#attach_to_post_tabs .ui-tabs-nav{margin-top:0}#attach_to_post_tabs .ui-tabs-nav li{padding:5px;list-style:none!important;border-bottom:none;border-top:none!important}#attach_to_post_tabs .ui-tabs-nav li.ui-tabs-active{background:0 0}#attach_to_post_tabs .ui-tabs-nav li a{float:none;padding:0!important;font-weight:400}#attach_to_post_tabs .ui-tabs-nav li a.active_tab{color:#9ebc1b}#attach_to_post_tabs .main_menu_tab{margin-left:0;min-height:auto;position:absolute;top:150px;right:0;left:0;bottom:0;height:auto}#displayed_tab #ngg_page_content .ngg_page_content_menu{padding:5px 0 0;background:0 0;border:none}#displayed_tab #ngg_page_content .ngg_page_content_menu a{display:block;width:100%;float:left;padding:0;text-align:center;box-sizing:border-box}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active,#displayed_tab #ngg_page_content .ngg_page_content_menu a:active{background:0 0}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active:after{display:none}#displayed_tab #ngg_page_content .ngg_page_content_menu a:last-of-type{padding-bottom:5px}#displayed_tab #slug_configuration tr,#displayed_tab #source_configuration tr{margin-bottom:24px}#ngg_page_content #save_displayed_gallery.button{position:static;margin-left:0;padding:0}}@media (max-width:781px){#attach_to_post_tabs.ngg_atp_ios_detected .ui-tabs-nav li:nth-of-type(1)::after{display:none}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main table tr td{width:100%!important}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main #source_configuration{display:table!important}#attach_to_post_tabs #displayed_tab #ngg_page_content .ngg_page_content_main #source_configuration tbody{display:table-row-group!important}#displayed_tab #ngg_page_content .responsive-menu-icon{padding:10px 0 15px!important}}@media (max-width:400px){#displayed_tab .display_type_preview{float:none;margin:20px auto;width:170px}}
products/photocrati_nextgen/modules/attach_to_post/static/iframely.css CHANGED
@@ -129,21 +129,6 @@ html#iframely {
129
  vertical-align: top;
130
  }
131
 
132
-
133
- #iframely #ngg_page_content .ngg_manage_galleries .search-form {
134
- margin-top: -20px;
135
- }
136
-
137
- #iframely #ngg_page_content .ngg_manage_galleries p.search-box {
138
- margin: 0;
139
- position: relative;
140
- float: none;
141
- top: 37px;
142
- left: 460px;
143
- width: 350px;
144
- }
145
-
146
- #iframely .search-box input[name="s"],
147
  #iframely #bulkaction {
148
  width: 140px !important;
149
  }
129
  vertical-align: top;
130
  }
131
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
  #iframely #bulkaction {
133
  width: 140px !important;
134
  }
products/photocrati_nextgen/modules/attach_to_post/static/iframely.min.css CHANGED
@@ -1 +1 @@
1
- #iframely,#iframely body,html#iframely{background:#fff!important}#iframely #icon-nextgen-gallery,#iframely #ngg_page_content .ngg_page_content_header img,#iframely #ngg_page_content .ngg_page_content_header p,#iframely .ngg-admin .notice,#iframely .ngg-admin div.error,#iframely .ngg-admin div.updated,#iframely h2{display:none}#iframely,#iframely body{padding:0;width:100%;height:100%}#iframely{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;background-position:center center;background-repeat:no-repeat;position:absolute;visibility:hidden}#iframely #wpbody-content{float:none;padding:0}#iframely #ngg_page_content.ngg_settings_page{background:#fff}#iframely #wpwrap{background-color:#fcfcfc}#iframely #ngg_page_content{margin:0;width:100%}#iframely #ngg_page_content,#iframely #ngg_page_content .ngg_manage_galleries table td,#iframely #ngg_page_content .ngg_manage_galleries table th{font-size:13px!important}#iframely #ngg_page_content .ngg_page_content_header{margin:25px 0 -30px;padding-left:30px}#iframely #ngg_page_content .ngg_page_content_menu{background:0 0;border:none;padding:10px 20px 10px 23px;float:none;height:25px;margin-top:16px;width:auto}#iframely #ngg_page_content .ngg_page_content_menu a{border:none;color:#000;display:inline;font-weight:300;text-decoration:none;line-height:25px;padding:6px;font-size:12px;margin-right:10px}#iframely #ngg_page_content .ngg_page_content_menu a:active{background:0 0}#iframely #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active{font-weight:500;border-bottom:3px solid #9ebc1b}#iframely #ngg_page_content .ngg_page_content_menu a:before{display:none}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active:after,#displayed_tab #ngg_page_content .ngg_page_content_menu a:active:after{display:none!important}#iframely #ngg_page_content .ngg_page_content_main{padding:30px;width:100%;box-shadow:none}#iframely #ngg_page_content .ngg_page_content_main h3{display:none}#iframely #ngg_page_content .ngg_manage_albums .ngg_page_content_main h3,#iframely #ngg_page_content .ngg_manage_images .ngg_page_content_main h3,#iframely #ngg_page_content .ngg_manage_tags .ngg_page_content_main h3{display:block}#iframely #ngg_page_content .button-primary:active,#iframely #ngg_page_content .button-secondary:active,#iframely #ngg_page_content button:active{vertical-align:top}#iframely #ngg_page_content .ngg_manage_galleries .search-form{margin-top:-20px}#iframely #ngg_page_content .ngg_manage_galleries p.search-box{margin:0;position:relative;float:none;top:37px;left:460px;width:350px}#iframely #bulkaction,#iframely .search-box input[name="s"]{width:140px!important}#iframely .tablenav.top .displaying-num{display:none}#iframely .ngg_manage_galleries table #id{min-width:40px}#iframely .ngg_manage_galleries table #author{min-width:85px}#iframely .ngg_manage_galleries table #page_id{min-width:65px}#iframely .gallery_page_nggallery-manage-gallery .ui-dialog{height:auto!important;min-height:auto}@media (max-width:1140px){#iframely .plupload_buttons{display:inline;margin:0 0 0 10px}#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-primary,#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-secondary,#iframely .gallery_page_ngg_addgallery #ngg_page_content button{width:130px!important}}@media (max-width:940px){#iframely .plupload_buttons{display:block;margin:10px 0 0 75px}#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-primary,#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-secondary,#iframely .gallery_page_ngg_addgallery #ngg_page_content button{width:201px!important}}@media (max-width:800px){#iframely .ngg-admin #wpbody{padding:0}#iframely #ngg_page_content .ngg_page_content_menu{padding:5px 0 0;background:0 0;border:none}#iframely #ngg_page_content .ngg_page_content_menu a{display:block;width:100%;float:left;padding:0;text-align:center;box-sizing:border-box}#iframely #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active,#iframely #ngg_page_content .ngg_page_content_menu a:active{background:0 0}#iframely #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active:after{display:none}#iframely #ngg_page_content .ngg_page_content_menu a:last-of-type{padding-bottom:5px}#iframely .plupload_buttons{margin-left:0}#iframely #ngg_page_content .plupload_droptext{line-height:60px}#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-primary,#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-secondary,#iframely .gallery_page_ngg_addgallery #ngg_page_content button{width:100%!important;margin:4px 0;display:block}}
1
+ #iframely,#iframely body,html#iframely{background:#fff!important}#iframely #icon-nextgen-gallery,#iframely #ngg_page_content .ngg_page_content_header img,#iframely #ngg_page_content .ngg_page_content_header p,#iframely .ngg-admin .notice,#iframely .ngg-admin div.error,#iframely .ngg-admin div.updated,#iframely h2{display:none}#iframely,#iframely body{padding:0;width:100%;height:100%}#iframely{-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";filter:alpha(opacity=0);opacity:0;background-position:center center;background-repeat:no-repeat;position:absolute;visibility:hidden}#iframely #wpbody-content{float:none;padding:0}#iframely #ngg_page_content.ngg_settings_page{background:#fff}#iframely #wpwrap{background-color:#fcfcfc}#iframely #ngg_page_content{margin:0;width:100%}#iframely #ngg_page_content,#iframely #ngg_page_content .ngg_manage_galleries table td,#iframely #ngg_page_content .ngg_manage_galleries table th{font-size:13px!important}#iframely #ngg_page_content .ngg_page_content_header{margin:25px 0 -30px;padding-left:30px}#iframely #ngg_page_content .ngg_page_content_menu{background:0 0;border:none;padding:10px 20px 10px 23px;float:none;height:25px;margin-top:16px;width:auto}#iframely #ngg_page_content .ngg_page_content_menu a{border:none;color:#000;display:inline;font-weight:300;text-decoration:none;line-height:25px;padding:6px;font-size:12px;margin-right:10px}#iframely #ngg_page_content .ngg_page_content_menu a:active{background:0 0}#iframely #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active{font-weight:500;border-bottom:3px solid #9ebc1b}#iframely #ngg_page_content .ngg_page_content_menu a:before{display:none}#displayed_tab #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active:after,#displayed_tab #ngg_page_content .ngg_page_content_menu a:active:after{display:none!important}#iframely #ngg_page_content .ngg_page_content_main{padding:30px;width:100%;box-shadow:none}#iframely #ngg_page_content .ngg_page_content_main h3{display:none}#iframely #ngg_page_content .ngg_manage_albums .ngg_page_content_main h3,#iframely #ngg_page_content .ngg_manage_images .ngg_page_content_main h3,#iframely #ngg_page_content .ngg_manage_tags .ngg_page_content_main h3{display:block}#iframely #ngg_page_content .button-primary:active,#iframely #ngg_page_content .button-secondary:active,#iframely #ngg_page_content button:active{vertical-align:top}#iframely #bulkaction{width:140px!important}#iframely .tablenav.top .displaying-num{display:none}#iframely .ngg_manage_galleries table #id{min-width:40px}#iframely .ngg_manage_galleries table #author{min-width:85px}#iframely .ngg_manage_galleries table #page_id{min-width:65px}#iframely .gallery_page_nggallery-manage-gallery .ui-dialog{height:auto!important;min-height:auto}@media (max-width:1140px){#iframely .plupload_buttons{display:inline;margin:0 0 0 10px}#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-primary,#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-secondary,#iframely .gallery_page_ngg_addgallery #ngg_page_content button{width:130px!important}}@media (max-width:940px){#iframely .plupload_buttons{display:block;margin:10px 0 0 75px}#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-primary,#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-secondary,#iframely .gallery_page_ngg_addgallery #ngg_page_content button{width:201px!important}}@media (max-width:800px){#iframely .ngg-admin #wpbody{padding:0}#iframely #ngg_page_content .ngg_page_content_menu{padding:5px 0 0;background:0 0;border:none}#iframely #ngg_page_content .ngg_page_content_menu a{display:block;width:100%;float:left;padding:0;text-align:center;box-sizing:border-box}#iframely #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active,#iframely #ngg_page_content .ngg_page_content_menu a:active{background:0 0}#iframely #ngg_page_content .ngg_page_content_menu .ngg_page_content_menu_active:after{display:none}#iframely #ngg_page_content .ngg_page_content_menu a:last-of-type{padding-bottom:5px}#iframely .plupload_buttons{margin-left:0}#iframely #ngg_page_content .plupload_droptext{line-height:60px}#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-primary,#iframely .gallery_page_ngg_addgallery #ngg_page_content .button-secondary,#iframely .gallery_page_ngg_addgallery #ngg_page_content button{width:100%!important;margin:4px 0;display:block}}
products/photocrati_nextgen/modules/i18n/lang/nggallery-da_DK.po CHANGED
@@ -3499,10 +3499,10 @@ msgstr "Galleriet ID =%s findes ikke."
3499
  #. Description of the plugin
3500
  msgid ""
3501
  "The most popular gallery plugin for WordPress and one of the most popular "
3502
- "plugins of all time with over 27 million downloads."
3503
  msgstr ""
3504
  "Den mest populære galleri plugin til WordPress og et af de mest populære "
3505
- "plugins igennem tiden med over 27 millioner downloads."
3506
 
3507
  #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:290
3508
  msgid "The most powerful gallery system ever built for WordPress. "
3499
  #. Description of the plugin
3500
  msgid ""
3501
  "The most popular gallery plugin for WordPress and one of the most popular "
3502
+ "plugins of all time with over 28 million downloads."
3503
  msgstr ""
3504
  "Den mest populære galleri plugin til WordPress og et af de mest populære "
3505
+ "plugins igennem tiden med over 28 millioner downloads."
3506
 
3507
  #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:290
3508
  msgid "The most powerful gallery system ever built for WordPress. "
products/photocrati_nextgen/modules/i18n/lang/nggallery-sv_SE.po CHANGED
@@ -2431,8 +2431,8 @@ msgid "Server Settings"
2431
  msgstr "Serverinställningar"
2432
 
2433
  #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:97
2434
- msgid "NextGEN Gallery is one of the most popular WordPress plugins of all time with over 27 million downloads."
2435
- msgstr "NextGEN Gallery är en av de mest populära WordPress-tilläggen genom tiderna med över 27 miljoner nedladdningar."
2436
 
2437
  # Missed by NextGEN, translated string is displayed.
2438
  #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:97
@@ -3222,8 +3222,8 @@ msgid "https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/"
3222
  msgstr "https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/"
3223
 
3224
  #. Description of the plugin/theme
3225
- msgid "The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 27 million downloads."
3226
- msgstr "Det mest populära galleri-tillägget för WordPress och ett av de mest populära tillägg genom tiderna med över 27 miljoner nedladdningar."
3227
 
3228
  #. Author of the plugin/theme
3229
  msgid "Imagely"
2431
  msgstr "Serverinställningar"
2432
 
2433
  #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:97
2434
+ msgid "NextGEN Gallery is one of the most popular WordPress plugins of all time with over 28 million downloads."
2435
+ msgstr "NextGEN Gallery är en av de mest populära WordPress-tilläggen genom tiderna med över 28 miljoner nedladdningar."
2436
 
2437
  # Missed by NextGEN, translated string is displayed.
2438
  #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:97
3222
  msgstr "https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/"
3223
 
3224
  #. Description of the plugin/theme
3225
+ msgid "The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 28 million downloads."
3226
+ msgstr "Det mest populära galleri-tillägget för WordPress och ett av de mest populära tillägg genom tiderna med över 28 miljoner nedladdningar."
3227
 
3228
  #. Author of the plugin/theme
3229
  msgid "Imagely"
products/photocrati_nextgen/modules/i18n/lang/{nggallery.po → nggallery.pot} RENAMED
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2019 Imagely
2
  # NextGEN Gallery base (English) .po source
3
  # This file is distributed under the same license as the NextGEN Gallery plugin.
4
  #
@@ -13,14 +13,15 @@ msgstr ""
13
  "Content-Type: text/plain; charset=UTF-8\n"
14
  "Content-Transfer-Encoding: 8bit\n"
15
  "POT-Creation-Date: 2014-02-20 19:45-0800\n"
16
- "PO-Revision-Date: 2019-07-01 13:20+47\n"
 
17
  "X-Domain: nggallery\n"
18
 
19
  #. Plugin Name of the plugin
20
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:11
21
- #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:379
22
  #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:538
23
- #: nggallery.php:951
 
24
  msgid "NextGEN Gallery"
25
  msgstr ""
26
 
@@ -29,11 +30,11 @@ msgid "https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/"
29
  msgstr ""
30
 
31
  #. Description of the plugin
32
- msgid "The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 27 million downloads."
33
  msgstr ""
34
 
35
  #. Author of the plugin
36
- #: nggallery.php:955
37
  msgid "Imagely"
38
  msgstr ""
39
 
@@ -41,262 +42,341 @@ msgstr ""
41
  msgid "https://www.imagely.com"
42
  msgstr ""
43
 
44
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:23
45
- msgid "Upgrade to Pro"
46
  msgstr ""
47
 
48
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:35
49
- msgid "Create Stunning Galleries with NextGEN Pro"
50
  msgstr ""
51
 
52
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:36
53
- msgid "Sell Photos + Adobe Lightroom"
54
  msgstr ""
55
 
56
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:37
57
- msgid "Introducing the most powerful gallery system ever made for WordPress. Watch our 30 second video, or click below to learn more about NextGEN premium extensions and support."
 
58
  msgstr ""
59
 
60
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:38
61
- msgid "You're awesome! You've already got NextGEN Plus. But why not go all the way? With NextGEN Pro, you can sell print and digital downloads, provide proofing galleries for clients, manage galleries directly from Adobe Lightroom, and more."
62
  msgstr ""
63
 
64
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:39
65
- msgid "Psst...watch the video ->"
66
  msgstr ""
67
 
68
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:40
69
- msgid "Get Premium Extensions"
70
  msgstr ""
71
 
72
- #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:41
73
- msgid "Learn More"
74
  msgstr ""
75
 
76
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:517
77
- msgid "Gallery creation failed for \"%1$s\"%2$s."
78
  msgstr ""
79
 
80
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:540
81
- msgid "Failed to remove gallery (%1$s)."
82
  msgstr ""
83
 
84
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:619
85
- msgid "Could not delete image file(s) from disk (%1$s)."
86
  msgstr ""
87
 
88
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:623
89
- msgid "Could not remove image from gallery (%1$s)."
90
  msgstr ""
91
 
92
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:635
93
- msgid "Could not remove image because image was not found (%1$s)."
 
94
  msgstr ""
95
 
96
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:652
97
- msgid "Could not obtain data for image (%1$s)."
98
  msgstr ""
99
 
100
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:665
101
- msgid "Could not find image file for image (%1$s). Using FTP Upload Method in Multisite is not recommended."
102
  msgstr ""
103
 
104
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:667
105
- msgid "Could not find image file for image (%1$s)."
106
  msgstr ""
107
 
108
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:687
109
- msgid "No space available for image (%1$s)."
110
  msgstr ""
111
 
112
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:690
113
- msgid " (%1$s)."
114
  msgstr ""
115
 
116
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:693
117
- msgid "No image library present, image uploads will fail (%1$s)."
118
  msgstr ""
119
 
120
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:698
121
- msgid "Inadequate system permissions to write image (%1$s)."
122
  msgstr ""
123
 
124
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:701
125
- msgid "Requested image with id (%2$s) doesn't exist (%1$s)."
126
  msgstr ""
127
 
128
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:744
129
- msgid "Could not access file system for gallery (%1$s)."
130
  msgstr ""
131
 
132
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:752
133
- msgid "Failed to save modified gallery (%1$s). "
134
  msgstr ""
135
 
136
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:759
137
- msgid "Could not find gallery (%1$s)."
 
138
  msgstr ""
139
 
140
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:786
141
- msgid "No gallery was specified to edit."
142
- msgstr ""
 
 
 
 
 
143
 
144
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:832
145
- msgid "Album creation failed."
146
- msgstr ""
 
 
 
 
 
147
 
148
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:852
149
- msgid "Failed to remove album (%1$s)."
150
  msgstr ""
151
 
152
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:908
153
- msgid "Failed to save modified album (%1$s)."
154
  msgstr ""
155
 
156
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:914
157
- msgid "Could not find album (%1$s)."
158
  msgstr ""
159
 
160
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:931
161
- msgid "No album was specified to edit."
162
  msgstr ""
163
 
164
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:48
165
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:138
166
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:344
167
- msgid "Authentication Failed."
168
  msgstr ""
169
 
170
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:126
171
- msgid "Could not determine FTP path."
 
172
  msgstr ""
173
 
174
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:131
175
- msgid "Could not connect to FTP to determine path."
 
 
 
 
 
176
  msgstr ""
177
 
178
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:326
179
- msgid "Job could not be added."
180
  msgstr ""
181
 
182
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:332
183
- msgid "Authorization Failed."
184
  msgstr ""
185
 
186
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:338
187
- msgid "No task list was specified."
188
  msgstr ""
189
 
190
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:401
191
- msgid "Job execution is locked."
192
  msgstr ""
193
 
194
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:449
195
- msgid "Job list is finished."
 
 
 
196
  msgstr ""
197
 
198
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:454
199
- msgid "Job list is unfinished."
200
  msgstr ""
201
 
202
- #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:463
203
- msgid "Job list is empty."
204
  msgstr ""
205
 
206
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:31
207
- msgid "Please ask your hosting provider or system administrator to enable the PHP XML module which is required for image uploads"
 
 
208
  msgstr ""
209
 
210
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:52
211
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:268
212
- msgid "No gallery name specified"
213
  msgstr ""
214
 
215
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:69
216
- msgid "Failed to extract images from ZIP"
217
  msgstr ""
218
 
219
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:84
220
- msgid "Automatic image resizing failed [%1$s]."
221
  msgstr ""
222
 
223
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:93
224
- msgid "Thumbnail generation failed."
225
  msgstr ""
226
 
227
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:96
228
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:286
229
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:305
230
- msgid "Image generation failed"
231
  msgstr ""
232
 
233
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:106
234
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:223
235
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:250
236
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:315
237
- msgid "An unexpected error occured."
238
  msgstr ""
239
 
240
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:117
241
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:322
242
- msgid "No permissions to upload images. Try refreshing the page or ensuring that your user account has sufficient roles/privileges."
243
  msgstr ""
244
 
245
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:174
246
- msgid "Directory does not exist."
247
  msgstr ""
248
 
249
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:178
250
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:186
251
- msgid "No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges."
252
  msgstr ""
253
 
254
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:182
255
- msgid "No directory specified."
256
  msgstr ""
257
 
258
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:218
259
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:230
260
- msgid "No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges."
261
  msgstr ""
262
 
263
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:227
264
- msgid "No folder specified"
265
  msgstr ""
266
 
267
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:12
268
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:604
269
- msgid "Upload Images"
270
  msgstr ""
271
 
272
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:18
273
- msgid "No images were uploaded successfully."
274
  msgstr ""
275
 
276
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:19
277
- msgid "1 image was uploaded successfully."
278
  msgstr ""
279
 
280
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:20
281
- msgid "{count} images were uploaded successfully."
282
  msgstr ""
283
 
284
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:21
285
- msgid "The following errors occured:"
 
286
  msgstr ""
287
 
288
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:22
289
- msgid "Manage gallery > {name}"
290
  msgstr ""
291
 
292
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php:12
293
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:12
294
- msgid "Import Folder"
295
  msgstr ""
296
 
297
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php:12
298
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:206
299
- msgid "Add Gallery / Images"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
300
  msgstr ""
301
 
302
  #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_media_library_form.php:12
@@ -338,7 +418,7 @@ msgid "In Progress..."
338
  msgstr ""
339
 
340
  #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_media_library_form.php:33
341
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:213
342
  msgid "Upload complete. Great job!"
343
  msgstr ""
344
 
@@ -358,309 +438,230 @@ msgstr ""
358
  msgid "Import %d image(s)"
359
  msgstr ""
360
 
361
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php:97
362
- msgid "XML is strongly encouraged for safely uploading images"
363
  msgstr ""
364
 
365
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php:105
366
- msgid "Cannot write to %s: new galleries cannot be created"
 
367
  msgstr ""
368
 
369
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:2
370
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php:2
371
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:166
372
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:167
373
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:185
374
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:385
375
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:442
376
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:477
377
- #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:217
378
- #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:226
379
- msgid "Gallery"
380
- msgid_plural "Galleries"
381
- msgstr[0] ""
382
- msgstr[1] ""
383
 
384
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:4
385
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php:4
386
- msgid "Create a new gallery"
387
  msgstr ""
388
 
389
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:11
390
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php:9
391
- msgid "Gallery title"
392
  msgstr ""
393
 
394
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:15
395
- msgid "Your browser doesn't have Silverlight, HTML5, or HTML4 support."
 
 
396
  msgstr ""
397
 
398
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:118
399
- msgid "Drag image and ZIP files here or click <strong>Add Files</strong>"
 
 
 
400
  msgstr ""
401
 
402
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:236
403
- msgid "An unexpected error occured. This is most likely due to a server misconfiguration. Check your PHP error log or ask your hosting provider for assistance."
 
404
  msgstr ""
405
 
406
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:1
407
- msgid "Select a folder to import."
408
  msgstr ""
409
 
410
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:7
411
- msgid "Leave blank for folder name"
 
412
  msgstr ""
413
 
414
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:11
415
- msgid "Keep images in original location. Caution: If you keep images in the original folder and later delete the gallery, the images in that folder might be deleted depending on your settings."
416
  msgstr ""
417
 
418
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:74
419
- msgid "Done! Successfully imported {count} images. <a href=\"%s\" target=\"_blank\">Manage gallery</a>"
 
420
  msgstr ""
421
 
422
- #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:79
423
- msgid "Upload complete"
424
  msgstr ""
425
 
426
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:33
427
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:132
428
- msgid "None"
429
  msgstr ""
430
 
431
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:38
432
- msgid "Simplelightbox"
433
  msgstr ""
434
 
435
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:51
436
- msgid "Fancybox"
437
  msgstr ""
438
 
439
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:65
440
- msgid "Shutter"
441
  msgstr ""
442
 
443
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:76
444
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:314
445
- msgid "L O A D I N G"
446
  msgstr ""
447
 
448
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:77
449
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:315
450
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:36
451
- msgid "Click to Close"
452
  msgstr ""
453
 
454
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:84
455
- msgid "Shutter Reloaded"
456
  msgstr ""
457
 
458
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:95
459
- msgid "Previous"
460
  msgstr ""
461
 
462
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:96
463
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:29
464
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:29
465
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:33
466
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:49
467
- msgid "Next"
468
  msgstr ""
469
 
470
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:97
471
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:124
472
- msgid "Close"
473
  msgstr ""
474
 
475
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:98
476
- msgid "Full Size"
477
  msgstr ""
478
 
479
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:99
480
- msgid "Fit to Screen"
481
  msgstr ""
482
 
483
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:100
484
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:122
485
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:481
486
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/default-view.php:54
487
- msgid "Image"
488
- msgid_plural "Images"
 
 
 
 
 
 
 
 
 
489
  msgstr[0] ""
490
  msgstr[1] ""
491
 
492
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:101
493
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:123
494
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31
495
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31
496
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35
497
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55
498
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/default-view.php:54
499
- msgid "of"
500
  msgstr ""
501
 
502
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:102
503
- msgid "Loading..."
 
504
  msgstr ""
505
 
506
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:109
507
- msgid "Thickbox"
508
  msgstr ""
509
 
510
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:120
511
- msgid "Next &gt;"
512
  msgstr ""
513
 
514
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:121
515
- msgid "&lt; Prev"
516
  msgstr ""
517
 
518
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:125
519
- msgid "This feature requires inline frames. You have iframes disabled or your browser does not support them."
520
  msgstr ""
521
 
522
- #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:135
523
- #: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:76
524
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:27
525
- msgid "Custom"
526
  msgstr ""
527
 
528
- #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact/default-view.php:41
529
- #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php:41
530
- #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended/default-view.php:31
531
- #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php:31
532
- #: products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php:63
533
- #: products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php:31
534
- msgid "Photos"
535
  msgstr ""
536
 
537
- #: products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php:216
538
- msgid "NextGEN Basic Compact Album"
539
  msgstr ""
540
 
541
- #: products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php:232
542
- msgid "NextGEN Basic Extended Album"
543
- msgstr ""
544
-
545
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:42
546
- msgid "Display galleries as"
547
- msgstr ""
548
-
549
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:43
550
- msgid "How would you like galleries to be displayed?"
551
- msgstr ""
552
-
553
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:45
554
- msgid "Galleries per page"
555
- msgstr ""
556
-
557
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:64
558
- msgid "Items per page"
559
- msgstr ""
560
-
561
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:66
562
- msgid "Maximum number of galleries or sub-albums to appear on a single page"
563
- msgstr ""
564
-
565
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:78
566
- msgid "Enable breadcrumbs"
567
- msgstr ""
568
-
569
- #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:88
570
- msgid "Display descriptions"
571
- msgstr ""
572
-
573
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:63
574
- msgid "Images per page"
575
- msgstr ""
576
-
577
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:65
578
- msgid "0 will display all images at once"
579
- msgstr ""
580
-
581
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:83
582
- msgid "Number of columns to display"
583
- msgstr ""
584
-
585
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:87
586
- msgid "# of columns"
587
- msgstr ""
588
-
589
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:103
590
- msgid "Add Hidden Images"
591
- msgstr ""
592
-
593
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:105
594
- msgid "If pagination is used this option will show all images in the modal window (Thickbox, Lightbox etc.) This increases page load."
595
- msgstr ""
596
-
597
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:114
598
- msgid "Use imagebrowser effect"
599
- msgstr ""
600
-
601
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:116
602
- msgid "When active each image in the gallery will link to an imagebrowser display and lightbox effects will not be applied."
603
- msgstr ""
604
-
605
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:131
606
- msgid "Show slideshow link"
607
  msgstr ""
608
 
609
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:147
610
- msgid "Slideshow link text"
611
  msgstr ""
612
 
613
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:54
614
- msgid "Autoplay?"
615
  msgstr ""
616
 
617
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:70
618
- msgid "Pause on Hover?"
619
  msgstr ""
620
 
621
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:86
622
- msgid "Show Arrows?"
623
  msgstr ""
624
 
625
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:102
626
- msgid "Transition Style"
627
  msgstr ""
628
 
629
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:124
630
- msgid "Interval"
631
  msgstr ""
632
 
633
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:128
634
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:148
635
- msgid "Milliseconds"
636
  msgstr ""
637
 
638
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:144
639
- msgid "Transition Speed"
640
  msgstr ""
641
 
642
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:157
643
- msgid "Maximum dimensions"
644
  msgstr ""
645
 
646
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:158
647
- msgid "Certain themes may allow images to flow over their container if this setting is too large"
648
  msgstr ""
649
 
650
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:175
651
- msgid "Show thumbnail link"
652
  msgstr ""
653
 
654
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:191
655
- msgid "Thumbnail link text"
656
  msgstr ""
657
 
658
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php:370
659
- msgid "NextGEN Basic Thumbnails"
660
  msgstr ""
661
 
662
- #: products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php:386
663
- msgid "NextGEN Basic Slideshow"
664
  msgstr ""
665
 
666
  #: products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php:210
@@ -744,2761 +745,2750 @@ msgstr ""
744
  msgid "Congratulations! You just created your first gallery. You can now click the \"Publish\" button on the right to publish your page."
745
  msgstr ""
746
 
747
- #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_requirements_manager.php:17
748
- msgid "NextGen Gallery requires the following PHP extensions to function correctly. Please contact your hosting provider or systems admin and ask them for assistance:"
 
749
  msgstr ""
750
 
751
- #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_requirements_manager.php:18
752
- msgid "NextGen Gallery has degraded functionality because of your PHP version. Please contact your hosting provider or systems admin and ask them for assistance:"
753
  msgstr ""
754
 
755
- #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_requirements_manager.php:19
756
- msgid "NextGen Gallery has found an issue trying to access the following files or directories. Please ensure the following locations have the correct permissions:"
757
  msgstr ""
758
 
759
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:242
760
- msgid "Gallery width"
761
  msgstr ""
762
 
763
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:244
764
- msgid "An empty or 0 setting will make the gallery full width"
765
  msgstr ""
766
 
767
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:245
768
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:364
769
- msgid "(optional)"
770
  msgstr ""
771
 
772
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248
773
- msgid "Pixels"
774
  msgstr ""
775
 
776
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248
777
- msgid "Percent"
778
  msgstr ""
779
 
780
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:257
781
- msgid "First Image"
782
  msgstr ""
783
 
784
- #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:258
785
- msgid "Average"
786
  msgstr ""
787
 
788
- #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:149
789
- msgid "Good work. Keep making the web beautiful."
790
  msgstr ""
791
 
792
- #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:169
793
- msgid "Saved successfully"
794
  msgstr ""
795
 
796
- #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:25
797
- msgid "Thanks for installing NextGEN Gallery! Want help creating your first gallery?"
798
  msgstr ""
799
 
800
- #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:26
801
- msgid "Launch the Gallery Wizard"
802
  msgstr ""
803
 
804
- #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:27
805
- msgid "If you close this message, you can also launch the Gallery Wizard at any time from the"
806
  msgstr ""
807
 
808
- #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:28
809
- msgid "NextGEN Overview page"
810
  msgstr ""
811
 
812
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:5
813
- msgid "Hey <strong>%s</strong>, you've created %d NextGEN galleries! Awesome! Could I ask you to give us a 5-star rating really quickly on <a %s>WordPress.org</a>? It helps other WordPress users and motivates us to keep improving. You can also just send us feedback <a %s>here</a>. Thanks! ~ Erick Danzer (founder of Imagely/NextGEN Gallery)"
814
  msgstr ""
815
 
816
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:14
817
- msgid "Ok, you deserve it"
 
 
 
 
 
818
  msgstr ""
819
 
820
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:15
821
- msgid "Nope, maybe later"
822
  msgstr ""
823
 
824
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:16
825
- msgid "I already did"
826
  msgstr ""
827
 
828
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php:45
829
- msgid "Save Options"
830
  msgstr ""
831
 
832
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/form.php:8
833
- msgid "Want options like image protection, social sharing, or ecommerce for this display? "
834
  msgstr ""
835
 
836
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/form.php:8
837
- msgid "Upgrade to NextGEN Pro!"
838
  msgstr ""
839
 
840
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/requirement_notice.php:4
841
- #: products/photocrati_nextgen/modules/nextgen_admin/templates/admin_notice.php:4
842
- msgid "Dismiss"
843
  msgstr ""
844
 
845
- #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_notification_manager.php:278
846
- msgid "Notice is not dismissible"
847
  msgstr ""
848
 
849
- #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_notification_manager.php:280
850
- msgid "No handler defined for this notice"
851
  msgstr ""
852
 
853
- #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_notification_manager.php:337
854
- msgid "Not a valid notice name"
855
  msgstr ""
856
 
857
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:195
858
- msgid "No gallery"
859
  msgstr ""
860
 
861
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:208
862
- msgid "Select &#187;"
863
  msgstr ""
864
 
865
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:258
866
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:15
867
- msgid "Show"
868
  msgstr ""
869
 
870
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:259
871
- msgid "Hide"
872
  msgstr ""
873
 
874
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:264
875
- msgid "Image ID:"
876
  msgstr ""
877
 
878
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:270
879
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:127
880
- msgid "Alt/Title text"
881
- msgstr ""
882
-
883
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:274
884
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:737
885
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:478
886
- msgid "Description"
887
- msgstr ""
888
-
889
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:291
890
- msgid "Size"
891
- msgstr ""
892
-
893
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:295
894
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:735
895
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:158
896
- msgid "Thumbnail"
897
  msgstr ""
898
 
899
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:299
900
- msgid "Singlepic"
901
  msgstr ""
902
 
903
- #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:325
904
- msgid "Save all changes"
905
  msgstr ""
906
 
907
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:42
908
- msgid "Most popular"
909
  msgstr ""
910
 
911
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:43
912
- msgid "Least used"
913
  msgstr ""
914
 
915
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:44
916
- msgid "Alphabetical"
917
  msgstr ""
918
 
919
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:103
920
- msgid "Manage image tags"
921
  msgstr ""
922
 
923
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:111
924
- msgid "Search Tags"
925
  msgstr ""
926
 
927
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:118
928
- msgid "Go"
929
  msgstr ""
930
 
931
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:123
932
- msgid "Sort Tags"
933
  msgstr ""
934
 
935
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:158
936
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:162
937
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:175
938
- msgid "Previous tags"
 
939
  msgstr ""
940
 
941
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:171
942
- msgid "Next tags"
 
 
 
 
 
943
  msgstr ""
944
 
945
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:183
946
- msgid "Rename Tag"
 
947
  msgstr ""
948
 
949
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:191
950
- msgid "Enter the tag to rename and its new value. You can use this feature to merge tags too. Click \"Rename\" and all posts which use this tag will be updated. You can specify multiple tags to rename by separating them with commas."
951
  msgstr ""
952
 
953
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:195
954
- msgid "Tag(s) to rename:"
955
  msgstr ""
956
 
957
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:199
958
- msgid "New tag name(s):"
959
  msgstr ""
960
 
961
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:202
962
- msgid "Rename"
963
  msgstr ""
964
 
965
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:208
966
- msgid "Delete Tag"
967
  msgstr ""
968
 
969
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:216
970
- msgid "Enter the name of the tag to delete. This tag will be removed from all posts. You can specify multiple tags to delete by separating them with commas."
 
971
  msgstr ""
972
 
973
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:220
974
- msgid "Tag(s) to delete:"
975
  msgstr ""
976
 
977
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:223
978
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:521
979
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:205
980
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:357
981
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:358
982
- #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:381
983
- msgid "Delete"
984
  msgstr ""
985
 
986
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:229
987
- msgid "Edit Tag Slug"
988
  msgstr ""
989
 
990
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:237
991
- msgid "Enter the tag name to edit and its new slug. This will be used in tagcloud links. <a href=\"http://codex.wordpress.org/Glossary#Slug\" target=\"_blank\">Slug definition</a>. You can specify multiple tags to rename by separating them with commas."
992
  msgstr ""
993
 
994
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:241
995
- msgid "Tag(s) to match:"
996
  msgstr ""
997
 
998
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:245
999
- msgid "Slug(s) to set:"
1000
  msgstr ""
1001
 
1002
- #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:248
1003
- #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:380
1004
- msgid "Edit"
1005
  msgstr ""
1006
 
1007
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:25
1008
- msgid "Not set"
1009
  msgstr ""
1010
 
1011
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:28
1012
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:32
1013
- msgid "On"
1014
  msgstr ""
1015
 
1016
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:29
1017
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:33
1018
- msgid "Off"
1019
  msgstr ""
1020
 
1021
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:38
1022
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:42
1023
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:46
1024
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:50
1025
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:54
1026
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:58
1027
- msgid "N/A"
1028
  msgstr ""
1029
 
1030
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:57
1031
- msgid " MByte"
1032
  msgstr ""
1033
 
1034
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:61
1035
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:65
1036
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:69
1037
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:105
1038
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:10
1039
- msgid "Yes"
1040
  msgstr ""
1041
 
1042
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:62
1043
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:66
1044
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:70
1045
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:105
1046
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:13
1047
- msgid "No"
1048
  msgstr ""
1049
 
1050
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:73
1051
- msgid "Operating System"
1052
  msgstr ""
1053
 
1054
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:74
1055
- msgid "Server"
 
 
1056
  msgstr ""
1057
 
1058
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:75
1059
- msgid "Memory usage"
1060
  msgstr ""
1061
 
1062
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:76
1063
- msgid "MYSQL Version"
1064
  msgstr ""
1065
 
1066
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:77
1067
- msgid "SQL Mode"
1068
  msgstr ""
1069
 
1070
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:78
1071
- msgid "PHP Version"
1072
  msgstr ""
1073
 
1074
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:79
1075
- msgid "PHP Safe Mode"
 
1076
  msgstr ""
1077
 
1078
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:80
1079
- msgid "PHP Allow URL fopen"
 
1080
  msgstr ""
1081
 
1082
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:81
1083
- msgid "PHP Memory Limit"
 
1084
  msgstr ""
1085
 
1086
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:82
1087
- msgid "PHP Max Upload Size"
 
 
1088
  msgstr ""
1089
 
1090
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:83
1091
- msgid "PHP Max Post Size"
 
 
 
1092
  msgstr ""
1093
 
1094
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:84
1095
- msgid "PCRE Backtracking Limit"
 
1096
  msgstr ""
1097
 
1098
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:85
1099
- msgid "PHP Max Script Execute Time"
 
1100
  msgstr ""
1101
 
1102
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:86
1103
- msgid "PHP Exif support"
 
 
 
1104
  msgstr ""
1105
 
1106
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:87
1107
- msgid "PHP IPTC support"
 
1108
  msgstr ""
1109
 
1110
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:88
1111
- msgid "PHP XML support"
 
1112
  msgstr ""
1113
 
1114
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:111
1115
- msgid "No GD support"
 
1116
  msgstr ""
1117
 
1118
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:143
1119
- msgid "%1$sMB Allowed"
 
 
1120
  msgstr ""
1121
 
1122
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:144
1123
- msgid "%1$sMB (%2$s%%) Used"
 
 
 
 
 
1124
  msgstr ""
1125
 
1126
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:180
1127
- msgid "Welcome to NextGEN Gallery"
 
 
 
1128
  msgstr ""
1129
 
1130
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:183
1131
- msgid "Need help getting started? "
 
 
 
 
1132
  msgstr ""
1133
 
1134
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:183
1135
- msgid "Launch Gallery Wizard"
 
1136
  msgstr ""
1137
 
1138
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:187
1139
- msgid "Welcome"
 
1140
  msgstr ""
1141
 
1142
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:221
1143
- msgid "We have a growing list of video tutorials to get you started. Watch some below or head over to <a href=\"%s\" target=\"_blank\">NextGEN Gallery University on YouTube</a> to see all available vidoes."
 
1144
  msgstr ""
1145
 
1146
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:254
1147
- msgid "Want more? Head over to <a href=\"%s\" target=\"_blank\">NextGEN Gallery University on YouTube</a>."
 
1148
  msgstr ""
1149
 
1150
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:262
1151
- msgid "The most powerful gallery system ever built for WordPress. "
 
1152
  msgstr ""
1153
 
1154
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:262
1155
- msgid "Gorgeous new gallery displays, image protection, full screen lightbox, commenting and social sharing for individual images, proofing, ecommerce, digital downloads, and more."
 
1156
  msgstr ""
1157
 
1158
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:263
1159
- msgid "Get NextGEN Pro Now"
 
1160
  msgstr ""
1161
 
1162
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:273
1163
- msgid "Meet the new series of Genesis child themes by Imagely: gorgeous, responsive image-centric themes for photographers or anyone with visually rich websites."
 
1164
  msgstr ""
1165
 
1166
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:274
1167
- msgid "CLICK TO LEARN MORE:"
 
1168
  msgstr ""
1169
 
1170
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:329
1171
- msgid "Meet the Imagely Product Ambassadors"
 
1172
  msgstr ""
1173
 
1174
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:330
1175
- msgid "NextGEN Gallery and other Imagely products are used by some of the best photographers in the world. Meet some of the Imagely Ambassadors who are putting Imagely and NextGEN Gallery to work professionally."
 
1176
  msgstr ""
1177
 
1178
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:335
1179
- msgid "Jeff and Erin are a luxury husband and wife photography team who deeply love each other and their photography clients. They shoot weddings and engagements all over the U.S. and beyond. With three photography businesses that serve different clientele, they have unique insights into business strategies and are passionate about improving the day to day lives of other photographers."
 
1180
  msgstr ""
1181
 
1182
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:340
1183
- msgid "Tamara Lackey is a renowned professional photographer, speaker, and author. Her authentic lifestyle photography, from children’s portraits to celebrity portraits, is praised within her industry and published internationally. She is a Nikon USA Ambassador, the host of The reDefine Show web series, and the co-founder of the non-profit charitable organization, Beautiful Together, in support of children waiting for families."
 
1184
  msgstr ""
1185
 
1186
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:345
1187
- msgid "Colby is a photographer, photo educator, and author specializing in landscape, travel and humanitarian photography. With an audience reaching millions, Colby partners on social influencer marketing campaigns with some of the biggest companies and destinations in the world, including Sony, Samsung, Toshiba, Iceland Naturally, Jordan Tourism Board, Australia.com, Visit California and more."
 
1188
  msgstr ""
1189
 
1190
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:353
1191
- msgid "Jared is a professional wedding and lifestyle photographer. He also travels the world giving lectures and workshops on photography, lighting, and post-production efficiency and workflow. His interactive style, and attention to detail and craft make him an entertaining and demanding photography instructor."
 
1192
  msgstr ""
1193
 
1194
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:358
1195
- msgid "Brian is a professional photographer, author, and educator. He fuses landscape & travel photography with experiential storytelling and practical instructing to help others grow creatively. He is also a Sony Artisan of Imagery, a Zeiss Lens Ambassador, a Formatt-Hitech Featured Photographer, and a member of G-Technology’s G-Team."
 
1196
  msgstr ""
1197
 
1198
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:363
1199
- msgid "Christine famously coined the term WordPress. She is an author, speaker, business coach, and story strategist who specializes in helping creatives celebrate their story online through blogging and social media. When not offering actionable know-how to businesses, she can be found taking long road trips across North America in her Mini Cooper."
 
1200
  msgstr ""
1201
 
1202
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:371
1203
- msgid "Named one of the Top 10 Wedding Photographers in the World by American Photo magazine, David is a celebrated photographer and educator. He is also a mountain man with a enviable lifestyle: from his base in rural Washington, he travels all over the world teaching workshops, while sharing lessons with 16,000 photographers in the Abstract Canvas Facebook group."
 
1204
  msgstr ""
1205
 
1206
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:382
1207
- msgid "When contacting support, consider copying and pasting this information in your support request. It helps us troubleshoot more quickly."
 
1208
  msgstr ""
1209
 
1210
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:386
1211
- msgid "Server Settings"
 
1212
  msgstr ""
1213
 
1214
- #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:392
1215
- msgid "Graphic Library"
 
1216
  msgstr ""
1217
 
1218
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:27
1219
- msgid "Select the lowest role which should be able to access the following capabilities. NextGEN Gallery supports the standard roles from WordPress."
 
1220
  msgstr ""
1221
 
1222
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:32
1223
- msgid "Main NextGEN Gallery overview"
 
1224
  msgstr ""
1225
 
1226
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:36
1227
- msgid "Use TinyMCE Button / Upload tab"
1228
  msgstr ""
1229
 
1230
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:40
1231
- msgid "Add gallery / Upload images"
1232
  msgstr ""
1233
 
1234
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:44
1235
- msgid "Manage gallery"
1236
  msgstr ""
1237
 
1238
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:48
1239
- msgid "Manage others gallery"
1240
  msgstr ""
1241
 
1242
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:52
1243
- msgid "Manage tags"
1244
  msgstr ""
1245
 
1246
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:56
1247
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:443
1248
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:514
1249
- msgid "Edit Album"
1250
  msgstr ""
1251
 
1252
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:60
1253
- msgid "Change style"
 
1254
  msgstr ""
1255
 
1256
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:64
1257
- msgid "Change options"
1258
  msgstr ""
1259
 
1260
- #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:68
1261
- msgid "NextGEN Attach Interface"
1262
  msgstr ""
1263
 
1264
- #: products/photocrati_nextgen/modules/ngglegacy/admin/install.php:72
1265
- msgid "NextGEN Gallery : Tables could not created, please check your database settings"
1266
  msgstr ""
1267
 
1268
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:45
1269
- msgid "Gallery not found."
 
 
 
1270
  msgstr ""
1271
 
1272
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:51
1273
- msgid "Sorry, you have no access here"
1274
  msgstr ""
1275
 
1276
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:251
1277
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:108
1278
- msgid "No images selected"
1279
  msgstr ""
1280
 
1281
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:259
1282
- msgid "Copy image to..."
1283
  msgstr ""
1284
 
1285
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:263
1286
- msgid "Move image to..."
1287
  msgstr ""
1288
 
1289
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:267
1290
- msgid "Add new tags"
1291
  msgstr ""
1292
 
1293
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:271
1294
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:446
1295
- msgid "Delete tags"
1296
  msgstr ""
1297
 
1298
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:275
1299
- msgid "Overwrite"
1300
  msgstr ""
1301
 
1302
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:279
1303
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:437
1304
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:116
1305
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:208
1306
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:645
1307
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:726
1308
- msgid "Resize images"
1309
  msgstr ""
1310
 
1311
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:283
1312
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:436
1313
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:120
1314
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:207
1315
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:675
1316
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:664
1317
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:742
1318
- msgid "Create new thumbnails"
1319
  msgstr ""
1320
 
1321
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:288
1322
- msgid ""
1323
- "You are about to start the bulk edit for %s images \n"
1324
- " \n"
1325
- " 'Cancel' to stop, 'OK' to proceed."
1326
  msgstr ""
1327
 
1328
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:324
1329
- msgid "Search results for &#8220;%s&#8221;"
1330
  msgstr ""
1331
 
1332
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:331
1333
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:334
1334
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:189
1335
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:192
1336
- msgid "Search Images"
1337
  msgstr ""
1338
 
1339
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:351
1340
- msgid "Gallery: "
1341
- msgid_plural "Galleries: "
1342
- msgstr[0] ""
1343
- msgstr[1] ""
1344
-
1345
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:369
1346
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php:22
1347
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:348
1348
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:428
1349
- msgid "Gallery Settings"
1350
  msgstr ""
1351
 
1352
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:379
1353
- msgid "Scan Folder for new images"
1354
  msgstr ""
1355
 
1356
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:381
1357
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:455
1358
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:509
1359
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:31
1360
- msgid "Save Changes"
1361
  msgstr ""
1362
 
1363
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:406
1364
- msgid " 25"
1365
  msgstr ""
1366
 
1367
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:407
1368
- msgid " 50"
 
1369
  msgstr ""
1370
 
1371
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:408
1372
- msgid " 75"
1373
  msgstr ""
1374
 
1375
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:409
1376
- msgid "100"
1377
  msgstr ""
1378
 
1379
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:410
1380
- msgid "200"
1381
  msgstr ""
1382
 
1383
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:411
1384
- msgid "All"
1385
  msgstr ""
1386
 
1387
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:430
1388
- msgid "Images per page:"
1389
  msgstr ""
1390
 
1391
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:434
1392
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:204
1393
- msgid "Bulk actions"
1394
  msgstr ""
1395
 
1396
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:435
1397
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:206
1398
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:574
1399
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:690
1400
- msgid "Set watermark"
1401
  msgstr ""
1402
 
1403
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:438
1404
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:210
1405
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:569
1406
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:687
1407
- msgid "Recover from backup"
1408
  msgstr ""
1409
 
1410
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:439
1411
- msgid "Delete images"
1412
  msgstr ""
1413
 
1414
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:440
1415
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:209
1416
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:579
1417
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:710
1418
- msgid "Import metadata"
1419
  msgstr ""
1420
 
1421
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:441
1422
- msgid "Rotate images clockwise"
 
1423
  msgstr ""
1424
 
1425
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:442
1426
- msgid "Rotate images counter-clockwise"
1427
  msgstr ""
1428
 
1429
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:443
1430
- msgid "Copy to..."
1431
  msgstr ""
1432
 
1433
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:444
1434
- msgid "Move to..."
1435
  msgstr ""
1436
 
1437
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:445
1438
- msgid "Add tags"
1439
  msgstr ""
1440
 
1441
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:447
1442
- msgid "Overwrite tags"
1443
  msgstr ""
1444
 
1445
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:449
1446
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:212
1447
- msgid "Apply"
1448
  msgstr ""
1449
 
1450
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:452
1451
- msgid "Sort gallery"
1452
  msgstr ""
1453
 
1454
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:501
1455
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:327
1456
- msgid "No entries found"
1457
  msgstr ""
1458
 
1459
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:531
1460
- msgid "Enter the tags"
1461
  msgstr ""
1462
 
1463
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:539
1464
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:581
1465
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:615
1466
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:652
1467
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:684
1468
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:356
1469
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:385
1470
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:416
1471
- msgid "OK"
1472
  msgstr ""
1473
 
1474
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:542
1475
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:584
1476
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:618
1477
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:655
1478
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:686
1479
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:358
1480
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:387
1481
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:418
1482
- msgid "Cancel"
1483
  msgstr ""
1484
 
1485
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:561
1486
- msgid "Select the destination gallery:"
1487
  msgstr ""
1488
 
1489
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:602
1490
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:376
1491
- msgid "Resize Images to"
1492
  msgstr ""
1493
 
1494
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:606
1495
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:380
1496
- msgid "Width x height (in pixel). NextGEN Gallery will keep ratio size"
1497
  msgstr ""
1498
 
1499
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:636
1500
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:404
1501
- msgid "Width x height (in pixel)"
1502
  msgstr ""
1503
 
1504
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:642
1505
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:410
1506
- msgid "Set fix dimension"
1507
  msgstr ""
1508
 
1509
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:644
1510
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:412
1511
- msgid "Ignore the aspect ratio, no portrait thumbnails"
1512
  msgstr ""
1513
 
1514
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:736
1515
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:126
1516
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:163
1517
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:29
1518
- msgid "Filename"
1519
  msgstr ""
1520
 
1521
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:737
1522
- msgid "Alt &amp; Title Text"
1523
  msgstr ""
1524
 
1525
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:738
1526
- msgid "Tags (comma separated list)"
1527
  msgstr ""
1528
 
1529
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:53
1530
- msgid "Image rotated"
1531
  msgstr ""
1532
 
1533
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:55
1534
- msgid "Error rotating thumbnail"
1535
  msgstr ""
1536
 
1537
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:83
1538
- msgid "90&deg; clockwise"
1539
  msgstr ""
1540
 
1541
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:84
1542
- msgid "90&deg; counter-clockwise"
1543
  msgstr ""
1544
 
1545
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:85
1546
- msgid "Flip vertically"
1547
  msgstr ""
1548
 
1549
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:86
1550
- msgid "Flip horizontally"
1551
  msgstr ""
1552
 
1553
- #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:91
1554
- #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:181
1555
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:509
1556
- msgid "Update"
1557
  msgstr ""
1558
 
1559
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:29
1560
- msgid "Meta Data"
1561
  msgstr ""
1562
 
1563
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:34
1564
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:63
1565
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:93
1566
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:120
1567
- msgid "Tag"
1568
  msgstr ""
1569
 
1570
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:35
1571
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:64
1572
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:94
1573
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:121
1574
- msgid "Value"
1575
  msgstr ""
1576
 
1577
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:52
1578
- msgid "No meta data saved"
1579
  msgstr ""
1580
 
1581
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:58
1582
- msgid "EXIF Data"
 
 
 
1583
  msgstr ""
1584
 
1585
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:82
1586
- msgid "No exif data"
1587
  msgstr ""
1588
 
1589
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:89
1590
- msgid "IPTC Data"
1591
  msgstr ""
1592
 
1593
- #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:116
1594
- msgid "XMP Data"
1595
  msgstr ""
1596
 
1597
- #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:129
1598
- msgid "Select with the mouse the area for the new thumbnail"
1599
  msgstr ""
1600
 
1601
- #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:143
1602
- msgid "Thumbnail updated"
1603
  msgstr ""
1604
 
1605
- #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:148
1606
- msgid "Error updating thumbnail"
1607
  msgstr ""
1608
 
1609
- #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:161
1610
- msgid "Select the area for the thumbnail from the picture below."
 
1611
  msgstr ""
1612
 
1613
- #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:165
1614
- msgid "Select the area for the thumbnail from the picture on the left."
 
1615
  msgstr ""
1616
 
1617
- #: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:103
1618
- msgid "These are maximum values"
1619
  msgstr ""
1620
 
1621
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:36
1622
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:147
1623
- #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:44
1624
- msgid "Gallery path must be located in %s"
1625
  msgstr ""
1626
 
1627
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:42
1628
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:861
1629
- msgid "Updated successfully"
1630
  msgstr ""
1631
 
1632
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:59
1633
- msgid "Network Options"
1634
  msgstr ""
1635
 
1636
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:65
1637
- msgid "Gallery path"
1638
  msgstr ""
1639
 
1640
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:67
1641
- msgid "This is the default path for all blogs. With the placeholder %BLOG_ID% you can organize the folder structure better."
1642
  msgstr ""
1643
 
1644
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:68
1645
- msgid "The default setting should be %s"
1646
  msgstr ""
1647
 
1648
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:72
1649
- msgid "Enable upload quota check"
 
 
 
1650
  msgstr ""
1651
 
1652
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:74
1653
- msgid "Should work if the gallery is bellow the blog.dir"
1654
  msgstr ""
1655
 
1656
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:78
1657
- msgid "Enable zip upload option"
1658
  msgstr ""
1659
 
1660
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:80
1661
- msgid "Allow users to upload zip folders."
1662
  msgstr ""
1663
 
1664
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:84
1665
- msgid "Enable import function"
1666
  msgstr ""
1667
 
1668
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:86
1669
- msgid "Allow users to import images folders from the server."
 
1670
  msgstr ""
1671
 
1672
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:90
1673
- msgid "Enable style selection"
 
1674
  msgstr ""
1675
 
1676
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:92
1677
- msgid "Allow users to choose a style for the gallery."
1678
  msgstr ""
1679
 
1680
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:96
1681
- msgid "Enable roles/capabilities"
1682
  msgstr ""
1683
 
1684
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:98
1685
- msgid "Allow users to change the roles for other blog authors."
1686
  msgstr ""
1687
 
1688
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:102
1689
- msgid "Default style"
1690
  msgstr ""
1691
 
1692
- #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:119
1693
- msgid "Choose the default style for the galleries."
1694
  msgstr ""
1695
 
1696
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:208
1697
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:252
1698
- msgid "Updated Successfully"
1699
  msgstr ""
1700
 
1701
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:226
1702
- msgid "Album deleted"
1703
  msgstr ""
1704
 
1705
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:483
1706
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:175
1707
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:210
1708
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:618
1709
- msgid "Manage Albums"
1710
- msgid_plural "Albums"
1711
- msgstr[0] ""
1712
- msgstr[1] ""
1713
 
1714
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:492
1715
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:602
1716
- msgid "Select album"
1717
  msgstr ""
1718
 
1719
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:494
1720
- msgid "No album selected"
1721
  msgstr ""
1722
 
1723
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:526
1724
- msgid "Add new album"
1725
  msgstr ""
1726
 
1727
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:528
1728
- msgid "Add"
1729
  msgstr ""
1730
 
1731
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:539
1732
- msgid "Show / hide used galleries"
1733
  msgstr ""
1734
 
1735
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:539
1736
- msgid "Show all"
1737
  msgstr ""
1738
 
1739
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540
1740
- msgid "Maximize the widget content"
1741
  msgstr ""
1742
 
1743
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540
1744
- msgid "Maximize"
1745
  msgstr ""
1746
 
1747
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:541
1748
- msgid "Minimize the widget content"
1749
  msgstr ""
1750
 
1751
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:541
1752
- msgid "Minimize"
1753
  msgstr ""
1754
 
1755
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:543
1756
- msgid "After you create and select an album, you can drag and drop a gallery or another album into your new album below."
1757
  msgstr ""
1758
 
1759
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:554
1760
- msgid "Album ID"
1761
  msgstr ""
1762
 
1763
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:567
1764
- msgid "No album selected!"
1765
  msgstr ""
1766
 
1767
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:579
1768
- msgid "Select gallery"
1769
  msgstr ""
1770
 
1771
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:630
1772
- msgid "Album name:"
1773
  msgstr ""
1774
 
1775
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:636
1776
- msgid "Album description:"
1777
  msgstr ""
1778
 
1779
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:642
1780
- msgid "Select a preview image:"
 
 
 
 
 
1781
  msgstr ""
1782
 
1783
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:643
1784
- #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php:3
1785
- msgid "No picture"
 
 
 
 
1786
  msgstr ""
1787
 
1788
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:655
1789
- msgid "Page Link to"
1790
  msgstr ""
1791
 
1792
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:665
1793
- #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php:3
1794
- msgid "Not linked"
1795
  msgstr ""
1796
 
1797
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:674
1798
- msgid "There are no pages to link to"
1799
  msgstr ""
1800
 
1801
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:780
1802
- msgid "Name"
1803
  msgstr ""
1804
 
1805
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:781
1806
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:470
1807
- #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:3
1808
- #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:3
1809
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:4
1810
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:477
1811
- msgid "Title"
1812
  msgstr ""
1813
 
1814
- #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:782
1815
- #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:229
1816
- msgid "Page"
1817
  msgstr ""
1818
 
1819
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:173
1820
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:204
1821
- msgid "Overview"
1822
  msgstr ""
1823
 
1824
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:174
1825
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:208
1826
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:182
1827
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:611
1828
- msgid "Manage Galleries"
1829
- msgid_plural "Manage Galleries"
1830
- msgstr[0] ""
1831
- msgstr[1] ""
1832
 
1833
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:176
1834
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:212
1835
- msgid "Manage Tags"
1836
  msgstr ""
1837
 
1838
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:186
1839
- msgid "Network settings"
1840
  msgstr ""
1841
 
1842
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:293
1843
- msgid "You do not have the correct permission"
1844
  msgstr ""
1845
 
1846
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:294
1847
- msgid "Unexpected Error"
1848
  msgstr ""
1849
 
1850
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:295
1851
- msgid "A failure occurred"
1852
  msgstr ""
1853
 
1854
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:389
1855
- msgid "<a href=\"https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/\" target=\"_blank\">Introduction</a>"
1856
  msgstr ""
1857
 
1858
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:392
1859
- msgid "<a href=\"https://www.imagely.com/languages/\" target=\"_blank\">Languages</a>"
1860
  msgstr ""
1861
 
1862
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:397
1863
- msgid "Get help with NextGEN Gallery"
1864
  msgstr ""
1865
 
1866
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:401
1867
- msgid "More Help & Info"
1868
  msgstr ""
1869
 
1870
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:403
1871
- msgid "<a href=\"http://wordpress.org/tags/nextgen-gallery?forum_id=10\" target=\"_blank\">Support Forums</a>"
1872
  msgstr ""
1873
 
1874
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:404
1875
- msgid "FAQ"
1876
  msgstr ""
1877
 
1878
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:405
1879
- msgid "Feature request"
1880
  msgstr ""
1881
 
1882
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:406
1883
- msgid "Get your language pack"
1884
  msgstr ""
1885
 
1886
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:407
1887
- msgid "Contribute development"
1888
  msgstr ""
1889
 
1890
- #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:408
1891
- msgid "Download latest version"
1892
  msgstr ""
1893
 
1894
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:125
1895
- msgid ""
1896
- "You are about to start the bulk edit for %s galleries \n"
1897
- " \n"
1898
- " 'Cancel' to stop, 'OK' to proceed."
1899
  msgstr ""
1900
 
1901
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:163
1902
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:215
1903
- msgid "Add new gallery"
1904
  msgstr ""
1905
 
1906
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:346
1907
- msgid "New Gallery"
1908
  msgstr ""
1909
 
1910
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:348
1911
- msgid "Create a new , empty gallery below the folder"
 
 
1912
  msgstr ""
1913
 
1914
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:350
1915
- msgid "Allowed characters for file and folder names are"
1916
  msgstr ""
1917
 
1918
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:479
1919
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:412
1920
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:471
1921
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:478
1922
- msgid "Author"
1923
  msgstr ""
1924
 
1925
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:480
1926
- msgid "Page ID"
1927
  msgstr ""
1928
 
1929
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:44
1930
- msgid "No valid gallery name!"
1931
  msgstr ""
1932
 
1933
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55
1934
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:83
1935
- msgid "Directory"
1936
  msgstr ""
1937
 
1938
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55
1939
- msgid "didn't exist. Please create first the main gallery folder "
1940
  msgstr ""
1941
 
1942
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:56
1943
- msgid "Check this link, if you didn't know how to set the permission :"
1944
  msgstr ""
1945
 
1946
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:79
1947
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:88
1948
- msgid "Unable to create directory "
1949
  msgstr ""
1950
 
1951
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:83
1952
- msgid "is not writeable !"
1953
  msgstr ""
1954
 
1955
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:92
1956
- msgid "The server setting Safe-Mode is on !"
1957
  msgstr ""
1958
 
1959
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:93
1960
- msgid "If you have problems, please create directory"
1961
  msgstr ""
1962
 
1963
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:94
1964
- msgid "and the thumbnails directory"
1965
  msgstr ""
1966
 
1967
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:94
1968
- msgid "with permission 777 manually !"
1969
  msgstr ""
1970
 
1971
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:121
1972
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:625
1973
- msgid "Gallery successfully created. <a href=\"%s\" target=\"_blank\">Manage gallery</a>"
1974
  msgstr ""
1975
 
1976
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:187
1977
- msgid "Error while creating thumbnail."
1978
  msgstr ""
1979
 
1980
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:240
1981
- msgid "Error while resizing image."
1982
  msgstr ""
1983
 
1984
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:322
1985
- msgid "Error while rotating image."
1986
  msgstr ""
1987
 
1988
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:356
1989
- msgid "Error while applying watermark to image."
1990
  msgstr ""
1991
 
1992
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:495
1993
- msgid "(Error : Couldn't not update data base)"
1994
  msgstr ""
1995
 
1996
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:502
1997
- msgid "(Error : Couldn't not update meta data)"
1998
  msgstr ""
1999
 
2000
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:511
2001
- msgid "(Error : Couldn't not find image)"
2002
  msgstr ""
2003
 
2004
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:603
2005
- msgid "Directory <strong>%s</strong> doesn&#96;t exist!"
2006
  msgstr ""
2007
 
2008
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:612
2009
- msgid "Directory <strong>%s</strong> contains no pictures"
2010
  msgstr ""
2011
 
2012
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:631
2013
- msgid "Database error. Could not add gallery!"
2014
  msgstr ""
2015
 
2016
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:639
2017
- msgid "Gallery <strong>%s</strong> successfully created!"
2018
- msgid_plural "Galleries <strong>%s</strong> successfully created!"
2019
- msgstr[0] ""
2020
- msgstr[1] ""
2021
 
2022
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:678
2023
- msgid "%s picture successfully added"
2024
- msgid_plural "%s pictures successfully added"
2025
- msgstr[0] ""
2026
- msgstr[1] ""
2027
 
2028
- #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:680
2029
- msgid "Edit gallery"
2030
  msgstr ""
2031
 
2032
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:40
2033
- msgid "Sort order changed"
2034
  msgstr ""
2035
 
2036
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:105
2037
- msgid "Sort Gallery"
2038
  msgstr ""
2039
 
2040
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:115
2041
- msgid "Update Sort Order"
2042
  msgstr ""
2043
 
2044
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:118
2045
- msgid "Back to gallery"
2046
  msgstr ""
2047
 
2048
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:123
2049
- msgid "Presort"
 
2050
  msgstr ""
2051
 
2052
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:124
2053
- msgid "Unsorted"
 
2054
  msgstr ""
2055
 
2056
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:125
2057
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:28
2058
- msgid "Image ID"
2059
  msgstr ""
2060
 
2061
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:128
2062
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:465
2063
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:31
2064
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:472
2065
- msgid "Date/Time"
2066
  msgstr ""
2067
 
2068
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:129
2069
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:43
2070
- msgid "Ascending"
2071
  msgstr ""
2072
 
2073
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:130
2074
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:44
2075
- msgid "Descending"
2076
  msgstr ""
2077
 
2078
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:88
2079
- #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:220
2080
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31
2081
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31
2082
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35
2083
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55
2084
- msgid "Picture"
2085
  msgstr ""
2086
 
2087
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:88
2088
- msgid "deleted successfully"
2089
  msgstr ""
2090
 
2091
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:103
2092
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:112
2093
- msgid "Operation successful. Please clear your browser cache."
 
2094
  msgstr ""
2095
 
2096
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:153
2097
- msgid "ID"
 
2098
  msgstr ""
2099
 
2100
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:168
2101
- msgid "Alt & Title Text / Description"
2102
  msgstr ""
2103
 
2104
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:173
2105
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:472
2106
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:56
2107
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:479
2108
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:52
2109
- msgid "Tags"
2110
  msgstr ""
2111
 
2112
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:211
2113
- msgid "Exclude ?"
2114
  msgstr ""
2115
 
2116
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:297
2117
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:299
2118
- msgid "View"
2119
  msgstr ""
2120
 
2121
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:307
2122
- msgid "Show meta data"
2123
  msgstr ""
2124
 
2125
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:308
2126
- msgid "Meta"
2127
  msgstr ""
2128
 
2129
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:316
2130
- msgid "Customize thumbnail"
2131
  msgstr ""
2132
 
2133
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:317
2134
- msgid "Edit thumb"
2135
  msgstr ""
2136
 
2137
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:325
2138
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:326
2139
- msgid "Rotate"
2140
  msgstr ""
2141
 
2142
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:337
2143
- msgid "Recover image from backup"
2144
  msgstr ""
2145
 
2146
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:338
2147
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:339
2148
- msgid "Recover"
2149
  msgstr ""
2150
 
2151
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:356
2152
- msgid "Delete image"
2153
  msgstr ""
2154
 
2155
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:394
2156
- msgid "Title:"
2157
  msgstr ""
2158
 
2159
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:400
2160
- msgid "Description:"
2161
  msgstr ""
2162
 
2163
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:406
2164
- msgid "Gallery path:"
2165
  msgstr ""
2166
 
2167
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:421
2168
- msgid "Link to page:"
2169
  msgstr ""
2170
 
2171
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:422
2172
- msgid "Albums will link this gallery to the selected page"
2173
  msgstr ""
2174
 
2175
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:427
2176
- msgid "Preview image:"
 
2177
  msgstr ""
2178
 
2179
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:433
2180
- msgid "Create new page:"
2181
  msgstr ""
2182
 
2183
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:592
2184
- msgid "One or more \"../\" in Gallery paths could be unsafe and NextGen Gallery will not delete gallery %s automatically"
 
2185
  msgstr ""
2186
 
2187
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:604
2188
- msgid "Gallery deleted successfully "
2189
  msgstr ""
2190
 
2191
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:614
2192
- msgid "Cheatin&#8217; uh?"
 
 
 
 
 
 
 
2193
  msgstr ""
2194
 
2195
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:681
2196
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:684
2197
- msgid "Rotate images"
 
 
 
 
 
 
2198
  msgstr ""
2199
 
2200
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:706
2201
- msgid "Pictures deleted successfully "
2202
  msgstr ""
2203
 
2204
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:802
2205
- msgid "Tags changed"
 
2206
  msgstr ""
2207
 
2208
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:901
2209
- msgid "New gallery page ID"
2210
  msgstr ""
2211
 
2212
- #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:901
2213
- msgid "created"
2214
  msgstr ""
2215
 
2216
- #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:3
2217
- msgid "Main Page (no parent)"
2218
  msgstr ""
2219
 
2220
- #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:10
2221
- msgid "Add page"
2222
  msgstr ""
2223
 
2224
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:59
2225
- msgid "<strong>Translation by : </strong><a target=\"_blank\" href=\"https://www.imagely.com/wordpress-gallery-plugin/nextgen-pro/\">See here</a>"
2226
  msgstr ""
2227
 
2228
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:108
2229
- msgid "Sorry, NextGEN Gallery works only under WordPress %s or higher."
2230
  msgstr ""
2231
 
2232
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:162
2233
- msgid "Picture tag"
 
2234
  msgstr ""
2235
 
2236
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:163
2237
- msgid "Picture tag: %2$l."
2238
  msgstr ""
2239
 
2240
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:164
2241
- msgid "Separate picture tags with commas."
2242
  msgstr ""
2243
 
2244
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:291
2245
- msgid "Get help"
 
2246
  msgstr ""
2247
 
2248
- #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:292
2249
- msgid "Contribute"
2250
  msgstr ""
2251
 
2252
- #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:215
2253
- #: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:91
2254
- msgid "Slideshow"
2255
  msgstr ""
2256
 
2257
- #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:223
2258
- msgid "Album"
2259
  msgstr ""
2260
 
2261
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:35
2262
- msgid "No new tag specified!"
2263
  msgstr ""
2264
 
2265
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:50
2266
- msgid "No new/old valid tag specified!"
2267
  msgstr ""
2268
 
2269
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:86
2270
- msgid "No tag renamed."
 
2271
  msgstr ""
2272
 
2273
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:88
2274
- msgid "Renamed tag(s) &laquo;%1$s&raquo; to &laquo;%2$s&raquo;"
2275
  msgstr ""
2276
 
2277
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:95
2278
- msgid "No valid new tag."
2279
  msgstr ""
2280
 
2281
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:112
2282
- msgid "No objects (post/page) found for specified old tags."
2283
  msgstr ""
2284
 
2285
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:141
2286
- msgid "No tag merged."
2287
  msgstr ""
2288
 
2289
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:143
2290
- msgid "Merge tag(s) &laquo;%1$s&raquo; to &laquo;%2$s&raquo;. %3$s objects edited."
2291
  msgstr ""
2292
 
2293
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:146
2294
- msgid "Error. Not enough tags provided to rename or merge."
2295
  msgstr ""
2296
 
2297
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:165
2298
- msgid "No tag specified!"
2299
  msgstr ""
2300
 
2301
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:188
2302
- msgid "No tag deleted."
2303
  msgstr ""
2304
 
2305
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:190
2306
- msgid "%1s tag(s) deleted."
2307
  msgstr ""
2308
 
2309
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:208
2310
- msgid "No new slug(s) specified!"
2311
  msgstr ""
2312
 
2313
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:220
2314
- msgid "Tags number and slugs number isn't the same!"
 
 
 
 
 
 
 
 
 
 
 
 
2315
  msgstr ""
2316
 
2317
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:247
2318
- msgid "No slug edited."
 
 
 
 
 
 
2319
  msgstr ""
2320
 
2321
- #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:249
2322
- msgid "%s slug(s) edited."
2323
  msgstr ""
2324
 
2325
- #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:60
2326
- #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:61
2327
- msgid "Set NextGEN featured image"
2328
  msgstr ""
2329
 
2330
- #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:195
2331
- #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:196
2332
- msgid "Set featured image"
 
 
 
 
2333
  msgstr ""
2334
 
2335
- #: products/photocrati_nextgen/modules/ngglegacy/lib/core.php:214
2336
- msgid "Note : Based on your server memory limit you should not upload larger images then <strong>%d x %d</strong> pixel"
 
 
 
2337
  msgstr ""
2338
 
2339
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:136
2340
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:142
2341
- msgid " mm"
2342
  msgstr ""
2343
 
2344
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:142
2345
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:148
2346
- msgid " sec"
 
 
 
2347
  msgstr ""
2348
 
2349
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:146
2350
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:152
2351
- msgid "Fired"
2352
  msgstr ""
2353
 
2354
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:461
2355
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:46
2356
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:468
2357
- msgid "Aperture"
2358
  msgstr ""
2359
 
2360
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:462
2361
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:487
2362
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:469
2363
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:494
2364
- msgid "Credit"
2365
  msgstr ""
2366
 
2367
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:463
2368
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:470
2369
- msgid "Camera"
 
 
2370
  msgstr ""
2371
 
2372
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:464
2373
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:471
2374
- msgid "Caption"
 
 
2375
  msgstr ""
2376
 
2377
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:466
2378
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:473
2379
- msgid "Copyright"
2380
  msgstr ""
2381
 
2382
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:467
2383
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:474
2384
- msgid "Focal length"
2385
  msgstr ""
2386
 
2387
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:468
2388
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:475
2389
- msgid "ISO"
2390
  msgstr ""
2391
 
2392
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:469
2393
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:54
2394
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:476
2395
- msgid "Shutter speed"
2396
  msgstr ""
2397
 
2398
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:473
2399
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:480
2400
- msgid "Subject"
2401
  msgstr ""
2402
 
2403
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:474
2404
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:481
2405
- msgid "Make"
2406
  msgstr ""
2407
 
2408
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:475
2409
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:482
2410
- msgid "Edit Status"
2411
  msgstr ""
2412
 
2413
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:476
2414
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:483
2415
- msgid "Category"
2416
  msgstr ""
2417
 
2418
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:477
2419
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:484
2420
- msgid "Keywords"
2421
  msgstr ""
2422
 
2423
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:478
2424
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:485
2425
- msgid "Date Created"
2426
  msgstr ""
2427
 
2428
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:479
2429
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:486
2430
- msgid "Time Created"
2431
  msgstr ""
2432
 
2433
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:480
2434
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:487
2435
- msgid "Author Position"
 
2436
  msgstr ""
2437
 
2438
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:481
2439
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:488
2440
- msgid "City"
2441
  msgstr ""
2442
 
2443
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:482
2444
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:489
2445
- msgid "Location"
2446
  msgstr ""
2447
 
2448
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:483
2449
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:490
2450
- msgid "Province/State"
2451
  msgstr ""
2452
 
2453
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:484
2454
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:491
2455
- msgid "Country code"
2456
  msgstr ""
2457
 
2458
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:485
2459
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:492
2460
- msgid "Country"
2461
  msgstr ""
2462
 
2463
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:486
2464
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:493
2465
- msgid "Headline"
2466
  msgstr ""
2467
 
2468
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:488
2469
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:495
2470
- msgid "Source"
2471
  msgstr ""
2472
 
2473
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:489
2474
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:496
2475
- msgid "Copyright Notice"
2476
  msgstr ""
2477
 
2478
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:490
2479
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:497
2480
- msgid "Contact"
 
 
2481
  msgstr ""
2482
 
2483
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:491
2484
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:498
2485
- msgid "Last modified"
2486
  msgstr ""
2487
 
2488
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:492
2489
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:499
2490
- msgid "Program tool"
 
 
 
 
 
2491
  msgstr ""
2492
 
2493
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:493
2494
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:500
2495
- msgid "Format"
2496
  msgstr ""
2497
 
2498
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:494
2499
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:501
2500
- msgid "Image Width"
2501
  msgstr ""
2502
 
2503
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:495
2504
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:502
2505
- msgid "Image Height"
2506
  msgstr ""
2507
 
2508
- #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:496
2509
- #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:503
2510
- msgid "Flash"
2511
  msgstr ""
2512
 
2513
- #: products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php:23
2514
- #: products/photocrati_nextgen/modules/nextgen_data/mixin.gallerystorage_base_upload.php:238
2515
- msgid "Sorry, you have used your space allocation. Please delete some files to upload more files."
2516
  msgstr ""
2517
 
2518
- #: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:266
2519
- #: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:267
2520
- msgid "Album overview"
2521
  msgstr ""
2522
 
2523
- #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:50
2524
- msgid "No galleries have been yet created."
2525
  msgstr ""
2526
 
2527
- #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:74
2528
- msgid "The gallery ID=%s does not exist."
2529
  msgstr ""
2530
 
2531
- #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:105
2532
- msgid "No album ID has been provided as parameter"
2533
  msgstr ""
2534
 
2535
- #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:113
2536
- msgid "The album ID=%s does not exist."
2537
  msgstr ""
2538
 
2539
- #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:120
2540
- msgid "Invalid MediaRSS command"
2541
  msgstr ""
2542
 
2543
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:26
2544
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:26
2545
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:30
2546
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:41
2547
- msgid "Back"
2548
  msgstr ""
2549
 
2550
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:38
2551
- msgid "Meta data"
2552
  msgstr ""
2553
 
2554
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:42
2555
- msgid "Camera / Type"
2556
  msgstr ""
2557
 
2558
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:50
2559
- msgid "Focal Length"
2560
  msgstr ""
2561
 
2562
- #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:58
2563
- msgid "Date / Time"
2564
  msgstr ""
2565
 
2566
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:17
2567
- msgid "Thumbnail Options"
2568
  msgstr ""
2569
 
2570
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:25
2571
- msgid "Default thumbnail dimensions:"
 
 
2572
  msgstr ""
2573
 
2574
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:26
2575
- msgid "When generating thumbnails, what image dimensions do you desire?"
2576
  msgstr ""
2577
 
2578
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:29
2579
- msgid "Set fix dimension?"
2580
  msgstr ""
2581
 
2582
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:30
2583
- msgid "Ignore the aspect ratio, no portrait thumbnails?"
2584
  msgstr ""
2585
 
2586
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:32
2587
- msgid "Adjust Thumbnail Quality?"
2588
  msgstr ""
2589
 
2590
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:33
2591
- msgid "When generating thumbnails, what image quality do you desire?"
2592
  msgstr ""
2593
 
2594
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:35
2595
- msgid "Size List"
2596
  msgstr ""
2597
 
2598
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:36
2599
- msgid "List of default sizes used for thumbnails and images"
2600
  msgstr ""
2601
 
2602
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.custom_lightbox_form.php:36
2603
- msgid "Code"
2604
  msgstr ""
2605
 
2606
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.custom_lightbox_form.php:50
2607
- msgid "Stylesheet URL"
 
2608
  msgstr ""
2609
 
2610
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.custom_lightbox_form.php:64
2611
- msgid "Javascript URL"
2612
  msgstr ""
2613
 
2614
- #: products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php:76
2615
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php:30
2616
- msgid "Other Options"
2617
  msgstr ""
2618
 
2619
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:17
2620
- msgid "Watermarks"
2621
  msgstr ""
2622
 
2623
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:46
2624
- msgid "Using an Image"
2625
  msgstr ""
2626
 
2627
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:47
2628
- msgid "Using Text"
2629
  msgstr ""
2630
 
2631
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:74
2632
- msgid "An absolute or relative (to the site document root) file system path"
 
2633
  msgstr ""
2634
 
2635
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:76
2636
- msgid "An absolute or relative (to the site document root) file system path or an HTTP url"
2637
  msgstr ""
2638
 
2639
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:79
2640
- msgid "Image URL:"
2641
  msgstr ""
2642
 
2643
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:95
2644
- msgid "Font Family:"
2645
  msgstr ""
2646
 
2647
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:97
2648
- msgid "Font Size:"
2649
  msgstr ""
2650
 
2651
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:99
2652
- msgid "Font Color:"
 
2653
  msgstr ""
2654
 
2655
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:102
2656
- msgid "Text:"
2657
  msgstr ""
2658
 
2659
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:104
2660
- msgid "Opacity:"
 
2661
  msgstr ""
2662
 
2663
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:150
2664
- msgid "Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone."
2665
  msgstr ""
2666
 
2667
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:151
2668
- msgid "How will you generate a watermark?"
2669
  msgstr ""
2670
 
2671
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:155
2672
- msgid "Position:"
2673
  msgstr ""
2674
 
2675
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:157
2676
- msgid "Offset:"
2677
  msgstr ""
2678
 
2679
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:160
2680
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:28
2681
- msgid "(Show Customization Options)"
2682
  msgstr ""
2683
 
2684
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:161
2685
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:29
2686
- msgid "(Hide Customization Options)"
2687
  msgstr ""
2688
 
2689
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:163
2690
- msgid "Preview of saved settings:"
2691
  msgstr ""
2692
 
2693
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:164
2694
- msgid "Refresh preview image"
2695
  msgstr ""
2696
 
2697
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:17
2698
- msgid "Lightbox Effects"
2699
  msgstr ""
2700
 
2701
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:43
2702
- msgid "What lightbox would you like to use?"
2703
  msgstr ""
2704
 
2705
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php:12
2706
- msgid "Roles & Capabilities"
2707
  msgstr ""
2708
 
2709
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:17
2710
- msgid "Miscellaneous"
 
2711
  msgstr ""
2712
 
2713
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:26
2714
- msgid "Add MediaRSS link?"
2715
  msgstr ""
2716
 
2717
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:27
2718
- msgid "When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries"
2719
  msgstr ""
2720
 
2721
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:31
2722
- msgid "Display galleries in feeds"
2723
  msgstr ""
2724
 
2725
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:32
2726
- msgid "NextGEN hides its gallery displays in feeds other than MediaRSS. This enables image galleries in feeds."
2727
  msgstr ""
2728
 
2729
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:35
2730
- msgid "Clear image cache"
2731
  msgstr ""
2732
 
2733
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:36
2734
- msgid ""
2735
- "Completely clear the NextGEN cache of all image modifications?\n"
2736
- "\n"
2737
- "Choose [Cancel] to Stop, [OK] to proceed."
2738
  msgstr ""
2739
 
2740
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:41
2741
- msgid "Permalink slug"
 
2742
  msgstr ""
2743
 
2744
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:48
2745
- msgid "Maximum image count"
2746
  msgstr ""
2747
 
2748
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:50
2749
- msgid "This is the maximum limit of images that NextGEN will restrict itself to querying"
2750
  msgstr ""
2751
 
2752
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:52
2753
- msgid "Note: This limit will not apply to slideshow widgets or random galleries if/when those galleries specify their own image limits"
2754
  msgstr ""
2755
 
2756
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:61
2757
- msgid "Random widget cache duration"
2758
  msgstr ""
2759
 
2760
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:63
2761
- msgid "The duration of time (in minutes) that \"random\" widget galleries should be cached. A setting of zero will disable caching."
 
2762
  msgstr ""
2763
 
2764
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:72
2765
- msgid "Use alternative method of retrieving random image galleries"
2766
  msgstr ""
2767
 
2768
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:74
2769
- msgid "Some web hosts' database servers disable or disrupt queries using 'ORDER BY RAND()' which can cause galleries to lose their randomness. NextGen provides an alternative (but not completely random) method to determine what images are fed into 'random' galleries."
2770
  msgstr ""
2771
 
2772
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:17
2773
- msgid "Image Options"
2774
  msgstr ""
2775
 
2776
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:30
2777
- msgid "Alt/Title Text"
2778
  msgstr ""
2779
 
2780
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:55
2781
- msgid "Categories"
2782
  msgstr ""
2783
 
2784
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:87
2785
- msgid "Where would you like galleries stored?"
2786
  msgstr ""
2787
 
2788
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:88
2789
- msgid "Where galleries and their images are stored"
 
2790
  msgstr ""
2791
 
2792
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:91
2793
- msgid "Gallery path does not exist and could not be created"
 
2794
  msgstr ""
2795
 
2796
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:92
2797
- msgid "Delete Image Files?"
 
 
 
 
 
2798
  msgstr ""
2799
 
2800
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:93
2801
- msgid "When enabled, image files will be removed after a Gallery has been deleted"
2802
  msgstr ""
2803
 
2804
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:95
2805
- msgid "Show Related Images on Posts?"
2806
  msgstr ""
2807
 
2808
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:96
2809
- msgid "When enabled, related images will be appended to each post by matching the posts tags/categories to image tags"
2810
  msgstr ""
2811
 
2812
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:98
2813
- msgid "(Show Customization Settings)"
2814
  msgstr ""
2815
 
2816
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:99
2817
- msgid "(Hide Customization Settings)"
2818
  msgstr ""
2819
 
2820
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:100
2821
- msgid "How should related images be matched?"
2822
  msgstr ""
2823
 
2824
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:103
2825
- msgid "Maximum # of related images to display"
2826
  msgstr ""
2827
 
2828
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:105
2829
- msgid "Heading for related images"
2830
  msgstr ""
2831
 
2832
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:107
2833
- msgid "What's the default sorting method?"
2834
  msgstr ""
2835
 
2836
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:110
2837
- msgid "Sort in what direction?"
2838
  msgstr ""
2839
 
2840
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:113
2841
- msgid "Automatically resize images after upload"
2842
  msgstr ""
2843
 
2844
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:114
2845
- msgid "It is recommended that your images be resized to be web friendly"
2846
  msgstr ""
2847
 
2848
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:116
2849
- msgid "What should images be resized to?"
2850
  msgstr ""
2851
 
2852
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:117
2853
- msgid "After images are uploaded, they will be resized to the above dimensions and quality"
2854
  msgstr ""
2855
 
2856
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:118
2857
- msgid "Width:"
2858
  msgstr ""
2859
 
2860
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:119
2861
- msgid "Height:"
2862
  msgstr ""
2863
 
2864
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:120
2865
- msgid "Quality:"
2866
  msgstr ""
2867
 
2868
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:124
2869
- msgid "Backup the original images?"
2870
  msgstr ""
2871
 
2872
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:12
2873
- msgid "Reset Options"
2874
  msgstr ""
2875
 
2876
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:20
2877
- msgid "Reset all options"
2878
  msgstr ""
2879
 
2880
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:21
2881
- msgid "Replace all existing options and gallery options with their default settings"
2882
  msgstr ""
2883
 
2884
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:22
2885
- msgid "Reset settings"
2886
  msgstr ""
2887
 
2888
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:23
2889
- msgid ""
2890
- "Reset all options to default settings?\n"
2891
- "\n"
2892
- "Choose [Cancel] to Stop, [OK] to proceed."
2893
  msgstr ""
2894
 
2895
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:35
2896
- msgid "Place any custom stylesheets in <strong>wp-content/ngg_styles</strong>"
2897
  msgstr ""
2898
 
2899
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:38
2900
- msgid "All stylesheets must contain a <a href='#' onclick='%s'>file header</a>"
2901
  msgstr ""
2902
 
2903
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:32
2904
- msgid "Want more lightbox options? Get the "
2905
  msgstr ""
2906
 
2907
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:32
2908
- msgid "NextGEN Pro Lightbox!"
2909
  msgstr ""
2910
 
2911
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:38
2912
- msgid "What must the lightbox be applied to?"
2913
  msgstr ""
2914
 
2915
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:42
2916
- msgid "Only apply to NextGEN images"
2917
  msgstr ""
2918
 
2919
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:43
2920
- msgid "Only apply to NextGEN and WordPress images"
2921
  msgstr ""
2922
 
2923
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:44
2924
- msgid "Try to apply to all images"
2925
  msgstr ""
2926
 
2927
- #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:45
2928
- msgid "Try to apply to all images that link to image files"
2929
  msgstr ""
2930
 
2931
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:17
2932
- msgid "Styles"
2933
  msgstr ""
2934
 
2935
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:23
2936
- msgid "Enable custom CSS"
2937
  msgstr ""
2938
 
2939
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:25
2940
- msgid "What stylesheet would you like to use?"
2941
  msgstr ""
2942
 
2943
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:30
2944
- msgid "File Content:"
2945
  msgstr ""
2946
 
2947
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:31
2948
- msgid "Changes you make to the contents will be saved to"
2949
  msgstr ""
2950
 
2951
- #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:32
2952
- msgid "You could edit this file if it were writable"
2953
  msgstr ""
2954
 
2955
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php:158
2956
- msgid "NextGEN Basic SinglePic"
2957
  msgstr ""
2958
 
2959
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:43
2960
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:127
2961
- msgid "Thumbnail dimensions"
2962
  msgstr ""
2963
 
2964
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:71
2965
- msgid "Link target"
2966
  msgstr ""
2967
 
2968
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:73
2969
- msgid "Self"
2970
  msgstr ""
2971
 
2972
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:74
2973
- msgid "Blank"
2974
  msgstr ""
2975
 
2976
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:75
2977
- msgid "Parent"
2978
  msgstr ""
2979
 
2980
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:76
2981
- msgid "Top"
2982
  msgstr ""
2983
 
2984
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:88
2985
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:198
2986
- msgid "Image quality"
2987
  msgstr ""
2988
 
2989
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:100
2990
- msgid "Display watermark"
2991
  msgstr ""
2992
 
2993
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:110
2994
- msgid "Display reflection"
2995
  msgstr ""
2996
 
2997
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:120
2998
- msgid "Crop thumbnail"
2999
  msgstr ""
3000
 
3001
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:130
3002
- msgid "Float"
3003
  msgstr ""
3004
 
3005
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:133
3006
- msgid "Left"
3007
  msgstr ""
3008
 
3009
- #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:134
3010
- msgid "Right"
3011
  msgstr ""
3012
 
3013
- #: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:7
3014
- msgid "Show a NextGEN Gallery Slideshow"
3015
  msgstr ""
3016
 
3017
- #: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:8
3018
- msgid "NextGEN Slideshow"
3019
  msgstr ""
3020
 
3021
- #: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:7
3022
- msgid "Add recent or random images from the galleries"
3023
  msgstr ""
3024
 
3025
- #: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:8
3026
- msgid "NextGEN Widget"
3027
  msgstr ""
3028
 
3029
- #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:9
3030
- msgid "Widget that displays Media RSS links for NextGEN Gallery."
3031
  msgstr ""
3032
 
3033
- #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:10
3034
- msgid "NextGEN Media RSS"
3035
  msgstr ""
3036
 
3037
- #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:22
3038
- msgid "Media RSS"
3039
  msgstr ""
3040
 
3041
- #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:23
3042
- msgid "Link to the main image feed"
3043
  msgstr ""
3044
 
3045
- #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:15
3046
- msgid "Select Gallery"
 
 
 
3047
  msgstr ""
3048
 
3049
- #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:23
3050
- msgid "All images"
 
 
 
3051
  msgstr ""
3052
 
3053
- #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:40
3054
- msgid "Limit"
3055
  msgstr ""
3056
 
3057
- #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:53
3058
- msgid "Height"
3059
  msgstr ""
3060
 
3061
- #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:65
3062
- msgid "Width"
3063
  msgstr ""
3064
 
3065
- #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:19
3066
- msgid "Show Media RSS icon"
3067
  msgstr ""
3068
 
3069
- #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:30
3070
- msgid "Show the Media RSS link"
3071
  msgstr ""
3072
 
3073
- #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:36
3074
- msgid "Text for Media RSS link"
3075
  msgstr ""
3076
 
3077
- #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:47
3078
- msgid "Tooltip text for Media RSS link"
3079
  msgstr ""
3080
 
3081
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:26
3082
- msgid "Thumbnails"
3083
  msgstr ""
3084
 
3085
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:29
3086
- msgid "Original images"
3087
  msgstr ""
3088
 
3089
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:42
3090
- msgid "random"
3091
  msgstr ""
3092
 
3093
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:50
3094
- msgid "recently added"
3095
  msgstr ""
3096
 
3097
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:62
3098
- msgid "Enable IE8 Web Slices"
3099
  msgstr ""
3100
 
3101
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:68
3102
- msgid "Width x Height"
 
 
3103
  msgstr ""
3104
 
3105
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:87
3106
- msgid "Select"
3107
  msgstr ""
3108
 
3109
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:92
3110
- msgid "All galleries"
3111
  msgstr ""
3112
 
3113
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:95
3114
- msgid "Only which are not listed"
3115
  msgstr ""
3116
 
3117
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:98
3118
- msgid "Only which are listed"
3119
  msgstr ""
3120
 
3121
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:107
3122
- msgid "Gallery ID"
3123
  msgstr ""
3124
 
3125
- #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:114
3126
- msgid "Gallery IDs, separated by commas."
3127
  msgstr ""
3128
 
3129
- #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.taxonomy_controller.php:112
3130
- msgid "Images tagged &quot;%s&quot;"
3131
  msgstr ""
3132
 
3133
- #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:36
3134
- msgid "Maximum number of tags"
3135
  msgstr ""
3136
 
3137
- #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:72
3138
- msgid "Display type"
3139
  msgstr ""
3140
 
3141
- #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:75
3142
- msgid "The display type that the tagcloud will point its results to"
3143
  msgstr ""
3144
 
3145
- #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php:176
3146
- msgid "NextGEN Basic TagCloud"
3147
  msgstr ""
3148
 
3149
- #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php:187
3150
- msgid "NextGEN Basic ImageBrowser"
3151
  msgstr ""
3152
 
3153
- #: products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php:82
3154
- msgid "XML is strongly encouraged for safely editing image data"
3155
  msgstr ""
3156
 
3157
- #: products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php:89
3158
- msgid "PHP 5.3 is required to write EXIF data to thumbnails and resized images"
3159
  msgstr ""
3160
 
3161
- #: products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php:96
3162
- msgid "GD is required for generating image thumbnails, resizing images, and generating watermarks"
3163
  msgstr ""
3164
 
3165
- #: products/photocrati_nextgen/modules/nextgen_data/mixin.gallerystorage_base_upload.php:259
3166
- #: products/photocrati_nextgen/modules/nextgen_data/mixin.gallerystorage_base_upload.php:438
3167
- msgid "Invalid image file. Acceptable formats: JPG, GIF, and PNG."
3168
  msgstr ""
3169
 
3170
- #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:52
3171
- msgid "Gallery paths may not use '..' to access parent directories)"
3172
  msgstr ""
3173
 
3174
- #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:67
3175
- msgid "Gallery path must be a sub-directory under the %s directory"
3176
  msgstr ""
3177
 
3178
- #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:83
3179
- msgid "Gallery path cannot be under %s directory"
3180
  msgstr ""
3181
 
3182
- #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:95
3183
- msgid "Gallery path cannot end with a directory named %s"
3184
  msgstr ""
3185
 
3186
- #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:184
3187
- msgid "Support for GIF format is missing."
3188
  msgstr ""
3189
 
3190
- #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:190
3191
- msgid "Support for JPEG format is missing."
3192
  msgstr ""
3193
 
3194
- #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:196
3195
- msgid "Support for PNG format is missing."
3196
  msgstr ""
3197
 
3198
- #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:202
3199
- msgid "Check memory limit"
3200
  msgstr ""
3201
 
3202
- #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:204
3203
- msgid "Create Image failed. %1$s"
3204
  msgstr ""
3205
 
3206
- #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:59
3207
- msgid "Choose Display"
3208
  msgstr ""
3209
 
3210
- #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:94
3211
- msgid "Customize Display Settings"
3212
  msgstr ""
3213
 
3214
- #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:187
3215
- msgid "No display type selected"
3216
  msgstr ""
3217
 
3218
- #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:204
3219
- msgid "Sort or Exclude Images"
3220
  msgstr ""
3221
 
3222
- #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:266
3223
- msgid "Add Gallery"
3224
  msgstr ""
3225
 
3226
- #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:500
3227
- msgid "Attach NextGEN Gallery to Post"
3228
  msgstr ""
3229
 
3230
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:25
3231
- msgid "Want more displays like "
3232
  msgstr ""
3233
 
3234
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:25
3235
- msgid "Mosaic"
3236
  msgstr ""
3237
 
3238
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:25
3239
- msgid " or "
 
3240
  msgstr ""
3241
 
3242
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:25
3243
- msgid "Masonry?"
 
3244
  msgstr ""
3245
 
3246
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:26
3247
- msgid "Upgrade to "
 
3248
  msgstr ""
3249
 
3250
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:26
3251
- msgid "NextGEN Pro."
 
3252
  msgstr ""
3253
 
3254
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:27
3255
- msgid "Use ILOVENG for 30% off!"
3256
  msgstr ""
3257
 
3258
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:31
3259
- msgid "Insert Gallery"
3260
  msgstr ""
3261
 
3262
- #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:34
3263
- msgid "Need a quick tutorial?"
3264
  msgstr ""
3265
 
3266
- #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:163
3267
- msgid "Album: %s"
3268
  msgstr ""
3269
 
3270
- #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:165
3271
- msgid "Gallery: %s"
3272
  msgstr ""
3273
 
3274
- #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:181
3275
- msgid "Missing parameters"
3276
  msgstr ""
3277
 
3278
- #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:217
3279
- msgid "Displayed gallery does not exist"
3280
  msgstr ""
3281
 
3282
- #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:220
3283
- msgid "Invalid request"
3284
  msgstr ""
3285
 
3286
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:363
3287
- msgid "Are you inserting a Gallery (default), an Album, or images based on Tags?"
3288
  msgstr ""
3289
 
3290
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:365
3291
- msgid "Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox"
3292
  msgstr ""
3293
 
3294
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:366
3295
- msgid "Slug"
3296
  msgstr ""
3297
 
3298
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:367
3299
- msgid "No entities to display for this source"
3300
  msgstr ""
3301
 
3302
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:368
3303
- msgid "Exclude?"
3304
  msgstr ""
3305
 
3306
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:369
3307
- msgid "Select a Gallery"
3308
  msgstr ""
3309
 
3310
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:370
3311
- msgid "Select one or more galleries (click in box to see available galleries)."
3312
  msgstr ""
3313
 
3314
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:371
3315
- msgid "Select one album (click in box to see available albums)."
3316
  msgstr ""
3317
 
3318
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:556
3319
- msgid "Click to edit"
3320
  msgstr ""
3321
 
3322
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:582
3323
- msgid "NextGEN Gallery - Attach To Post"
3324
  msgstr ""
3325
 
3326
- #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:597
3327
- msgid "Insert Into Page"
3328
  msgstr ""
3329
 
3330
- #: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:48
3331
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:280
3332
- msgid "Default"
3333
  msgstr ""
3334
 
3335
- #: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:54
3336
- msgid "Legacy (Old) Templates"
3337
  msgstr ""
3338
 
3339
- #: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:55
3340
- msgid "Use a legacy template when rendering (not recommended)."
3341
  msgstr ""
3342
 
3343
- #: products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php:75
3344
- msgid "Related Images"
3345
  msgstr ""
3346
 
3347
- #: products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php:95
3348
- msgid "View Slideshow"
3349
  msgstr ""
3350
 
3351
- #: products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php:96
3352
- msgid "View Thumbnails"
3353
  msgstr ""
3354
 
3355
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:18
3356
- msgid "Image Optimization"
3357
  msgstr ""
3358
 
3359
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:31
3360
- msgid "NextGEN Gallery partners with Imagify for best-in-class image optimization. Compress images to make galleries faster, all while maintaining image quality."
3361
  msgstr ""
3362
 
3363
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:34
3364
- msgid "Note: Imagify is a third party plugin. It is not built or supported by NextGEN Gallery."
3365
  msgstr ""
3366
 
3367
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:36
3368
- msgid "More on Imagify:"
3369
  msgstr ""
3370
 
3371
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:37
3372
- msgid "More on why we recommend Imagify:"
3373
  msgstr ""
3374
 
3375
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:38
3376
- msgid "Imagify Plugin Page"
3377
  msgstr ""
3378
 
3379
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:39
3380
- msgid "Imagify Website"
3381
  msgstr ""
3382
 
3383
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:40
3384
- msgid "Our Review of Image Compression Plugins"
3385
  msgstr ""
3386
 
3387
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:45
3388
- msgid "Imagify has been successfully activated"
3389
  msgstr ""
3390
 
3391
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:47
3392
- msgid "Imagify is already activated"
3393
  msgstr ""
3394
 
3395
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:51
3396
- msgid "Activate Imagify"
3397
  msgstr ""
3398
 
3399
- #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:53
3400
- msgid "Install and activate Imagify"
3401
  msgstr ""
3402
 
3403
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:36
3404
- msgid "Galleries"
3405
  msgstr ""
3406
 
3407
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:44
3408
- msgid "Albums"
3409
  msgstr ""
3410
 
3411
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:60
3412
- msgid "Random Images"
3413
  msgstr ""
3414
 
3415
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:68
3416
- msgid "Recent Images"
3417
  msgstr ""
3418
 
3419
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:427
3420
- msgid "NextGEN Gallery & Album Settings"
3421
  msgstr ""
3422
 
3423
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:104
3424
- msgid "Enable AJAX pagination"
3425
  msgstr ""
3426
 
3427
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:106
3428
- msgid "Browse images without reloading the page."
3429
  msgstr ""
3430
 
3431
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:117
3432
- msgid "Override thumbnail settings"
3433
  msgstr ""
3434
 
3435
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:119
3436
- msgid "This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit 'Manage Galleries' and choose 'Create new thumbnails' for all images in the gallery."
3437
  msgstr ""
3438
 
3439
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:153
3440
- msgid "Thumbnail crop"
3441
  msgstr ""
3442
 
3443
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:188
3444
- msgid "Override image settings"
3445
  msgstr ""
3446
 
3447
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:190
3448
- msgid "Overriding the image settings will create an additional set of images"
3449
  msgstr ""
3450
 
3451
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:208
3452
- msgid "Image crop"
3453
  msgstr ""
3454
 
3455
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:217
3456
- msgid "Image watermark"
3457
  msgstr ""
3458
 
3459
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:238
3460
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:260
3461
- msgid "Select View"
3462
  msgstr ""
3463
 
3464
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:278
3465
- msgid "Legacy"
3466
  msgstr ""
3467
 
3468
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php:263
3469
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php:265
3470
- msgid "We cannot display this gallery"
3471
  msgstr ""
3472
 
3473
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php:328
3474
- msgid " [<a href=\"%s\">See image gallery at %s</a>] "
3475
  msgstr ""
3476
 
3477
- #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php:77
3478
- msgid "Source not compatible with selected display type"
3479
  msgstr ""
3480
 
3481
- #: non_pope/class.photocrati_installer.php:259
3482
- #: nggallery.php:672
3483
- msgid "Sorry, NextGEN Gallery works only with a role called administrator"
3484
  msgstr ""
3485
 
3486
- #: nggallery.php:155
3487
- msgid "We’ve detected you are running PHP versions 7.0.26 or 7.1.12. These versions of PHP have a bug that breaks NextGEN Gallery and causes server crashes in certain conditions. To protect your site, NextGEN Gallery will not load. We recommend asking your host to roll back to an earlier version of PHP. For details on the PHP bug, see: <a target=\"_blank\" href=\"https://bugs.php.net/bug.php?id=75573\">bugs.php.net/bug.php?id=75573</a>"
3488
  msgstr ""
3489
 
3490
- #: nggallery.php:367
3491
- msgid "NextGEN Gallery %s is incompatible with this version of NextGEN Pro. Please update NextGEN Pro to version %s or higher to restore NextGEN Pro functionality."
3492
  msgstr ""
3493
 
3494
- #: nggallery.php:513
3495
- msgid "Every %d seconds"
3496
  msgstr ""
3497
 
3498
- #: nggallery.php:948
3499
- msgid "Hey %s, "
3500
  msgstr ""
3501
 
3502
- #: nggallery.php:949
3503
- msgid "Allow %6$s to collect some usage data with %5$s to make the plugin even more awesome. If you skip this, that's okay! %2$s will still work just fine."
3504
  msgstr ""
1
+ # Copyright (C) 2020 Imagely
2
  # NextGEN Gallery base (English) .po source
3
  # This file is distributed under the same license as the NextGEN Gallery plugin.
4
  #
13
  "Content-Type: text/plain; charset=UTF-8\n"
14
  "Content-Transfer-Encoding: 8bit\n"
15
  "POT-Creation-Date: 2014-02-20 19:45-0800\n"
16
+ "PO-Revision-Date: 2020-02-28 12:08+08\n"
17
+ "X-Generator: WP-CLI 2.4.0\n"
18
  "X-Domain: nggallery\n"
19
 
20
  #. Plugin Name of the plugin
21
+ #: nggallery.php:950
 
22
  #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:538
23
+ #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:379
24
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:11
25
  msgid "NextGEN Gallery"
26
  msgstr ""
27
 
30
  msgstr ""
31
 
32
  #. Description of the plugin
33
+ msgid "The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 28 million downloads."
34
  msgstr ""
35
 
36
  #. Author of the plugin
37
+ #: nggallery.php:954
38
  msgid "Imagely"
39
  msgstr ""
40
 
42
  msgid "https://www.imagely.com"
43
  msgstr ""
44
 
45
+ #: nggallery.php:155
46
+ msgid "We’ve detected you are running PHP versions 7.0.26 or 7.1.12. These versions of PHP have a bug that breaks NextGEN Gallery and causes server crashes in certain conditions. To protect your site, NextGEN Gallery will not load. We recommend asking your host to roll back to an earlier version of PHP. For details on the PHP bug, see: <a target=\"_blank\" href=\"https://bugs.php.net/bug.php?id=75573\">bugs.php.net/bug.php?id=75573</a>"
47
  msgstr ""
48
 
49
+ #: nggallery.php:365
50
+ msgid "NextGEN Gallery %s is incompatible with this version of NextGEN Pro. Please update NextGEN Pro to version %s or higher to restore NextGEN Pro functionality."
51
  msgstr ""
52
 
53
+ #: nggallery.php:512
54
+ msgid "Every %d seconds"
55
  msgstr ""
56
 
57
+ #: nggallery.php:671
58
+ #: non_pope/class.photocrati_installer.php:259
59
+ msgid "Sorry, NextGEN Gallery works only with a role called administrator"
60
  msgstr ""
61
 
62
+ #: nggallery.php:947
63
+ msgid "Hey %s, "
64
  msgstr ""
65
 
66
+ #: nggallery.php:948
67
+ msgid "Please help us improve NextGEN Gallery! If you opt-in, some data about your usage of NextGEN Gallery will be sent to freemius.com. If you skip this, that's okay! NextGEN Gallery will still work just fine."
68
  msgstr ""
69
 
70
+ #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:168
71
+ msgid "Album: %s"
72
  msgstr ""
73
 
74
+ #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:170
75
+ msgid "Gallery: %s"
76
  msgstr ""
77
 
78
+ #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:186
79
+ msgid "Missing parameters"
80
  msgstr ""
81
 
82
+ #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:222
83
+ msgid "Displayed gallery does not exist"
84
  msgstr ""
85
 
86
+ #: products/photocrati_nextgen/modules/attach_to_post/adapter.attach_to_post_ajax.php:225
87
+ msgid "Invalid request"
88
  msgstr ""
89
 
90
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:363
91
+ msgid "Are you inserting a Gallery (default), an Album, or images based on Tags?"
92
  msgstr ""
93
 
94
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:364
95
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:245
96
+ msgid "(optional)"
97
  msgstr ""
98
 
99
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:365
100
+ msgid "Sets an SEO-friendly name to this gallery for URLs. Currently only in use by the Pro Lightbox"
101
  msgstr ""
102
 
103
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:366
104
+ msgid "Slug"
105
  msgstr ""
106
 
107
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:367
108
+ msgid "No entities to display for this source"
109
  msgstr ""
110
 
111
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:368
112
+ msgid "Exclude?"
113
  msgstr ""
114
 
115
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:369
116
+ msgid "Select a Gallery"
117
  msgstr ""
118
 
119
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:370
120
+ msgid "Select one or more galleries (click in box to see available galleries)."
121
  msgstr ""
122
 
123
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:371
124
+ msgid "Select one album (click in box to see available albums)."
125
  msgstr ""
126
 
127
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:556
128
+ msgid "Click to edit"
129
  msgstr ""
130
 
131
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:582
132
+ msgid "NextGEN Gallery - Attach To Post"
133
  msgstr ""
134
 
135
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:597
136
+ msgid "Insert Into Page"
137
  msgstr ""
138
 
139
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:604
140
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:12
141
+ msgid "Upload Images"
142
  msgstr ""
143
 
144
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:611
145
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:172
146
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:206
147
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:197
148
+ msgid "Manage Galleries"
149
+ msgid_plural "Manage Galleries"
150
+ msgstr[0] ""
151
+ msgstr[1] ""
152
 
153
+ #: products/photocrati_nextgen/modules/attach_to_post/class.attach_controller.php:618
154
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:173
155
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:208
156
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:483
157
+ msgid "Manage Albums"
158
+ msgid_plural "Albums"
159
+ msgstr[0] ""
160
+ msgstr[1] ""
161
 
162
+ #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:59
163
+ msgid "Choose Display"
164
  msgstr ""
165
 
166
+ #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:94
167
+ msgid "Customize Display Settings"
168
  msgstr ""
169
 
170
+ #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:187
171
+ msgid "No display type selected"
172
  msgstr ""
173
 
174
+ #: products/photocrati_nextgen/modules/attach_to_post/mixin.attach_to_post_display_tab.php:204
175
+ msgid "Sort or Exclude Images"
176
  msgstr ""
177
 
178
+ #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:266
179
+ msgid "Add Gallery"
 
 
180
  msgstr ""
181
 
182
+ #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:380
183
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:248
184
+ msgid "Edit"
185
  msgstr ""
186
 
187
+ #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:381
188
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:521
189
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:261
190
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:357
191
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:358
192
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:223
193
+ msgid "Delete"
194
  msgstr ""
195
 
196
+ #: products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php:500
197
+ msgid "Attach NextGEN Gallery to Post"
198
  msgstr ""
199
 
200
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:25
201
+ msgid "Want Mosaic, Masonry, Tiled and other layouts?"
202
  msgstr ""
203
 
204
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:26
205
+ msgid "Get NextGEN Pro"
206
  msgstr ""
207
 
208
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:27
209
+ msgid "Use ILOVENG for 30% off!"
210
  msgstr ""
211
 
212
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:31
213
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:435
214
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:519
215
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:571
216
+ msgid "Save Changes"
217
  msgstr ""
218
 
219
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:31
220
+ msgid "Insert Gallery"
221
  msgstr ""
222
 
223
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:34
224
+ msgid "Need a quick tutorial?"
225
  msgstr ""
226
 
227
+ #: products/photocrati_nextgen/modules/attach_to_post/templates/display_tab.php:36
228
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:77
229
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:313
230
+ msgid "Click to Close"
231
  msgstr ""
232
 
233
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:18
234
+ msgid "Image Optimization"
 
235
  msgstr ""
236
 
237
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:31
238
+ msgid "NextGEN Gallery partners with Imagify for best-in-class image optimization. Compress images to make galleries faster, all while maintaining image quality."
239
  msgstr ""
240
 
241
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:34
242
+ msgid "Note: Imagify is a third party plugin. It is not built or supported by NextGEN Gallery."
243
  msgstr ""
244
 
245
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:36
246
+ msgid "More on Imagify:"
247
  msgstr ""
248
 
249
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:37
250
+ msgid "More on why we recommend Imagify:"
 
 
251
  msgstr ""
252
 
253
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:38
254
+ msgid "Imagify Plugin Page"
 
 
 
255
  msgstr ""
256
 
257
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:39
258
+ msgid "Imagify Website"
 
259
  msgstr ""
260
 
261
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:40
262
+ msgid "Our Review of Image Compression Plugins"
263
  msgstr ""
264
 
265
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:45
266
+ msgid "Imagify has been successfully activated"
 
267
  msgstr ""
268
 
269
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:47
270
+ msgid "Imagify is already activated"
271
  msgstr ""
272
 
273
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:51
274
+ msgid "Activate Imagify"
 
275
  msgstr ""
276
 
277
+ #: products/photocrati_nextgen/modules/imagify/adapter.imagify_admin_page_controller.php:53
278
+ msgid "Install and activate Imagify"
279
  msgstr ""
280
 
281
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:33
282
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:132
283
+ msgid "None"
284
  msgstr ""
285
 
286
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:38
287
+ msgid "Simplelightbox"
288
  msgstr ""
289
 
290
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:51
291
+ msgid "Fancybox"
292
  msgstr ""
293
 
294
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:65
295
+ msgid "Shutter"
296
  msgstr ""
297
 
298
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:76
299
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:312
300
+ msgid "L O A D I N G"
301
  msgstr ""
302
 
303
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:84
304
+ msgid "Shutter Reloaded"
305
  msgstr ""
306
 
307
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:95
308
+ msgid "Previous"
 
309
  msgstr ""
310
 
311
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:96
312
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:49
313
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:29
314
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:33
315
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:29
316
+ msgid "Next"
317
+ msgstr ""
318
+
319
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:97
320
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:124
321
+ msgid "Close"
322
+ msgstr ""
323
+
324
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:98
325
+ msgid "Full Size"
326
+ msgstr ""
327
+
328
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:99
329
+ msgid "Fit to Screen"
330
+ msgstr ""
331
+
332
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:100
333
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:122
334
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/default-view.php:54
335
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:655
336
+ msgid "Image"
337
+ msgid_plural "Images"
338
+ msgstr[0] ""
339
+ msgstr[1] ""
340
+
341
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:101
342
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:123
343
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/default-view.php:54
344
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55
345
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31
346
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35
347
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31
348
+ msgid "of"
349
+ msgstr ""
350
+
351
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:102
352
+ msgid "Loading..."
353
+ msgstr ""
354
+
355
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:109
356
+ msgid "Thickbox"
357
+ msgstr ""
358
+
359
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:120
360
+ msgid "Next &gt;"
361
+ msgstr ""
362
+
363
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:121
364
+ msgid "&lt; Prev"
365
+ msgstr ""
366
+
367
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:125
368
+ msgid "This feature requires inline frames. You have iframes disabled or your browser does not support them."
369
+ msgstr ""
370
+
371
+ #: products/photocrati_nextgen/modules/lightbox/class.lightbox_library_manager.php:135
372
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:27
373
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:76
374
+ msgid "Custom"
375
+ msgstr ""
376
+
377
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_folder_form.php:12
378
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:12
379
+ msgid "Import Folder"
380
  msgstr ""
381
 
382
  #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_media_library_form.php:12
418
  msgstr ""
419
 
420
  #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.import_media_library_form.php:33
421
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:221
422
  msgid "Upload complete. Great job!"
423
  msgstr ""
424
 
438
  msgid "Import %d image(s)"
439
  msgstr ""
440
 
441
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:31
442
+ msgid "Please ask your hosting provider or system administrator to enable the PHP XML module which is required for image uploads"
443
  msgstr ""
444
 
445
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:52
446
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:268
447
+ msgid "No gallery name specified"
448
  msgstr ""
449
 
450
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:69
451
+ msgid "Failed to extract images from ZIP"
452
+ msgstr ""
 
 
 
 
 
 
 
 
 
 
 
453
 
454
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:84
455
+ msgid "Automatic image resizing failed [%1$s]."
 
456
  msgstr ""
457
 
458
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:93
459
+ msgid "Thumbnail generation failed."
 
460
  msgstr ""
461
 
462
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:96
463
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:286
464
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:305
465
+ msgid "Image generation failed"
466
  msgstr ""
467
 
468
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:106
469
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:223
470
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:250
471
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:315
472
+ msgid "An unexpected error occured."
473
  msgstr ""
474
 
475
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:117
476
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:322
477
+ msgid "No permissions to upload images. Try refreshing the page or ensuring that your user account has sufficient roles/privileges."
478
  msgstr ""
479
 
480
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:174
481
+ msgid "Directory does not exist."
482
  msgstr ""
483
 
484
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:178
485
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:186
486
+ msgid "No permissions to browse folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges."
487
  msgstr ""
488
 
489
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:182
490
+ msgid "No directory specified."
491
  msgstr ""
492
 
493
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:218
494
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:230
495
+ msgid "No permissions to import folders. Try refreshing the page or ensuring that your user account has sufficient roles/privileges."
496
  msgstr ""
497
 
498
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_ajax.php:227
499
+ msgid "No folder specified"
500
  msgstr ""
501
 
502
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.nextgen_addgallery_controller.php:12
503
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:204
504
+ msgid "Add Gallery / Images"
505
  msgstr ""
506
 
507
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:18
508
+ msgid "No images were uploaded successfully."
509
  msgstr ""
510
 
511
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:19
512
+ msgid "1 image was uploaded successfully."
513
  msgstr ""
514
 
515
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:20
516
+ msgid "{count} images were uploaded successfully."
517
  msgstr ""
518
 
519
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:21
520
+ msgid "The following errors occured:"
 
521
  msgstr ""
522
 
523
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/adapter.upload_images_form.php:22
524
+ msgid "Manage gallery > {name}"
 
 
525
  msgstr ""
526
 
527
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php:97
528
+ msgid "XML is strongly encouraged for safely uploading images"
529
  msgstr ""
530
 
531
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/module.nextgen_addgallery_page.php:105
532
+ msgid "Cannot write to %s: new galleries cannot be created"
533
  msgstr ""
534
 
535
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:1
536
+ msgid "Select a folder to import."
 
 
 
 
537
  msgstr ""
538
 
539
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:7
540
+ msgid "Leave blank for folder name"
 
541
  msgstr ""
542
 
543
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:11
544
+ msgid "Keep images in original location. Caution: If you keep images in the original folder and later delete the gallery, the images in that folder might be deleted depending on your settings."
545
  msgstr ""
546
 
547
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:74
548
+ msgid "Done! Successfully imported {count} images. <a href=\"%s\" target=\"_blank\">Manage gallery</a>"
549
  msgstr ""
550
 
551
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_folder.php:79
552
+ msgid "Upload complete"
553
+ msgstr ""
554
+
555
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php:2
556
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:2
557
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:164
558
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:165
559
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:183
560
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:388
561
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:651
562
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:217
563
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:226
564
+ msgid "Gallery"
565
+ msgid_plural "Galleries"
566
  msgstr[0] ""
567
  msgstr[1] ""
568
 
569
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php:4
570
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:4
571
+ msgid "Create a new gallery"
 
 
 
 
 
572
  msgstr ""
573
 
574
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/import_media_library.php:9
575
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:11
576
+ msgid "Gallery title"
577
  msgstr ""
578
 
579
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:15
580
+ msgid "Your browser doesn't have Silverlight, HTML5, or HTML4 support."
581
  msgstr ""
582
 
583
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:122
584
+ msgid "Drag image and ZIP files here or click <strong>Add Files</strong>"
585
  msgstr ""
586
 
587
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:124
588
+ msgid "Drag image files here or click <strong>Add Files</strong>"
589
  msgstr ""
590
 
591
+ #: products/photocrati_nextgen/modules/nextgen_addgallery_page/templates/upload_images.php:244
592
+ msgid "An unexpected error occured. This is most likely due to a server misconfiguration. Check your PHP error log or ask your hosting provider for assistance."
593
  msgstr ""
594
 
595
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_notification_manager.php:278
596
+ msgid "Notice is not dismissible"
 
 
597
  msgstr ""
598
 
599
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_notification_manager.php:280
600
+ msgid "No handler defined for this notice"
 
 
 
 
 
601
  msgstr ""
602
 
603
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_notification_manager.php:337
604
+ msgid "Not a valid notice name"
605
  msgstr ""
606
 
607
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_requirements_manager.php:17
608
+ msgid "NextGen Gallery requires the following PHP extensions to function correctly. Please contact your hosting provider or systems admin and ask them for assistance:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
609
  msgstr ""
610
 
611
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_requirements_manager.php:18
612
+ msgid "NextGen Gallery has degraded functionality because of your PHP version. Please contact your hosting provider or systems admin and ask them for assistance:"
613
  msgstr ""
614
 
615
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.admin_requirements_manager.php:19
616
+ msgid "NextGen Gallery has found an issue trying to access the following files or directories. Please ensure the following locations have the correct permissions:"
617
  msgstr ""
618
 
619
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:242
620
+ msgid "Gallery width"
621
  msgstr ""
622
 
623
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:244
624
+ msgid "An empty or 0 setting will make the gallery full width"
625
  msgstr ""
626
 
627
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248
628
+ msgid "Pixels"
629
  msgstr ""
630
 
631
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:248
632
+ msgid "Percent"
633
  msgstr ""
634
 
635
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:257
636
+ msgid "First Image"
 
637
  msgstr ""
638
 
639
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.form.php:258
640
+ msgid "Average"
641
  msgstr ""
642
 
643
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:148
644
+ msgid "Good work. Keep making the web beautiful."
645
  msgstr ""
646
 
647
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_admin_page_controller.php:177
648
+ msgid "Saved successfully"
649
  msgstr ""
650
 
651
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:25
652
+ msgid "Thanks for installing NextGEN Gallery! Want help creating your first gallery?"
653
  msgstr ""
654
 
655
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:26
656
+ msgid "Launch the Gallery Wizard"
657
  msgstr ""
658
 
659
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:27
660
+ msgid "If you close this message, you can also launch the Gallery Wizard at any time from the"
661
  msgstr ""
662
 
663
+ #: products/photocrati_nextgen/modules/nextgen_admin/class.nextgen_first_run_notification_wizard.php:28
664
+ msgid "NextGEN Overview page"
665
  msgstr ""
666
 
667
  #: products/photocrati_nextgen/modules/nextgen_admin/module.nextgen_admin.php:210
745
  msgid "Congratulations! You just created your first gallery. You can now click the \"Publish\" button on the right to publish your page."
746
  msgstr ""
747
 
748
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/admin_notice.php:4
749
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/requirement_notice.php:4
750
+ msgid "Dismiss"
751
  msgstr ""
752
 
753
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/form.php:8
754
+ msgid "Want image protection, social sharing, or ecommerce for this display? "
755
  msgstr ""
756
 
757
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/form.php:8
758
+ msgid "Upgrade to NextGEN Pro!"
759
  msgstr ""
760
 
761
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/nextgen_admin_page.php:45
762
+ msgid "Save Options"
763
  msgstr ""
764
 
765
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:5
766
+ msgid "Hey <strong>%s</strong>, you've created %d NextGEN galleries! Awesome! Could I ask you to give us a 5-star rating really quickly on <a %s>WordPress.org</a>? It helps other WordPress users and motivates us to keep improving. You can also just send us feedback <a %s>here</a>. Thanks! ~ Erick Danzer (founder of Imagely/NextGEN Gallery)"
767
  msgstr ""
768
 
769
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:14
770
+ msgid "Ok, you deserve it"
 
771
  msgstr ""
772
 
773
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:15
774
+ msgid "Nope, maybe later"
775
  msgstr ""
776
 
777
+ #: products/photocrati_nextgen/modules/nextgen_admin/templates/review_notice.php:16
778
+ msgid "I already did"
779
  msgstr ""
780
 
781
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:42
782
+ msgid "Display galleries as"
783
  msgstr ""
784
 
785
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:43
786
+ msgid "How would you like galleries to be displayed?"
787
  msgstr ""
788
 
789
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:45
790
+ msgid "Galleries per page"
791
  msgstr ""
792
 
793
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:64
794
+ msgid "Items per page"
795
  msgstr ""
796
 
797
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:66
798
+ msgid "Maximum number of galleries or sub-albums to appear on a single page"
799
  msgstr ""
800
 
801
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:78
802
+ msgid "Enable breadcrumbs"
803
  msgstr ""
804
 
805
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/mixin.nextgen_basic_album_form.php:88
806
+ msgid "Display descriptions"
807
  msgstr ""
808
 
809
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php:216
810
+ msgid "NextGEN Basic Compact Album"
811
  msgstr ""
812
 
813
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/module.nextgen_basic_album.php:232
814
+ msgid "NextGEN Basic Extended Album"
815
  msgstr ""
816
 
817
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact.php:41
818
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact/default-view.php:41
819
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended.php:31
820
+ #: products/photocrati_nextgen/modules/nextgen_basic_album/templates/extended/default-view.php:31
821
+ #: products/photocrati_nextgen/modules/ngglegacy/view/album-compact.php:63
822
+ #: products/photocrati_nextgen/modules/ngglegacy/view/album-extend.php:31
823
+ msgid "Photos"
824
  msgstr ""
825
 
826
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:54
827
+ msgid "Autoplay?"
828
  msgstr ""
829
 
830
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:70
831
+ msgid "Pause on Hover?"
832
  msgstr ""
833
 
834
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:86
835
+ msgid "Show Arrows?"
836
  msgstr ""
837
 
838
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:102
839
+ msgid "Transition Style"
840
  msgstr ""
841
 
842
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:124
843
+ msgid "Interval"
844
  msgstr ""
845
 
846
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:128
847
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:148
848
+ msgid "Milliseconds"
849
  msgstr ""
850
 
851
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:144
852
+ msgid "Transition Speed"
853
  msgstr ""
854
 
855
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:157
856
+ msgid "Maximum dimensions"
857
  msgstr ""
858
 
859
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:158
860
+ msgid "Certain themes may allow images to flow over their container if this setting is too large"
861
  msgstr ""
862
 
863
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:175
864
+ msgid "Show thumbnail link"
865
  msgstr ""
866
 
867
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_slideshow_form.php:191
868
+ msgid "Thumbnail link text"
869
  msgstr ""
870
 
871
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:63
872
+ msgid "Images per page"
 
873
  msgstr ""
874
 
875
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:65
876
+ msgid "0 will display all images at once"
877
  msgstr ""
878
 
879
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:83
880
+ msgid "Number of columns to display"
881
  msgstr ""
882
 
883
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:87
884
+ msgid "# of columns"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
885
  msgstr ""
886
 
887
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:103
888
+ msgid "Add Hidden Images"
889
  msgstr ""
890
 
891
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:105
892
+ msgid "If pagination is used this option will show all images in the modal window (Thickbox, Lightbox etc.) This increases page load."
893
  msgstr ""
894
 
895
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:114
896
+ msgid "Use imagebrowser effect"
897
  msgstr ""
898
 
899
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:116
900
+ msgid "When active each image in the gallery will link to an imagebrowser display and lightbox effects will not be applied."
901
  msgstr ""
902
 
903
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:131
904
+ msgid "Show slideshow link"
905
  msgstr ""
906
 
907
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/adapter.nextgen_basic_thumbnail_form.php:147
908
+ msgid "Slideshow link text"
909
  msgstr ""
910
 
911
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php:370
912
+ msgid "NextGEN Basic Thumbnails"
913
  msgstr ""
914
 
915
+ #: products/photocrati_nextgen/modules/nextgen_basic_gallery/module.nextgen_basic_gallery.php:386
916
+ msgid "NextGEN Basic Slideshow"
917
  msgstr ""
918
 
919
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/module.nextgen_basic_imagebrowser.php:187
920
+ msgid "NextGEN Basic ImageBrowser"
921
  msgstr ""
922
 
923
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:41
924
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:26
925
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:30
926
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:26
927
+ msgid "Back"
928
  msgstr ""
929
 
930
+ #: products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/templates/nextgen_basic_imagebrowser.php:55
931
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:88
932
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:220
933
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-caption.php:31
934
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:35
935
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser.php:31
936
+ msgid "Picture"
937
  msgstr ""
938
 
939
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:43
940
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:131
941
+ msgid "Thumbnail dimensions"
942
  msgstr ""
943
 
944
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:71
945
+ msgid "Link target"
946
  msgstr ""
947
 
948
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:73
949
+ msgid "Self"
950
  msgstr ""
951
 
952
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:74
953
+ msgid "Blank"
954
  msgstr ""
955
 
956
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:75
957
+ msgid "Parent"
958
  msgstr ""
959
 
960
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:76
961
+ msgid "Top"
962
  msgstr ""
963
 
964
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:88
965
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:177
966
+ msgid "Image quality"
967
  msgstr ""
968
 
969
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:100
970
+ msgid "Display watermark"
971
  msgstr ""
972
 
973
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:110
974
+ msgid "Display reflection"
 
 
 
 
 
975
  msgstr ""
976
 
977
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:120
978
+ msgid "Crop thumbnail"
979
  msgstr ""
980
 
981
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:130
982
+ msgid "Float"
983
  msgstr ""
984
 
985
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:133
986
+ msgid "Left"
987
  msgstr ""
988
 
989
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/adapter.nextgen_basic_singlepic_form.php:134
990
+ msgid "Right"
991
  msgstr ""
992
 
993
+ #: products/photocrati_nextgen/modules/nextgen_basic_singlepic/module.nextgen_basic_singlepic.php:158
994
+ msgid "NextGEN Basic SinglePic"
 
995
  msgstr ""
996
 
997
+ #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:36
998
+ msgid "Maximum number of tags"
999
  msgstr ""
1000
 
1001
+ #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:72
1002
+ msgid "Display type"
 
1003
  msgstr ""
1004
 
1005
+ #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/adapter.nextgen_basic_tagcloud_form.php:75
1006
+ msgid "The display type that the tagcloud will point its results to"
 
1007
  msgstr ""
1008
 
1009
+ #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/class.taxonomy_controller.php:112
1010
+ msgid "Images tagged &quot;%s&quot;"
 
 
 
 
 
1011
  msgstr ""
1012
 
1013
+ #: products/photocrati_nextgen/modules/nextgen_basic_tagcloud/module.nextgen_basic_tagcloud.php:176
1014
+ msgid "NextGEN Basic TagCloud"
1015
  msgstr ""
1016
 
1017
+ #: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:48
1018
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:259
1019
+ msgid "Default"
 
 
 
1020
  msgstr ""
1021
 
1022
+ #: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:54
1023
+ msgid "Legacy (Old) Templates"
 
 
 
 
1024
  msgstr ""
1025
 
1026
+ #: products/photocrati_nextgen/modules/nextgen_basic_templates/adapter.nextgen_basic_template_form.php:55
1027
+ msgid "Use a legacy template when rendering (not recommended)."
1028
  msgstr ""
1029
 
1030
+ #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:48
1031
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:147
1032
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:36
1033
+ msgid "Gallery path must be located in %s"
1034
  msgstr ""
1035
 
1036
+ #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:56
1037
+ msgid "Gallery paths may not use '..' to access parent directories)"
1038
  msgstr ""
1039
 
1040
+ #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:71
1041
+ msgid "Gallery path must be a sub-directory under the %s directory"
1042
  msgstr ""
1043
 
1044
+ #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:87
1045
+ msgid "Gallery path cannot be under %s directory"
1046
  msgstr ""
1047
 
1048
+ #: products/photocrati_nextgen/modules/nextgen_data/class.gallery.php:99
1049
+ msgid "Gallery path cannot end with a directory named %s"
1050
  msgstr ""
1051
 
1052
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:142
1053
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:136
1054
+ msgid " mm"
1055
  msgstr ""
1056
 
1057
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:148
1058
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:142
1059
+ msgid " sec"
1060
  msgstr ""
1061
 
1062
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:152
1063
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:146
1064
+ msgid "Fired"
1065
  msgstr ""
1066
 
1067
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:468
1068
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:461
1069
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:46
1070
+ msgid "Aperture"
1071
  msgstr ""
1072
 
1073
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:469
1074
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:494
1075
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:462
1076
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:487
1077
+ msgid "Credit"
1078
  msgstr ""
1079
 
1080
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:470
1081
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:463
1082
+ msgid "Camera"
1083
  msgstr ""
1084
 
1085
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:471
1086
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:464
1087
+ msgid "Caption"
1088
  msgstr ""
1089
 
1090
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:472
1091
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:31
1092
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:128
1093
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:465
1094
+ msgid "Date/Time"
1095
  msgstr ""
1096
 
1097
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:473
1098
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:466
1099
+ msgid "Copyright"
1100
  msgstr ""
1101
 
1102
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:474
1103
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:467
1104
+ msgid "Focal length"
1105
  msgstr ""
1106
 
1107
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:475
1108
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:468
1109
+ msgid "ISO"
1110
  msgstr ""
1111
 
1112
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:476
1113
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:469
1114
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:54
1115
+ msgid "Shutter speed"
1116
  msgstr ""
1117
 
1118
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:477
1119
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:781
1120
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:470
1121
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:4
1122
+ #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:3
1123
+ #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:3
1124
+ msgid "Title"
1125
  msgstr ""
1126
 
1127
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:478
1128
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:653
1129
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:412
1130
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:471
1131
+ msgid "Author"
1132
  msgstr ""
1133
 
1134
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:479
1135
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:52
1136
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:56
1137
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:173
1138
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:472
1139
+ msgid "Tags"
1140
  msgstr ""
1141
 
1142
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:480
1143
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:473
1144
+ msgid "Subject"
1145
  msgstr ""
1146
 
1147
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:481
1148
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:474
1149
+ msgid "Make"
1150
  msgstr ""
1151
 
1152
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:482
1153
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:475
1154
+ msgid "Edit Status"
1155
  msgstr ""
1156
 
1157
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:483
1158
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:476
1159
+ msgid "Category"
1160
  msgstr ""
1161
 
1162
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:484
1163
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:477
1164
+ msgid "Keywords"
1165
  msgstr ""
1166
 
1167
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:485
1168
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:478
1169
+ msgid "Date Created"
1170
  msgstr ""
1171
 
1172
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:486
1173
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:479
1174
+ msgid "Time Created"
1175
  msgstr ""
1176
 
1177
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:487
1178
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:480
1179
+ msgid "Author Position"
1180
  msgstr ""
1181
 
1182
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:488
1183
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:481
1184
+ msgid "City"
1185
  msgstr ""
1186
 
1187
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:489
1188
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:482
1189
+ msgid "Location"
1190
  msgstr ""
1191
 
1192
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:490
1193
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:483
1194
+ msgid "Province/State"
1195
  msgstr ""
1196
 
1197
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:491
1198
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:484
1199
+ msgid "Country code"
1200
  msgstr ""
1201
 
1202
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:492
1203
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:485
1204
+ msgid "Country"
1205
  msgstr ""
1206
 
1207
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:493
1208
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:486
1209
+ msgid "Headline"
1210
  msgstr ""
1211
 
1212
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:495
1213
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:488
1214
+ msgid "Source"
1215
  msgstr ""
1216
 
1217
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:496
1218
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:489
1219
+ msgid "Copyright Notice"
1220
  msgstr ""
1221
 
1222
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:497
1223
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:490
1224
+ msgid "Contact"
1225
  msgstr ""
1226
 
1227
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:498
1228
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:491
1229
+ msgid "Last modified"
1230
  msgstr ""
1231
 
1232
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:499
1233
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:492
1234
+ msgid "Program tool"
1235
  msgstr ""
1236
 
1237
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:500
1238
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:493
1239
+ msgid "Format"
1240
  msgstr ""
1241
 
1242
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:501
1243
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:494
1244
+ msgid "Image Width"
1245
  msgstr ""
1246
 
1247
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:502
1248
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:495
1249
+ msgid "Image Height"
1250
  msgstr ""
1251
 
1252
+ #: products/photocrati_nextgen/modules/nextgen_data/class.nextgen_metadata.php:503
1253
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/meta.php:496
1254
+ msgid "Flash"
1255
  msgstr ""
1256
 
1257
+ #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:184
1258
+ msgid "Support for GIF format is missing."
1259
  msgstr ""
1260
 
1261
+ #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:190
1262
+ msgid "Support for JPEG format is missing."
1263
  msgstr ""
1264
 
1265
+ #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:196
1266
+ msgid "Support for PNG format is missing."
1267
  msgstr ""
1268
 
1269
+ #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:202
1270
+ msgid "Check memory limit"
1271
  msgstr ""
1272
 
1273
+ #: products/photocrati_nextgen/modules/nextgen_data/class.ngglegacy_thumbnail.php:204
1274
+ msgid "Create Image failed. %1$s"
1275
  msgstr ""
1276
 
1277
+ #: products/photocrati_nextgen/modules/nextgen_data/mixin.gallerystorage_base_upload.php:240
1278
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/multisite.php:23
1279
+ msgid "Sorry, you have used your space allocation. Please delete some files to upload more files."
 
1280
  msgstr ""
1281
 
1282
+ #: products/photocrati_nextgen/modules/nextgen_data/mixin.gallerystorage_base_upload.php:261
1283
+ #: products/photocrati_nextgen/modules/nextgen_data/mixin.gallerystorage_base_upload.php:447
1284
+ msgid "Invalid image file. Acceptable formats: JPG, GIF, and PNG."
1285
  msgstr ""
1286
 
1287
+ #: products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php:82
1288
+ msgid "XML is strongly encouraged for safely editing image data"
1289
  msgstr ""
1290
 
1291
+ #: products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php:89
1292
+ msgid "PHP 5.3 is required to write EXIF data to thumbnails and resized images"
1293
  msgstr ""
1294
 
1295
+ #: products/photocrati_nextgen/modules/nextgen_data/module.nextgen_data.php:96
1296
+ msgid "GD is required for generating image thumbnails, resizing images, and generating watermarks"
1297
  msgstr ""
1298
 
1299
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/adapter.display_settings_controller.php:22
1300
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:352
1301
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:432
1302
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:417
1303
+ msgid "Gallery Settings"
1304
  msgstr ""
1305
 
1306
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery.php:77
1307
+ msgid "Source not compatible with selected display type"
1308
  msgstr ""
1309
 
1310
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php:263
1311
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php:265
1312
+ msgid "We cannot display this gallery"
1313
  msgstr ""
1314
 
1315
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_renderer.php:328
1316
+ msgid " [<a href=\"%s\">See image gallery at %s</a>] "
1317
  msgstr ""
1318
 
1319
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:36
1320
+ msgid "Galleries"
1321
  msgstr ""
1322
 
1323
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:44
1324
+ msgid "Albums"
1325
  msgstr ""
1326
 
1327
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:60
1328
+ msgid "Random Images"
 
1329
  msgstr ""
1330
 
1331
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/class.displayed_gallery_source_manager.php:68
1332
+ msgid "Recent Images"
1333
  msgstr ""
1334
 
1335
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:104
1336
+ msgid "Enable AJAX pagination"
 
 
 
 
 
1337
  msgstr ""
1338
 
1339
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:106
1340
+ msgid "Browse images without reloading the page."
 
 
 
 
 
 
1341
  msgstr ""
1342
 
1343
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:121
1344
+ msgid "Override thumbnail settings"
 
 
 
1345
  msgstr ""
1346
 
1347
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:123
1348
+ msgid "This does not affect existing thumbnails; overriding the thumbnail settings will create an additional set of thumbnails. To change the size of existing thumbnails please visit 'Manage Galleries' and choose 'Create new thumbnails' for all images in the gallery."
1349
  msgstr ""
1350
 
1351
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:143
1352
+ msgid "Thumbnail crop"
 
 
 
1353
  msgstr ""
1354
 
1355
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:167
1356
+ msgid "Override image settings"
 
 
 
 
 
 
 
 
 
1357
  msgstr ""
1358
 
1359
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:169
1360
+ msgid "Overriding the image settings will create an additional set of images"
1361
  msgstr ""
1362
 
1363
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:187
1364
+ msgid "Image crop"
 
 
 
1365
  msgstr ""
1366
 
1367
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:196
1368
+ msgid "Image watermark"
1369
  msgstr ""
1370
 
1371
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:217
1372
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:239
1373
+ msgid "Select View"
1374
  msgstr ""
1375
 
1376
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/mixin.display_type_form.php:257
1377
+ msgid "Legacy"
1378
  msgstr ""
1379
 
1380
+ #: products/photocrati_nextgen/modules/nextgen_gallery_display/module.nextgen_gallery_display.php:431
1381
+ msgid "NextGEN Gallery & Album Settings"
1382
  msgstr ""
1383
 
1384
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.custom_lightbox_form.php:36
1385
+ msgid "Code"
1386
  msgstr ""
1387
 
1388
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.custom_lightbox_form.php:50
1389
+ msgid "Stylesheet URL"
1390
  msgstr ""
1391
 
1392
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.custom_lightbox_form.php:64
1393
+ msgid "Javascript URL"
1394
  msgstr ""
1395
 
1396
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:17
1397
+ msgid "Image Options"
 
1398
  msgstr ""
1399
 
1400
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:28
1401
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:125
1402
+ msgid "Image ID"
 
 
1403
  msgstr ""
1404
 
1405
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:29
1406
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:826
1407
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:126
1408
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:163
1409
+ msgid "Filename"
1410
  msgstr ""
1411
 
1412
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:30
1413
+ msgid "Alt/Title Text"
1414
  msgstr ""
1415
 
1416
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:43
1417
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:129
1418
+ msgid "Ascending"
 
 
1419
  msgstr ""
1420
 
1421
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:44
1422
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:130
1423
+ msgid "Descending"
1424
  msgstr ""
1425
 
1426
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:55
1427
+ msgid "Categories"
1428
  msgstr ""
1429
 
1430
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:87
1431
+ msgid "Where would you like galleries stored?"
1432
  msgstr ""
1433
 
1434
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:88
1435
+ msgid "Where galleries and their images are stored"
1436
  msgstr ""
1437
 
1438
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:91
1439
+ msgid "Gallery path does not exist and could not be created"
1440
  msgstr ""
1441
 
1442
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:92
1443
+ msgid "Delete Image Files?"
1444
  msgstr ""
1445
 
1446
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:93
1447
+ msgid "When enabled, image files will be removed after a Gallery has been deleted"
 
1448
  msgstr ""
1449
 
1450
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:95
1451
+ msgid "Show Related Images on Posts?"
1452
  msgstr ""
1453
 
1454
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:96
1455
+ msgid "When enabled, related images will be appended to each post by matching the posts tags/categories to image tags"
 
1456
  msgstr ""
1457
 
1458
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:98
1459
+ msgid "(Show Customization Settings)"
1460
  msgstr ""
1461
 
1462
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:99
1463
+ msgid "(Hide Customization Settings)"
 
 
 
 
 
 
 
1464
  msgstr ""
1465
 
1466
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:100
1467
+ msgid "How should related images be matched?"
 
 
 
 
 
 
 
1468
  msgstr ""
1469
 
1470
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:103
1471
+ msgid "Maximum # of related images to display"
1472
  msgstr ""
1473
 
1474
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:105
1475
+ msgid "Heading for related images"
 
1476
  msgstr ""
1477
 
1478
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:107
1479
+ msgid "What's the default sorting method?"
 
1480
  msgstr ""
1481
 
1482
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:110
1483
+ msgid "Sort in what direction?"
 
1484
  msgstr ""
1485
 
1486
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:113
1487
+ msgid "Automatically resize images after upload"
 
1488
  msgstr ""
1489
 
1490
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:114
1491
+ msgid "It is recommended that your images be resized to be web friendly"
 
1492
  msgstr ""
1493
 
1494
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:116
1495
+ msgid "What should images be resized to?"
 
 
 
1496
  msgstr ""
1497
 
1498
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:117
1499
+ msgid "After images are uploaded, they will be resized to the above dimensions and quality"
1500
  msgstr ""
1501
 
1502
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:118
1503
+ msgid "Width:"
1504
  msgstr ""
1505
 
1506
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:119
1507
+ msgid "Height:"
1508
  msgstr ""
1509
 
1510
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:120
1511
+ msgid "Quality:"
1512
  msgstr ""
1513
 
1514
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.image_options_form.php:124
1515
+ msgid "Backup the original images?"
1516
  msgstr ""
1517
 
1518
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:17
1519
+ msgid "Lightbox Effects"
1520
  msgstr ""
1521
 
1522
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.lightbox_manager_form.php:43
1523
+ msgid "What lightbox would you like to use?"
1524
  msgstr ""
1525
 
1526
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:17
1527
+ msgid "Miscellaneous"
1528
  msgstr ""
1529
 
1530
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:26
1531
+ msgid "Add MediaRSS link?"
 
 
1532
  msgstr ""
1533
 
1534
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:27
1535
+ msgid "When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries"
1536
  msgstr ""
1537
 
1538
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:31
1539
+ msgid "Display galleries in feeds"
 
 
 
1540
  msgstr ""
1541
 
1542
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:32
1543
+ msgid "NextGEN hides its gallery displays in feeds other than MediaRSS. This enables image galleries in feeds."
 
 
 
1544
  msgstr ""
1545
 
1546
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:35
1547
+ msgid "Clear image cache"
1548
  msgstr ""
1549
 
1550
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:36
1551
+ msgid ""
1552
+ "Completely clear the NextGEN cache of all image modifications?\n"
1553
+ "\n"
1554
+ "Choose [Cancel] to Stop, [OK] to proceed."
1555
  msgstr ""
1556
 
1557
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:41
1558
+ msgid "Permalink slug"
1559
  msgstr ""
1560
 
1561
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:48
1562
+ msgid "Maximum image count"
1563
  msgstr ""
1564
 
1565
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:50
1566
+ msgid "This is the maximum limit of images that NextGEN will restrict itself to querying"
1567
  msgstr ""
1568
 
1569
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:52
1570
+ msgid "Note: This limit will not apply to slideshow widgets or random galleries if/when those galleries specify their own image limits"
1571
  msgstr ""
1572
 
1573
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:61
1574
+ msgid "Random widget cache duration"
1575
  msgstr ""
1576
 
1577
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:63
1578
+ msgid "The duration of time (in minutes) that \"random\" widget galleries should be cached. A setting of zero will disable caching."
1579
  msgstr ""
1580
 
1581
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:72
1582
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:80
1583
+ msgid "Use alternative method of retrieving random image galleries"
1584
  msgstr ""
1585
 
1586
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:74
1587
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:82
1588
+ msgid "Some web hosts' database servers disable or disrupt queries using 'ORDER BY RAND()' which can cause galleries to lose their randomness. NextGen provides an alternative (but not completely random) method to determine what images are fed into 'random' galleries."
1589
  msgstr ""
1590
 
1591
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:88
1592
+ msgid "Do not enqueue FontAwesome"
1593
  msgstr ""
1594
 
1595
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.miscellaneous_form.php:90
1596
+ msgid "Warning: your theme or another plugin must provide FontAwesome or your gallery displays may appear incorrectly"
 
 
1597
  msgstr ""
1598
 
1599
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.other_options_controller.php:30
1600
+ #: products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php:76
1601
+ msgid "Other Options"
1602
  msgstr ""
1603
 
1604
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:12
1605
+ msgid "Reset Options"
1606
  msgstr ""
1607
 
1608
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:20
1609
+ msgid "Reset all options"
1610
  msgstr ""
1611
 
1612
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:21
1613
+ msgid "Replace all existing options and gallery options with their default settings"
1614
  msgstr ""
1615
 
1616
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:22
1617
+ msgid "Reset settings"
1618
  msgstr ""
1619
 
1620
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.reset_form.php:23
1621
+ msgid ""
1622
+ "Reset all options to default settings?\n"
1623
+ "\n"
1624
+ "Choose [Cancel] to Stop, [OK] to proceed."
1625
  msgstr ""
1626
 
1627
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.roles_form.php:12
1628
+ msgid "Roles & Capabilities"
1629
  msgstr ""
1630
 
1631
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:17
1632
+ msgid "Styles"
1633
  msgstr ""
1634
 
1635
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:23
1636
+ msgid "Enable custom CSS"
1637
  msgstr ""
1638
 
1639
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:25
1640
+ msgid "What stylesheet would you like to use?"
1641
  msgstr ""
1642
 
1643
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:28
1644
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:165
1645
+ msgid "(Show Customization Options)"
1646
  msgstr ""
1647
 
1648
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:29
1649
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:166
1650
+ msgid "(Hide Customization Options)"
1651
  msgstr ""
1652
 
1653
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:30
1654
+ msgid "File Content:"
1655
  msgstr ""
1656
 
1657
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:31
1658
+ msgid "Changes you make to the contents will be saved to"
1659
  msgstr ""
1660
 
1661
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.styles_form.php:32
1662
+ msgid "You could edit this file if it were writable"
1663
  msgstr ""
1664
 
1665
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:17
1666
+ msgid "Thumbnail Options"
1667
  msgstr ""
1668
 
1669
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:25
1670
+ msgid "Default thumbnail dimensions:"
1671
  msgstr ""
1672
 
1673
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:26
1674
+ msgid "When generating thumbnails, what image dimensions do you desire?"
 
1675
  msgstr ""
1676
 
1677
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:29
1678
+ msgid "Set fix dimension?"
1679
  msgstr ""
1680
 
1681
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:30
1682
+ msgid "Ignore the aspect ratio, no portrait thumbnails?"
1683
+ msgstr ""
 
 
 
 
 
1684
 
1685
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:32
1686
+ msgid "Adjust Thumbnail Quality?"
 
1687
  msgstr ""
1688
 
1689
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:33
1690
+ msgid "When generating thumbnails, what image quality do you desire?"
1691
  msgstr ""
1692
 
1693
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:35
1694
+ msgid "Size List"
1695
  msgstr ""
1696
 
1697
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.thumbnail_options_form.php:36
1698
+ msgid "List of default sizes used for thumbnails and images"
1699
  msgstr ""
1700
 
1701
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:17
1702
+ msgid "Watermarks"
1703
  msgstr ""
1704
 
1705
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:46
1706
+ msgid "Using an Image"
1707
  msgstr ""
1708
 
1709
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:47
1710
+ msgid "Using Text"
1711
  msgstr ""
1712
 
1713
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:74
1714
+ msgid "An absolute or relative (to the site document root) file system path"
1715
  msgstr ""
1716
 
1717
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:76
1718
+ msgid "An absolute or relative (to the site document root) file system path or an HTTP url"
1719
  msgstr ""
1720
 
1721
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:79
1722
+ msgid "Image URL:"
1723
  msgstr ""
1724
 
1725
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:95
1726
+ msgid "Font Family:"
1727
  msgstr ""
1728
 
1729
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:97
1730
+ msgid "Font Size:"
1731
  msgstr ""
1732
 
1733
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:99
1734
+ msgid "Font Color:"
1735
  msgstr ""
1736
 
1737
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:102
1738
+ msgid "Text:"
1739
  msgstr ""
1740
 
1741
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:104
1742
+ msgid "Opacity:"
1743
  msgstr ""
1744
 
1745
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:152
1746
+ msgid "Automatically watermark images during upload:"
1747
  msgstr ""
1748
 
1749
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:153
1750
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:10
1751
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:61
1752
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:65
1753
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:69
1754
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:105
1755
+ msgid "Yes"
1756
  msgstr ""
1757
 
1758
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:154
1759
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:13
1760
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:62
1761
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:66
1762
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:70
1763
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:105
1764
+ msgid "No"
1765
  msgstr ""
1766
 
1767
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:155
1768
+ msgid "Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone."
1769
  msgstr ""
1770
 
1771
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:156
1772
+ msgid "How will you generate a watermark?"
 
1773
  msgstr ""
1774
 
1775
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:160
1776
+ msgid "Position:"
1777
  msgstr ""
1778
 
1779
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:162
1780
+ msgid "Offset:"
1781
  msgstr ""
1782
 
1783
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:168
1784
+ msgid "Preview of saved settings:"
 
 
 
 
 
1785
  msgstr ""
1786
 
1787
+ #: products/photocrati_nextgen/modules/nextgen_other_options/adapter.watermarks_form.php:169
1788
+ msgid "Refresh preview image"
 
1789
  msgstr ""
1790
 
1791
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:32
1792
+ msgid "Want a stunning, full screen, lightbox with customization options?"
 
1793
  msgstr ""
1794
 
1795
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:32
1796
+ msgid "Get the Pro Lightbox!"
1797
+ msgstr ""
 
 
 
 
 
1798
 
1799
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:38
1800
+ msgid "What must the lightbox be applied to?"
 
1801
  msgstr ""
1802
 
1803
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:42
1804
+ msgid "Only apply to NextGEN images"
1805
  msgstr ""
1806
 
1807
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:43
1808
+ msgid "Only apply to NextGEN and WordPress images"
1809
  msgstr ""
1810
 
1811
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:44
1812
+ msgid "Try to apply to all images"
1813
  msgstr ""
1814
 
1815
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/lightbox_library_tab.php:45
1816
+ msgid "Try to apply to all images that link to image files"
1817
  msgstr ""
1818
 
1819
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:35
1820
+ msgid "Place any custom stylesheets in <strong>wp-content/ngg_styles</strong>"
1821
  msgstr ""
1822
 
1823
+ #: products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php:38
1824
+ msgid "All stylesheets must contain a <a href='#' onclick='%s'>file header</a>"
1825
  msgstr ""
1826
 
1827
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:23
1828
+ msgid "Upgrade to Pro"
1829
  msgstr ""
1830
 
1831
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:35
1832
+ msgid "Create Stunning Galleries with NextGEN Pro"
1833
  msgstr ""
1834
 
1835
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:36
1836
+ msgid "Sell Photos + Adobe Lightroom"
1837
  msgstr ""
1838
 
1839
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:37
1840
+ msgid "Introducing the most powerful gallery system ever made for WordPress. Watch our 30 second video, or click below to learn more about NextGEN premium extensions and support."
1841
  msgstr ""
1842
 
1843
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:38
1844
+ msgid "You're awesome! You've already got NextGEN Plus. But why not go all the way? With NextGEN Pro, you can sell print and digital downloads, provide proofing galleries for clients, manage galleries directly from Adobe Lightroom, and more."
1845
  msgstr ""
1846
 
1847
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:39
1848
+ msgid "Psst...watch the video ->"
1849
  msgstr ""
1850
 
1851
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:40
1852
+ msgid "Get Premium Extensions"
1853
  msgstr ""
1854
 
1855
+ #: products/photocrati_nextgen/modules/nextgen_pro_upgrade/adapter.nextgen_pro_upgrade_controller.php:41
1856
+ msgid "Learn More"
1857
  msgstr ""
1858
 
1859
+ #: products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php:75
1860
+ msgid "Related Images"
 
 
 
1861
  msgstr ""
1862
 
1863
+ #: products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php:95
1864
+ msgid "View Slideshow"
 
1865
  msgstr ""
1866
 
1867
+ #: products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php:96
1868
+ msgid "View Thumbnails"
1869
  msgstr ""
1870
 
1871
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:48
1872
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:138
1873
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:344
1874
+ msgid "Authentication Failed."
1875
  msgstr ""
1876
 
1877
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:126
1878
+ msgid "Could not determine FTP path."
1879
  msgstr ""
1880
 
1881
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:131
1882
+ msgid "Could not connect to FTP to determine path."
 
 
 
1883
  msgstr ""
1884
 
1885
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:326
1886
+ msgid "Job could not be added."
1887
  msgstr ""
1888
 
1889
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:332
1890
+ msgid "Authorization Failed."
1891
  msgstr ""
1892
 
1893
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:338
1894
+ msgid "No task list was specified."
 
1895
  msgstr ""
1896
 
1897
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:401
1898
+ msgid "Job execution is locked."
1899
  msgstr ""
1900
 
1901
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:449
1902
+ msgid "Job list is finished."
1903
  msgstr ""
1904
 
1905
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:454
1906
+ msgid "Job list is unfinished."
 
1907
  msgstr ""
1908
 
1909
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/adapter.nextgen_api_ajax.php:463
1910
+ msgid "Job list is empty."
1911
  msgstr ""
1912
 
1913
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:517
1914
+ msgid "Gallery creation failed for \"%1$s\"%2$s."
1915
  msgstr ""
1916
 
1917
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:540
1918
+ msgid "Failed to remove gallery (%1$s)."
1919
  msgstr ""
1920
 
1921
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:619
1922
+ msgid "Could not delete image file(s) from disk (%1$s)."
1923
  msgstr ""
1924
 
1925
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:623
1926
+ msgid "Could not remove image from gallery (%1$s)."
1927
  msgstr ""
1928
 
1929
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:635
1930
+ msgid "Could not remove image because image was not found (%1$s)."
 
1931
  msgstr ""
1932
 
1933
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:652
1934
+ msgid "Could not obtain data for image (%1$s)."
1935
  msgstr ""
1936
 
1937
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:665
1938
+ msgid "Could not find image file for image (%1$s). Using FTP Upload Method in Multisite is not recommended."
1939
  msgstr ""
1940
 
1941
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:667
1942
+ msgid "Could not find image file for image (%1$s)."
1943
  msgstr ""
1944
 
1945
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:688
1946
+ msgid "No space available for image (%1$s)."
1947
  msgstr ""
1948
 
1949
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:691
1950
+ msgid " (%1$s)."
1951
  msgstr ""
1952
 
1953
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:694
1954
+ msgid "No image library present, image uploads will fail (%1$s)."
1955
  msgstr ""
1956
 
1957
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:699
1958
+ msgid "Inadequate system permissions to write image (%1$s)."
1959
  msgstr ""
1960
 
1961
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:702
1962
+ msgid "Requested image with id (%2$s) doesn't exist (%1$s)."
1963
  msgstr ""
1964
 
1965
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:745
1966
+ msgid "Could not access file system for gallery (%1$s)."
1967
  msgstr ""
1968
 
1969
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:753
1970
+ msgid "Failed to save modified gallery (%1$s). "
1971
  msgstr ""
1972
 
1973
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:760
1974
+ msgid "Could not find gallery (%1$s)."
1975
+ msgstr ""
 
 
1976
 
1977
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:787
1978
+ msgid "No gallery was specified to edit."
1979
+ msgstr ""
 
 
1980
 
1981
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:833
1982
+ msgid "Album creation failed."
1983
  msgstr ""
1984
 
1985
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:853
1986
+ msgid "Failed to remove album (%1$s)."
1987
  msgstr ""
1988
 
1989
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:909
1990
+ msgid "Failed to save modified album (%1$s)."
1991
  msgstr ""
1992
 
1993
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:915
1994
+ msgid "Could not find album (%1$s)."
1995
  msgstr ""
1996
 
1997
+ #: products/photocrati_nextgen/modules/nextgen_xmlrpc/class.nextgen_api.php:932
1998
+ msgid "No album was specified to edit."
1999
  msgstr ""
2000
 
2001
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:171
2002
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:202
2003
+ msgid "Overview"
2004
  msgstr ""
2005
 
2006
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:174
2007
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:210
2008
+ msgid "Manage Tags"
2009
  msgstr ""
2010
 
2011
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:184
2012
+ msgid "Network settings"
 
2013
  msgstr ""
2014
 
2015
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:291
2016
+ msgid "You do not have the correct permission"
 
 
 
2017
  msgstr ""
2018
 
2019
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:292
2020
+ msgid "Unexpected Error"
 
2021
  msgstr ""
2022
 
2023
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/admin.php:293
2024
+ msgid "A failure occurred"
 
2025
  msgstr ""
2026
 
2027
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:208
2028
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:252
2029
+ msgid "Updated Successfully"
 
 
 
 
2030
  msgstr ""
2031
 
2032
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:226
2033
+ msgid "Album deleted"
2034
  msgstr ""
2035
 
2036
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:443
2037
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:514
2038
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:56
2039
+ msgid "Edit Album"
2040
  msgstr ""
2041
 
2042
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:492
2043
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:602
2044
+ msgid "Select album"
2045
  msgstr ""
2046
 
2047
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:494
2048
+ msgid "No album selected"
2049
  msgstr ""
2050
 
2051
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:509
2052
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:181
2053
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:91
2054
+ msgid "Update"
 
 
2055
  msgstr ""
2056
 
2057
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:526
2058
+ msgid "Add new album"
2059
  msgstr ""
2060
 
2061
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:528
2062
+ msgid "Add"
 
2063
  msgstr ""
2064
 
2065
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:539
2066
+ msgid "Show / hide used galleries"
2067
  msgstr ""
2068
 
2069
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:539
2070
+ msgid "Show all"
2071
  msgstr ""
2072
 
2073
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540
2074
+ msgid "Maximize the widget content"
2075
  msgstr ""
2076
 
2077
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:540
2078
+ msgid "Maximize"
2079
  msgstr ""
2080
 
2081
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:541
2082
+ msgid "Minimize the widget content"
 
2083
  msgstr ""
2084
 
2085
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:541
2086
+ msgid "Minimize"
2087
  msgstr ""
2088
 
2089
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:543
2090
+ msgid "After you create and select an album, you can drag and drop a gallery or another album into your new album below."
 
2091
  msgstr ""
2092
 
2093
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:554
2094
+ msgid "Album ID"
2095
  msgstr ""
2096
 
2097
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:567
2098
+ msgid "No album selected!"
2099
  msgstr ""
2100
 
2101
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:579
2102
+ msgid "Select gallery"
2103
  msgstr ""
2104
 
2105
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:630
2106
+ msgid "Album name:"
2107
  msgstr ""
2108
 
2109
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:636
2110
+ msgid "Album description:"
2111
  msgstr ""
2112
 
2113
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:642
2114
+ msgid "Select a preview image:"
2115
  msgstr ""
2116
 
2117
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:643
2118
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_preview_image_field.php:3
2119
+ msgid "No picture"
2120
  msgstr ""
2121
 
2122
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:655
2123
+ msgid "Page Link to"
2124
  msgstr ""
2125
 
2126
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:665
2127
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_link_to_page_field.php:3
2128
+ msgid "Not linked"
2129
  msgstr ""
2130
 
2131
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:674
2132
+ msgid "There are no pages to link to"
2133
  msgstr ""
2134
 
2135
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:684
2136
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:456
2137
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:516
2138
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:585
2139
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:607
2140
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:651
2141
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:695
2142
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:742
2143
+ msgid "OK"
2144
  msgstr ""
2145
 
2146
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:686
2147
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:460
2148
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:520
2149
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:589
2150
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:610
2151
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:654
2152
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:698
2153
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:745
2154
+ msgid "Cancel"
2155
  msgstr ""
2156
 
2157
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:780
2158
+ msgid "Name"
2159
  msgstr ""
2160
 
2161
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/album.php:782
2162
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:229
2163
+ msgid "Page"
2164
  msgstr ""
2165
 
2166
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:129
2167
+ msgid "Select with the mouse the area for the new thumbnail"
2168
  msgstr ""
2169
 
2170
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:143
2171
+ msgid "Thumbnail updated"
2172
  msgstr ""
2173
 
2174
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:148
2175
+ msgid "Error updating thumbnail"
2176
  msgstr ""
2177
 
2178
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:161
2179
+ msgid "Select the area for the thumbnail from the picture below."
2180
  msgstr ""
2181
 
2182
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/edit-thumbnail.php:165
2183
+ msgid "Select the area for the thumbnail from the picture on the left."
2184
  msgstr ""
2185
 
2186
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:44
2187
+ msgid "No valid gallery name!"
2188
  msgstr ""
2189
 
2190
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55
2191
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:83
2192
+ msgid "Directory"
2193
  msgstr ""
2194
 
2195
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:55
2196
+ msgid "didn't exist. Please create first the main gallery folder "
2197
  msgstr ""
2198
 
2199
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:56
2200
+ msgid "Check this link, if you didn't know how to set the permission :"
2201
  msgstr ""
2202
 
2203
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:79
2204
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:88
2205
+ msgid "Unable to create directory "
2206
  msgstr ""
2207
 
2208
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:83
2209
+ msgid "is not writeable !"
2210
  msgstr ""
2211
 
2212
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:92
2213
+ msgid "The server setting Safe-Mode is on !"
 
2214
  msgstr ""
2215
 
2216
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:93
2217
+ msgid "If you have problems, please create directory"
2218
  msgstr ""
2219
 
2220
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:94
2221
+ msgid "and the thumbnails directory"
2222
  msgstr ""
2223
 
2224
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:94
2225
+ msgid "with permission 777 manually !"
2226
  msgstr ""
2227
 
2228
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:121
2229
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:625
2230
+ msgid "Gallery successfully created. <a href=\"%s\" target=\"_blank\">Manage gallery</a>"
2231
  msgstr ""
2232
 
2233
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:187
2234
+ msgid "Error while creating thumbnail."
2235
  msgstr ""
2236
 
2237
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:240
2238
+ msgid "Error while resizing image."
2239
  msgstr ""
2240
 
2241
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:322
2242
+ msgid "Error while rotating image."
2243
  msgstr ""
2244
 
2245
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:356
2246
+ msgid "Error while applying watermark to image."
2247
  msgstr ""
2248
 
2249
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:495
2250
+ msgid "(Error : Couldn't not update data base)"
2251
  msgstr ""
2252
 
2253
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:502
2254
+ msgid "(Error : Couldn't not update meta data)"
2255
  msgstr ""
2256
 
2257
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:511
2258
+ msgid "(Error : Couldn't not find image)"
2259
  msgstr ""
2260
 
2261
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:603
2262
+ msgid "Directory <strong>%s</strong> doesn&#96;t exist!"
2263
  msgstr ""
2264
 
2265
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:612
2266
+ msgid "Directory <strong>%s</strong> contains no pictures"
2267
  msgstr ""
2268
 
2269
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:631
2270
+ msgid "Database error. Could not add gallery!"
2271
  msgstr ""
2272
 
2273
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:639
2274
+ msgid "Gallery <strong>%s</strong> successfully created!"
2275
+ msgid_plural "Galleries <strong>%s</strong> successfully created!"
2276
+ msgstr[0] ""
2277
+ msgstr[1] ""
2278
+
2279
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:675
2280
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:119
2281
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:263
2282
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:302
2283
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:490
2284
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:664
2285
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:742
2286
+ msgid "Create new thumbnails"
2287
  msgstr ""
2288
 
2289
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:678
2290
+ msgid "%s picture successfully added"
2291
+ msgid_plural "%s pictures successfully added"
2292
+ msgstr[0] ""
2293
+ msgstr[1] ""
2294
+
2295
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/functions.php:680
2296
+ msgid "Edit gallery"
2297
  msgstr ""
2298
 
2299
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/install.php:72
2300
+ msgid "NextGEN Gallery : Tables could not created, please check your database settings"
2301
  msgstr ""
2302
 
2303
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:107
2304
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:270
2305
+ msgid "No images selected"
2306
  msgstr ""
2307
 
2308
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:115
2309
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:264
2310
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:298
2311
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:491
2312
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:645
2313
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:726
2314
+ msgid "Resize images"
2315
  msgstr ""
2316
 
2317
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:125
2318
+ msgid ""
2319
+ "You are about to start the bulk edit for %s galleries \n"
2320
+ " \n"
2321
+ " 'Cancel' to stop, 'OK' to proceed."
2322
  msgstr ""
2323
 
2324
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:170
2325
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:281
2326
+ msgid "Add new gallery"
2327
  msgstr ""
2328
 
2329
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:214
2330
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:217
2331
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:351
2332
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:362
2333
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:366
2334
+ msgid "Search Images"
2335
  msgstr ""
2336
 
2337
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:231
2338
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:234
2339
+ msgid "Search Galleries"
2340
  msgstr ""
2341
 
2342
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:260
2343
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:488
2344
+ msgid "Bulk actions"
 
2345
  msgstr ""
2346
 
2347
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:262
2348
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:489
2349
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:574
2350
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:690
2351
+ msgid "Set watermark"
2352
  msgstr ""
2353
 
2354
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:265
2355
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:494
2356
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:579
2357
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:710
2358
+ msgid "Import metadata"
2359
  msgstr ""
2360
 
2361
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:266
2362
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:492
2363
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:569
2364
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:687
2365
+ msgid "Recover from backup"
2366
  msgstr ""
2367
 
2368
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:272
2369
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:506
2370
+ msgid "Apply"
2371
  msgstr ""
2372
 
2373
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:366
2374
+ msgid "Deleted user"
 
2375
  msgstr ""
2376
 
2377
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:401
2378
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:561
2379
+ msgid "No entries found"
2380
  msgstr ""
2381
 
2382
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:434
2383
+ msgid "New Gallery"
 
 
2384
  msgstr ""
2385
 
2386
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:441
2387
+ msgid "Create a new , empty gallery below the folder"
 
2388
  msgstr ""
2389
 
2390
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:445
2391
+ msgid "Allowed characters for file and folder names are"
 
2392
  msgstr ""
2393
 
2394
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:495
2395
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:673
2396
+ msgid "Resize Images to"
2397
  msgstr ""
2398
 
2399
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:508
2400
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:686
2401
+ msgid "Width x height (in pixel). NextGEN Gallery will keep ratio size"
2402
  msgstr ""
2403
 
2404
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:559
2405
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:717
2406
+ msgid "Width x height (in pixel)"
2407
  msgstr ""
2408
 
2409
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:568
2410
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:725
2411
+ msgid "Set fix dimension"
2412
  msgstr ""
2413
 
2414
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:576
2415
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:733
2416
+ msgid "Ignore the aspect ratio, no portrait thumbnails"
2417
  msgstr ""
2418
 
2419
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:652
2420
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:827
2421
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:274
2422
+ msgid "Description"
2423
  msgstr ""
2424
 
2425
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php:654
2426
+ msgid "Page ID"
 
2427
  msgstr ""
2428
 
2429
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:51
2430
+ msgid "Gallery not found."
 
2431
  msgstr ""
2432
 
2433
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:58
2434
+ msgid "Sorry, you have no access here"
 
2435
  msgstr ""
2436
 
2437
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:278
2438
+ msgid "Copy image to..."
 
2439
  msgstr ""
2440
 
2441
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:282
2442
+ msgid "Move image to..."
 
2443
  msgstr ""
2444
 
2445
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:286
2446
+ msgid "Add new tags"
 
2447
  msgstr ""
2448
 
2449
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:290
2450
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:500
2451
+ msgid "Delete tags"
2452
  msgstr ""
2453
 
2454
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:294
2455
+ msgid "Overwrite"
 
2456
  msgstr ""
2457
 
2458
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:307
2459
+ msgid ""
2460
+ "You are about to start the bulk edit for %s images \n"
2461
+ " \n"
2462
+ " 'Cancel' to stop, 'OK' to proceed."
2463
  msgstr ""
2464
 
2465
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:341
2466
+ msgid "Search results for &#8220;%s&#8221;"
 
2467
  msgstr ""
2468
 
2469
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:392
2470
+ msgid "Gallery: "
2471
+ msgid_plural "Galleries: "
2472
+ msgstr[0] ""
2473
+ msgstr[1] ""
2474
+
2475
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:430
2476
+ msgid "Scan Folder for new images"
2477
  msgstr ""
2478
 
2479
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:460
2480
+ msgid " 25"
 
2481
  msgstr ""
2482
 
2483
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:461
2484
+ msgid " 50"
 
2485
  msgstr ""
2486
 
2487
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:462
2488
+ msgid " 75"
 
2489
  msgstr ""
2490
 
2491
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:463
2492
+ msgid "100"
 
2493
  msgstr ""
2494
 
2495
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:464
2496
+ msgid "200"
 
2497
  msgstr ""
2498
 
2499
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:465
2500
+ msgid "All"
 
2501
  msgstr ""
2502
 
2503
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:484
2504
+ msgid "Images per page:"
2505
  msgstr ""
2506
 
2507
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:493
2508
+ msgid "Delete images"
2509
  msgstr ""
2510
 
2511
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:495
2512
+ msgid "Rotate images clockwise"
2513
  msgstr ""
2514
 
2515
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:496
2516
+ msgid "Rotate images counter-clockwise"
2517
  msgstr ""
2518
 
2519
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:497
2520
+ msgid "Copy to..."
2521
  msgstr ""
2522
 
2523
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:498
2524
+ msgid "Move to..."
 
 
 
2525
  msgstr ""
2526
 
2527
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:499
2528
+ msgid "Add tags"
2529
  msgstr ""
2530
 
2531
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:501
2532
+ msgid "Overwrite tags"
2533
  msgstr ""
2534
 
2535
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:513
2536
+ msgid "Sort gallery"
2537
  msgstr ""
2538
 
2539
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:594
2540
+ msgid "Enter the tags"
2541
  msgstr ""
2542
 
2543
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:629
2544
+ msgid "Select the destination gallery:"
2545
  msgstr ""
2546
 
2547
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:825
2548
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:158
2549
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:295
2550
+ msgid "Thumbnail"
2551
  msgstr ""
2552
 
2553
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:827
2554
+ msgid "Alt &amp; Title Text"
2555
  msgstr ""
2556
 
2557
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php:828
2558
+ msgid "Tags (comma separated list)"
2559
  msgstr ""
2560
 
2561
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:40
2562
+ msgid "Sort order changed"
2563
  msgstr ""
2564
 
2565
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:105
2566
+ msgid "Sort Gallery"
2567
  msgstr ""
2568
 
2569
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:115
2570
+ msgid "Update Sort Order"
2571
  msgstr ""
2572
 
2573
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:118
2574
+ msgid "Back to gallery"
2575
  msgstr ""
2576
 
2577
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:123
2578
+ msgid "Presort"
2579
  msgstr ""
2580
 
2581
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:124
2582
+ msgid "Unsorted"
2583
  msgstr ""
2584
 
2585
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage-sort.php:127
2586
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:270
2587
+ msgid "Alt/Title text"
2588
  msgstr ""
2589
 
2590
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:88
2591
+ msgid "deleted successfully"
2592
  msgstr ""
2593
 
2594
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:103
2595
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:112
2596
+ msgid "Operation successful. Please clear your browser cache."
2597
  msgstr ""
2598
 
2599
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:153
2600
+ msgid "ID"
2601
  msgstr ""
2602
 
2603
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:168
2604
+ msgid "Alt & Title Text / Description"
2605
  msgstr ""
2606
 
2607
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:211
2608
+ msgid "Exclude ?"
2609
  msgstr ""
2610
 
2611
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:297
2612
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:299
2613
+ msgid "View"
2614
  msgstr ""
2615
 
2616
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:307
2617
+ msgid "Show meta data"
2618
  msgstr ""
2619
 
2620
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:308
2621
+ msgid "Meta"
2622
  msgstr ""
2623
 
2624
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:316
2625
+ msgid "Customize thumbnail"
2626
  msgstr ""
2627
 
2628
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:317
2629
+ msgid "Edit thumb"
2630
  msgstr ""
2631
 
2632
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:325
2633
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:326
2634
+ msgid "Rotate"
2635
  msgstr ""
2636
 
2637
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:337
2638
+ msgid "Recover image from backup"
2639
  msgstr ""
2640
 
2641
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:338
2642
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:339
2643
+ msgid "Recover"
2644
  msgstr ""
2645
 
2646
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:356
2647
+ msgid "Delete image"
2648
  msgstr ""
2649
 
2650
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:394
2651
+ msgid "Title:"
2652
  msgstr ""
2653
 
2654
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:400
2655
+ msgid "Description:"
2656
  msgstr ""
2657
 
2658
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:406
2659
+ msgid "Gallery path:"
2660
  msgstr ""
2661
 
2662
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:421
2663
+ msgid "Link to page:"
 
2664
  msgstr ""
2665
 
2666
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:422
2667
+ msgid "Albums will link this gallery to the selected page"
 
2668
  msgstr ""
2669
 
2670
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:427
2671
+ msgid "Preview image:"
2672
  msgstr ""
2673
 
2674
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:433
2675
+ msgid "Create new page:"
2676
  msgstr ""
2677
 
2678
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:592
2679
+ msgid "One or more \"../\" in Gallery paths could be unsafe and NextGen Gallery will not delete gallery %s automatically"
2680
  msgstr ""
2681
 
2682
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:604
2683
+ msgid "Gallery deleted successfully "
2684
  msgstr ""
2685
 
2686
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:614
2687
+ msgid "Cheatin&#8217; uh?"
2688
  msgstr ""
2689
 
2690
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:681
2691
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:684
2692
+ msgid "Rotate images"
2693
  msgstr ""
2694
 
2695
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:706
2696
+ msgid "Pictures deleted successfully "
2697
  msgstr ""
2698
 
2699
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:763
2700
+ msgid "Copied %1$s picture(s) to gallery: %2$s ."
2701
  msgstr ""
2702
 
2703
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:768
2704
+ msgid "Failed to copy images"
2705
  msgstr ""
2706
 
2707
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:783
2708
+ msgid "Moved %1$s picture(s) to gallery: %2$s ."
2709
  msgstr ""
2710
 
2711
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:788
2712
+ msgid "Failed to move images"
2713
  msgstr ""
2714
 
2715
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:835
2716
+ msgid "Tags changed"
 
 
 
2717
  msgstr ""
2718
 
2719
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:894
2720
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:42
2721
+ msgid "Updated successfully"
2722
  msgstr ""
2723
 
2724
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:934
2725
+ msgid "New gallery page ID"
2726
  msgstr ""
2727
 
2728
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/manage.php:934
2729
+ msgid "created"
2730
  msgstr ""
2731
 
2732
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:195
2733
+ msgid "No gallery"
2734
  msgstr ""
2735
 
2736
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:208
2737
+ msgid "Select &#187;"
2738
  msgstr ""
2739
 
2740
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:258
2741
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:15
2742
+ msgid "Show"
2743
  msgstr ""
2744
 
2745
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:259
2746
+ msgid "Hide"
2747
  msgstr ""
2748
 
2749
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:264
2750
+ msgid "Image ID:"
2751
  msgstr ""
2752
 
2753
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:291
2754
+ msgid "Size"
2755
  msgstr ""
2756
 
2757
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:299
2758
+ msgid "Singlepic"
2759
  msgstr ""
2760
 
2761
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/media-upload.php:325
2762
+ msgid "Save all changes"
2763
  msgstr ""
2764
 
2765
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:25
2766
+ msgid "Not set"
2767
  msgstr ""
2768
 
2769
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:28
2770
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:32
2771
+ msgid "On"
2772
  msgstr ""
2773
 
2774
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:29
2775
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:33
2776
+ msgid "Off"
2777
  msgstr ""
2778
 
2779
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:38
2780
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:42
2781
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:46
2782
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:50
2783
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:54
2784
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:58
2785
+ msgid "N/A"
2786
  msgstr ""
2787
 
2788
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:57
2789
+ msgid " MByte"
2790
  msgstr ""
2791
 
2792
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:73
2793
+ msgid "Operating System"
2794
  msgstr ""
2795
 
2796
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:74
2797
+ msgid "Server"
2798
  msgstr ""
2799
 
2800
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:75
2801
+ msgid "Memory usage"
2802
  msgstr ""
2803
 
2804
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:76
2805
+ msgid "MYSQL Version"
2806
  msgstr ""
2807
 
2808
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:77
2809
+ msgid "SQL Mode"
2810
  msgstr ""
2811
 
2812
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:78
2813
+ msgid "PHP Version"
2814
  msgstr ""
2815
 
2816
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:79
2817
+ msgid "PHP Safe Mode"
2818
  msgstr ""
2819
 
2820
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:80
2821
+ msgid "PHP Allow URL fopen"
2822
  msgstr ""
2823
 
2824
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:81
2825
+ msgid "PHP Memory Limit"
2826
  msgstr ""
2827
 
2828
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:82
2829
+ msgid "PHP Max Upload Size"
2830
  msgstr ""
2831
 
2832
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:83
2833
+ msgid "PHP Max Post Size"
2834
  msgstr ""
2835
 
2836
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:84
2837
+ msgid "PCRE Backtracking Limit"
2838
  msgstr ""
2839
 
2840
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:85
2841
+ msgid "PHP Max Script Execute Time"
2842
  msgstr ""
2843
 
2844
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:86
2845
+ msgid "PHP Exif support"
2846
  msgstr ""
2847
 
2848
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:87
2849
+ msgid "PHP IPTC support"
2850
  msgstr ""
2851
 
2852
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:88
2853
+ msgid "PHP XML support"
2854
  msgstr ""
2855
 
2856
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:111
2857
+ msgid "No GD support"
2858
  msgstr ""
2859
 
2860
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:143
2861
+ msgid "%1$sMB Allowed"
2862
  msgstr ""
2863
 
2864
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:144
2865
+ msgid "%1$sMB (%2$s%%) Used"
2866
  msgstr ""
2867
 
2868
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:180
2869
+ msgid "Welcome to NextGEN Gallery"
2870
  msgstr ""
2871
 
2872
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:183
2873
+ msgid "Need help getting started? "
2874
  msgstr ""
2875
 
2876
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:183
2877
+ msgid "Launch Gallery Wizard"
 
 
 
2878
  msgstr ""
2879
 
2880
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:187
2881
+ msgid "Welcome"
2882
  msgstr ""
2883
 
2884
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:221
2885
+ msgid "We have a growing list of video tutorials to get you started. Watch some below or head over to <a href=\"%s\" target=\"_blank\">NextGEN Gallery University on YouTube</a> to see all available vidoes."
2886
  msgstr ""
2887
 
2888
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:254
2889
+ msgid "Want more? Head over to <a href=\"%s\" target=\"_blank\">NextGEN Gallery University on YouTube</a>."
2890
  msgstr ""
2891
 
2892
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:262
2893
+ msgid "The most powerful gallery system ever built for WordPress. "
2894
  msgstr ""
2895
 
2896
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:262
2897
+ msgid "Gorgeous new gallery displays, image protection, full screen lightbox, commenting and social sharing for individual images, proofing, ecommerce, digital downloads, and more."
2898
  msgstr ""
2899
 
2900
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:263
2901
+ msgid "Get NextGEN Pro Now"
2902
  msgstr ""
2903
 
2904
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:273
2905
+ msgid "Meet the new series of Genesis child themes by Imagely: gorgeous, responsive image-centric themes for photographers or anyone with visually rich websites."
2906
  msgstr ""
2907
 
2908
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:274
2909
+ msgid "CLICK TO LEARN MORE:"
2910
  msgstr ""
2911
 
2912
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:329
2913
+ msgid "Meet the Imagely Product Ambassadors"
2914
  msgstr ""
2915
 
2916
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:330
2917
+ msgid "NextGEN Gallery and other Imagely products are used by some of the best photographers in the world. Meet some of the Imagely Ambassadors who are putting Imagely and NextGEN Gallery to work professionally."
2918
  msgstr ""
2919
 
2920
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:335
2921
+ msgid "Jeff and Erin are a luxury husband and wife photography team who deeply love each other and their photography clients. They shoot weddings and engagements all over the U.S. and beyond. With three photography businesses that serve different clientele, they have unique insights into business strategies and are passionate about improving the day to day lives of other photographers."
2922
  msgstr ""
2923
 
2924
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:340
2925
+ msgid "Tamara Lackey is a renowned professional photographer, speaker, and author. Her authentic lifestyle photography, from children’s portraits to celebrity portraits, is praised within her industry and published internationally. She is a Nikon USA Ambassador, the host of The reDefine Show web series, and the co-founder of the non-profit charitable organization, Beautiful Together, in support of children waiting for families."
2926
  msgstr ""
2927
 
2928
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:345
2929
+ msgid "Colby is a photographer, photo educator, and author specializing in landscape, travel and humanitarian photography. With an audience reaching millions, Colby partners on social influencer marketing campaigns with some of the biggest companies and destinations in the world, including Sony, Samsung, Toshiba, Iceland Naturally, Jordan Tourism Board, Australia.com, Visit California and more."
2930
  msgstr ""
2931
 
2932
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:353
2933
+ msgid "Jared is a professional wedding and lifestyle photographer. He also travels the world giving lectures and workshops on photography, lighting, and post-production efficiency and workflow. His interactive style, and attention to detail and craft make him an entertaining and demanding photography instructor."
2934
  msgstr ""
2935
 
2936
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:358
2937
+ msgid "Brian is a professional photographer, author, and educator. He fuses landscape & travel photography with experiential storytelling and practical instructing to help others grow creatively. He is also a Sony Artisan of Imagery, a Zeiss Lens Ambassador, a Formatt-Hitech Featured Photographer, and a member of G-Technology’s G-Team."
2938
  msgstr ""
2939
 
2940
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:363
2941
+ msgid "Christine famously coined the term WordPress. She is an author, speaker, business coach, and story strategist who specializes in helping creatives celebrate their story online through blogging and social media. When not offering actionable know-how to businesses, she can be found taking long road trips across North America in her Mini Cooper."
2942
  msgstr ""
2943
 
2944
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:371
2945
+ msgid "Named one of the Top 10 Wedding Photographers in the World by American Photo magazine, David is a celebrated photographer and educator. He is also a mountain man with a enviable lifestyle: from his base in rural Washington, he travels all over the world teaching workshops, while sharing lessons with 16,000 photographers in the Abstract Canvas Facebook group."
 
2946
  msgstr ""
2947
 
2948
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:382
2949
+ msgid "When contacting support, consider copying and pasting this information in your support request. It helps us troubleshoot more quickly."
2950
  msgstr ""
2951
 
2952
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:386
2953
+ msgid "Server Settings"
2954
  msgstr ""
2955
 
2956
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/overview.php:392
2957
+ msgid "Graphic Library"
2958
  msgstr ""
2959
 
2960
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:27
2961
+ msgid "Select the lowest role which should be able to access the following capabilities. NextGEN Gallery supports the standard roles from WordPress."
2962
  msgstr ""
2963
 
2964
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:32
2965
+ msgid "Main NextGEN Gallery overview"
2966
  msgstr ""
2967
 
2968
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:36
2969
+ msgid "Use TinyMCE Button / Upload tab"
 
2970
  msgstr ""
2971
 
2972
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:40
2973
+ msgid "Add gallery / Upload images"
2974
  msgstr ""
2975
 
2976
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:44
2977
+ msgid "Manage gallery"
2978
  msgstr ""
2979
 
2980
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:48
2981
+ msgid "Manage others gallery"
2982
  msgstr ""
2983
 
2984
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:52
2985
+ msgid "Manage tags"
2986
  msgstr ""
2987
 
2988
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:60
2989
+ msgid "Change style"
2990
  msgstr ""
2991
 
2992
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:64
2993
+ msgid "Change options"
2994
  msgstr ""
2995
 
2996
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/roles.php:68
2997
+ msgid "NextGEN Attach Interface"
2998
  msgstr ""
2999
 
3000
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:53
3001
+ msgid "Image rotated"
3002
  msgstr ""
3003
 
3004
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:55
3005
+ msgid "Error rotating thumbnail"
3006
  msgstr ""
3007
 
3008
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:83
3009
+ msgid "90&deg; clockwise"
3010
  msgstr ""
3011
 
3012
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:84
3013
+ msgid "90&deg; counter-clockwise"
3014
  msgstr ""
3015
 
3016
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:85
3017
+ msgid "Flip vertically"
3018
  msgstr ""
3019
 
3020
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/rotate.php:86
3021
+ msgid "Flip horizontally"
3022
  msgstr ""
3023
 
3024
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:29
3025
+ msgid "Meta Data"
3026
  msgstr ""
3027
 
3028
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:34
3029
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:63
3030
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:93
3031
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:120
3032
+ msgid "Tag"
3033
  msgstr ""
3034
 
3035
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:35
3036
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:64
3037
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:94
3038
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:121
3039
+ msgid "Value"
3040
  msgstr ""
3041
 
3042
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:52
3043
+ msgid "No meta data saved"
3044
  msgstr ""
3045
 
3046
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:58
3047
+ msgid "EXIF Data"
3048
  msgstr ""
3049
 
3050
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:82
3051
+ msgid "No exif data"
3052
  msgstr ""
3053
 
3054
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:89
3055
+ msgid "IPTC Data"
3056
  msgstr ""
3057
 
3058
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/showmeta.php:116
3059
+ msgid "XMP Data"
3060
  msgstr ""
3061
 
3062
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:42
3063
+ msgid "Most popular"
3064
  msgstr ""
3065
 
3066
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:43
3067
+ msgid "Least used"
3068
  msgstr ""
3069
 
3070
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:44
3071
+ msgid "Alphabetical"
3072
  msgstr ""
3073
 
3074
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:103
3075
+ msgid "Manage image tags"
3076
  msgstr ""
3077
 
3078
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:111
3079
+ msgid "Search Tags"
3080
  msgstr ""
3081
 
3082
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:118
3083
+ msgid "Go"
3084
  msgstr ""
3085
 
3086
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:123
3087
+ msgid "Sort Tags"
3088
  msgstr ""
3089
 
3090
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:158
3091
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:162
3092
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:175
3093
+ msgid "Previous tags"
3094
  msgstr ""
3095
 
3096
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:171
3097
+ msgid "Next tags"
3098
  msgstr ""
3099
 
3100
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:183
3101
+ msgid "Rename Tag"
3102
  msgstr ""
3103
 
3104
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:191
3105
+ msgid "Enter the tag to rename and its new value. You can use this feature to merge tags too. Click \"Rename\" and all posts which use this tag will be updated. You can specify multiple tags to rename by separating them with commas."
3106
  msgstr ""
3107
 
3108
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:195
3109
+ msgid "Tag(s) to rename:"
3110
  msgstr ""
3111
 
3112
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:199
3113
+ msgid "New tag name(s):"
3114
  msgstr ""
3115
 
3116
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:202
3117
+ msgid "Rename"
3118
  msgstr ""
3119
 
3120
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:208
3121
+ msgid "Delete Tag"
3122
  msgstr ""
3123
 
3124
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:216
3125
+ msgid "Enter the name of the tag to delete. This tag will be removed from all posts. You can specify multiple tags to delete by separating them with commas."
3126
  msgstr ""
3127
 
3128
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:220
3129
+ msgid "Tag(s) to delete:"
3130
  msgstr ""
3131
 
3132
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:229
3133
+ msgid "Edit Tag Slug"
3134
  msgstr ""
3135
 
3136
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:237
3137
+ msgid "Enter the tag name to edit and its new slug. This will be used in tagcloud links. <a href=\"http://codex.wordpress.org/Glossary#Slug\" target=\"_blank\">Slug definition</a>. You can specify multiple tags to rename by separating them with commas."
3138
  msgstr ""
3139
 
3140
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:241
3141
+ msgid "Tag(s) to match:"
3142
  msgstr ""
3143
 
3144
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/tags.php:245
3145
+ msgid "Slug(s) to set:"
3146
  msgstr ""
3147
 
3148
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:3
3149
+ msgid "Main Page (no parent)"
3150
  msgstr ""
3151
 
3152
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/templates/manage_gallery/gallery_create_page_field.php:10
3153
+ msgid "Add page"
3154
  msgstr ""
3155
 
3156
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/thumbnails-template.php:103
3157
+ msgid "These are maximum values"
 
3158
  msgstr ""
3159
 
3160
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:59
3161
+ msgid "Network Options"
3162
  msgstr ""
3163
 
3164
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:65
3165
+ msgid "Gallery path"
3166
  msgstr ""
3167
 
3168
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:67
3169
+ msgid "This is the default path for all blogs. With the placeholder %BLOG_ID% you can organize the folder structure better."
3170
  msgstr ""
3171
 
3172
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:68
3173
+ msgid "The default setting should be %s"
3174
  msgstr ""
3175
 
3176
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:72
3177
+ msgid "Enable upload quota check"
3178
  msgstr ""
3179
 
3180
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:74
3181
+ msgid "Should work if the gallery is bellow the blog.dir"
3182
  msgstr ""
3183
 
3184
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:78
3185
+ msgid "Enable zip upload option"
3186
  msgstr ""
3187
 
3188
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:80
3189
+ msgid "Allow users to upload zip folders."
3190
  msgstr ""
3191
 
3192
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:84
3193
+ msgid "Enable import function"
3194
  msgstr ""
3195
 
3196
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:86
3197
+ msgid "Allow users to import images folders from the server."
3198
  msgstr ""
3199
 
3200
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:90
3201
+ msgid "Enable style selection"
3202
  msgstr ""
3203
 
3204
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:92
3205
+ msgid "Allow users to choose a style for the gallery."
3206
  msgstr ""
3207
 
3208
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:96
3209
+ msgid "Enable roles/capabilities"
3210
  msgstr ""
3211
 
3212
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:98
3213
+ msgid "Allow users to change the roles for other blog authors."
3214
  msgstr ""
3215
 
3216
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:102
3217
+ msgid "Default style"
3218
  msgstr ""
3219
 
3220
+ #: products/photocrati_nextgen/modules/ngglegacy/admin/wpmu.php:119
3221
+ msgid "Choose the default style for the galleries."
3222
  msgstr ""
3223
 
3224
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/core.php:214
3225
+ msgid "Note : Based on your server memory limit you should not upload larger images then <strong>%d x %d</strong> pixel"
3226
  msgstr ""
3227
 
3228
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:266
3229
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/ngg-db.php:267
3230
+ msgid "Album overview"
3231
  msgstr ""
3232
 
3233
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:60
3234
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:61
3235
+ msgid "Set NextGEN featured image"
3236
  msgstr ""
3237
 
3238
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:195
3239
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/post-thumbnail.php:196
3240
+ msgid "Set featured image"
3241
  msgstr ""
3242
 
3243
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:215
3244
+ #: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:91
3245
+ msgid "Slideshow"
3246
  msgstr ""
3247
 
3248
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/rewrite.php:223
3249
+ msgid "Album"
3250
  msgstr ""
3251
 
3252
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:35
3253
+ msgid "No new tag specified!"
3254
  msgstr ""
3255
 
3256
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:50
3257
+ msgid "No new/old valid tag specified!"
3258
  msgstr ""
3259
 
3260
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:86
3261
+ msgid "No tag renamed."
3262
  msgstr ""
3263
 
3264
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:88
3265
+ msgid "Renamed tag(s) &laquo;%1$s&raquo; to &laquo;%2$s&raquo;"
3266
  msgstr ""
3267
 
3268
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:95
3269
+ msgid "No valid new tag."
3270
  msgstr ""
3271
 
3272
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:112
3273
+ msgid "No objects (post/page) found for specified old tags."
3274
  msgstr ""
3275
 
3276
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:141
3277
+ msgid "No tag merged."
3278
  msgstr ""
3279
 
3280
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:143
3281
+ msgid "Merge tag(s) &laquo;%1$s&raquo; to &laquo;%2$s&raquo;. %3$s objects edited."
3282
  msgstr ""
3283
 
3284
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:146
3285
+ msgid "Error. Not enough tags provided to rename or merge."
3286
  msgstr ""
3287
 
3288
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:165
3289
+ msgid "No tag specified!"
3290
  msgstr ""
3291
 
3292
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:188
3293
+ msgid "No tag deleted."
3294
  msgstr ""
3295
 
3296
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:190
3297
+ msgid "%1s tag(s) deleted."
3298
  msgstr ""
3299
 
3300
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:208
3301
+ msgid "No new slug(s) specified!"
3302
  msgstr ""
3303
 
3304
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:220
3305
+ msgid "Tags number and slugs number isn't the same!"
3306
  msgstr ""
3307
 
3308
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:247
3309
+ msgid "No slug edited."
3310
  msgstr ""
3311
 
3312
+ #: products/photocrati_nextgen/modules/ngglegacy/lib/tags.php:249
3313
+ msgid "%s slug(s) edited."
3314
  msgstr ""
3315
 
3316
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:61
3317
+ msgid "<strong>Translation by : </strong><a target=\"_blank\" href=\"https://www.imagely.com/wordpress-gallery-plugin/nextgen-pro/\">See here</a>"
3318
  msgstr ""
3319
 
3320
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:110
3321
+ msgid "Sorry, NextGEN Gallery works only under WordPress %s or higher."
3322
  msgstr ""
3323
 
3324
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:164
3325
+ msgid "Picture tag"
 
3326
  msgstr ""
3327
 
3328
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:165
3329
+ msgid "Picture tag: %2$l."
3330
  msgstr ""
3331
 
3332
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:166
3333
+ msgid "Separate picture tags with commas."
3334
  msgstr ""
3335
 
3336
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:293
3337
+ msgid "Get help"
3338
  msgstr ""
3339
 
3340
+ #: products/photocrati_nextgen/modules/ngglegacy/nggallery.php:294
3341
+ msgid "Contribute"
3342
  msgstr ""
3343
 
3344
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:38
3345
+ msgid "Meta data"
3346
  msgstr ""
3347
 
3348
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:42
3349
+ msgid "Camera / Type"
3350
  msgstr ""
3351
 
3352
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:50
3353
+ msgid "Focal Length"
3354
  msgstr ""
3355
 
3356
+ #: products/photocrati_nextgen/modules/ngglegacy/view/imagebrowser-exif.php:58
3357
+ msgid "Date / Time"
3358
  msgstr ""
3359
 
3360
+ #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:50
3361
+ msgid "No galleries have been yet created."
3362
  msgstr ""
3363
 
3364
+ #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:74
3365
+ msgid "The gallery ID=%s does not exist."
3366
  msgstr ""
3367
 
3368
+ #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:105
3369
+ msgid "No album ID has been provided as parameter"
3370
  msgstr ""
3371
 
3372
+ #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:113
3373
+ msgid "The album ID=%s does not exist."
3374
  msgstr ""
3375
 
3376
+ #: products/photocrati_nextgen/modules/ngglegacy/xml/media-rss.php:120
3377
+ msgid "Invalid MediaRSS command"
3378
  msgstr ""
3379
 
3380
+ #: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:7
3381
+ msgid "Add recent or random images from the galleries"
3382
  msgstr ""
3383
 
3384
+ #: products/photocrati_nextgen/modules/widget/class.widget_gallery.php:8
3385
+ msgid "NextGEN Widget"
3386
  msgstr ""
3387
 
3388
+ #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:9
3389
+ msgid "Widget that displays Media RSS links for NextGEN Gallery."
3390
  msgstr ""
3391
 
3392
+ #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:10
3393
+ msgid "NextGEN Media RSS"
3394
  msgstr ""
3395
 
3396
+ #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:22
3397
+ msgid "Media RSS"
3398
  msgstr ""
3399
 
3400
+ #: products/photocrati_nextgen/modules/widget/class.widget_mediarss.php:23
3401
+ msgid "Link to the main image feed"
3402
  msgstr ""
3403
 
3404
+ #: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:7
3405
+ msgid "Show a NextGEN Gallery Slideshow"
3406
  msgstr ""
3407
 
3408
+ #: products/photocrati_nextgen/modules/widget/class.widget_slideshow.php:8
3409
+ msgid "NextGEN Slideshow"
3410
  msgstr ""
3411
 
3412
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:26
3413
+ msgid "Thumbnails"
3414
  msgstr ""
3415
 
3416
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:29
3417
+ msgid "Original images"
3418
  msgstr ""
3419
 
3420
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:42
3421
+ msgid "random"
3422
  msgstr ""
3423
 
3424
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:50
3425
+ msgid "recently added"
3426
  msgstr ""
3427
 
3428
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:62
3429
+ msgid "Enable IE8 Web Slices"
3430
  msgstr ""
3431
 
3432
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:68
3433
+ msgid "Width x Height"
3434
  msgstr ""
3435
 
3436
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:87
3437
+ msgid "Select"
3438
  msgstr ""
3439
 
3440
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:92
3441
+ msgid "All galleries"
3442
  msgstr ""
3443
 
3444
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:95
3445
+ msgid "Only which are not listed"
3446
  msgstr ""
3447
 
3448
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:98
3449
+ msgid "Only which are listed"
3450
  msgstr ""
3451
 
3452
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:107
3453
+ msgid "Gallery ID"
 
3454
  msgstr ""
3455
 
3456
+ #: products/photocrati_nextgen/modules/widget/templates/form_gallery.php:114
3457
+ msgid "Gallery IDs, separated by commas."
3458
  msgstr ""
3459
 
3460
+ #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:19
3461
+ msgid "Show Media RSS icon"
 
3462
  msgstr ""
3463
 
3464
+ #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:30
3465
+ msgid "Show the Media RSS link"
3466
  msgstr ""
3467
 
3468
+ #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:36
3469
+ msgid "Text for Media RSS link"
3470
  msgstr ""
3471
 
3472
+ #: products/photocrati_nextgen/modules/widget/templates/form_mediarss.php:47
3473
+ msgid "Tooltip text for Media RSS link"
 
3474
  msgstr ""
3475
 
3476
+ #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:15
3477
+ msgid "Select Gallery"
3478
  msgstr ""
3479
 
3480
+ #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:23
3481
+ msgid "All images"
3482
  msgstr ""
3483
 
3484
+ #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:40
3485
+ msgid "Limit"
3486
  msgstr ""
3487
 
3488
+ #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:53
3489
+ msgid "Height"
3490
  msgstr ""
3491
 
3492
+ #: products/photocrati_nextgen/modules/widget/templates/form_slideshow.php:65
3493
+ msgid "Width"
3494
  msgstr ""
products/photocrati_nextgen/modules/lightbox/static/simplelightbox/nextgen_simple_lightbox_init.js CHANGED
@@ -5,7 +5,8 @@ jQuery(function($) {
5
  var nextgen_simplebox_options = {
6
  history: false,
7
  animationSlide: false,
8
- animationSpeed: 100
 
9
  };
10
 
11
  var nextgen_simplelightbox_init = function() {
5
  var nextgen_simplebox_options = {
6
  history: false,
7
  animationSlide: false,
8
+ animationSpeed: 100,
9
+ captionSelector: 'self'
10
  };
11
 
12
  var nextgen_simplelightbox_init = function() {
products/photocrati_nextgen/modules/lightbox/static/simplelightbox/nextgen_simple_lightbox_init.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(e){var i=null,n={history:!1,animationSlide:!1,animationSpeed:100};!function(){i=nextgen_lightbox_filter_selector(e,e(".ngg-simplelightbox")),i.simpleLightbox(n)}(),e(window).bind("refreshed",function(){i=nextgen_lightbox_filter_selector(e,e(".ngg-simplelightbox")),i.simpleLightbox(n).refresh()})});
1
+ jQuery(function(e){var i=null,n={history:!1,animationSlide:!1,animationSpeed:100,captionSelector:"self"};!function(){i=nextgen_lightbox_filter_selector(e,e(".ngg-simplelightbox")),i.simpleLightbox(n)}(),e(window).bind("refreshed",function(){i=nextgen_lightbox_filter_selector(e,e(".ngg-simplelightbox")),i.simpleLightbox(n).refresh()})});
products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php CHANGED
@@ -64,7 +64,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
64
  }
65
  // Prevent galleries with the same ID as the parent album being displayed as the root
66
  // breadcrumb when viewing the album page
67
- if (count($ids) == 1 && strpos($ids[0], 'a') !== 0) {
68
  $ids = array();
69
  }
70
  if (!empty($ds['original_album_entities'])) {
64
  }
65
  // Prevent galleries with the same ID as the parent album being displayed as the root
66
  // breadcrumb when viewing the album page
67
+ if (is_array($ids) && count($ids) == 1 && strpos($ids[0], 'a') !== 0) {
68
  $ids = array();
69
  }
70
  if (!empty($ds['original_album_entities'])) {
products/photocrati_nextgen/modules/nextgen_block/package.module.nextgen_block.php CHANGED
@@ -52,15 +52,27 @@ class C_Ngg_Post_Thumbnails
52
  function set_or_remove_ngg_post_thumbnail($post, $request)
53
  {
54
  $json = @json_decode($request->get_body());
55
- if (is_object($json) && isset($json->meta) && property_exists($json->meta, 'ngg_post_thumbnail')) {
56
- $storage = C_Gallery_Storage::get_instance();
57
- // Was the post thumbnail removed?
58
- if (!$json->meta->ngg_post_thumbnail) {
59
- delete_post_thumbnail($post->ID);
60
- $storage->delete_from_media_library($json->meta_ngg_post_thumbnail);
61
- } else {
62
- $storage->set_post_thumbnail($post->ID, $json->meta->ngg_post_thumbnail);
63
- }
 
 
 
 
 
 
 
 
 
 
 
 
64
  }
65
  }
66
  function enqueue_post_thumbnails()
52
  function set_or_remove_ngg_post_thumbnail($post, $request)
53
  {
54
  $json = @json_decode($request->get_body());
55
+ $target = NULL;
56
+ if (!is_object($json)) {
57
+ return;
58
+ }
59
+ // WordPress 5.3 changed how the featured-image metadata was submitted to the server
60
+ if (isset($json->meta) && property_exists($json->meta, 'ngg_post_thumbnail')) {
61
+ $target = $json->meta;
62
+ } elseif (property_exists($json, 'ngg_post_thumbnail')) {
63
+ $target = $json;
64
+ }
65
+ if (!$target) {
66
+ return;
67
+ }
68
+ $storage = C_Gallery_Storage::get_instance();
69
+ // Was the post thumbnail removed?
70
+ if (!$target->ngg_post_thumbnail) {
71
+ delete_post_thumbnail($post->ID);
72
+ $storage->delete_from_media_library($target->ngg_post_thumbnail);
73
+ } else {
74
+ // Was it added?
75
+ $storage->set_post_thumbnail($post->ID, $target->ngg_post_thumbnail);
76
  }
77
  }
78
  function enqueue_post_thumbnails()
products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php CHANGED
@@ -4349,7 +4349,6 @@ class Mixin_GalleryStorage_Base_Getters extends Mixin
4349
  $size = 'thumbnail';
4350
  $folder = 'thumbs';
4351
  $prefix = 'thumbs';
4352
- // deliberately no break here
4353
  // deliberately no break here
4354
  default:
4355
  // NGG 2.0 stores relative filenames in the meta data of
@@ -4839,6 +4838,7 @@ class Mixin_GalleryStorage_Base_Management extends Mixin
4839
  * Backs up an image file
4840
  *
4841
  * @param int|object $image
 
4842
  * @return bool
4843
  */
4844
  function backup_image($image, $save = TRUE)
@@ -4867,6 +4867,11 @@ class Mixin_GalleryStorage_Base_Management extends Mixin
4867
  }
4868
  return $retval;
4869
  }
 
 
 
 
 
4870
  function copy_images($images, $dst_gallery)
4871
  {
4872
  $retval = array();
@@ -4894,13 +4899,13 @@ class Mixin_GalleryStorage_Base_Management extends Mixin
4894
  $tags = array_map('intval', $tags);
4895
  wp_set_object_terms($new_image_id, $tags, 'ngg_tag', true);
4896
  // Copy all of the generated versions (resized versions, watermarks, etc)
4897
- foreach ($this->get_image_sizes($image) as $named_size) {
4898
  if (in_array($named_size, array('full', 'thumbnail'))) {
4899
  continue;
4900
  }
4901
  $old_abspath = $this->object->get_image_abspath($image, $named_size);
4902
  $new_abspath = $this->object->get_image_abspath($new_image, $named_size);
4903
- if (is_array(stat($old_abspath))) {
4904
  $new_dir = dirname($new_abspath);
4905
  // Ensure the target directory exists
4906
  if (@stat($new_dir) === FALSE) {
@@ -4920,12 +4925,11 @@ class Mixin_GalleryStorage_Base_Management extends Mixin
4920
  * Moves images from to another gallery
4921
  * @param array $images
4922
  * @param int|object $gallery
4923
- * @param boolean $db optionally only move the image files, not the db entries
4924
- * @return boolean
4925
  */
4926
  function move_images($images, $gallery)
4927
  {
4928
- $retval = $this->object->copy_images($images, $gallery, TRUE);
4929
  if ($images) {
4930
  foreach ($images as $image_id) {
4931
  $this->object->delete_image($image_id);
@@ -4933,6 +4937,10 @@ class Mixin_GalleryStorage_Base_Management extends Mixin
4933
  }
4934
  return $retval;
4935
  }
 
 
 
 
4936
  function delete_directory($abspath)
4937
  {
4938
  $retval = FALSE;
@@ -4983,7 +4991,7 @@ class Mixin_GalleryStorage_Base_Management extends Mixin
4983
  $this->object->_image_mapper->save($image);
4984
  }
4985
  } else {
4986
- foreach ($this->get_image_sizes($image) as $named_size) {
4987
  $image_abspath = $this->object->get_image_abspath($image, $named_size);
4988
  @unlink($image_abspath);
4989
  }
@@ -5220,6 +5228,7 @@ class Mixin_GalleryStorage_Base_Upload extends Mixin
5220
  public function is_allowed_image_extension($filename)
5221
  {
5222
  $extension = pathinfo($filename, PATHINFO_EXTENSION);
 
5223
  $allowed_extensions = apply_filters('ngg_allowed_file_types', array('jpeg', 'jpg', 'png', 'gif'));
5224
  return in_array($extension, $allowed_extensions);
5225
  }
@@ -5409,6 +5418,11 @@ class Mixin_GalleryStorage_Base_Upload extends Mixin
5409
  $this->object->generate_thumbnail($image);
5410
  // Set gallery preview image if missing
5411
  C_Gallery_Mapper::get_instance()->set_preview_image($dst_gallery, $image_id, TRUE);
 
 
 
 
 
5412
  // Notify other plugins that an image has been added
5413
  do_action('ngg_added_new_image', $image);
5414
  // delete dirsize after adding new images
4349
  $size = 'thumbnail';
4350
  $folder = 'thumbs';
4351
  $prefix = 'thumbs';
 
4352
  // deliberately no break here
4353
  default:
4354
  // NGG 2.0 stores relative filenames in the meta data of
4838
  * Backs up an image file
4839
  *
4840
  * @param int|object $image
4841
+ * @param bool $save
4842
  * @return bool
4843
  */
4844
  function backup_image($image, $save = TRUE)
4867
  }
4868
  return $retval;
4869
  }
4870
+ /**
4871
+ * @param C_Image[]|int[] $images
4872
+ * @param C_Gallery|int $dst_gallery
4873
+ * @return int[]
4874
+ */
4875
  function copy_images($images, $dst_gallery)
4876
  {
4877
  $retval = array();
4899
  $tags = array_map('intval', $tags);
4900
  wp_set_object_terms($new_image_id, $tags, 'ngg_tag', true);
4901
  // Copy all of the generated versions (resized versions, watermarks, etc)
4902
+ foreach ($this->object->get_image_sizes($image) as $named_size) {
4903
  if (in_array($named_size, array('full', 'thumbnail'))) {
4904
  continue;
4905
  }
4906
  $old_abspath = $this->object->get_image_abspath($image, $named_size);
4907
  $new_abspath = $this->object->get_image_abspath($new_image, $named_size);
4908
+ if (is_array(@stat($old_abspath))) {
4909
  $new_dir = dirname($new_abspath);
4910
  // Ensure the target directory exists
4911
  if (@stat($new_dir) === FALSE) {
4925
  * Moves images from to another gallery
4926
  * @param array $images
4927
  * @param int|object $gallery
4928
+ * @return int[]
 
4929
  */
4930
  function move_images($images, $gallery)
4931
  {
4932
+ $retval = $this->object->copy_images($images, $gallery);
4933
  if ($images) {
4934
  foreach ($images as $image_id) {
4935
  $this->object->delete_image($image_id);
4937
  }
4938
  return $retval;
4939
  }
4940
+ /**
4941
+ * @param string $abspath
4942
+ * @return bool
4943
+ */
4944
  function delete_directory($abspath)
4945
  {
4946
  $retval = FALSE;
4991
  $this->object->_image_mapper->save($image);
4992
  }
4993
  } else {
4994
+ foreach ($this->object->get_image_sizes($image) as $named_size) {
4995
  $image_abspath = $this->object->get_image_abspath($image, $named_size);
4996
  @unlink($image_abspath);
4997
  }
5228
  public function is_allowed_image_extension($filename)
5229
  {
5230
  $extension = pathinfo($filename, PATHINFO_EXTENSION);
5231
+ $extension = strtolower($extension);
5232
  $allowed_extensions = apply_filters('ngg_allowed_file_types', array('jpeg', 'jpg', 'png', 'gif'));
5233
  return in_array($extension, $allowed_extensions);
5234
  }
5418
  $this->object->generate_thumbnail($image);
5419
  // Set gallery preview image if missing
5420
  C_Gallery_Mapper::get_instance()->set_preview_image($dst_gallery, $image_id, TRUE);
5421
+ // Automatically watermark the main image if requested
5422
+ if ($settings->get('watermark_automatically_at_upload', 0)) {
5423
+ $image_abspath = $this->object->get_image_abspath($image, 'full');
5424
+ $this->object->generate_image_clone($image_abspath, $image_abspath, array('watermark' => TRUE));
5425
+ }
5426
  // Notify other plugins that an image has been added
5427
  do_action('ngg_added_new_image', $image);
5428
  // delete dirsize after adding new images
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.6/class.exif_writer.php CHANGED
@@ -112,7 +112,7 @@ class C_Exif_Writer
112
  */
113
  static public function write_metadata($filename, $metadata)
114
  {
115
- if (!self::is_jpeg_file($filename))
116
  return FALSE;
117
 
118
  try {
112
  */
113
  static public function write_metadata($filename, $metadata)
114
  {
115
+ if (!self::is_jpeg_file($filename) || !is_array($metadata))
116
  return FALSE;
117
 
118
  try {
products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php CHANGED
@@ -1405,10 +1405,14 @@ class Mixin_Displayed_Gallery_Queries extends Mixin
1405
  * Sorts the results of an album query
1406
  * @param stdClass $a
1407
  * @param stdClass $b
 
1408
  */
1409
  function _sort_album_result($a, $b)
1410
  {
1411
  $key = $this->object->order_by;
 
 
 
1412
  return strcmp($a->{$key}, $b->{$key});
1413
  }
1414
  }
1405
  * Sorts the results of an album query
1406
  * @param stdClass $a
1407
  * @param stdClass $b
1408
+ * @return int
1409
  */
1410
  function _sort_album_result($a, $b)
1411
  {
1412
  $key = $this->object->order_by;
1413
+ if (!isset($a->{$key}) || !isset($b->{$key})) {
1414
+ return 0;
1415
+ }
1416
  return strcmp($a->{$key}, $b->{$key});
1417
  }
1418
  }
products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php CHANGED
@@ -441,6 +441,15 @@ class A_Reset_Form extends Mixin
441
  wp_redirect(get_admin_url());
442
  exit;
443
  }
 
 
 
 
 
 
 
 
 
444
  }
445
  /**
446
  * Class A_Roles_Form
@@ -711,9 +720,10 @@ class A_Watermarks_Form extends Mixin
711
  }
712
  function render()
713
  {
 
714
  $settings = $this->get_model();
715
  $image = $this->object->_get_preview_image();
716
- return $this->render_partial('photocrati-nextgen_other_options#watermarks_tab', array('notice' => __('Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone.', 'nggallery'), 'watermark_source_label' => __('How will you generate a watermark?', 'nggallery'), 'watermark_sources' => $this->object->_get_watermark_sources(), 'watermark_fields' => $this->object->_get_watermark_source_fields($settings), 'watermark_source' => $settings->wmType, 'position_label' => __('Position:', 'nggallery'), 'position' => $settings->wmPos, 'offset_label' => __('Offset:', 'nggallery'), 'offset_x' => $settings->wmXpos, 'offset_y' => $settings->wmYpos, 'hidden_label' => __('(Show Customization Options)', 'nggallery'), 'active_label' => __('(Hide Customization Options)', 'nggallery'), 'thumbnail_url' => $image['url'], 'preview_label' => __('Preview of saved settings:', 'nggallery'), 'refresh_label' => __('Refresh preview image', 'nggallery'), 'refresh_url' => $settings->ajax_url), TRUE);
717
  }
718
  function save_action()
719
  {
441
  wp_redirect(get_admin_url());
442
  exit;
443
  }
444
+ /*
445
+ function uninstall_action()
446
+ {
447
+ $installer = C_Photocrati_Installer::get_instance();
448
+ $installer->uninstall(NGG_PLUGIN_BASENAME, TRUE);
449
+ deactivate_plugins(NGG_PLUGIN_BASENAME);
450
+ wp_redirect(admin_url('/plugins.php'));
451
+ }
452
+ */
453
  }
454
  /**
455
  * Class A_Roles_Form
720
  }
721
  function render()
722
  {
723
+ /** @var C_Photocrati_Settings_Manager $settings */
724
  $settings = $this->get_model();
725
  $image = $this->object->_get_preview_image();
726
+ return $this->render_partial('photocrati-nextgen_other_options#watermarks_tab', array('watermark_automatically_at_upload_value' => $settings->get('watermark_automatically_at_upload', 0), 'watermark_automatically_at_upload_label' => __('Automatically watermark images during upload:', 'nggallery'), 'watermark_automatically_at_upload_label_yes' => __('Yes', 'nggallery'), 'watermark_automatically_at_upload_label_no' => __('No', 'nggallery'), 'notice' => __('Please note: You can only activate the watermark under Manage Gallery. This action cannot be undone.', 'nggallery'), 'watermark_source_label' => __('How will you generate a watermark?', 'nggallery'), 'watermark_sources' => $this->object->_get_watermark_sources(), 'watermark_fields' => $this->object->_get_watermark_source_fields($settings), 'watermark_source' => $settings->wmType, 'position_label' => __('Position:', 'nggallery'), 'position' => $settings->wmPos, 'offset_label' => __('Offset:', 'nggallery'), 'offset_x' => $settings->wmXpos, 'offset_y' => $settings->wmYpos, 'hidden_label' => __('(Show Customization Options)', 'nggallery'), 'active_label' => __('(Hide Customization Options)', 'nggallery'), 'thumbnail_url' => $image['url'], 'preview_label' => __('Preview of saved settings:', 'nggallery'), 'refresh_label' => __('Refresh preview image', 'nggallery'), 'refresh_url' => $settings->ajax_url), TRUE);
727
  }
728
  function save_action()
729
  {
products/photocrati_nextgen/modules/nextgen_other_options/templates/watermarks_tab.php CHANGED
@@ -1,4 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  <table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  <tr>
3
  <td class="column1">
4
  <label for="watermark_source">
@@ -9,10 +56,10 @@
9
  <div class="column_wrapper">
10
  <select name="watermark_options[wmType]" id="watermark_source">
11
  <?php foreach ($watermark_sources as $label => $value): ?>
12
- <option
13
- value="<?php echo esc_attr($value)?>"
14
- <?php selected($value, $watermark_source) ?>
15
- ><?php esc_html_e($label)?></option>
16
  <?php endforeach ?>
17
  </select>
18
  </div>
@@ -96,4 +143,4 @@
96
  <?php echo $fields ?>
97
  </tbody>
98
  <?php endforeach ?>
99
- </table>
1
+ <?php
2
+ /**
3
+ * @var array $watermark_fields
4
+ * @var array $watermark_sources
5
+ * @var int $offset_x
6
+ * @var int $offset_y
7
+ * @var string $active_label
8
+ * @var string $hidden_label
9
+ * @var string $offset_label
10
+ * @var string $position_label
11
+ * @var string $preview_label
12
+ * @var string $refresh_url
13
+ * @var string $refresh_label
14
+ * @var string $thumbnail_url
15
+ * @var string $watermark_automatically_at_upload_label
16
+ * @var string $watermark_automatically_at_upload_label_no
17
+ * @var string $watermark_automatically_at_upload_label_yes
18
+ * @var string $watermark_automatically_at_upload_value
19
+ * @var string $watermark_source
20
+ * @var string $watermark_source_label
21
+ */
22
+ ?>
23
  <table>
24
+ <tr>
25
+ <td class="column1">
26
+ <label for="watermark_automatically_at_upload">
27
+ <?php print esc_html($watermark_automatically_at_upload_label); ?>
28
+ </label>
29
+ </td>
30
+ <td>
31
+ <label for="watermark_automatically_at_upload">
32
+ <?php print esc_html($watermark_automatically_at_upload_label_yes); ?>
33
+ </label>
34
+ <input id='watermark_automatically_at_upload'
35
+ type="radio"
36
+ name="watermark_options[watermark_automatically_at_upload]"
37
+ value="1"
38
+ <?php checked(TRUE, $watermark_automatically_at_upload_value ? TRUE : FALSE)?>/>
39
+ <label for="watermark_automatically_at_upload_no">
40
+ <?php print esc_html($watermark_automatically_at_upload_label_no); ?>
41
+ </label>
42
+ <input id='watermark_automatically_at_upload_no'
43
+ type="radio"
44
+ name="watermark_options[watermark_automatically_at_upload]"
45
+ value="0"
46
+ <?php checked(FALSE, $watermark_automatically_at_upload_value ? TRUE : FALSE)?>/>
47
+ </td>
48
+ </tr>
49
  <tr>
50
  <td class="column1">
51
  <label for="watermark_source">
56
  <div class="column_wrapper">
57
  <select name="watermark_options[wmType]" id="watermark_source">
58
  <?php foreach ($watermark_sources as $label => $value): ?>
59
+ <option value="<?php echo esc_attr($value)?>"
60
+ <?php selected($value, $watermark_source) ?>>
61
+ <?php esc_html_e($label)?>
62
+ </option>
63
  <?php endforeach ?>
64
  </select>
65
  </div>
143
  <?php echo $fields ?>
144
  </tbody>
145
  <?php endforeach ?>
146
+ </table>
products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php CHANGED
@@ -108,6 +108,7 @@ class C_NextGen_Settings_Installer
108
  'thumbEffectContext' => 'nextgen_images', // select effect
109
 
110
  // Watermark settings
 
111
  'wmPos' => 'midCenter', // Postion
112
  'wmXpos' => 15, // X Pos
113
  'wmYpos' => 5, // Y Pos
108
  'thumbEffectContext' => 'nextgen_images', // select effect
109
 
110
  // Watermark settings
111
+ 'watermark_automatically_at_upload' => 0,
112
  'wmPos' => 'midCenter', // Postion
113
  'wmXpos' => 15, // X Pos
114
  'wmYpos' => 5, // Y Pos
products/photocrati_nextgen/modules/ngglegacy/admin/admin.php CHANGED
@@ -29,8 +29,6 @@ class nggAdminPanel{
29
  add_action('admin_enqueue_scripts', array($this, 'buffer_scripts'), 0);
30
  add_action('admin_print_scripts', array($this, 'output_scripts'), PHP_INT_MAX);
31
 
32
- //TODO: remove after release of Wordpress 3.3
33
- add_filter('contextual_help', array($this, 'show_help'), 10, 2);
34
  add_filter('current_screen', array($this, 'edit_current_screen'));
35
 
36
  add_action('ngg_admin_enqueue_scripts', array($this, 'enqueue_progress_bars'));
@@ -374,58 +372,6 @@ class nggAdminPanel{
374
  }
375
  }
376
 
377
- function show_help($help, $screen) {
378
-
379
- // since WP3.0 it's an object
380
- if ( is_object($screen) )
381
- $screen = $screen->id;
382
-
383
- $link = '';
384
- // menu title is localized...
385
- $i18n = strtolower ( _n( 'Gallery', 'Galleries', 1, 'nggallery' ) );
386
-
387
- switch ($screen) {
388
- case 'toplevel_page_' . NGGFOLDER :
389
- $link = __('<a href="https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/" target="_blank">Introduction</a>', 'nggallery');
390
- break;
391
- case "{$i18n}_page_nggallery-about" :
392
- $link = __('<a href="https://www.imagely.com/languages/" target="_blank">Languages</a>', 'nggallery');
393
- break;
394
- }
395
-
396
- if ( !empty($link) ) {
397
- $help = '<h5>' . __('Get help with NextGEN Gallery', 'nggallery') . '</h5>';
398
- $help .= '<div class="metabox-prefs">';
399
- $help .= $link;
400
- $help .= "</div>\n";
401
- $help .= '<h5>' . __('More Help & Info', 'nggallery') . '</h5>';
402
- $help .= '<div class="metabox-prefs">';
403
- $help .= __('<a href="http://wordpress.org/tags/nextgen-gallery?forum_id=10" target="_blank">Support Forums</a>', 'nggallery');
404
- $help .= ' | <a href="https://www.imagely.com/docs/nextgen-gallery/?utm_source=ngg&utm_medium=ngguser&utm_campaign=help" target="_blank">' . __('FAQ', 'nggallery') . '</a>';
405
- $help .= ' | <a href="https://bitbucket.org/photocrati/nextgen-gallery/issues" target="_blank">' . __('Feature request', 'nggallery') . '</a>';
406
- $help .= ' | <a href="https://www.imagely.com/languages/?utm_source=ngg&utm_medium=ngguser&utm_campaign=help" target="_blank">' . __('Get your language pack', 'nggallery') . '</a>';
407
- $help .= ' | <a href="https://bitbucket.org/photocrati/nextgen-gallery" target="_blank">' . __('Contribute development', 'nggallery') . '</a>';
408
- $help .= ' | <a href="http://wordpress.org/extend/plugins/nextgen-gallery" target="_blank">' . __('Download latest version', 'nggallery') . '</a>';
409
- $help .= "</div>\n";
410
- }
411
-
412
- return $help;
413
- }
414
-
415
- /**
416
- * New wrapper for WordPress 3.3, so contextual help will be added to the admin bar
417
- * Rework this see http://wpdevel.wordpress.com/2011/12/06/help-and-screen-api-changes-in-3-3/
418
- *
419
- * @since 1.9.0
420
- * @param object $screen
421
- * @return void
422
- */
423
- function add_contextual_help($screen) {
424
-
425
- $help = $this->show_help('', $screen);
426
- //add_contextual_help( $screen, $help );
427
- }
428
-
429
  /**
430
  * We need to manipulate the current_screen name so that we can show the correct column screen options
431
  *
@@ -455,12 +401,9 @@ class nggAdminPanel{
455
  break;
456
  }
457
 
458
- if ( defined('IS_WP_3_3') )
459
- $this->add_contextual_help($screen);
460
-
461
- if ( strpos($screen->id, 'ngg') !== FALSE ||
462
  strpos($screen->id, 'nextgen') !== FALSE ||
463
- strpos($screen->id, 'ngg') === 0 )
464
  { $screen->ngg = TRUE; }
465
 
466
  return $screen;
29
  add_action('admin_enqueue_scripts', array($this, 'buffer_scripts'), 0);
30
  add_action('admin_print_scripts', array($this, 'output_scripts'), PHP_INT_MAX);
31
 
 
 
32
  add_filter('current_screen', array($this, 'edit_current_screen'));
33
 
34
  add_action('ngg_admin_enqueue_scripts', array($this, 'enqueue_progress_bars'));
372
  }
373
  }
374
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
375
  /**
376
  * We need to manipulate the current_screen name so that we can show the correct column screen options
377
  *
401
  break;
402
  }
403
 
404
+ if ( strpos($screen->id, 'ngg') !== FALSE ||
 
 
 
405
  strpos($screen->id, 'nextgen') !== FALSE ||
406
+ strpos($screen->id, 'ngg') === 0 )
407
  { $screen->ngg = TRUE; }
408
 
409
  return $screen;
products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.css CHANGED
@@ -314,20 +314,49 @@ a.switch-expert {
314
  #ngg_page_content .ngg_manage_images .tablenav.top > div {
315
  margin-bottom: 10px;
316
  }
317
- #ngg_page_content .ngg_manage_galleries .search-box {
318
- margin-bottom: 10px;
319
- float: none;
320
- position: relative;
321
- left: 470px;
322
- top: 47px;
323
- margin-top: -40px;
324
- width: 360px;
 
 
 
 
 
 
 
 
 
 
325
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
326
  #ngg_page_content #editgalleries .displaying-num {
327
  margin-right: 7px !important;
328
  font-size: 14px;
329
  letter-spacing: 1px;
330
  }
 
 
 
 
 
 
331
  #ngg_page_content .ngg_manage_galleries .tablenav.bottom {
332
  margin: 15px 0 0;
333
  }
@@ -1128,9 +1157,10 @@ DIV that shows the image as you drag it
1128
  }
1129
 
1130
  @media (max-width: 1420px) {
1131
- #ngg_page_content .ngg_manage_galleries .search-box {
1132
- position: static;
1133
- }
 
1134
  }
1135
 
1136
  @media (max-width: 1080px) {
@@ -1298,6 +1328,31 @@ DIV that shows the image as you drag it
1298
  margin-top: 20px;
1299
  margin-bottom: 28px !important;
1300
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1301
  }
1302
 
1303
  @media (max-width: 737px) {
314
  #ngg_page_content .ngg_manage_images .tablenav.top > div {
315
  margin-bottom: 10px;
316
  }
317
+
318
+ #ngg_page_content .ngg_manage_galleries .search-box-wrapper {
319
+ display: flex;
320
+ flex-direction: row;
321
+ justify-content: center;
322
+ width: 100%;
323
+ }
324
+ #ngg_page_content .ngg_manage_galleries div.search-box {
325
+ display: flex;
326
+ flex-direction: row;
327
+ justify-content: center;
328
+ }
329
+ #ngg_page_content .ngg_manage_galleries div.search-box:last-of-type {
330
+ }
331
+ #ngg_page_content .ngg_manage_galleries .search-box input[type=text] {
332
+ width: calc(100% - 150px) !important;
333
+ height: 35px !important;
334
+ margin-right: 4px !important;
335
  }
336
+ #ngg_page_content .ngg_manage_galleries .search-box input[type=submit].button-primary {
337
+ width: 150px !important;
338
+ height: 35px !important;
339
+ padding: 0 !important;
340
+ }
341
+
342
+ #ngg_page_content .ngg_manage_galleries form.search-form {
343
+ width: 100%;
344
+ }
345
+ #ngg_page_content .ngg_manage_galleries form.search-form:first-of-type {
346
+ padding-right: 25px;
347
+ }
348
+
349
  #ngg_page_content #editgalleries .displaying-num {
350
  margin-right: 7px !important;
351
  font-size: 14px;
352
  letter-spacing: 1px;
353
  }
354
+
355
+ #ngg_page_content #editgalleries #bulkaction {
356
+ min-height: 35px;
357
+ max-height: 35px;
358
+ }
359
+
360
  #ngg_page_content .ngg_manage_galleries .tablenav.bottom {
361
  margin: 15px 0 0;
362
  }
1157
  }
1158
 
1159
  @media (max-width: 1420px) {
1160
+ }
1161
+
1162
+ @media (max-width: 1100px) {
1163
+
1164
  }
1165
 
1166
  @media (max-width: 1080px) {
1328
  margin-top: 20px;
1329
  margin-bottom: 28px !important;
1330
  }
1331
+ #ngg_page_content .ngg_manage_galleries .search-box input[type=text] {
1332
+ width: calc(100% - 150px) !important;
1333
+ }
1334
+ #ngg_page_content .ngg_manage_galleries .search-box input[type=submit].button-primary {
1335
+ height: 40px !important;
1336
+ }
1337
+ #ngg_page_content .ngg_manage_galleries .search-box-wrapper {
1338
+ flex-direction: column;
1339
+ }
1340
+ #ngg_page_content .ngg_manage_galleries form.search-form {
1341
+ width: 100%;
1342
+ }
1343
+ #ngg_page_content #editgalleries div.tablenav.top div.alignleft.actions input.button-primary {
1344
+ width: auto !important;
1345
+ display: inline-block;
1346
+ }
1347
+ #ngg_page_content #editgalleries div.tablenav.top div.alignleft.actions input.button-primary:first-of-type {
1348
+ margin-left: 5px;
1349
+ }
1350
+ #ngg_page_content #editgalleries div.tablenav.top div.tablenav-pages {
1351
+ display: none;
1352
+ }
1353
+ #ngg_page_content #editgalleries #bulkaction {
1354
+ width: auto !important;
1355
+ }
1356
  }
1357
 
1358
  @media (max-width: 737px) {
products/photocrati_nextgen/modules/ngglegacy/admin/css/nggadmin.min.css CHANGED
@@ -1 +1 @@
1
- #iframely h2.title,.gallery_page_nggallery-manage-gallery #ngg_page_content>.wrap>h2{display:none}.toplevel_page_nextgen-gallery #ngg_page_content{width:98%}.toplevel_page_nextgen-gallery #ngg_page_content .about-wrap.ngg_overview{width:100%}.toplevel_page_nextgen-gallery #ngg_page_content .ngg_page_content_main{padding-right:40px!important}#newversion{border-color:#CCC;border-style:solid;border-width:1px;margin-right:7px;margin-top:10px;padding:2px}.ngg-dashboard-widget ul.settings span{padding-left:10px;color:#2583AD;font-weight:700}.ngg-overview .postbox .handlediv{float:right;height:24px;width:24px}#ngg_page_content .ngg_overview .ngg_page_content_header h2{padding-top:2px}#ngg_page_content .ngg_overview .ngg_page_content_main h2{text-align:left;font-size:22px;font-weight:400;color:#000;margin:20px 0;text-transform:uppercase;letter-spacing:2px}#ngg_page_content .ngg_overview .ngg_page_content_main .about-text{font-size:17px;max-width:none;margin:20px 0;color:#000;font-weight:400}#ngg-gallery-wizard{min-height:auto;position:absolute;top:0;right:0;text-align:right;margin:0;line-height:80px;font-size:14px;color:#000;font-weight:400;letter-spacing:.5px}#ngg_page_content #ngg-gallery-wizard a{font-weight:700;text-decoration:none;margin-left:20px;height:50px!important;line-height:50px}.warning{color:#9F6000;background-color:#FEEFB3;border:1px solid;margin:5px 0;padding:5px}#donator_message,#wm-preview{border-style:solid;border-width:1px}#donator_message{background-color:#BDE5F8;border-color:#00529B;-moz-border-radius-bottomleft:3px;-moz-border-radius-bottomright:3px;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;margin:5px 15px 2px;padding:0 .6em}#wm-preview h3,.wm-table tr{background:0 #F9F9F9}#donator_message p{line-height:1;margin:.5em 0;padding:2px 2px 10px}#donator_message span{padding-top:10px;float:right}#plugin_check img{float:right}#plugin_check p.message{font-size:90%;color:#666}.toplevel_page_nextgen-gallery .feature-video iframe{box-shadow:0 0 8px 4px rgba(0,0,0,.03);width:800px;height:450px;max-width:100%}div[data-id=welcome-link] .about-text{margin:0 0 40px!important}div[data-id=pro-link] .feature-section{position:relative;margin:40px 0;padding-bottom:56.25%}div[data-id=pro-link] .feature-section iframe{max-width:100%;position:absolute;top:0;left:0;width:100%;height:100%}#ngg_page_content .button-primary.ngg-pro-upgrade{height:50px!important;padding:0 40px!important;line-height:50px}div[data-id=videos-link] .feature-section,div[data-id=videos-link] .feature-section .col,div[data-id=genesis-link] .feature-section,div[data-id=genesis-link] .feature-section .col{padding:0;margin:0}.ngg-admin .ui-dialog{max-width:100%}.ngg-options th{width:22%}a.switch-expert{text-decoration:none}#wm-preview{float:right;font-size:90%;width:35%;border-color:#EBEBEB #ccc #ccc #ebebeb;margin-bottom:10px;margin-left:10px;margin-right:8px;padding:2px}#wm-preview h3{font-size:14px;font-weight:700;margin:0 0 10px;padding:8px 5px}.wm-table td,.wm-table th{border-bottom:8px solid #FFF;padding:10px}#wm-position{width:100%;margin-left:40px}.wm-table{border-collapse:collapse;margin-top:1em;width:60%;clear:none}.wm-table td{line-height:20px;margin-bottom:9px}#gallerydiv h3,#gallerydiv span.toggle-indicator{line-height:50px;display:inline-block;float:left}.wm-table th{text-align:left}.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content .notice,.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content div.error,.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content div.updated{margin:10px 0 40px}.ngg_admin_notice ul{list-style:circle inside;margin:0;padding:0}.gallery_page_nggallery-manage-gallery #ngg_page_content .ngg_page_content_main{padding-top:30px}.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content div.updated#message{margin-bottom:35px}#ngg_page_content .ngg_manage_galleries .tablenav{margin:0 0 30px}#ngg_page_content .ngg_manage_images .handlediv{float:none;width:100%;height:50px}#gallerydiv h3{height:50px;margin:0;text-transform:uppercase;font-size:16px;letter-spacing:1.5px}#gallerydiv span.toggle-indicator:before{font-size:24px;margin:12px 20px 0 10px}#gallerydiv span.toggle-indicator:hover{cursor:pointer}#gallerydiv h3:active,#gallerydiv h3:focus,#gallerydiv span.toggle-indicator:active,#gallerydiv span.toggle-indicator:focus{outline:0;border:none;-moz-outline-style:none}#ngg_page_content .ngg_manage_images .tablenav{margin:50px 0 30px}#ngg_page_content .ngg_manage_galleries .tablenav.top>div,#ngg_page_content .ngg_manage_images .tablenav.top>div{margin-bottom:10px}#ngg_page_content .ngg_manage_galleries .search-box{margin-bottom:10px;float:none;position:relative;left:470px;top:47px;margin-top:-40px;width:360px}#ngg_page_content #editgalleries .displaying-num{margin-right:7px!important;font-size:14px;letter-spacing:1px}#ngg_page_content .ngg_manage_galleries .tablenav.bottom{margin:15px 0 0}#ngg_page_content .ngg_manage_images .tablenav.bottom{margin:25px 0 0}.ngg-admin #ngg_page_content .ngg_manage_images td{vertical-align:top}#ngg_page_content .ngg_manage_galleries .tablenav input{height:28px;width:50px;padding:0 3px}#ngg_page_content .ngg_manage_galleries .tablenav input.current-page{width:50px!important}#ngg_page_content .ngg_manage_images .tablenav .tablenav-pages{margin-top:0}#ngg_page_content .ngg_manage_galleries .tablenav .tablenav-pages{margin-top:6px}#ngg_page_content .ngg_manage_galleries .tablenav .tablenav-pages a,#ngg_page_content .ngg_manage_images .tablenav .tablenav-pages a{background:#000;border:none;color:#fff!important;margin:0 2px;text-decoration:none;font-size:20px;line-height:20px;padding:2px 8px 6px}#ngg_page_content .ngg_manage_images .tablenav input,#ngg_page_content .ngg_manage_images .tablenav select{width:auto;margin-top:0}#ngg_page_content #ngg-manage-images-items-per-page,#ngg_page_content .ngg_manage_images .tablenav input.current-page{padding:4px!important;text-align-last:center;background-image:none}#ngg_page_content .ngg_manage_galleries table{box-shadow:none;border:1px solid rgba(159,187,26,.08)!important}#ngg_page_content .ngg_manage_galleries table tfoot,#ngg_page_content .ngg_manage_galleries table thead{background-color:#000}#ngg_page_content .ngg_manage_galleries table tfoot td,#ngg_page_content .ngg_manage_galleries table tfoot th,#ngg_page_content .ngg_manage_galleries table thead td,#ngg_page_content .ngg_manage_galleries table thead th{background-color:transparent;border:none}#ngg_page_content .ngg_manage_galleries table td,#ngg_page_content .ngg_manage_galleries table th{padding:12px 10px;font-size:14px}#ngg_page_content .ngg_manage_galleries table th{font-weight:700!important;color:#fff}.ngg_manage_galleries th#id{width:33px}.ngg_manage_galleries th#title{min-width:140px}.ngg_manage_galleries td.title{text-transform:uppercase;font-weight:400;font-size:13px!important}.ngg_manage_galleries th#author{min-width:80px}.ngg_manage_galleries th#page_id{min-width:60px}#ngg_page_content .ngg_manage_galleries table tr.alternate{background-color:#f7f7f7}#ngg_page_content .ngg_manage_galleries th a{padding:0!important;color:#fff}div#poststuff{min-width:auto}div#poststuff #gallerydiv{cursor:pointer}p#ngg-inlinebutton{float:right;margin:0;position:relative;top:-25pt}#gallery_fields{width:100%}#gallery_fields td{padding:5px;min-width:105px}#gallery_fields tr td:nth-of-type(2){padding-right:60px}#gallery_fields input[type=text],#gallery_fields select,#gallery_fields textarea{min-width:220px;width:99%;color:#888}table#ngg-listimages{border:1px solid #f7f7f7}#ngg-listimages tfoot,#ngg-listimages thead{background:#000}#ngg-listimages.widefat thead th,.ngg-admin #ngg_page_content .widefat tfoot th{padding:12px 10px!important}#ngg-listimages tr.alternate{background-color:#f7f7f7}#ngg-listimages td{padding:15px 5px!important}#ngg-listimages .iedit,#ngg-listimages .iedit td,#ngg-listimages th{border:none}#ngg-listimages .iedit td,#ngg-listimages th{padding:15px 5px}#ngg-listimages th{font-size:12px;font-weight:700}#ngg-listimages .column select{width:100%!important}#ngg-listimages .column-1 input{margin:0 0 0 8px}#ngg-listimages .column-1{width:24px}#ngg-listimages .column-2{width:30px}#ngg-listimages .column-3{min-width:80px;width:15%}#ngg-listimages .column-3 .thumb{max-height:100%;max-width:100%}#ngg-listimages .column-4{width:15%;max-width:220px;font-size:12px}#ngg-listimages .column-4 .meta,#ngg-listimages .column-4 label{font-size:10px;color:#888}#ngg-listimages .column-4 label input[type=checkbox]{margin:-2px 4px 0 0}#ngg-listimages .column-5 input[type=text],#ngg-listimages .column-5 textarea,#ngg-listimages .column-6 textarea{width:100%;padding:3px 5px;font-size:12px;color:#888;border:1px solid #eee;margin:1px 0;box-shadow:none}#ngg-listimages .column-5 input[type=text]{height:25px}#ngg-listimages .column-5 textarea{height:70px}#ngg-listimages .column-6 textarea{height:97px}#ngg-listimages .column-7 select{font-size:12px}#ngg-listimages .row-actions{padding:0 0 6px 4px;margin-bottom:-2px;position:relative;bottom:4px;left:0;right:0}#ngg-listimages .row_actions,#ngg-listimages .row_actions td{border-top:none;padding:0!important}#ngg-listimages .row-actions a{font-size:12px}#ngg-listimages ul.imagify-datas-list .big{color:#9fbb1a}#ngg-listimages .imagify-datas-more-action a{background:#9fbb1a;color:#fff}.gallery_page_nggallery-manage-gallery .ui-dialog{border:none;padding:0;max-width:95%!important;z-index:10000!important;margin:0 auto!important}.gallery_page_nggallery-manage-album .ui-dialog{border:none;padding:0;z-index:10000!important;width:650px!important;max-width:98%!important}.gallery_page_nggallery-manage-album .ui-dialog .button-primary,.gallery_page_nggallery-manage-album .ui-dialog .button-secondary,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-primary,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-secondary,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom button,.gallery_page_nggallery-manage-gallery .ui-dialog .button-primary,.gallery_page_nggallery-manage-gallery .ui-dialog .button-secondary,.gallery_page_nggallery-manage-gallery .ui-dialog button{background-color:#9fbb1a!important;color:#fff!important;border:none!important;box-shadow:none!important;text-shadow:none!important;height:35px!important;padding:0 15px!important;line-height:35px;width:auto!important;margin-right:10px;text-transform:uppercase;letter-spacing:1px}.gallery_page_nggallery-manage-album .ui-dialog .button-primary:hover,.gallery_page_nggallery-manage-album .ui-dialog .button-secondary:hover,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-primary:hover,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-secondary:hover,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom button:hover,.gallery_page_nggallery-manage-gallery .ui-dialog .button-secondary:hover,.gallery_page_nggallery-manage-gallery .ui-dialog button:hover .gallery_page_nggallery-manage-gallery .ui-dialog .button-primary:hover{background-color:#A9C524!important}.gallery_page_nggallery-manage-album .ui-dialog-titlebar,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar{background:#000;padding:10px}.gallery_page_nggallery-manage-album .ui-dialog-titlebar .ui-dialog-title,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar .ui-dialog-title{text-transform:uppercase;letter-spacing:1px}.gallery_page_nggallery-manage-album .ui-dialog-titlebar button,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button{background:#fff!important;border:none!important;box-shadow:none!important;text-shadow:none!important;height:24px!important;width:24px!important;padding:0!important;line-height:1;float:none;margin-right:0;border-radius:50%;top:17px;right:10px}.gallery_page_nggallery-manage-album .ui-dialog-titlebar button:active,.gallery_page_nggallery-manage-album .ui-dialog-titlebar button:focus,.gallery_page_nggallery-manage-album .ui-dialog-titlebar button:hover,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button:active,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button:focus,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button:hover{background:#fff!important}.gallery_page_nggallery-manage-album .ui-dialog .ngg-overlay-dialog,.gallery_page_nggallery-manage-gallery .ui-dialog .ngg-overlay-dialog{padding:30px 20px;box-sizing:border-box;width:100%!important}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog table{border:none}.gallery_page_nggallery-manage-album .ngg-overlay-dialog #ngg-overlay-dialog-main,.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog #ngg-overlay-dialog-main{width:70%;padding:20px 20px 0}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog td small{display:block;text-align:center;width:200px;margin:0 auto 20px}.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom{text-align:center;padding:30px 0 0}.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom input[type=button]{float:none;margin-right:0}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog #thumbMsg{color:#693;font-size:11px;width:100%;display:inline-block;height:35px;line-height:35px;margin:10px 0}.gallery_page_nggallery-manage-gallery .ui-dialog form{margin-top:30px;margin-left:30px}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog input[type=radio]:focus{border:1px solid #b4b9be;box-shadow:none}.gallery_page_nggallery-manage-gallery input[type=checkbox]:checked:before{color:#9fbb1a}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog input[type=radio]:checked:before{background:#9fbb1a;width:14px;height:14px;margin:0}div .progressborder{border:1px solid #DDD;display:block;height:30px;background-color:#464646;width:100%;margin-top:15px;margin-bottom:15px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div .progressbar{border:none;display:block;height:30px;background-color:#9fbb1a;width:0%;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div .progressbar span{display:inline;position:absolute;color:#fff;font-weight:700;padding:5px 0 0 5px}.show_details{height:16px;line-height:20px;overflow:hidden;min-width:8em;padding:3px;cursor:pointer}.show_details span{border-bottom:1px solid #999;white-space:pre}.show_details:hover{height:auto;overflow:visible;border:1px solid #999}.gallery_page_nggallery-manage-album .wrap>h2:first-child{display:none}.gallery_page_nggallery-manage-album #ngg_page_content div.updated{margin:0 0 15px}.gallery_page_nggallery-manage-album #ngg_page_content div.updated#message{margin-bottom:35px}.ngg_manage_albums .widget{box-sizing:border-box;border:1px solid #eee;padding:10px 10px 20px;width:32%;margin:0 1% 0 0;float:left;box-shadow:0 0 4px 2px rgba(0 0 4px 2px rgba(0,0,0,.02))}.container{margin-top:10px}.ngg_manage_albums .container{margin-top:30px}.ngg_select_album{margin:0 50px 0 2px;vertical-align:middle}#newalbum,.ngg_new_album{vertical-align:middle}.albumnav select[name=act_album]{width:150px}#editalbum select[name=pageid]{width:95%}#ngg_page_content .ngg_manage_albums .widget-top{box-shadow:none;border:none;margin:-10px -10px 20px;background:#f7f7f7}div .groupItem{cursor:move;padding:2px;line-height:1.5;width:100%;margin:0;box-sizing:border-box}div .innerhandle{background-color:#FBFBFB}.groupItem .item_top{background-color:#9fbb1a;color:#FFF;font-weight:400;border-radius:0;height:40px;padding:0 10px;line-height:40px}#ngg_page_content .groupItem .album_obj{background-color:#000}#ngg_page_content .groupItem .item_top a{color:#FFF;float:right;text-decoration:none}.groupItem .item_top a:hover{color:#FFF}.itemContent{border-color:#DFDFDF;border-style:none solid solid;border-width:0 1px 1px;padding:2px 0 20px 2px}.itemContent p{border:0;margin:0;padding:0}.inlinepicture{float:left;display:inline;margin:0;padding:0 3px 1px}.inlinepicture img{margin:3px;max-height:60px}.sort_placeholder{border:1px dashed #bba!important;margin:5px;background:#F9F9F9}.widget-holder{min-height:400px;padding-top:1px}.target{background-color:transparent}div.widget-top h3{text-align:center;line-height:25px;margin:0;padding:5px 12px;font-size:13px;letter-spacing:.5px;text-transform:uppercase}div.widget-top{text-shadow:0 1px 0 #FFF;background-repeat:repeat-x;background-position:0 0;font-size:13px}.ui-autocomplete-start{background-position:99% center}#ngg_page_content .ngg_gallery_sort .tablenav{margin:15px 0}#ngg_page_content .ngg_gallery_sort ul.subsubsub{margin:10px 0 15px}#ngg_page_content .ngg_gallery_sort .imageBox_theImage{width:auto}#sortGallery{position:relative}p#sortButton{margin:0;position:absolute;right:0;top:0}.imageBox,.imageBoxHighlighted{width:130px;height:160px;float:left;overflow:hidden;text-overflow:ellipsis;padding:5px}.imageBox_theImage{width:110px;height:125px;background-position:center;background-repeat:no-repeat;margin:0 auto 2px}.imageBox_label{text-align:center;font-family:arial;font-size:11px;padding-top:2px;margin:0 auto}#insertionMarker{height:150px;width:6px;position:absolute}#insertionMarkerLine{width:6px;height:145px}#insertionMarker img{float:left}#dragDropContent{opacity:.4;filter:alpha(opacity=40);position:absolute;z-index:10;display:none}.error_inline{background:0 #FFEBE8;border:1px solid #C00;margin:5px auto;padding:10px}.ngg-list{font-size:11px;margin-left:15px;list-style-position:inside;list-style-type:disc}#ngg-manage-images-items-per-page-label{float:right;line-height:35px;margin-right:5px}#ngg-manage-images-items-per-page{float:right;margin-right:30px}@media (max-width:1200px){div[data-id=details-link] .two-col .col{width:100%;min-width:100%}}@media (max-width:1420px){#ngg_page_content .ngg_manage_galleries .search-box{position:static}}@media (max-width:1080px){#ngg-gallery-wizard>span,.ngg_manage_galleries .tablenav.bottom{display:none}.ngg_manage_images #gallery_fields td:nth-of-type(even){margin-bottom:8px}.ngg_manage_images #gallery_fields td:nth-of-type(odd){background:#f7f7f7;padding-left:10px;font-weight:700}.ngg_manage_images #gallery_fields,.ngg_manage_images #gallery_fields tbody,.ngg_manage_images #gallery_fields td,.ngg_manage_images #gallery_fields tr{display:block;width:100%;box-sizing:border-box}.ngg_manage_images #gallery_fields td{padding:10px 5px;border:1px solid #f7f8f3;margin:0}}@media (max-width:900px){.ngg_manage_galleries tfoot{display:none}.ngg_manage_galleries .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.check-column){display:table-cell}.ngg_manage_galleries td.author,.ngg_manage_galleries td.id,.ngg_manage_galleries td.page_id,.ngg_manage_galleries th#author,.ngg_manage_galleries th#id,.ngg_manage_galleries th#page_id{display:none!important}#ngg-listimages td.column.column-2,#ngg-listimages td.column.column-6,#ngg-listimages td.column.column-8,#ngg-listimages tfoot,#ngg-listimages thead .column-1,#ngg-listimages thead .column-2,#ngg-listimages thead .column-4,#ngg-listimages thead .column-5,#ngg-listimages thead .column-6,#ngg-listimages thead .column-7,#ngg-listimages thead .column-8{display:none}#ngg-listimages .column-3{min-width:200px}table#ngg-listimages,table#ngg-listimages thead{display:block}#ngg-listimages .iedit td{padding-bottom:30px!important}}@media (max-width:800px){table#ngg-listimages,table#ngg-listimages tbody,table#ngg-listimages td,table#ngg-listimages tr{display:block}table#ngg-listimages tr{padding:10px 5px!important}#ngg-listimages thead,#ngg-listimages thead th{display:block;width:100%;box-sizing:border-box}#ngg-listimages .row_actions td:first-of-type,#ngg-listimages tfoot{display:none}#ngg-listimages .row_actions{display:none;display:block;clear:both;padding:0 8px 10px!important;border-bottom:1px solid #c1c97c}#ngg-listimages td.column-3,.ngg-listimages tr.iedit td{padding-bottom:10px!important;float:left;box-sizing:border-box}.ngg-listimages tr.iedit td{display:block!important}#ngg-listimages td.column-1,#ngg-listimages td.column-2{width:10%!important;height:150px;float:left;box-sizing:border-box;display:none}#ngg-listimages td.column-3{width:55%;max-width:300px}#ngg-listimages td.column-4{width:40%!important;float:left;box-sizing:border-box}#ngg-listimages td.column-5,#ngg-listimages td.column-6,#ngg-listimages td.column-7{padding:0 5px!important}#ngg-listimages td.column-6{margin-top:-5px;margin-bottom:-8px}.ngg-listimages td.column-7{padding-bottom:15px}#ngg-manage-images-items-per-page,#ngg-manage-images-items-per-page-label{display:none}#ngg-listimages .column-6 textarea{height:60px}.ngg_manage_images .tablenav.bottom .displaying-num{display:none}}@media (max-width:782px){#ngg-gallery-wizard{display:none}#ngg_page_content .ngg_manage_galleries .tablenav.top>div{display:block;width:100%}#ngg_page_content .ngg_manage_galleries .tablenav .tablenav-pages{margin-top:20px;margin-bottom:28px!important}}@media (max-width:737px){.gallery_page_nggallery-manage-gallery input[type=checkbox]:checked:before{font-size:22px}.ngg-overlay-dialog input[type=radio]{height:16px;width:16px}#ngg-gallery-wizard{display:none}}@media (max-width:640px){.ngg_manage_galleries td.description,.ngg_manage_galleries th#description{display:none!important}.ngg_manage_albums .tablenav .actions{width:100%;float:none}.ngg_manage_albums .tablenav span{display:block}.ngg_manage_albums .target-album,.ngg_manage_albums .widget.widget-right{width:32%!important;margin:.5%!important;padding:5px 5px 10px}.groupItem .item_top{height:auto!important;line-height:1.5;padding:8px;font-size:12px}#ngg_page_content .groupItem .item_top a{display:none}.ngg_manage_albums div[style="float:right;"]{float:none!important}.gallery_page_nggallery-manage-gallery .ui-dialog{width:95%!important;left:2.5%!important}.gallery_page_nggallery-manage-gallery .ui-dialog .ngg-overlay-dialog{padding:30px 10px}.ngg-overlay-dialog td{display:block;width:100%!important;padding:0!important}.ngg-overlay-dialog input[type=radio]{margin:2px 5px;height:16px;width:16px}}
1
+ #iframely h2.title,.gallery_page_nggallery-manage-gallery #ngg_page_content>.wrap>h2{display:none}.toplevel_page_nextgen-gallery #ngg_page_content{width:98%}.toplevel_page_nextgen-gallery #ngg_page_content .about-wrap.ngg_overview{width:100%}.toplevel_page_nextgen-gallery #ngg_page_content .ngg_page_content_main{padding-right:40px!important}#newversion{border-color:#CCC;border-style:solid;border-width:1px;margin-right:7px;margin-top:10px;padding:2px}.ngg-dashboard-widget ul.settings span{padding-left:10px;color:#2583AD;font-weight:700}.ngg-overview .postbox .handlediv{float:right;height:24px;width:24px}#ngg_page_content .ngg_overview .ngg_page_content_header h2{padding-top:2px}#ngg_page_content .ngg_overview .ngg_page_content_main h2{text-align:left;font-size:22px;font-weight:400;color:#000;margin:20px 0;text-transform:uppercase;letter-spacing:2px}#ngg_page_content .ngg_overview .ngg_page_content_main .about-text{font-size:17px;max-width:none;margin:20px 0;color:#000;font-weight:400}#ngg-gallery-wizard{min-height:auto;position:absolute;top:0;right:0;text-align:right;margin:0;line-height:80px;font-size:14px;color:#000;font-weight:400;letter-spacing:.5px}#ngg_page_content #ngg-gallery-wizard a{font-weight:700;text-decoration:none;margin-left:20px;height:50px!important;line-height:50px}.warning{color:#9F6000;background-color:#FEEFB3;border:1px solid;margin:5px 0;padding:5px}#donator_message,#wm-preview{border-style:solid;border-width:1px}#donator_message{background-color:#BDE5F8;border-color:#00529B;-moz-border-radius-bottomleft:3px;-moz-border-radius-bottomright:3px;-moz-border-radius-topleft:3px;-moz-border-radius-topright:3px;margin:5px 15px 2px;padding:0 .6em}#wm-preview h3,.wm-table tr{background:0 #F9F9F9}#donator_message p{line-height:1;margin:.5em 0;padding:2px 2px 10px}#donator_message span{padding-top:10px;float:right}#plugin_check img{float:right}#plugin_check p.message{font-size:90%;color:#666}.toplevel_page_nextgen-gallery .feature-video iframe{box-shadow:0 0 8px 4px rgba(0,0,0,.03);width:800px;height:450px;max-width:100%}div[data-id=welcome-link] .about-text{margin:0 0 40px!important}div[data-id=pro-link] .feature-section{position:relative;margin:40px 0;padding-bottom:56.25%}div[data-id=pro-link] .feature-section iframe{max-width:100%;position:absolute;top:0;left:0;width:100%;height:100%}#ngg_page_content .button-primary.ngg-pro-upgrade{height:50px!important;padding:0 40px!important;line-height:50px}div[data-id=videos-link] .feature-section,div[data-id=videos-link] .feature-section .col,div[data-id=genesis-link] .feature-section,div[data-id=genesis-link] .feature-section .col{padding:0;margin:0}.ngg-admin .ui-dialog{max-width:100%}.ngg-options th{width:22%}a.switch-expert{text-decoration:none}#wm-preview{float:right;font-size:90%;width:35%;border-color:#EBEBEB #ccc #ccc #ebebeb;margin-bottom:10px;margin-left:10px;margin-right:8px;padding:2px}#wm-preview h3{font-size:14px;font-weight:700;margin:0 0 10px;padding:8px 5px}.wm-table td,.wm-table th{border-bottom:8px solid #FFF;padding:10px}#wm-position{width:100%;margin-left:40px}.wm-table{border-collapse:collapse;margin-top:1em;width:60%;clear:none}.wm-table td{line-height:20px;margin-bottom:9px}#gallerydiv h3,#gallerydiv span.toggle-indicator{line-height:50px;display:inline-block;float:left}.wm-table th{text-align:left}.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content .notice,.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content div.error,.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content div.updated{margin:10px 0 40px}.ngg_admin_notice ul{list-style:circle inside;margin:0;padding:0}.gallery_page_nggallery-manage-gallery #ngg_page_content .ngg_page_content_main{padding-top:30px}.ngg-admin.gallery_page_nggallery-manage-gallery #ngg_page_content div.updated#message{margin-bottom:35px}#ngg_page_content .ngg_manage_galleries .tablenav{margin:0 0 30px}#ngg_page_content .ngg_manage_images .handlediv{float:none;width:100%;height:50px}#gallerydiv h3{height:50px;margin:0;text-transform:uppercase;font-size:16px;letter-spacing:1.5px}#gallerydiv span.toggle-indicator:before{font-size:24px;margin:12px 20px 0 10px}#gallerydiv span.toggle-indicator:hover{cursor:pointer}#gallerydiv h3:active,#gallerydiv h3:focus,#gallerydiv span.toggle-indicator:active,#gallerydiv span.toggle-indicator:focus{outline:0;border:none;-moz-outline-style:none}#ngg_page_content .ngg_manage_images .tablenav{margin:50px 0 30px}#ngg_page_content .ngg_manage_galleries .tablenav.top>div,#ngg_page_content .ngg_manage_images .tablenav.top>div{margin-bottom:10px}#ngg_page_content .ngg_manage_galleries .search-box-wrapper{display:flex;flex-direction:row;justify-content:center;width:100%}#ngg_page_content .ngg_manage_galleries div.search-box{display:flex;flex-direction:row;justify-content:center}#ngg_page_content .ngg_manage_galleries .search-box input[type=text]{width:calc(100% - 150px)!important;height:35px!important;margin-right:4px!important}#ngg_page_content .ngg_manage_galleries .search-box input[type=submit].button-primary{width:150px!important;height:35px!important;padding:0!important}#ngg_page_content .ngg_manage_galleries form.search-form{width:100%}#ngg_page_content .ngg_manage_galleries form.search-form:first-of-type{padding-right:25px}#ngg_page_content #editgalleries .displaying-num{margin-right:7px!important;font-size:14px;letter-spacing:1px}#ngg_page_content #editgalleries #bulkaction{min-height:35px;max-height:35px}#ngg_page_content .ngg_manage_galleries .tablenav.bottom{margin:15px 0 0}#ngg_page_content .ngg_manage_images .tablenav.bottom{margin:25px 0 0}.ngg-admin #ngg_page_content .ngg_manage_images td{vertical-align:top}#ngg_page_content .ngg_manage_galleries .tablenav input{height:28px;width:50px;padding:0 3px}#ngg_page_content .ngg_manage_galleries .tablenav input.current-page{width:50px!important}#ngg_page_content .ngg_manage_images .tablenav .tablenav-pages{margin-top:0}#ngg_page_content .ngg_manage_galleries .tablenav .tablenav-pages{margin-top:6px}#ngg_page_content .ngg_manage_galleries .tablenav .tablenav-pages a,#ngg_page_content .ngg_manage_images .tablenav .tablenav-pages a{background:#000;border:none;color:#fff!important;margin:0 2px;text-decoration:none;font-size:20px;line-height:20px;padding:2px 8px 6px}#ngg_page_content .ngg_manage_images .tablenav input,#ngg_page_content .ngg_manage_images .tablenav select{width:auto;margin-top:0}#ngg_page_content #ngg-manage-images-items-per-page,#ngg_page_content .ngg_manage_images .tablenav input.current-page{padding:4px!important;text-align-last:center;background-image:none}#ngg_page_content .ngg_manage_galleries table{box-shadow:none;border:1px solid rgba(159,187,26,.08)!important}#ngg_page_content .ngg_manage_galleries table tfoot,#ngg_page_content .ngg_manage_galleries table thead{background-color:#000}#ngg_page_content .ngg_manage_galleries table tfoot td,#ngg_page_content .ngg_manage_galleries table tfoot th,#ngg_page_content .ngg_manage_galleries table thead td,#ngg_page_content .ngg_manage_galleries table thead th{background-color:transparent;border:none}#ngg_page_content .ngg_manage_galleries table td,#ngg_page_content .ngg_manage_galleries table th{padding:12px 10px;font-size:14px}#ngg_page_content .ngg_manage_galleries table th{font-weight:700!important;color:#fff}.ngg_manage_galleries th#id{width:33px}.ngg_manage_galleries th#title{min-width:140px}.ngg_manage_galleries td.title{text-transform:uppercase;font-weight:400;font-size:13px!important}.ngg_manage_galleries th#author{min-width:80px}.ngg_manage_galleries th#page_id{min-width:60px}#ngg_page_content .ngg_manage_galleries table tr.alternate{background-color:#f7f7f7}#ngg_page_content .ngg_manage_galleries th a{padding:0!important;color:#fff}div#poststuff{min-width:auto}div#poststuff #gallerydiv{cursor:pointer}p#ngg-inlinebutton{float:right;margin:0;position:relative;top:-25pt}#gallery_fields{width:100%}#gallery_fields td{padding:5px;min-width:105px}#gallery_fields tr td:nth-of-type(2){padding-right:60px}#gallery_fields input[type=text],#gallery_fields select,#gallery_fields textarea{min-width:220px;width:99%;color:#888}table#ngg-listimages{border:1px solid #f7f7f7}#ngg-listimages tfoot,#ngg-listimages thead{background:#000}#ngg-listimages.widefat thead th,.ngg-admin #ngg_page_content .widefat tfoot th{padding:12px 10px!important}#ngg-listimages tr.alternate{background-color:#f7f7f7}#ngg-listimages td{padding:15px 5px!important}#ngg-listimages .iedit,#ngg-listimages .iedit td,#ngg-listimages th{border:none}#ngg-listimages .iedit td,#ngg-listimages th{padding:15px 5px}#ngg-listimages th{font-size:12px;font-weight:700}#ngg-listimages .column select{width:100%!important}#ngg-listimages .column-1 input{margin:0 0 0 8px}#ngg-listimages .column-1{width:24px}#ngg-listimages .column-2{width:30px}#ngg-listimages .column-3{min-width:80px;width:15%}#ngg-listimages .column-3 .thumb{max-height:100%;max-width:100%}#ngg-listimages .column-4{width:15%;max-width:220px;font-size:12px}#ngg-listimages .column-4 .meta,#ngg-listimages .column-4 label{font-size:10px;color:#888}#ngg-listimages .column-4 label input[type=checkbox]{margin:-2px 4px 0 0}#ngg-listimages .column-5 input[type=text],#ngg-listimages .column-5 textarea,#ngg-listimages .column-6 textarea{width:100%;padding:3px 5px;font-size:12px;color:#888;border:1px solid #eee;margin:1px 0;box-shadow:none}#ngg-listimages .column-5 input[type=text]{height:25px}#ngg-listimages .column-5 textarea{height:70px}#ngg-listimages .column-6 textarea{height:97px}#ngg-listimages .column-7 select{font-size:12px}#ngg-listimages .row-actions{padding:0 0 6px 4px;margin-bottom:-2px;position:relative;bottom:4px;left:0;right:0}#ngg-listimages .row_actions,#ngg-listimages .row_actions td{border-top:none;padding:0!important}#ngg-listimages .row-actions a{font-size:12px}#ngg-listimages ul.imagify-datas-list .big{color:#9fbb1a}#ngg-listimages .imagify-datas-more-action a{background:#9fbb1a;color:#fff}.gallery_page_nggallery-manage-gallery .ui-dialog{border:none;padding:0;max-width:95%!important;z-index:10000!important;margin:0 auto!important}.gallery_page_nggallery-manage-album .ui-dialog{border:none;padding:0;z-index:10000!important;width:650px!important;max-width:98%!important}.gallery_page_nggallery-manage-album .ui-dialog .button-primary,.gallery_page_nggallery-manage-album .ui-dialog .button-secondary,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-primary,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-secondary,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom button,.gallery_page_nggallery-manage-gallery .ui-dialog .button-primary,.gallery_page_nggallery-manage-gallery .ui-dialog .button-secondary,.gallery_page_nggallery-manage-gallery .ui-dialog button{background-color:#9fbb1a!important;color:#fff!important;border:none!important;box-shadow:none!important;text-shadow:none!important;height:35px!important;padding:0 15px!important;line-height:35px;width:auto!important;margin-right:10px;text-transform:uppercase;letter-spacing:1px}.gallery_page_nggallery-manage-album .ui-dialog .button-primary:hover,.gallery_page_nggallery-manage-album .ui-dialog .button-secondary:hover,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-primary:hover,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom .button-secondary:hover,.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom button:hover,.gallery_page_nggallery-manage-gallery .ui-dialog .button-secondary:hover,.gallery_page_nggallery-manage-gallery .ui-dialog button:hover .gallery_page_nggallery-manage-gallery .ui-dialog .button-primary:hover{background-color:#A9C524!important}.gallery_page_nggallery-manage-album .ui-dialog-titlebar,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar{background:#000;padding:10px}.gallery_page_nggallery-manage-album .ui-dialog-titlebar .ui-dialog-title,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar .ui-dialog-title{text-transform:uppercase;letter-spacing:1px}.gallery_page_nggallery-manage-album .ui-dialog-titlebar button,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button{background:#fff!important;border:none!important;box-shadow:none!important;text-shadow:none!important;height:24px!important;width:24px!important;padding:0!important;line-height:1;float:none;margin-right:0;border-radius:50%;top:17px;right:10px}.gallery_page_nggallery-manage-album .ui-dialog-titlebar button:active,.gallery_page_nggallery-manage-album .ui-dialog-titlebar button:focus,.gallery_page_nggallery-manage-album .ui-dialog-titlebar button:hover,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button:active,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button:focus,.gallery_page_nggallery-manage-gallery .ui-dialog-titlebar button:hover{background:#fff!important}.gallery_page_nggallery-manage-album .ui-dialog .ngg-overlay-dialog,.gallery_page_nggallery-manage-gallery .ui-dialog .ngg-overlay-dialog{padding:30px 20px;box-sizing:border-box;width:100%!important}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog table{border:none}.gallery_page_nggallery-manage-album .ngg-overlay-dialog #ngg-overlay-dialog-main,.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog #ngg-overlay-dialog-main{width:70%;padding:20px 20px 0}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog td small{display:block;text-align:center;width:200px;margin:0 auto 20px}.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom{text-align:center;padding:30px 0 0}.gallery_page_nggallery-manage-gallery #ngg-overlay-dialog-bottom input[type=button]{float:none;margin-right:0}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog #thumbMsg{color:#693;font-size:11px;width:100%;display:inline-block;height:35px;line-height:35px;margin:10px 0}.gallery_page_nggallery-manage-gallery .ui-dialog form{margin-top:30px;margin-left:30px}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog input[type=radio]:focus{border:1px solid #b4b9be;box-shadow:none}.gallery_page_nggallery-manage-gallery input[type=checkbox]:checked:before{color:#9fbb1a}.gallery_page_nggallery-manage-gallery .ngg-overlay-dialog input[type=radio]:checked:before{background:#9fbb1a;width:14px;height:14px;margin:0}div .progressborder{border:1px solid #DDD;display:block;height:30px;background-color:#464646;width:100%;margin-top:15px;margin-bottom:15px;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div .progressbar{border:none;display:block;height:30px;background-color:#9fbb1a;width:0%;-moz-border-radius:5px;-webkit-border-radius:5px;border-radius:5px}div .progressbar span{display:inline;position:absolute;color:#fff;font-weight:700;padding:5px 0 0 5px}.show_details{height:16px;line-height:20px;overflow:hidden;min-width:8em;padding:3px;cursor:pointer}.show_details span{border-bottom:1px solid #999;white-space:pre}.show_details:hover{height:auto;overflow:visible;border:1px solid #999}.gallery_page_nggallery-manage-album .wrap>h2:first-child{display:none}.gallery_page_nggallery-manage-album #ngg_page_content div.updated{margin:0 0 15px}.gallery_page_nggallery-manage-album #ngg_page_content div.updated#message{margin-bottom:35px}.ngg_manage_albums .widget{box-sizing:border-box;border:1px solid #eee;padding:10px 10px 20px;width:32%;margin:0 1% 0 0;float:left;box-shadow:0 0 4px 2px rgba(0 0 4px 2px rgba(0,0,0,.02))}.container{margin-top:10px}.ngg_manage_albums .container{margin-top:30px}.ngg_select_album{margin:0 50px 0 2px;vertical-align:middle}#newalbum,.ngg_new_album{vertical-align:middle}.albumnav select[name=act_album]{width:150px}#editalbum select[name=pageid]{width:95%}#ngg_page_content .ngg_manage_albums .widget-top{box-shadow:none;border:none;margin:-10px -10px 20px;background:#f7f7f7}div .groupItem{cursor:move;padding:2px;line-height:1.5;width:100%;margin:0;box-sizing:border-box}div .innerhandle{background-color:#FBFBFB}.groupItem .item_top{background-color:#9fbb1a;color:#FFF;font-weight:400;border-radius:0;height:40px;padding:0 10px;line-height:40px}#ngg_page_content .groupItem .album_obj{background-color:#000}#ngg_page_content .groupItem .item_top a{color:#FFF;float:right;text-decoration:none}.groupItem .item_top a:hover{color:#FFF}.itemContent{border-color:#DFDFDF;border-style:none solid solid;border-width:0 1px 1px;padding:2px 0 20px 2px}.itemContent p{border:0;margin:0;padding:0}.inlinepicture{float:left;display:inline;margin:0;padding:0 3px 1px}.inlinepicture img{margin:3px;max-height:60px}.sort_placeholder{border:1px dashed #bba!important;margin:5px;background:#F9F9F9}.widget-holder{min-height:400px;padding-top:1px}.target{background-color:transparent}div.widget-top h3{text-align:center;line-height:25px;margin:0;padding:5px 12px;font-size:13px;letter-spacing:.5px;text-transform:uppercase}div.widget-top{text-shadow:0 1px 0 #FFF;background-repeat:repeat-x;background-position:0 0;font-size:13px}.ui-autocomplete-start{background-position:99% center}#ngg_page_content .ngg_gallery_sort .tablenav{margin:15px 0}#ngg_page_content .ngg_gallery_sort ul.subsubsub{margin:10px 0 15px}#ngg_page_content .ngg_gallery_sort .imageBox_theImage{width:auto}#sortGallery{position:relative}p#sortButton{margin:0;position:absolute;right:0;top:0}.imageBox,.imageBoxHighlighted{width:130px;height:160px;float:left;overflow:hidden;text-overflow:ellipsis;padding:5px}.imageBox_theImage{width:110px;height:125px;background-position:center;background-repeat:no-repeat;margin:0 auto 2px}.imageBox_label{text-align:center;font-family:arial;font-size:11px;padding-top:2px;margin:0 auto}#insertionMarker{height:150px;width:6px;position:absolute}#insertionMarkerLine{width:6px;height:145px}#insertionMarker img{float:left}#dragDropContent{opacity:.4;filter:alpha(opacity=40);position:absolute;z-index:10;display:none}.error_inline{background:0 #FFEBE8;border:1px solid #C00;margin:5px auto;padding:10px}.ngg-list{font-size:11px;margin-left:15px;list-style-position:inside;list-style-type:disc}#ngg-manage-images-items-per-page-label{float:right;line-height:35px;margin-right:5px}#ngg-manage-images-items-per-page{float:right;margin-right:30px}@media (max-width:1200px){div[data-id=details-link] .two-col .col{width:100%;min-width:100%}}@media (max-width:1080px){#ngg-gallery-wizard>span,.ngg_manage_galleries .tablenav.bottom{display:none}.ngg_manage_images #gallery_fields td:nth-of-type(even){margin-bottom:8px}.ngg_manage_images #gallery_fields td:nth-of-type(odd){background:#f7f7f7;padding-left:10px;font-weight:700}.ngg_manage_images #gallery_fields,.ngg_manage_images #gallery_fields tbody,.ngg_manage_images #gallery_fields td,.ngg_manage_images #gallery_fields tr{display:block;width:100%;box-sizing:border-box}.ngg_manage_images #gallery_fields td{padding:10px 5px;border:1px solid #f7f8f3;margin:0}}@media (max-width:900px){.ngg_manage_galleries tfoot{display:none}.ngg_manage_galleries .wp-list-table tr:not(.inline-edit-row):not(.no-items) td:not(.check-column){display:table-cell}.ngg_manage_galleries td.author,.ngg_manage_galleries td.id,.ngg_manage_galleries td.page_id,.ngg_manage_galleries th#author,.ngg_manage_galleries th#id,.ngg_manage_galleries th#page_id{display:none!important}#ngg-listimages td.column.column-2,#ngg-listimages td.column.column-6,#ngg-listimages td.column.column-8,#ngg-listimages tfoot,#ngg-listimages thead .column-1,#ngg-listimages thead .column-2,#ngg-listimages thead .column-4,#ngg-listimages thead .column-5,#ngg-listimages thead .column-6,#ngg-listimages thead .column-7,#ngg-listimages thead .column-8{display:none}#ngg-listimages .column-3{min-width:200px}table#ngg-listimages,table#ngg-listimages thead{display:block}#ngg-listimages .iedit td{padding-bottom:30px!important}}@media (max-width:800px){table#ngg-listimages,table#ngg-listimages tbody,table#ngg-listimages td,table#ngg-listimages tr{display:block}table#ngg-listimages tr{padding:10px 5px!important}#ngg-listimages thead,#ngg-listimages thead th{display:block;width:100%;box-sizing:border-box}#ngg-listimages .row_actions td:first-of-type,#ngg-listimages tfoot{display:none}#ngg-listimages .row_actions{display:none;display:block;clear:both;padding:0 8px 10px!important;border-bottom:1px solid #c1c97c}#ngg-listimages td.column-3,.ngg-listimages tr.iedit td{padding-bottom:10px!important;float:left;box-sizing:border-box}.ngg-listimages tr.iedit td{display:block!important}#ngg-listimages td.column-1,#ngg-listimages td.column-2{width:10%!important;height:150px;float:left;box-sizing:border-box;display:none}#ngg-listimages td.column-3{width:55%;max-width:300px}#ngg-listimages td.column-4{width:40%!important;float:left;box-sizing:border-box}#ngg-listimages td.column-5,#ngg-listimages td.column-6,#ngg-listimages td.column-7{padding:0 5px!important}#ngg-listimages td.column-6{margin-top:-5px;margin-bottom:-8px}.ngg-listimages td.column-7{padding-bottom:15px}#ngg-manage-images-items-per-page,#ngg-manage-images-items-per-page-label{display:none}#ngg-listimages .column-6 textarea{height:60px}.ngg_manage_images .tablenav.bottom .displaying-num{display:none}}@media (max-width:782px){#ngg-gallery-wizard{display:none}#ngg_page_content .ngg_manage_galleries .tablenav.top>div{display:block;width:100%}#ngg_page_content .ngg_manage_galleries .tablenav .tablenav-pages{margin-top:20px;margin-bottom:28px!important}#ngg_page_content .ngg_manage_galleries .search-box input[type=text]{width:calc(100% - 150px)!important}#ngg_page_content .ngg_manage_galleries .search-box input[type=submit].button-primary{height:40px!important}#ngg_page_content .ngg_manage_galleries .search-box-wrapper{flex-direction:column}#ngg_page_content .ngg_manage_galleries form.search-form{width:100%}#ngg_page_content #editgalleries div.tablenav.top div.alignleft.actions input.button-primary{width:auto!important;display:inline-block}#ngg_page_content #editgalleries div.tablenav.top div.alignleft.actions input.button-primary:first-of-type{margin-left:5px}#ngg_page_content #editgalleries div.tablenav.top div.tablenav-pages{display:none}#ngg_page_content #editgalleries #bulkaction{width:auto!important}}@media (max-width:737px){.gallery_page_nggallery-manage-gallery input[type=checkbox]:checked:before{font-size:22px}.ngg-overlay-dialog input[type=radio]{height:16px;width:16px}#ngg-gallery-wizard{display:none}}@media (max-width:640px){.ngg_manage_galleries td.description,.ngg_manage_galleries th#description{display:none!important}.ngg_manage_albums .tablenav .actions{width:100%;float:none}.ngg_manage_albums .tablenav span{display:block}.ngg_manage_albums .target-album,.ngg_manage_albums .widget.widget-right{width:32%!important;margin:.5%!important;padding:5px 5px 10px}.groupItem .item_top{height:auto!important;line-height:1.5;padding:8px;font-size:12px}#ngg_page_content .groupItem .item_top a{display:none}.ngg_manage_albums div[style="float:right;"]{float:none!important}.gallery_page_nggallery-manage-gallery .ui-dialog{width:95%!important;left:2.5%!important}.gallery_page_nggallery-manage-gallery .ui-dialog .ngg-overlay-dialog{padding:30px 10px}.ngg-overlay-dialog td{display:block;width:100%!important;padding:0!important}.ngg-overlay-dialog input[type=radio]{margin:2px 5px;height:16px;width:16px}}
products/photocrati_nextgen/modules/ngglegacy/admin/manage-galleries.php CHANGED
@@ -1,496 +1,670 @@
1
  <?php
2
 
3
- if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); }
 
4
 
5
- // *** show main gallery list
6
- function nggallery_manage_gallery_main() {
 
7
 
8
- global $ngg, $nggdb, $wp_query;
9
 
10
- $action_status = array('message' => '', 'status' => 'ok');
11
-
12
- //Build the pagination for more than 25 galleries
13
  $_GET['paged'] = isset($_GET['paged']) && ($_GET['paged'] > 0) ? absint($_GET['paged']) : 1;
14
 
15
- $items_per_page = apply_filters('ngg_manage_galleries_items_per_page', 25);
16
 
17
- $start = ( $_GET['paged'] - 1 ) * $items_per_page;
18
 
19
  if (!empty($_GET['order']) && in_array(strtoupper($_GET['order']), array('DESC', 'ASC')))
20
- $order = $_GET['order'];
21
- else
22
- $order = apply_filters('ngg_manage_galleries_items_order', 'ASC');
23
-
24
- if (!empty($_GET['orderby']) && in_array($_GET['orderby'], array('gid', 'title', 'author')))
25
- $orderby = $_GET['orderby'];
26
- else
27
- $orderby = apply_filters('ngg_manage_galleries_items_orderby', 'gid');
28
-
29
- $mapper = C_Gallery_Mapper::get_instance();
30
- $total_number_of_galleries = $mapper->count();
31
- $gallerylist = $mapper->select()->order_by($orderby, $order)->limit($items_per_page, $start)->run_query();
32
-
33
- // Need for upgrading from 2.0.40 to 2.0.52 or later.
34
- // For some reason, the installer doesn't always run.
35
- // TODO: Remove in 2.1
36
- if (!$gallerylist){
37
- global $wpdb;
38
- if ($wpdb->get_results("SELECT gid FROM {$wpdb->nggallery} LIMIT 1")) {
39
- $installer = new C_NggLegacy_Installer();
40
- $installer->install();
41
- $gallerylist = $mapper->select()->order_by($orderby, $order)->limit($items_per_page, $start)->run_query();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
42
  }
43
- }
44
- $wp_list_table = new _NGG_Galleries_List_Table('nggallery-manage-gallery');
45
-
46
- ?>
47
- <script type="text/javascript">
48
- <!--
49
-
50
- // Listen for frame events
51
- jQuery(function($){
52
- if ($(this).data('ready')) return;
53
-
54
- if (window.Frame_Event_Publisher) {
55
-
56
- // If a new gallery is added, refresh the page
57
- Frame_Event_Publisher.listen_for('attach_to_post:new_gallery attach_to_post:manage_images attach_to_post:images_added',function(){
58
- window.location.href = window.location.href.toString();
59
- });
60
- }
61
-
62
- $(this).data('ready', true);
63
- });
64
-
65
-
66
- function checkAll(form)
67
- {
68
- for (i = 0, n = form.elements.length; i < n; i++) {
69
- if(form.elements[i].type == "checkbox") {
70
- if(form.elements[i].name == "doaction[]") {
71
- if(form.elements[i].checked == true)
72
- form.elements[i].checked = false;
73
- else
74
- form.elements[i].checked = true;
75
- }
76
- }
77
- }
78
- }
79
-
80
- function getNumChecked(form)
81
- {
82
- var num = 0;
83
- for (i = 0, n = form.elements.length; i < n; i++) {
84
- if(form.elements[i].type == "checkbox") {
85
- if(form.elements[i].name == "doaction[]")
86
- if(form.elements[i].checked == true)
87
- num++;
88
- }
89
- }
90
- return num;
91
- }
92
-
93
- // this function check for a the number of selected images, sumbmit false when no one selected
94
- function checkSelected() {
95
-
96
- if (typeof document.activeElement == "undefined" && document.addEventListener) {
97
- document.addEventListener("focus", function (e) {
98
- document.activeElement = e.target;
99
- }, true);
100
  }
101
 
102
- if ( document.activeElement.name == 'post_paged' )
103
- return true;
104
-
105
- var numchecked = getNumChecked(document.getElementById('editgalleries'));
106
-
107
- if(numchecked < 1) {
108
- alert('<?php echo esc_js(__('No images selected', 'nggallery')); ?>');
109
- return false;
110
- }
111
-
112
- actionId = jQuery('#bulkaction').val();
113
-
114
- switch (actionId) {
115
- case "resize_images":
116
- showDialog('resize_images', '<?php echo esc_js(__('Resize images','nggallery')); ?>');
117
- return false;
118
- break;
119
- case "new_thumbnail":
120
- showDialog('new_thumbnail', '<?php echo esc_js(__('Create new thumbnails','nggallery')); ?>');
121
- return false;
122
- break;
123
- }
124
-
125
- return confirm('<?php echo sprintf(esc_js(__("You are about to start the bulk edit for %s galleries \n \n 'Cancel' to stop, 'OK' to proceed.",'nggallery')), "' + numchecked + '") ; ?>');
126
- }
127
-
128
- function showDialog( windowId, title ) {
129
- var form = document.getElementById('editgalleries');
130
- var elementlist = "";
131
- for (i = 0, n = form.elements.length; i < n; i++) {
132
- if(form.elements[i].type == "checkbox") {
133
- if(form.elements[i].name == "doaction[]")
134
- if(form.elements[i].checked == true)
135
- if (elementlist == "")
136
- elementlist = form.elements[i].value;
137
- else
138
- elementlist += "," + form.elements[i].value ;
139
- }
140
- }
141
- jQuery("#" + windowId + "_bulkaction").val(jQuery("#bulkaction").val());
142
- jQuery("#" + windowId + "_imagelist").val(elementlist);
143
- // now show the dialog
144
- jQuery( "#" + windowId ).dialog({
145
- width: 640,
146
- resizable : false,
147
- modal: true,
148
- title: title,
149
- position: {
150
- my: 'center',
151
- at: 'center',
152
- of: window.parent
153
- }
154
- });
155
- jQuery("#" + windowId + ' .dialog-cancel').click(function() { jQuery( "#" + windowId ).dialog("close"); });
156
- }
157
-
158
- function showAddGallery() {
159
- jQuery( "#addGallery").dialog({
160
- width: 640,
161
- resizable : false,
162
- modal: true,
163
- title: '<?php echo esc_js(__('Add new gallery','nggallery')); ?>',
164
- position: {
165
- my: 'center',
166
- at: 'center',
167
- of: window.parent
168
- }
169
- });
170
- jQuery("#addGallery .dialog-cancel").click(function() { jQuery( "#addGallery" ).dialog("close"); });
171
- }
172
- //-->
173
- </script>
174
-
175
- <?php if (isset($action_status) && $action_status['message']!='') : ?>
176
- <div id="message" class="<?php echo ($action_status['status']=='ok' ? 'updated' : $action_status['status']); ?> fade">
177
- <p><strong><?php echo $action_status['message']; ?></strong></p>
178
- </div>
179
- <?php endif; ?>
180
-
181
- <div class="wrap ngg_manage_galleries">
182
- <div class="ngg_page_content_header"><img src="<?php echo(C_Router::get_instance()->get_static_url('photocrati-nextgen_admin#imagely_icon.png')); ?>"><h3><?php echo _n( 'Manage Galleries', 'Manage Galleries', 2, 'nggallery'); ?></h3>
183
- </div>
184
-
185
- <div class='ngg_page_content_main'>
186
-
187
- <form class="search-form" action="" method="get">
188
- <p class="search-box">
189
- <label class="hidden" for="media-search-input"><?php _e( 'Search Images', 'nggallery' ); ?>:</label>
190
- <input type="hidden" id="page-name" name="page" value="nggallery-manage-gallery" />
191
- <input type="text" id="media-search-input" name="s" value="<?php the_search_query(); ?>" />
192
- <input type="submit" value="<?php _e( 'Search Images', 'nggallery' ); ?>" class="button-primary" />
193
- </p>
194
- </form>
195
- <form id="editgalleries" class="nggform" method="POST" action="<?php echo nextgen_esc_url($ngg->manage_page->base_page . '&orderby=' . $orderby . '&order=' . $order . '&paged=' . $_GET['paged']); ?>" accept-charset="utf-8">
196
- <?php wp_nonce_field('ngg_bulkgallery') ?>
197
- <input type="hidden" name="nggpage" value="manage-galleries" />
198
-
199
- <div class="tablenav top">
200
-
201
- <div class="alignleft actions">
202
- <?php if ( function_exists('json_encode') ) : ?>
203
- <select name="bulkaction" id="bulkaction">
204
- <option value="no_action" ><?php _e("Bulk actions",'nggallery'); ?></option>
205
- <option value="delete_gallery" ><?php _e("Delete",'nggallery'); ?></option>
206
- <option value="set_watermark" ><?php _e("Set watermark",'nggallery'); ?></option>
207
- <option value="new_thumbnail" ><?php _e("Create new thumbnails",'nggallery'); ?></option>
208
- <option value="resize_images" ><?php _e("Resize images",'nggallery'); ?></option>
209
- <option value="import_meta" ><?php _e("Import metadata",'nggallery'); ?></option>
210
- <option value="recover_images" ><?php _e("Recover from backup",'nggallery'); ?></option>
211
- </select>
212
- <input name="showThickbox" class="button-primary" type="submit" value="<?php _e('Apply','nggallery'); ?>" onclick="if ( !checkSelected() ) return false;" />
213
- <?php endif; ?>
214
- <?php if ( current_user_can('NextGEN Upload images') && nggGallery::current_user_can( 'NextGEN Add new gallery' ) ) : ?>
215
- <input name="doaction" class="button-primary action" type="submit" onclick="showAddGallery(); return false;" value="<?php _e('Add new gallery', 'nggallery') ?>"/>
216
- <?php endif; ?>
217
- </div>
218
-
219
-
220
- <?php $ngg->manage_page->pagination( 'top', $_GET['paged'], $total_number_of_galleries, $items_per_page ); ?>
221
-
222
- </div>
223
- <table class="wp-list-table widefat" cellspacing="0">
224
- <thead>
225
- <tr>
226
- <?php $wp_list_table->print_column_headers(true); ?>
227
- </tr>
228
- </thead>
229
- <tfoot>
230
- <tr>
231
- <?php $wp_list_table->print_column_headers(false); ?>
232
- </tr>
233
- </tfoot>
234
- <tbody id="the-list">
235
- <?php
236
-
237
- if($gallerylist) {
238
- //get the columns
239
- $gallery_columns = $wp_list_table->get_columns();
240
- $hidden_columns = get_hidden_columns('nggallery-manage-gallery');
241
- $num_columns = count($gallery_columns) - count($hidden_columns);
242
- $image_mapper = C_Image_Mapper::get_instance();
243
-
244
- foreach($gallerylist as $gallery) {
245
- $alternate = ( !isset($alternate) || $alternate == 'class="alternate"' ) ? '' : 'class="alternate"';
246
- $gid = $gallery->gid;
247
- $name = (empty($gallery->title) ) ? $gallery->name : $gallery->title;
248
- $author_user = get_userdata( (int) $gallery->author );
249
- ?>
250
- <tr id="gallery-<?php echo $gid ?>" <?php echo $alternate; ?> >
251
- <?php
252
- foreach($gallery_columns as $gallery_column_key => $column_display_name) {
253
- $class = "class=\"$gallery_column_key column-$gallery_column_key\"";
254
-
255
- $style = '';
256
- if ( in_array($gallery_column_key, $hidden_columns) )
257
- $style = ' style="display:none;"';
258
-
259
- $attributes = "$class$style";
260
-
261
- switch ($gallery_column_key) {
262
- case 'cb' :
263
- ?>
264
- <th scope="row" class="column-cb check-column">
265
- <?php if (nggAdmin::can_manage_this_gallery($gallery->author)) { ?>
266
- <input name="doaction[]" type="checkbox" value="<?php echo $gid ?>" />
267
- <?php } ?>
268
- </th>
269
- <?php
270
- break;
271
- case 'id' :
272
- ?>
273
- <td <?php echo $attributes ?>><?php echo $gid; ?></td>
274
- <?php
275
- break;
276
- case 'title' :
277
- ?>
278
- <td class="title column-title">
279
- <?php if (nggAdmin::can_manage_this_gallery($gallery->author)) { ?>
280
- <a href="<?php echo wp_nonce_url( $ngg->manage_page->base_page . '&amp;mode=edit&amp;gid=' . $gid, 'ngg_editgallery')?>" class='edit' title="<?php _e('Edit'); ?>" >
281
- <?php echo esc_html( M_I18N::translate($name) ); ?>
282
- </a>
283
- <?php } else { ?>
284
- <?php echo esc_html( M_I18N::translate($gallery->title) ); ?>
285
- <?php } ?>
286
- <div class="row-actions"></div>
287
- </td>
288
- <?php
289
- break;
290
- case 'description' :
291
- ?>
292
- <td <?php echo $attributes ?>><?php echo esc_html( M_I18N::translate($gallery->galdesc) ); ?>&nbsp;</td>
293
- <?php
294
- break;
295
- case 'author' :
296
- $author_string = $author_user === FALSE ? __('Deleted user', 'nggallery') : $author_user->display_name;
297
- ?>
298
- <td <?php echo $attributes ?>><?php echo esc_html($author_string); ?></td>
299
- <?php
300
- break;
301
- case 'page_id' :
302
- ?>
303
- <td <?php echo $attributes ?>><?php echo $gallery->pageid; ?></td>
304
- <?php
305
- break;
306
- case 'quantity' :
307
- global $wpdb;
308
- $gallery->counter = $wpdb->get_var($wpdb->prepare(
309
- "SELECT COUNT(*) FROM {$wpdb->nggpictures} WHERE galleryid = %d", $gallery->{$gallery->id_field}
310
- ));
311
-
312
- ?>
313
- <td <?php echo $attributes ?>><?php echo $gallery->counter; ?></td>
314
- <?php
315
- break;
316
- default :
317
- ?>
318
- <td <?php echo $attributes ?>><?php do_action('ngg_manage_gallery_custom_column', $gallery_column_key, $gid); ?></td>
319
- <?php
320
- break;
321
- }
322
- } ?>
323
- </tr>
324
- <?php
325
- }
326
- } else {
327
- echo '<tr><td colspan="7" align="center"><strong>' . __('No entries found', 'nggallery') . '</strong></td></tr>';
328
- }
329
- ?>
330
- </tbody>
331
- </table>
332
- <div class="tablenav bottom">
333
- <?php $ngg->manage_page->pagination( 'bottom', $_GET['paged'], $total_number_of_galleries, $items_per_page ); ?>
334
- </div>
335
- </form>
336
- </div> <!-- /.ngg_page_content_main -->
337
- </div> <!-- /.wrap -->
338
- <!-- #addGallery -->
339
- <div id="addGallery" style="display: none;" >
340
- <form id="form-tags" method="POST" accept-charset="utf-8">
341
- <?php wp_nonce_field('ngg_addgallery'); ?>
342
- <input type="hidden" name="nggpage" value="manage-galleries" />
343
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
344
- <tr>
345
- <td>
346
- <strong><?php _e('New Gallery', 'nggallery') ;?>:</strong> <input type="text" size="35" name="galleryname" value="" /><br />
347
- <?php if(!is_multisite()) { ?>
348
- <?php _e('Create a new , empty gallery below the folder', 'nggallery') ;?> <strong><?php echo $ngg->options['gallerypath']; ?></strong><br />
349
- <?php } ?>
350
- <i>( <?php _e('Allowed characters for file and folder names are', 'nggallery') ;?>: a-z, A-Z, 0-9, -, _ )</i>
351
- </td>
352
- </tr>
353
- <?php do_action('ngg_add_new_gallery_form'); ?>
354
- <tr align="right">
355
- <td class="submit">
356
- <input class="button-primary" type="submit" name="addgallery" value="<?php _e('OK','nggallery'); ?>" />
357
- &nbsp;
358
- <input class="button-primary dialog-cancel" type="reset" value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;" />
359
- </td>
360
- </tr>
361
- </table>
362
- </form>
363
- </div>
364
- <!-- /#addGallery -->
365
-
366
- <!-- #resize_images -->
367
- <div id="resize_images" style="display: none;" >
368
- <form id="form-resize-images" method="POST" accept-charset="utf-8">
369
- <?php wp_nonce_field('ngg_thickbox_form') ?>
370
- <input type="hidden" id="resize_images_imagelist" name="TB_imagelist" value="" />
371
- <input type="hidden" id="resize_images_bulkaction" name="TB_bulkaction" value="" />
372
- <input type="hidden" name="nggpage" value="manage-galleries" />
373
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
374
- <tr valign="top">
375
- <td>
376
- <strong><?php _e('Resize Images to', 'nggallery'); ?>:</strong>
377
- </td>
378
- <td>
379
- <input type="text" size="5" name="imgWidth" value="<?php echo $ngg->options['imgWidth']; ?>" /> x <input type="text" size="5" name="imgHeight" value="<?php echo $ngg->options['imgHeight']; ?>" />
380
- <br /><small><?php _e('Width x height (in pixel). NextGEN Gallery will keep ratio size','nggallery') ?></small>
381
- </td>
382
- </tr>
383
- <tr align="right">
384
- <td colspan="2" class="submit">
385
- <input class="button-primary" type="submit" name="TB_ResizeImages" value="<?php _e('OK', 'nggallery'); ?>" />
386
- &nbsp;
387
- <input class="button-primary dialog-cancel" type="reset" value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;" />
388
- </td>
389
- </tr>
390
- </table>
391
- </form>
392
- </div>
393
- <!-- /#resize_images -->
394
-
395
- <!-- #new_thumbnail -->
396
- <div id="new_thumbnail" style="display: none;" >
397
- <form id="form-new-thumbnail" method="POST" accept-charset="utf-8">
398
- <?php wp_nonce_field('ngg_thickbox_form') ?>
399
- <input type="hidden" id="new_thumbnail_imagelist" name="TB_imagelist" value="" />
400
- <input type="hidden" id="new_thumbnail_bulkaction" name="TB_bulkaction" value="" />
401
- <input type="hidden" name="nggpage" value="manage-galleries" />
402
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
403
- <tr valign="top">
404
- <th align="left"><?php _e('Width x height (in pixel)','nggallery') ?></th>
405
- <td>
406
- <?php include(dirname(__FILE__) . '/thumbnails-template.php'); ?>
407
- </td>
408
- </tr>
409
- <tr valign="top">
410
- <th align="left"><?php _e('Set fix dimension','nggallery') ?></th>
411
- <td><input type="checkbox" name="thumbfix" value="1" <?php checked('1', $ngg->options['thumbfix']); ?> />
412
- <br /><small><?php _e('Ignore the aspect ratio, no portrait thumbnails','nggallery') ?></small></td>
413
- </tr>
414
- <tr align="right">
415
- <td colspan="2" class="submit">
416
- <input class="button-primary" type="submit" name="TB_NewThumbnail" value="<?php _e('OK', 'nggallery');?>" />
417
- &nbsp;
418
- <input class="button-primary dialog-cancel" type="reset" value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;" />
419
- </td>
420
- </tr>
421
- </table>
422
- </form>
423
- </div>
424
- <!-- /#new_thumbnail -->
425
 
426
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  }
428
 
429
  /**
430
- * Construtor class to create the table layout
431
  *
432
  * @package WordPress
433
  * @subpackage List_Table
434
  * @since 1.8.0
435
  * @access private
436
  */
437
- class _NGG_Galleries_List_Table extends WP_List_Table {
438
- var $_screen;
439
- var $_columns;
 
440
 
441
- function __construct($screen)
442
- {
443
- if ( is_string( $screen ) )
444
- $screen = convert_to_screen( $screen );
445
 
446
- $this->_screen = $screen;
447
- $this->_columns = array() ;
448
 
449
- add_filter( 'manage_' . $screen->id . '_columns', array( &$this, 'get_columns' ), 0 );
450
- }
451
 
452
- function get_column_info() {
453
- $columns = get_column_headers( $this->_screen );
454
- $hidden = get_hidden_columns( $this->_screen );
455
- $_sortable = $this->get_sortable_columns();
 
456
 
457
- foreach ( $_sortable as $id => $data ) {
458
- if ( empty( $data ) )
459
- continue;
460
 
461
- $data = (array) $data;
462
- if ( !isset( $data[1] ) )
463
- $data[1] = false;
464
 
465
- $sortable[$id] = $data;
466
- }
467
 
468
- return array( $columns, $hidden, $sortable, null );
469
- }
470
 
471
  // define the columns to display, the syntax is 'internal name' => 'display name'
472
- function get_columns() {
473
- $columns = array();
474
-
475
- $columns['cb'] = '<input name="checkall" type="checkbox" onclick="checkAll(document.getElementById(\'editgalleries\'));" />';
476
- $columns['id'] = __('ID');
477
- $columns['title'] = _n( 'Gallery', 'Galleries', 1, 'nggallery');
478
- $columns['description'] = __('Description', 'nggallery');
479
- $columns['author'] = __('Author', 'nggallery');
480
- $columns['page_id'] = __('Page ID', 'nggallery');
481
- $columns['quantity'] = _n( 'Image', 'Images', 2, 'nggallery' );
482
-
483
- $columns = apply_filters('ngg_manage_gallery_columns', $columns);
484
-
485
- return $columns;
486
- }
487
-
488
- function get_sortable_columns() {
489
- return array(
490
- 'id' => array( 'gid', true ),
491
- 'title' => 'title',
492
- 'author' => 'author'
493
- );
494
- }
495
- }
496
- ?>
 
1
  <?php
2
 
3
+ if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF']))
4
+ die('You are not allowed to call this page directly.');
5
 
6
+ function nggallery_manage_gallery_main()
7
+ {
8
+ global $ngg;
9
 
10
+ $action_status = array('message' => '', 'status' => 'ok');
11
 
12
+ // Build the pagination for more than 25 galleries
 
 
13
  $_GET['paged'] = isset($_GET['paged']) && ($_GET['paged'] > 0) ? absint($_GET['paged']) : 1;
14
 
15
+ $items_per_page = apply_filters('ngg_manage_galleries_items_per_page', 25);
16
 
17
+ $start = ($_GET['paged'] - 1) * $items_per_page;
18
 
19
  if (!empty($_GET['order']) && in_array(strtoupper($_GET['order']), array('DESC', 'ASC')))
20
+ $order = $_GET['order'];
21
+ else
22
+ $order = apply_filters('ngg_manage_galleries_items_order', 'ASC');
23
+
24
+ if (!empty($_GET['orderby']) && in_array($_GET['orderby'], array('gid', 'title', 'author')))
25
+ $orderby = $_GET['orderby'];
26
+ else
27
+ $orderby = apply_filters('ngg_manage_galleries_items_orderby', 'gid');
28
+
29
+ $gallery_mapper = C_Gallery_Mapper::get_instance();
30
+ $total_number_of_galleries = $gallery_mapper->count();
31
+
32
+ $query = $gallery_mapper->select();
33
+
34
+ if (!empty($_GET['gs']))
35
+ $query->where(array('title LIKE %s', '%' . trim($_GET['gs']) . '%'));
36
+
37
+ $gallerylist = $query->order_by($orderby, $order)
38
+ ->limit($items_per_page, $start)
39
+ ->run_query();
40
+
41
+ $wp_list_table = new _NGG_Galleries_List_Table('nggallery-manage-gallery');
42
+
43
+ ?>
44
+
45
+ <script type="text/javascript">
46
+ var $ = jQuery;
47
+ // Listen for frame events
48
+ $(function() {
49
+ if ($(this).data('ready')) {
50
+ return;
51
+ }
52
+
53
+ if (window.Frame_Event_Publisher) {
54
+ // If a new gallery is added, refresh the page
55
+ Frame_Event_Publisher.listen_for('attach_to_post:new_gallery attach_to_post:manage_images attach_to_post:images_added',function(){
56
+ window.location.href = window.location.href.toString();
57
+ });
58
+ }
59
+
60
+ $(this).data('ready', true);
61
+ });
62
+
63
+ function checkAll(form) {
64
+ for (var i = 0, n = form.elements.length; i < n; i++) {
65
+ if (form.elements[i].type === "checkbox") {
66
+ if (form.elements[i].name === "doaction[]") {
67
+ if (form.elements[i].checked == true) {
68
+ form.elements[i].checked = false;
69
+ } else {
70
+ form.elements[i].checked = true;
71
+ }
72
+ }
73
+ }
74
+ }
75
  }
76
+
77
+ function getNumChecked(form) {
78
+ var num = 0;
79
+ for (var i = 0, n = form.elements.length; i < n; i++) {
80
+ if (form.elements[i].type === "checkbox") {
81
+ if(form.elements[i].name === "doaction[]") {
82
+ if (form.elements[i].checked == true) {
83
+ num++;
84
+ }
85
+ }
86
+ }
87
+ }
88
+
89
+ return num;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
90
  }
91
 
92
+ // this function check for a the number of selected images, sumbmit false when no one selected
93
+ function checkSelected() {
94
+ if (typeof document.activeElement == "undefined" && document.addEventListener) {
95
+ document.addEventListener("focus", function (e) {
96
+ document.activeElement = e.target;
97
+ }, true);
98
+ }
99
+
100
+ if (document.activeElement.name === 'post_paged') {
101
+ return true;
102
+ }
103
+
104
+ var numchecked = getNumChecked(document.getElementById('editgalleries'));
105
+
106
+ if (numchecked < 1) {
107
+ alert('<?php echo esc_js(__('No images selected', 'nggallery')); ?>');
108
+ return false;
109
+ }
110
+
111
+ var actionId = $('#bulkaction').val();
112
+
113
+ switch (actionId) {
114
+ case "resize_images":
115
+ showDialog('resize_images', '<?php echo esc_js(__('Resize images','nggallery')); ?>');
116
+ return false;
117
+ break;
118
+ case "new_thumbnail":
119
+ showDialog('new_thumbnail', '<?php echo esc_js(__('Create new thumbnails','nggallery')); ?>');
120
+ return false;
121
+ break;
122
+ }
123
+
124
+ return confirm(
125
+ '<?php echo sprintf(esc_js(__("You are about to start the bulk edit for %s galleries \n \n 'Cancel' to stop, 'OK' to proceed.",'nggallery')), "' + numchecked + '") ; ?>'
126
+ );
127
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
128
 
129
+ function showDialog(windowId, title) {
130
+ var form = document.getElementById('editgalleries');
131
+ var elementlist = "";
132
+ for (var i = 0, n = form.elements.length; i < n; i++) {
133
+ if (form.elements[i].type == "checkbox") {
134
+ if (form.elements[i].name == "doaction[]") {
135
+ if (form.elements[i].checked == true) {
136
+ if (elementlist == "") {
137
+ elementlist = form.elements[i].value;
138
+ } else {
139
+ elementlist += "," + form.elements[i].value;
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+ $("#" + windowId + "_bulkaction").val(jQuery("#bulkaction").val());
146
+ $("#" + windowId + "_imagelist").val(elementlist);
147
+
148
+ // now show the dialog
149
+ $("#" + windowId).dialog({
150
+ width: 640,
151
+ resizable: false,
152
+ modal: true,
153
+ title: title,
154
+ position: {
155
+ my: 'center',
156
+ at: 'center',
157
+ of: window.parent
158
+ }
159
+ });
160
+ $("#" + windowId + ' .dialog-cancel').click(function() {
161
+ $("#" + windowId).dialog("close");
162
+ });
163
+ }
164
+
165
+ function showAddGallery() {
166
+ $("#addGallery").dialog({
167
+ width: 640,
168
+ resizable: false,
169
+ modal: true,
170
+ title: '<?php echo esc_js(__('Add new gallery','nggallery')); ?>',
171
+ position: {
172
+ my: 'center',
173
+ at: 'center',
174
+ of: window.parent
175
+ }
176
+ });
177
+ $("#addGallery .dialog-cancel").click(function() {
178
+ $("#addGallery").dialog("close");
179
+ });
180
+ }
181
+ </script>
182
+
183
+ <?php if (isset($action_status) && $action_status['message']!='') { ?>
184
+ <div id="message"
185
+ class="<?php echo ($action_status['status']=='ok' ? 'updated' : $action_status['status']); ?> fade">
186
+ <p>
187
+ <strong><?php echo $action_status['message']; ?></strong>
188
+ </p>
189
+ </div>
190
+ <?php } ?>
191
+
192
+ <div class="wrap ngg_manage_galleries">
193
+ <div class="ngg_page_content_header">
194
+ <img alt=""
195
+ src="<?php echo(C_Router::get_instance()->get_static_url('photocrati-nextgen_admin#imagely_icon.png')); ?>">
196
+ <h3>
197
+ <?php echo _n('Manage Galleries', 'Manage Galleries', 2, 'nggallery'); ?>
198
+ </h3>
199
+ </div>
200
+
201
+ <div class='ngg_page_content_main'>
202
+
203
+ <div class="search-box-wrapper">
204
+
205
+ <form class="search-form" action="" method="get">
206
+ <div class="search-box">
207
+ <input type="hidden"
208
+ id="page-name"
209
+ name="page"
210
+ value="nggallery-manage-gallery"/>
211
+ <input type="text"
212
+ id="media-search-input"
213
+ name="s"
214
+ placeholder="<?php _e('Search Images', 'nggallery'); ?>"
215
+ value="<?php the_search_query(); ?>"/>
216
+ <input type="submit"
217
+ value="<?php _e('Search Images', 'nggallery'); ?>"
218
+ class="button-primary"/>
219
+ </div>
220
+ </form>
221
+
222
+ <form class="search-form" action="" method="get">
223
+ <div class="search-box">
224
+ <input type="hidden"
225
+ id="page-name"
226
+ name="page"
227
+ value="nggallery-manage-gallery"/>
228
+ <input type="text"
229
+ id="gallery-search-input"
230
+ name="gs"
231
+ placeholder="<?php _e('Search Galleries', 'nggallery'); ?>"
232
+ value="<?php print !empty($_GET['gs']) ? esc_attr(trim($_GET['gs'])) : ''; ?>"/>
233
+ <input type="submit"
234
+ value="<?php _e('Search Galleries', 'nggallery'); ?>"
235
+ class="button-primary"/>
236
+ </div>
237
+ </form>
238
+
239
+ </div>
240
+
241
+ <form id="editgalleries"
242
+ class="nggform"
243
+ method="POST"
244
+ action="<?php echo nextgen_esc_url($ngg->manage_page->base_page . '&orderby=' . $orderby . '&order=' . $order . '&paged=' . $_GET['paged']); ?>"
245
+ accept-charset="utf-8">
246
+
247
+ <?php wp_nonce_field('ngg_bulkgallery') ?>
248
+
249
+ <input type="hidden"
250
+ name="nggpage"
251
+ value="manage-galleries"/>
252
+
253
+ <div class="tablenav top">
254
+
255
+ <div class="alignleft actions">
256
+
257
+ <?php if (function_exists('json_encode')) { ?>
258
+
259
+ <select name="bulkaction" id="bulkaction">
260
+ <option value="no_action"> <?php _e("Bulk actions", 'nggallery'); ?></option>
261
+ <option value="delete_gallery"><?php _e("Delete", 'nggallery'); ?></option>
262
+ <option value="set_watermark"> <?php _e("Set watermark", 'nggallery'); ?></option>
263
+ <option value="new_thumbnail"> <?php _e("Create new thumbnails",'nggallery'); ?></option>
264
+ <option value="resize_images"> <?php _e("Resize images", 'nggallery'); ?></option>
265
+ <option value="import_meta"> <?php _e("Import metadata", 'nggallery'); ?></option>
266
+ <option value="recover_images"><?php _e("Recover from backup", 'nggallery'); ?></option>
267
+ </select>
268
+
269
+ <input name="showThickbox"
270
+ class="button-primary"
271
+ type="submit"
272
+ value="<?php _e('Apply','nggallery'); ?>"
273
+ onclick="if (!checkSelected()) return false;"/>
274
+ <?php } ?>
275
+
276
+ <?php if (current_user_can('NextGEN Upload images') && nggGallery::current_user_can('NextGEN Add new gallery')) { ?>
277
+ <input name="doaction"
278
+ class="button-primary action"
279
+ type="submit"
280
+ onclick="showAddGallery(); return false;"
281
+ value="<?php _e('Add new gallery', 'nggallery') ?>"/>
282
+ <?php } ?>
283
+
284
+ </div>
285
+
286
+ <?php $ngg->manage_page->pagination('top', $_GET['paged'], $total_number_of_galleries, $items_per_page ); ?>
287
+
288
+ </div>
289
+
290
+ <table class="wp-list-table widefat" cellspacing="0">
291
+
292
+ <thead>
293
+ <tr>
294
+ <?php $wp_list_table->print_column_headers(true); ?>
295
+ </tr>
296
+ </thead>
297
+
298
+ <tfoot>
299
+ <tr>
300
+ <?php $wp_list_table->print_column_headers(false); ?>
301
+ </tr>
302
+ </tfoot>
303
+
304
+ <tbody id="the-list">
305
+ <?php
306
+ if ($gallerylist)
307
+ {
308
+ //get the columns
309
+ $gallery_columns = $wp_list_table->get_columns();
310
+ $hidden_columns = get_hidden_columns('nggallery-manage-gallery');
311
+
312
+ foreach ($gallerylist as $gallery) {
313
+ $alternate = (!isset($alternate) || $alternate == 'class="alternate"') ? '' : 'class="alternate"';
314
+ $gid = $gallery->gid;
315
+ $name = (empty($gallery->title)) ? $gallery->name : $gallery->title;
316
+ $author_user = get_userdata((int) $gallery->author);
317
+ ?>
318
+ <tr id="gallery-<?php echo $gid ?>" <?php echo $alternate; ?>>
319
+ <?php
320
+ foreach ($gallery_columns as $gallery_column_key => $column_display_name) {
321
+ $class = "class='{$gallery_column_key} column-{$gallery_column_key}'";
322
+ $style = '';
323
+ if (in_array($gallery_column_key, $hidden_columns))
324
+ $style = ' style="display:none;"';
325
+
326
+ $attributes = "{$class}{$style}";
327
+
328
+ switch ($gallery_column_key) {
329
+ case 'cb': ?>
330
+ <th scope="row" class="column-cb check-column">
331
+ <?php if (nggAdmin::can_manage_this_gallery($gallery->author)) { ?>
332
+ <input name="doaction[]" type="checkbox" value="<?php echo $gid ?>"/>
333
+ <?php } ?>
334
+ </th>
335
+ <?php
336
+ break;
337
+ case 'id': ?>
338
+ <td <?php echo $attributes ?>>
339
+ <?php echo $gid; ?>
340
+ </td>
341
+ <?php
342
+ break;
343
+ case 'title': ?>
344
+ <td class="title column-title">
345
+ <?php if (nggAdmin::can_manage_this_gallery($gallery->author)) { ?>
346
+ <a href="<?php echo wp_nonce_url($ngg->manage_page->base_page . '&amp;mode=edit&amp;gid=' . $gid, 'ngg_editgallery')?>"
347
+ class='edit'
348
+ title="<?php _e('Edit'); ?>">
349
+ <?php echo esc_html(M_I18N::translate($name)); ?>
350
+ </a>
351
+ <?php } else { ?>
352
+ <?php echo esc_html(M_I18N::translate($gallery->title)); ?>
353
+ <?php } ?>
354
+ <div class="row-actions"></div>
355
+ </td>
356
+ <?php
357
+ break;
358
+ case 'description': ?>
359
+ <td <?php echo $attributes ?>>
360
+ <?php echo esc_html(M_I18N::translate($gallery->galdesc)); ?>
361
+ &nbsp;
362
+ </td>
363
+ <?php
364
+ break;
365
+ case 'author':
366
+ $author_string = $author_user === FALSE ? __('Deleted user', 'nggallery') : $author_user->display_name;
367
+ ?>
368
+ <td <?php echo $attributes ?>>
369
+ <?php echo esc_html($author_string); ?>
370
+ </td>
371
+ <?php
372
+ break;
373
+ case 'page_id': ?>
374
+ <td <?php echo $attributes ?>>
375
+ <?php echo $gallery->pageid; ?>
376
+ </td>
377
+ <?php
378
+ break;
379
+ case 'quantity':
380
+ global $wpdb;
381
+ $gallery->counter = $wpdb->get_var($wpdb->prepare(
382
+ "SELECT COUNT(*) FROM {$wpdb->nggpictures} WHERE galleryid = %d", $gallery->{$gallery->id_field}
383
+ ));
384
+ ?>
385
+ <td <?php echo $attributes ?>>
386
+ <?php echo $gallery->counter; ?>
387
+ </td>
388
+ <?php
389
+ break;
390
+ default: ?>
391
+ <td <?php echo $attributes ?>>
392
+ <?php do_action('ngg_manage_gallery_custom_column', $gallery_column_key, $gid); ?>
393
+ </td>
394
+ <?php
395
+ break;
396
+ }
397
+ } // end foreach?>
398
+ </tr>
399
+ <?php } // end foreach
400
+ } else {
401
+ echo '<tr><td colspan="7" align="center"><strong>' . __('No entries found', 'nggallery') . '</strong></td></tr>';
402
+ }
403
+ ?>
404
+ </tbody>
405
+ </table>
406
+
407
+ <div class="tablenav bottom">
408
+ <?php $ngg->manage_page->pagination('bottom', $_GET['paged'], $total_number_of_galleries, $items_per_page ); ?>
409
+ </div>
410
+ </form>
411
+
412
+ </div> <!-- /.ngg_page_content_main -->
413
+ </div> <!-- /.wrap -->
414
+
415
+ <!-- #addGallery -->
416
+ <div id="addGallery"
417
+ style="display: none;">
418
+ <form id="form-tags"
419
+ method="POST"
420
+ accept-charset="utf-8">
421
+
422
+ <?php wp_nonce_field('ngg_addgallery'); ?>
423
+
424
+ <input type="hidden"
425
+ name="nggpage"
426
+ value="manage-galleries"/>
427
+
428
+ <table width="100%"
429
+ border="0"
430
+ cellspacing="3"
431
+ cellpadding="3">
432
+ <tr>
433
+ <td>
434
+ <strong><?php _e('New Gallery', 'nggallery') ;?>:</strong>
435
+ <input type="text"
436
+ size="35"
437
+ name="galleryname"
438
+ value=""/>
439
+ <br/>
440
+ <?php if(!is_multisite()) { ?>
441
+ <?php _e('Create a new , empty gallery below the folder', 'nggallery') ;?>
442
+ <strong><?php echo $ngg->options['gallerypath']; ?></strong>
443
+ <br/>
444
+ <?php } ?>
445
+ <i>(<?php _e('Allowed characters for file and folder names are', 'nggallery') ;?>: a-z, A-Z, 0-9, -, _)</i>
446
+ </td>
447
+ </tr>
448
+
449
+ <?php do_action('ngg_add_new_gallery_form'); ?>
450
+
451
+ <tr align="right">
452
+ <td class="submit">
453
+ <input class="button-primary"
454
+ type="submit"
455
+ name="addgallery"
456
+ value="<?php _e('OK','nggallery'); ?>"/>
457
+ &nbsp;
458
+ <input class="button-primary dialog-cancel"
459
+ type="reset"
460
+ value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
461
+ </td>
462
+ </tr>
463
+ </table>
464
+ </form>
465
+ </div>
466
+ <!-- /#addGallery -->
467
+
468
+ <!-- #resize_images -->
469
+ <div id="resize_images" style="display: none;">
470
+ <form id="form-resize-images" method="POST" accept-charset="utf-8">
471
+
472
+ <?php wp_nonce_field('ngg_thickbox_form') ?>
473
+
474
+ <input type="hidden"
475
+ id="resize_images_imagelist"
476
+ name="TB_imagelist"
477
+ value=""/>
478
+
479
+ <input type="hidden"
480
+ id="resize_images_bulkaction"
481
+ name="TB_bulkaction"
482
+ value=""/>
483
+
484
+ <input type="hidden"
485
+ name="nggpage"
486
+ value="manage-galleries"/>
487
+
488
+ <table width="100%"
489
+ border="0"
490
+ cellspacing="3"
491
+ cellpadding="3">
492
+
493
+ <tr valign="top">
494
+ <td>
495
+ <strong><?php _e('Resize Images to', 'nggallery'); ?>:</strong>
496
+ </td>
497
+ <td>
498
+ <input type="text"
499
+ size="5"
500
+ name="imgWidth"
501
+ value="<?php echo $ngg->options['imgWidth']; ?>"/>
502
+ x
503
+ <input type="text"
504
+ size="5"
505
+ name="imgHeight"
506
+ value="<?php echo $ngg->options['imgHeight']; ?>"/>
507
+ <br/>
508
+ <small><?php _e('Width x height (in pixel). NextGEN Gallery will keep ratio size','nggallery') ?></small>
509
+ </td>
510
+ </tr>
511
+ <tr align="right">
512
+ <td colspan="2" class="submit">
513
+ <input class="button-primary"
514
+ type="submit"
515
+ name="TB_ResizeImages"
516
+ value="<?php _e('OK', 'nggallery'); ?>"/>
517
+ &nbsp;
518
+ <input class="button-primary dialog-cancel"
519
+ type="reset"
520
+ value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
521
+ </td>
522
+ </tr>
523
+ </table>
524
+ </form>
525
+ </div>
526
+ <!-- /#resize_images -->
527
+
528
+ <!-- #new_thumbnail -->
529
+ <div id="new_thumbnail"
530
+ style="display: none;">
531
+
532
+ <form id="form-new-thumbnail"
533
+ method="POST"
534
+ accept-charset="utf-8">
535
+
536
+ <?php wp_nonce_field('ngg_thickbox_form') ?>
537
+
538
+ <input type="hidden"
539
+ id="new_thumbnail_imagelist"
540
+ name="TB_imagelist"
541
+ value=""/>
542
+
543
+ <input type="hidden"
544
+ id="new_thumbnail_bulkaction"
545
+ name="TB_bulkaction"
546
+ value=""/>
547
+
548
+ <input type="hidden"
549
+ name="nggpage"
550
+ value="manage-galleries"/>
551
+
552
+ <table width="100%"
553
+ border="0"
554
+ cellspacing="3"
555
+ cellpadding="3">
556
+
557
+ <tr valign="top">
558
+ <th align="left">
559
+ <?php _e('Width x height (in pixel)','nggallery') ?>
560
+ </th>
561
+ <td>
562
+ <?php include(dirname(__FILE__) . '/thumbnails-template.php'); ?>
563
+ </td>
564
+ </tr>
565
+
566
+ <tr valign="top">
567
+ <th align="left">
568
+ <?php _e('Set fix dimension','nggallery') ?>
569
+ </th>
570
+ <td>
571
+ <input type="checkbox"
572
+ name="thumbfix"
573
+ value="1"
574
+ <?php checked('1', $ngg->options['thumbfix']); ?>/>
575
+ <br/>
576
+ <small><?php _e('Ignore the aspect ratio, no portrait thumbnails','nggallery') ?></small>
577
+ </td>
578
+ </tr>
579
+
580
+ <tr align="right">
581
+ <td colspan="2" class="submit">
582
+ <input class="button-primary"
583
+ type="submit"
584
+ name="TB_NewThumbnail"
585
+ value="<?php _e('OK', 'nggallery');?>"/>
586
+ &nbsp;
587
+ <input class="button-primary dialog-cancel"
588
+ type="reset"
589
+ value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
590
+ </td>
591
+ </tr>
592
+ </table>
593
+ </form>
594
+ </div>
595
+ <!-- /#new_thumbnail -->
596
+
597
+ <?php
598
  }
599
 
600
  /**
601
+ * Constructor class to create the table layout
602
  *
603
  * @package WordPress
604
  * @subpackage List_Table
605
  * @since 1.8.0
606
  * @access private
607
  */
608
+ class _NGG_Galleries_List_Table extends WP_List_Table
609
+ {
610
+ var $_screen;
611
+ var $_columns;
612
 
613
+ function __construct($screen)
614
+ {
615
+ if (is_string($screen))
616
+ $screen = convert_to_screen($screen);
617
 
618
+ $this->_screen = $screen;
619
+ $this->_columns = array() ;
620
 
621
+ add_filter('manage_' . $screen->id . '_columns', array(&$this, 'get_columns'), 0);
622
+ }
623
 
624
+ function get_column_info()
625
+ {
626
+ $columns = get_column_headers($this->_screen);
627
+ $hidden = get_hidden_columns($this->_screen);
628
+ $_sortable = $this->get_sortable_columns();
629
 
630
+ foreach ($_sortable as $id => $data) {
631
+ if (empty($data))
632
+ continue;
633
 
634
+ $data = (array) $data;
635
+ if (!isset($data[1]))
636
+ $data[1] = false;
637
 
638
+ $sortable[$id] = $data;
639
+ }
640
 
641
+ return array($columns, $hidden, $sortable, null);
642
+ }
643
 
644
  // define the columns to display, the syntax is 'internal name' => 'display name'
645
+ function get_columns()
646
+ {
647
+ $columns = array();
648
+
649
+ $columns['cb'] = '<input name="checkall" type="checkbox" onclick="checkAll(document.getElementById(\'editgalleries\'));"/>';
650
+ $columns['id'] = __('ID');
651
+ $columns['title'] = _n('Gallery', 'Galleries', 1, 'nggallery');
652
+ $columns['description'] = __('Description', 'nggallery');
653
+ $columns['author'] = __('Author', 'nggallery');
654
+ $columns['page_id'] = __('Page ID', 'nggallery');
655
+ $columns['quantity'] = _n('Image', 'Images', 2, 'nggallery');
656
+
657
+ $columns = apply_filters('ngg_manage_gallery_columns', $columns);
658
+
659
+ return $columns;
660
+ }
661
+
662
+ function get_sortable_columns()
663
+ {
664
+ return array(
665
+ 'id' => array('gid', true),
666
+ 'title' => 'title',
667
+ 'author' => 'author'
668
+ );
669
+ }
670
+ }
products/photocrati_nextgen/modules/ngglegacy/admin/manage-images.php CHANGED
@@ -1,753 +1,844 @@
1
  <?php
2
 
3
- if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.');}
 
4
 
5
- function nggallery_picturelist($controller) {
6
- // *** show picture list
7
- global $wpdb, $nggdb, $user_ID, $ngg;
 
 
 
8
 
9
- $settings = C_NextGen_Settings::get_instance();
10
 
11
- $action_status = array('message' => '', 'status' => 'ok');
12
 
13
- // Look if its a search result
14
- $is_search = isset ($_GET['s']) ? true : false;
15
- $counter = 0;
16
 
17
  $wp_list_table = new _NGG_Images_List_Table('nggallery-manage-images');
18
 
19
- // look for pagination
20
- $_GET['paged'] = isset($_GET['paged']) && ($_GET['paged'] > 0) ? absint($_GET['paged']) : 1;
21
- $items_per_page = (!empty($_GET['items']) ? $_GET['items'] : apply_filters('ngg_manage_images_items_per_page', 50));
22
- if ($items_per_page == 'all')
23
- $items_per_page = PHP_INT_MAX;
24
- else
25
- $items_per_page = (int)$items_per_page;
 
 
26
 
27
  if ($is_search)
28
  {
29
- // fetch the imagelist
30
- $picturelist = $ngg->manage_page->search_result;
31
- $total_number_of_images = count($picturelist);
32
-
33
- // we didn't set a gallery or a pagination
34
- $act_gid = 0;
35
- }
36
- else {
37
- // GET variables
38
- $act_gid = $ngg->manage_page->gid;
39
-
40
- // Load the gallery metadata
41
- $mapper = C_Gallery_Mapper::get_instance();
42
- $gallery = $mapper->find($act_gid);
43
-
44
- if (!$gallery) {
45
- nggGallery::show_error(__('Gallery not found.', 'nggallery'));
46
- return;
47
- }
48
-
49
- // Check if you have the correct capability
50
- if (!nggAdmin::can_manage_this_gallery($gallery->author)) {
51
- nggGallery::show_error(__('Sorry, you have no access here', 'nggallery'));
52
- return;
53
- }
54
-
55
- $start = ( $_GET['paged'] - 1 ) * $items_per_page;
56
-
57
- // get picture values
58
- $image_mapper = C_Image_Mapper::get_instance();
59
-
60
- $total_number_of_images = count($image_mapper->select($image_mapper->get_primary_key_column())->
61
- where(array("galleryid = %d", $act_gid))->run_query(FALSE, FALSE, TRUE));
62
-
63
- $image_mapper->select()->where(array("galleryid = %d", $act_gid));
64
- if (($galSort = $settings->get('galSort', FALSE)) && ($galSortDir = $settings->get('galSortDir', FALSE))) {
65
- $image_mapper->order_by($galSort, $galSortDir);
66
- }
67
- $picturelist = $image_mapper->limit($items_per_page, $start)->run_query();
68
-
69
- // get the current author
70
- $act_author_user = get_userdata((int)$gallery->author);
71
-
72
- }
73
-
74
- // list all galleries
75
- $gallerylist = $nggdb->find_all_galleries();
76
-
77
- //get the columns
78
- $image_columns = $wp_list_table->get_columns();
79
- $hidden_columns = get_hidden_columns('nggallery-manage-images');
80
- $num_columns = count($image_columns) - count($hidden_columns);
81
-
82
- $attr = (nggGallery::current_user_can( 'NextGEN Edit gallery options' )) ? '' : 'disabled="disabled"';
83
-
84
- ?>
85
- <script type="text/javascript">
86
- <!--
87
- function showDialog( windowId, title ) {
88
- var form = document.getElementById('updategallery');
89
- var elementlist = "";
90
- for (i = 0, n = form.elements.length; i < n; i++) {
91
- if(form.elements[i].type == "checkbox") {
92
- if(form.elements[i].name == "doaction[]")
93
- if(form.elements[i].checked == true)
94
- if (elementlist == "")
95
- elementlist = form.elements[i].value;
96
- else
97
- elementlist += "," + form.elements[i].value ;
98
- }
99
- }
100
- jQuery("#" + windowId + "_bulkaction").val(jQuery("#bulkaction").val());
101
- jQuery("#" + windowId + "_imagelist").val(elementlist);
102
- // now show the dialog
103
- jQuery( "#" + windowId ).dialog({
104
- width: 640,
105
- resizable : false,
106
- modal: true,
107
- title: title,
108
- position: {
109
- my: 'center',
110
- at: 'center',
111
- of: window.parent
112
- }
113
- });
114
- jQuery("#" + windowId + ' .dialog-cancel').click(function() { jQuery( "#" + windowId ).dialog("close"); });
115
- }
116
-
117
- function setURLParam(param, paramVal) {
118
- var url = window.location.href;
119
- var params = "";
120
- var tmp = "";
121
- var tmpArray = url.split("?");
122
- var base = tmpArray[0];
123
- var additional = tmpArray[1];
124
-
125
- if (additional) {
126
- tmpArray = additional.split("&");
127
- for (i = 0; i < tmpArray.length; i++) {
128
- if (tmpArray[i].split('=')[0] != param) {
129
- params += tmp + tmpArray[i];
130
- tmp = "&";
131
- }
132
- }
133
- }
134
-
135
- return base + "?" + params + tmp + "" + param + "=" + paramVal;
136
- }
137
 
138
- jQuery(function (){
139
-
140
- jQuery('span.tooltip, label.tooltip').tooltip();
141
-
142
- jQuery('#ngg-manage-images-items-per-page').on('change', function() {
143
- window.location.href = setURLParam('items', jQuery(this).val());
144
- });
145
-
146
- // load a content via ajax
147
- jQuery('a.ngg-dialog').click(function() {
148
- var dialogs = jQuery('.ngg-overlay-dialog:visible');
149
- if (dialogs.size() > 0) {
150
- return false;
151
- }
152
-
153
- if ( jQuery( "#spinner" ).length == 0) {
154
- jQuery("body").append('<div id="spinner"></div>');
155
- }
156
-
157
- var $this = jQuery(this);
158
- var results = new RegExp('[\\?&]w=([^&#]*)').exec(this.href);
159
- var width = ( results ) ? results[1] : 800;
160
- var results = new RegExp('[\\?&]h=([^&#]*)').exec(this.href);
161
- var height = ( results ) ? results[1] : 500;
162
- var container = window;
163
-
164
- var screen_width = window.innerWidth - 120;
165
- var screen_height = window.innerHeight - 200;
166
- width = (width > screen_width) ? screen_width : width;
167
- height = (height > screen_height) ? screen_height : height;
168
-
169
- if (window.parent) {
170
- container = window.parent;
171
- }
172
-
173
- jQuery('#spinner').fadeIn();
174
- jQuery('#spinner').position({my: "center", at: "center", of: container });
175
-
176
- var dialog = jQuery('<div class="ngg-overlay-dialog"></div>').appendTo('body');
177
- // load the remote content
178
- dialog.load(
179
- this.href,
180
- {},
181
- function () {
182
- jQuery('#spinner').hide();
183
-
184
- dialog.dialog({
185
- title: ($this.attr('title')) ? $this.attr('title') : '',
186
- position: { my: "center center-30", at: "center", of: window.parent },
187
- width: width,
188
- height: height,
189
- modal: true,
190
- resizable: false,
191
- close: function() { dialog.remove(); }
192
- }).width(width - 30).height(height - 30);
193
- }
194
- );
195
-
196
- //prevent the browser to follow the link
197
- return false;
198
- });
199
-
200
- // If too many of these are generated the cookie becomes so large servers will reject HTTP requests
201
- // Wait some time for other listeners to catch this event and then purge it from the browser
202
- Frame_Event_Publisher.listen_for('attach_to_post:thumbnail_modified', function(data) {
203
- setTimeout(function() {
204
- Frame_Event_Publisher.delete_cookie("X-Frame-Events_" + data.id);
205
- }, 400);
206
- });
207
- });
208
-
209
- function checkAll(form)
210
- {
211
- for (i = 0, n = form.elements.length; i < n; i++) {
212
- if(form.elements[i].type == "checkbox") {
213
- if(form.elements[i].name == "doaction[]") {
214
- if(form.elements[i].checked == true)
215
- form.elements[i].checked = false;
216
- else
217
- form.elements[i].checked = true;
218
- }
219
- }
220
- }
221
- }
222
-
223
- function getNumChecked(form)
224
- {
225
- var num = 0;
226
- for (i = 0, n = form.elements.length; i < n; i++) {
227
- if(form.elements[i].type == "checkbox") {
228
- if(form.elements[i].name == "doaction[]")
229
- if(form.elements[i].checked == true)
230
- num++;
231
- }
232
- }
233
- return num;
234
- }
235
-
236
- // this function check for a the number of selected images, sumbmit false when no one selected
237
- function checkSelected() {
238
-
239
- var numchecked = getNumChecked(document.getElementById('updategallery'));
240
-
241
- if (typeof document.activeElement == "undefined" && document.addEventListener) {
242
- document.addEventListener("focus", function (e) {
243
- document.activeElement = e.target;
244
- }, true);
245
  }
 
 
 
246
 
247
- if ( document.activeElement.name == 'post_paged' )
248
- return true;
249
-
250
- if(numchecked < 1) {
251
- alert('<?php echo esc_js(__('No images selected', 'nggallery')); ?>');
252
- return false;
253
- }
254
-
255
- actionId = jQuery('#bulkaction').val();
256
-
257
- switch (actionId) {
258
- case "copy_to":
259
- showDialog('selectgallery', '<?php echo esc_js(__('Copy image to...','nggallery')); ?>');
260
- return false;
261
- break;
262
- case "move_to":
263
- showDialog('selectgallery', '<?php echo esc_js(__('Move image to...','nggallery')); ?>');
264
- return false;
265
- break;
266
- case "add_tags":
267
- showDialog('entertags', '<?php echo esc_js(__('Add new tags','nggallery')); ?>');
268
- return false;
269
- break;
270
- case "delete_tags":
271
- showDialog('entertags', '<?php echo esc_js(__('Delete tags','nggallery')); ?>');
272
- return false;
273
- break;
274
- case "overwrite_tags":
275
- showDialog('entertags', '<?php echo esc_js(__('Overwrite','nggallery')); ?>');
276
- return false;
277
- break;
278
- case "resize_images":
279
- showDialog('resize_images', '<?php echo esc_js(__('Resize images','nggallery')); ?>');
280
- return false;
281
- break;
282
- case "new_thumbnail":
283
- showDialog('new_thumbnail', '<?php echo esc_js(__('Create new thumbnails','nggallery')); ?>');
284
- return false;
285
- break;
286
- }
287
-
288
- return confirm('<?php echo sprintf(esc_js(__("You are about to start the bulk edit for %s images \n \n 'Cancel' to stop, 'OK' to proceed.",'nggallery')), "' + numchecked + '") ; ?>');
289
- }
290
-
291
- jQuery(document).ready( function($) {
292
- if ($(this).data('ready')) return;
293
 
294
- // close postboxes that should be closed
295
- jQuery('.if-js-closed').removeClass('if-js-closed').addClass('closed');
296
- postboxes.add_postbox_toggles('ngg-manage-gallery');
 
 
297
 
298
- /*jQuery('.iedit').mouseover(
299
- function(e){
300
- jQuery(this).parent().find('.row-actions').css('visibility', 'hidden');
301
- jQuery(this).next('.row_actions:first').find('.row-actions:first').css({
302
- 'visibility': 'visible',
303
- 'left': 0 // WP 4.4 compatibility; it assigns left:-9999em by default to row-actions
304
- });
305
- }
306
- );*/
307
 
308
- $(this).data('ready', true);
309
- });
310
 
311
- //-->
312
- </script>
313
 
314
- <?php if ($action_status['message']!='') : ?>
315
- <div id="message" class="<?php echo ($action_status['status']=='ok' ? 'updated' : $action_status['status']); ?> fade">
316
- <p><strong><?php echo $action_status['message']; ?></strong></p>
317
- </div>
318
- <?php endif; ?>
319
 
320
- <div class="wrap ngg_manage_images">
321
 
322
- <?php if ($is_search) :?>
 
 
 
323
 
324
- <div class="ngg_page_content_header"><img src="<?php echo(C_Router::get_instance()->get_static_url('photocrati-nextgen_admin#imagely_icon.png')); ?>"><h3><?php printf( __('Search results for &#8220;%s&#8221;', 'nggallery'), esc_html( get_search_query() ) ); ?></h3>
325
- </div>
326
-
327
- <div class='ngg_page_content_main'>
328
-
329
- <form class="search-form" action="" method="get">
330
- <p class="search-box">
331
- <label class="hidden" for="media-search-input"><?php _e( 'Search Images', 'nggallery' ); ?>:</label>
332
- <input type="hidden" id="page-name" name="page" value="nggallery-manage-gallery" />
333
- <input type="text" id="media-search-input" name="s" value="<?php the_search_query(); ?>" />
334
- <input type="submit" value="<?php _e( 'Search Images', 'nggallery' ); ?>" class="button" />
335
- </p>
336
- </form>
337
-
338
- <br style="clear: both;" />
339
-
340
- <form id="updategallery" class="nggform" method="POST" action="<?php echo $ngg->manage_page->base_page . '&amp;mode=edit&amp;s=' . get_search_query(); ?>" accept-charset="utf-8">
341
-
342
- <?php wp_nonce_field('ngg_updategallery') ?>
343
- <input type="hidden" name="nggpage" value="manage-images" />
344
-
345
- <!-- form#updategallery continues below end of if statement -->
346
-
347
- <!-- div.ngg_page_content_main continues below end of if statement -->
348
-
349
- <?php else :?>
350
-
351
- <div class="ngg_page_content_header"><img src="<?php echo(C_Router::get_instance()->get_static_url('photocrati-nextgen_admin#imagely_icon.png')); ?>"><h3><?php echo _n( 'Gallery: ', 'Galleries: ', 1, 'nggallery' ); ?> <?php echo esc_html ( M_I18N::translate($gallery->title) ); ?></h3>
352
- </div>
353
-
354
- <div class='ngg_page_content_main'>
355
-
356
- <form id="updategallery" class="nggform" method="POST" action="<?php echo $ngg->manage_page->base_page . '&amp;mode=edit&amp;gid=' . $act_gid . '&amp;paged=' . esc_attr($_GET['paged']); ?>" accept-charset="utf-8">
357
-
358
- <?php wp_nonce_field('ngg_updategallery') ?>
359
- <input type="hidden" name="nggpage" value="manage-images" />
360
-
361
- <?php if ( nggGallery::current_user_can( 'NextGEN Edit gallery options' )) : ?>
362
-
363
- <div id="poststuff" class="meta-box-sortables">
364
- <?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
365
- <div id="gallerydiv" class="postbox closed <?php echo postbox_classes('gallerydiv', 'ngg-manage-gallery'); ?>" >
366
- <div class="handlediv" title="<?php esc_attr_e( 'Click to toggle' ); ?>">
367
- <span class="toggle-indicator"></span>
368
- <h3>
369
- <span>&nbsp;<?php _e('Gallery Settings', 'nggallery'); ?></span>
370
- </h3>
371
-
372
- </div>
373
-
374
- <div class="inside">
375
- <?php $controller->render_gallery_fields(); ?>
376
-
377
- <div class="submit">
378
- <?php if ( wpmu_enable_function('wpmuImportFolder') && nggGallery::current_user_can( 'NextGEN Import image folder' ) ) : ?>
379
- <input type="submit" class="button-primary" name="scanfolder" value="<?php _e("Scan Folder for new images",'nggallery'); ?> " />
380
- <?php endif; ?>
381
- <input type="submit" class="button-primary action ngg_save_gallery_changes" name="updatepictures" value="<?php _e("Save Changes",'nggallery'); ?>" />
382
- </div>
383
-
384
- </div>
385
- </div>
386
- </div> <!-- poststuff -->
387
-
388
- <?php endif; ?>
389
-
390
- <!-- form#updategallery continues below end of if statement -->
391
-
392
- <!-- div.ngg_page_content_main continues below end of if statement -->
393
-
394
- <?php endif; ?>
395
-
396
- <!-- div.ngg_page_content_main continues here -->
397
-
398
- <!-- form#updategallery continues here -->
399
-
400
- <div class="tablenav top ngg-tablenav">
401
-
402
- <?php
403
- $ngg->manage_page->pagination( 'top', $_GET['paged'], $total_number_of_images, $items_per_page );
404
-
405
- $items_per_page_array = apply_filters('ngg_manage_images_items_per_page_array', array(
406
- '25' => __(' 25', 'nggallery'),
407
- '50' => __(' 50', 'nggallery'),
408
- '75' => __(' 75', 'nggallery'),
409
- '100' => __('100', 'nggallery'),
410
- '200' => __('200', 'nggallery'),
411
- 'all' => __('All', 'nggallery')
412
- ));
413
- ?>
414
-
415
- <select id="ngg-manage-images-items-per-page">
416
- <?php foreach ($items_per_page_array as $val => $label) { ?>
417
- <?php
418
- $selected = '';
419
- if(!empty($_GET['items']) && $val == $_GET['items'])
420
- $selected = 'selected';
421
- elseif (empty($_GET['items']) && $val == $items_per_page)
422
- $selected = 'selected';
423
- ?>
424
- <option value="<?php echo esc_attr($val); ?>" <?php echo $selected; ?>>
425
- <?php echo esc_html($label); ?>
426
- </option>
427
- <?php } ?>
428
- </select>
429
- <label id="ngg-manage-images-items-per-page-label"
430
- for="ngg-manage-images-items-per-page"><?php echo __('Images per page:', 'nggallery'); ?></label>
431
-
432
- <div class="alignleft actions">
433
- <select id="bulkaction" name="bulkaction">
434
- <option value="no_action" ><?php _e("Bulk actions",'nggallery'); ?></option>
435
- <option value="set_watermark" ><?php _e("Set watermark",'nggallery'); ?></option>
436
- <option value="new_thumbnail" ><?php _e("Create new thumbnails",'nggallery'); ?></option>
437
- <option value="resize_images" ><?php _e("Resize images",'nggallery'); ?></option>
438
- <option value="recover_images" ><?php _e("Recover from backup",'nggallery'); ?></option>
439
- <option value="delete_images" ><?php _e("Delete images",'nggallery'); ?></option>
440
- <option value="import_meta" ><?php _e("Import metadata",'nggallery'); ?></option>
441
- <option value="rotate_cw" ><?php _e("Rotate images clockwise",'nggallery'); ?></option>
442
- <option value="rotate_ccw" ><?php _e("Rotate images counter-clockwise",'nggallery'); ?></option>
443
- <option value="copy_to" ><?php _e("Copy to...",'nggallery'); ?></option>
444
- <option value="move_to"><?php _e("Move to...",'nggallery'); ?></option>
445
- <option value="add_tags" ><?php _e("Add tags",'nggallery'); ?></option>
446
- <option value="delete_tags" ><?php _e("Delete tags",'nggallery'); ?></option>
447
- <option value="overwrite_tags" ><?php _e("Overwrite tags",'nggallery'); ?></option>
448
- </select>
449
- <input class="button-primary" type="submit" name="showThickbox" value="<?php _e('Apply', 'nggallery'); ?>" onclick="if ( !checkSelected() ) return false;" />
450
-
451
- <?php if (($settings->galSort == "sortorder") && (!$is_search) ) { ?>
452
- <input class="button-primary" type="submit" name="sortGallery" value="<?php _e('Sort gallery', 'nggallery');?>" />
453
- <?php } ?>
454
-
455
- <input type="submit" name="updatepictures" class="button-primary action" value="<?php _e('Save Changes', 'nggallery');?>" />
456
- </div>
457
- </div>
458
-
459
- <table id="ngg-listimages" class="widefat fixed" cellspacing="0" >
460
-
461
- <thead>
462
- <?php $controller->render_image_row_header() ?>
463
- </thead>
464
-
465
- <tfoot>
466
- <?php $controller->render_image_row_header() ?>
467
- </tfoot>
468
-
469
- <tbody id="the-list">
470
-
471
- <?php
472
- if($picturelist) {
473
-
474
- $thumbsize = '';
475
- $storage = C_Gallery_Storage::get_instance();
476
- $gallery_mapper = C_Gallery_Mapper::get_instance();
477
-
478
- if ($settings->thumbfix)
479
- $thumbsize = 'width="' . $settings->thumbwidth . '" height="' . $settings->thumbheight . '"';
480
-
481
- foreach($picturelist as $picture) {
482
-
483
- if (empty($gallery) && $is_search)
484
- $gallery = $gallery_mapper->find($picture->galleryid, FALSE);
485
-
486
- //for search result we need to check the capatibiliy
487
- if ( !nggAdmin::can_manage_this_gallery($gallery->author) && $is_search )
488
- continue;
489
-
490
- $counter++;
491
- $picture->imageURL = $storage->get_image_url($picture);
492
- $picture->thumbURL = $storage->get_thumb_url($picture);
493
- $picture->imagePath = $storage->get_image_abspath($picture);
494
- $picture->thumbPath = $storage->get_thumb_abspath($picture);
495
- echo apply_filters('ngg_manage_images_row', $picture, $counter);
496
- }
497
- }
498
-
499
- // In the case you have no capaptibility to see the search result
500
- if ( $counter == 0 )
501
- echo '<tr><td colspan="' . $num_columns . '" align="center"><strong>'.__('No entries found','nggallery').'</strong></td></tr>';
502
-
503
- ?>
504
-
505
- </tbody>
506
- </table>
507
-
508
- <div class="tablenav bottom">
509
- <input type="submit" class="button-primary action" name="updatepictures" value="<?php _e('Save Changes', 'nggallery'); ?>" />
510
- <?php $ngg->manage_page->pagination( 'bottom', $_GET['paged'], $total_number_of_images, $items_per_page ); ?>
511
- </div>
512
-
513
- </form> <!-- /form#updategallery -->
514
-
515
- <br class="clear"/>
516
-
517
- </div><!-- /div.ngg_page_content_main -->
518
-
519
- </div><!-- /#wrap -->
520
-
521
- <!-- #entertags -->
522
- <div id="entertags" style="display: none;" >
523
- <form id="form-tags" method="POST" accept-charset="utf-8">
524
- <?php wp_nonce_field('ngg_thickbox_form') ?>
525
- <input type="hidden" id="entertags_imagelist" name="TB_imagelist" value="" />
526
- <input type="hidden" id="entertags_bulkaction" name="TB_bulkaction" value="" />
527
- <input type="hidden" name="nggpage" value="manage-images" />
528
- <input type="hidden" name="TB_EditTags" value="OK"/>
529
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
530
- <tr>
531
- <th><?php _e("Enter the tags",'nggallery'); ?> : <input name="taglist" type="text" style="width:90%" value="" /></th>
532
- </tr>
533
- <tr>
534
- <td class="submit">
535
- <input class="button-primary"
536
- type="submit"
537
- name="TB_EditTags"
538
- onClick="jQuery(this).attr('disabled', true); submit();"
539
- value="<?php _e("OK",'nggallery'); ?>"/>
540
- <input class="button-primary dialog-cancel"
541
- type="reset"
542
- value="&nbsp;<?php _e("Cancel",'nggallery'); ?>&nbsp;"/>
543
- </td>
544
- </tr>
545
- </table>
546
- </form>
547
- </div>
548
- <!-- /#entertags -->
549
-
550
- <!-- #selectgallery -->
551
- <div id="selectgallery" style="display: none;" >
552
- <form id="form-select-gallery" method="POST" accept-charset="utf-8">
553
- <?php wp_nonce_field('ngg_thickbox_form') ?>
554
- <input type="hidden" id="selectgallery_imagelist" name="TB_imagelist" value="" />
555
- <input type="hidden" id="selectgallery_bulkaction" name="TB_bulkaction" value="" />
556
- <input type="hidden" name="nggpage" value="manage-images" />
557
- <input type="hidden" name="TB_SelectGallery" value="OK"/>
558
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
559
- <tr>
560
- <th>
561
- <?php _e('Select the destination gallery:', 'nggallery'); ?>&nbsp;
562
- <select name="dest_gid" style="width:90%" >
563
- <?php
564
- foreach ($gallerylist as $gallery) {
565
- if ($gallery->gid != $act_gid) { ?>
566
- <option value="<?php echo esc_attr($gallery->gid); ?>">
567
- <?php print esc_attr(apply_filters('ngg_gallery_title_select_field', $gallery->title, $gallery, FALSE)); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
568
  </option>
569
- <?php }
570
- }
571
- ?>
572
- </select>
573
- </th>
574
- </tr>
575
- <tr>
576
- <td class="submit">
577
- <input type="submit"
578
- class="button-primary"
579
- name="TB_SelectGallery"
580
- onClick="jQuery(this).attr('disabled', true); submit();"
581
- value="<?php _e("OK",'nggallery'); ?>"/>
582
- <input class="button-primary dialog-cancel"
583
- type="reset"
584
- value="<?php _e("Cancel",'nggallery'); ?>"/>
585
- </td>
586
- </tr>
587
- </table>
588
- </form>
589
- </div>
590
- <!-- /#selectgallery -->
591
-
592
- <!-- #resize_images -->
593
- <div id="resize_images" style="display: none;" >
594
- <form id="form-resize-images" method="POST" accept-charset="utf-8">
595
- <?php wp_nonce_field('ngg_thickbox_form') ?>
596
- <input type="hidden" id="resize_images_imagelist" name="TB_imagelist" value="" />
597
- <input type="hidden" id="resize_images_bulkaction" name="TB_bulkaction" value="" />
598
- <input type="hidden" name="nggpage" value="manage-images" />
599
- <input type="hidden" name="TB_ResizeImages" value="OK"/>
600
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
601
- <tr valign="top">
602
- <td>
603
- <strong><?php _e('Resize Images to', 'nggallery'); ?>:</strong>
604
- </td>
605
- <td>
606
- <input type="text" size="5" name="imgWidth" value="<?php echo $settings->imgWidth ?>" /> x <input type="text" size="5" name="imgHeight" value="<?php echo $settings->imgHeight; ?>" />
607
- <br /><small><?php _e('Width x height (in pixel). NextGEN Gallery will keep ratio size','nggallery') ?></small>
608
- </td>
609
- </tr>
610
- <tr>
611
- <td colspan="2" class="submit">
612
- <input class="button-primary"
613
- type="submit"
614
- name="TB_ResizeImages"
615
- onClick="jQuery(this).attr('disabled', true); submit();"
616
- value="<?php _e('OK', 'nggallery'); ?>"/>
617
- <input class="button-primary dialog-cancel"
618
- type="reset"
619
- value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
620
- </td>
621
- </tr>
622
- </table>
623
- </form>
624
- </div>
625
- <!-- /#resize_images -->
626
-
627
- <!-- #new_thumbnail -->
628
- <div id="new_thumbnail" style="display: none;" >
629
- <form id="form-new-thumbnail" method="POST" accept-charset="utf-8">
630
- <?php wp_nonce_field('ngg_thickbox_form') ?>
631
- <input type="hidden" id="new_thumbnail_imagelist" name="TB_imagelist" value="" />
632
- <input type="hidden" id="new_thumbnail_bulkaction" name="TB_bulkaction" value="" />
633
- <input type="hidden" name="nggpage" value="manage-images" />
634
- <input type="hidden" name="TB_NewThumbnail" value="OK"/>
635
- <table width="100%" border="0" cellspacing="3" cellpadding="3" >
636
- <tr valign="top">
637
- <th align="left"><?php _e('Width x height (in pixel)','nggallery') ?></th>
638
- <td>
639
- <?php include(dirname(__FILE__) . '/thumbnails-template.php'); ?>
640
- </td>
641
- </tr>
642
- <tr valign="top">
643
- <th align="left"><?php _e('Set fix dimension','nggallery') ?></th>
644
- <td><input type="checkbox" name="thumbfix" value="1" <?php checked('1', $settings->thumbfix); ?> />
645
- <br /><small><?php _e('Ignore the aspect ratio, no portrait thumbnails','nggallery') ?></small></td>
646
- </tr>
647
- <tr>
648
- <td colspan="2" class="submit">
649
- <input class="button-primary"
650
- type="submit"
651
- name="TB_NewThumbnail"
652
- onClick="jQuery(this).attr('disabled', true); submit();"
653
- value="<?php _e('OK', 'nggallery');?>"/>
654
- <input class="button-primary dialog-cancel"
655
- type="reset"
656
- value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
657
- </td>
658
- </tr>
659
- </table>
660
- </form>
661
- </div>
662
- <!-- /#new_thumbnail -->
663
-
664
- <script type="text/javascript">
665
- /* <![CDATA[ */
666
- jQuery(document).ready(function($){
667
- columns.init('nggallery-manage-images');
668
-
669
- // Ensure that thumb preview images are always up-to-date
670
- $('#ngg-listimages img.thumb').each(function(){
671
- var $this = $(this);
672
- var src = $this.attr('src');
673
- var matchData = src.match(/\?i=(\d+)$/)
674
- if (matchData) {
675
- var i = parseInt(matchData[1])+1
676
- src = src.replace(matchData[0], "?i="+i.toString())
677
- $this.attr('src', src);
678
- }
679
- })
680
- });
681
- /* ]]> */
682
- </script>
683
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
684
  }
685
 
686
  /**
687
- * Construtor class to create the table layout
688
  *
689
  * @package WordPress
690
  * @subpackage List_Table
691
  * @since 1.8.0
692
  * @access private
693
  */
694
- class _NGG_Images_List_Table extends WP_List_Table {
695
- var $_screen;
696
- var $_columns;
697
-
698
- function __construct($screen)
699
- {
700
- if ( is_string( $screen ) )
701
- $screen = convert_to_screen( $screen );
702
 
703
- $this->_screen = $screen;
704
- $this->_columns = array() ;
 
 
705
 
706
- add_filter( 'manage_' . $screen->id . '_columns', array( &$this, 'get_columns' ), 0 );
707
- }
708
 
709
- function get_column_info() {
 
710
 
711
- $columns = get_column_headers( $this->_screen );
712
- $hidden = get_hidden_columns( $this->_screen );
713
- $_sortable = $this->get_sortable_columns();
714
- $sortable = array();
 
 
715
 
716
- foreach ( $_sortable as $id => $data ) {
717
- if ( empty( $data ) )
718
- continue;
719
 
720
- $data = (array) $data;
721
- if ( !isset( $data[1] ) )
722
- $data[1] = false;
723
 
724
- $sortable[$id] = $data;
725
- }
726
 
727
- return array( $columns, $hidden, $sortable );
728
- }
729
 
730
  // define the columns to display, the syntax is 'internal name' => 'display name'
731
- function get_columns() {
732
- $columns = array();
 
733
 
734
- $columns['cb'] = '<input name="checkall" type="checkbox" onclick="checkAll(document.getElementById(\'updategallery\'));" />';
735
- $columns['id'] = __('ID');
736
- $columns['thumbnail'] = __('Thumbnail', 'nggallery');
737
- $columns['filename'] = __('Filename', 'nggallery');
738
- $columns['alt_title_desc'] = __('Alt &amp; Title Text', 'nggallery') . ' / ' . __('Description', 'nggallery');
739
- $columns['tags'] = __('Tags (comma separated list)', 'nggallery');
740
- $columns = apply_filters('ngg_manage_images_columns', $columns);
741
 
742
- return $columns;
743
- }
 
 
744
 
745
- function get_sortable_columns() {
746
- return array();
747
- }
 
748
 
749
- function the_list()
750
- {
 
751
 
752
- }
753
  }
1
  <?php
2
 
3
+ if (preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF']))
4
+ die('You are not allowed to call this page directly.');
5
 
6
+ /**
7
+ * @param nggManageGallery|nggManageAlbum $controller
8
+ */
9
+ function nggallery_picturelist($controller)
10
+ {
11
+ global $ngg;
12
 
13
+ $settings = C_NextGen_Settings::get_instance();
14
 
15
+ $action_status = array('message' => '', 'status' => 'ok');
16
 
17
+ // Look if its a search result
18
+ $is_search = isset ($_GET['s']) ? true : false;
19
+ $counter = 0;
20
 
21
  $wp_list_table = new _NGG_Images_List_Table('nggallery-manage-images');
22
 
23
+ // look for pagination
24
+ $_GET['paged'] = isset($_GET['paged']) && ($_GET['paged'] > 0) ? absint($_GET['paged']) : 1;
25
+ $items_per_page = (!empty($_GET['items']) ? $_GET['items'] : apply_filters('ngg_manage_images_items_per_page', 50));
26
+ if ($items_per_page == 'all')
27
+ $items_per_page = PHP_INT_MAX;
28
+ else
29
+ $items_per_page = (int)$items_per_page;
30
+
31
+ $gallery_mapper = C_Gallery_Mapper::get_instance();
32
 
33
  if ($is_search)
34
  {
35
+ // fetch the imagelist
36
+ $picturelist = $ngg->manage_page->search_result;
37
+ $total_number_of_images = count($picturelist);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
+ // we didn't set a gallery or a pagination
40
+ $act_gid = 0;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  }
42
+ else {
43
+ // GET variables
44
+ $act_gid = $ngg->manage_page->gid;
45
 
46
+ // Load the gallery metadata
47
+ $gallery = $gallery_mapper->find($act_gid);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
 
49
+ if (!$gallery)
50
+ {
51
+ nggGallery::show_error(__('Gallery not found.', 'nggallery'));
52
+ return;
53
+ }
54
 
55
+ // Check if you have the correct capability
56
+ if (!nggAdmin::can_manage_this_gallery($gallery->author))
57
+ {
58
+ nggGallery::show_error(__('Sorry, you have no access here', 'nggallery'));
59
+ return;
60
+ }
 
 
 
61
 
62
+ $start = ($_GET['paged'] - 1) * $items_per_page;
 
63
 
64
+ // get picture values
65
+ $image_mapper = C_Image_Mapper::get_instance();
66
 
67
+ $total_number_of_images = count(
68
+ $image_mapper->select($image_mapper->get_primary_key_column())
69
+ ->where(array("galleryid = %d", $act_gid))
70
+ ->run_query(FALSE, FALSE, TRUE)
71
+ );
72
 
73
+ $image_mapper->select()->where(array("galleryid = %d", $act_gid));
74
 
75
+ if (($galSort = $settings->get('galSort', FALSE)) && ($galSortDir = $settings->get('galSortDir', FALSE)))
76
+ $image_mapper->order_by($galSort, $galSortDir);
77
+ $picturelist = $image_mapper->limit($items_per_page, $start)->run_query();
78
+ }
79
 
80
+ // list all galleries
81
+ $gallerylist = $gallery_mapper->find_all();
82
+
83
+ //get the columns
84
+ $image_columns = $wp_list_table->get_columns();
85
+ $hidden_columns = get_hidden_columns('nggallery-manage-images');
86
+ $num_columns = count($image_columns) - count($hidden_columns);
87
+
88
+ ?>
89
+
90
+ <script type="text/javascript">
91
+ var $ = jQuery;
92
+
93
+ function showDialog(windowId, title) {
94
+ var form = document.getElementById('updategallery');
95
+ var elementlist = "";
96
+
97
+ for (var i = 0, n = form.elements.length; i < n; i++) {
98
+ if (form.elements[i].type === "checkbox") {
99
+ if (form.elements[i].name === "doaction[]") {
100
+ if (form.elements[i].checked === true) {
101
+ if (elementlist === "") {
102
+ elementlist = form.elements[i].value;
103
+ } else {
104
+ elementlist += "," + form.elements[i].value;
105
+ }
106
+ }
107
+ }
108
+ }
109
+ }
110
+
111
+ $("#" + windowId + "_bulkaction").val($("#bulkaction").val());
112
+ $("#" + windowId + "_imagelist").val(elementlist);
113
+
114
+ // now show the dialog
115
+ $("#" + windowId).dialog({
116
+ width: 640,
117
+ resizable: false,
118
+ modal: true,
119
+ title: title,
120
+ position: {
121
+ my: 'center',
122
+ at: 'center',
123
+ of: window.parent
124
+ }
125
+ });
126
+
127
+ $("#" + windowId + ' .dialog-cancel').click(function() {
128
+ $("#" + windowId).dialog("close");
129
+ });
130
+ }
131
+
132
+ function setURLParam(param, paramVal) {
133
+ var url = window.location.href;
134
+ var params = "";
135
+ var tmp = "";
136
+ var tmpArray = url.split("?");
137
+ var base = tmpArray[0];
138
+ var additional = tmpArray[1];
139
+
140
+ if (additional) {
141
+ tmpArray = additional.split("&");
142
+ for (i = 0; i < tmpArray.length; i++) {
143
+ if (tmpArray[i].split('=')[0] !== param) {
144
+ params += tmp + tmpArray[i];
145
+ tmp = "&";
146
+ }
147
+ }
148
+ }
149
+
150
+ return base + "?" + params + tmp + "" + param + "=" + paramVal;
151
+ }
152
+
153
+ $(function() {
154
+
155
+ $('span.tooltip, label.tooltip').tooltip();
156
+
157
+ $('#ngg-manage-images-items-per-page').on('change', function() {
158
+ window.location.href = setURLParam('items', $(this).val());
159
+ });
160
+
161
+ // load a content via ajax
162
+ $('a.ngg-dialog').click(function() {
163
+ var dialogs = $('.ngg-overlay-dialog:visible');
164
+ if (dialogs.size() > 0) {
165
+ return false;
166
+ }
167
+
168
+ if ($("#spinner").length === 0) {
169
+ $("body").append('<div id="spinner"></div>');
170
+ }
171
+
172
+ var $this = $(this);
173
+ var results = new RegExp('[\\?&]w=([^&#]*)').exec(this.href);
174
+ var width = (results) ? results[1] : 800;
175
+ results = new RegExp('[\\?&]h=([^&#]*)').exec(this.href);
176
+ var height = (results) ? results[1] : 500;
177
+ var container = window;
178
+
179
+ var screen_width = window.innerWidth - 120;
180
+ var screen_height = window.innerHeight - 200;
181
+ width = (width > screen_width) ? screen_width : width;
182
+ height = (height > screen_height) ? screen_height : height;
183
+
184
+ if (window.parent) {
185
+ container = window.parent;
186
+ }
187
+
188
+ $('#spinner').fadeIn()
189
+ .position({my: "center", at: "center", of: container });
190
+
191
+ // load the remote content
192
+ var dialog = $('<div class="ngg-overlay-dialog"></div>').appendTo('body');
193
+ dialog.load(
194
+ this.href,
195
+ {},
196
+ function() {
197
+ $('#spinner').hide();
198
+
199
+ dialog.dialog({
200
+ title: ($this.attr('title')) ? $this.attr('title') : '',
201
+ position: { my: "center center-30", at: "center", of: window.parent },
202
+ width: width,
203
+ height: height,
204
+ modal: true,
205
+ resizable: false,
206
+ close: function() {
207
+ dialog.remove();
208
+ }
209
+ }).width(width - 30)
210
+ .height(height - 30);
211
+ }
212
+ );
213
+
214
+ //prevent the browser to follow the link
215
+ return false;
216
+ });
217
+
218
+ // If too many of these are generated the cookie becomes so large servers will reject HTTP requests
219
+ // Wait some time for other listeners to catch this event and then purge it from the browser
220
+ Frame_Event_Publisher.listen_for('attach_to_post:thumbnail_modified', function(data) {
221
+ setTimeout(function() {
222
+ Frame_Event_Publisher.delete_cookie("X-Frame-Events_" + data.id);
223
+ }, 400);
224
+ });
225
+ });
226
+
227
+ function checkAll(form) {
228
+ for (var i = 0, n = form.elements.length; i < n; i++) {
229
+ if (form.elements[i].type === "checkbox") {
230
+ if (form.elements[i].name === "doaction[]") {
231
+ if (form.elements[i].checked == true) {
232
+ form.elements[i].checked = false;
233
+ } else {
234
+ form.elements[i].checked = true;
235
+ }
236
+ }
237
+ }
238
+ }
239
+ }
240
+
241
+ function getNumChecked(form) {
242
+ var num = 0;
243
+ for (var i = 0, n = form.elements.length; i < n; i++) {
244
+ if (form.elements[i].type === "checkbox") {
245
+ if (form.elements[i].name === "doaction[]") {
246
+ if (form.elements[i].checked === true) {
247
+ num++;
248
+ }
249
+ }
250
+ }
251
+ }
252
+ return num;
253
+ }
254
+
255
+ // this function check for a the number of selected images, sumbmit false when no one selected
256
+ function checkSelected() {
257
+
258
+ var numchecked = getNumChecked(document.getElementById('updategallery'));
259
+
260
+ if (typeof document.activeElement == "undefined" && document.addEventListener) {
261
+ document.addEventListener("focus", function (e) {
262
+ document.activeElement = e.target;
263
+ }, true);
264
+ }
265
+
266
+ if (document.activeElement.name === 'post_paged')
267
+ return true;
268
+
269
+ if (numchecked < 1) {
270
+ alert('<?php echo esc_js(__('No images selected', 'nggallery')); ?>');
271
+ return false;
272
+ }
273
+
274
+ var actionId = $('#bulkaction').val();
275
+
276
+ switch (actionId) {
277
+ case "copy_to":
278
+ showDialog('selectgallery', '<?php echo esc_js(__('Copy image to...','nggallery')); ?>');
279
+ return false;
280
+ break;
281
+ case "move_to":
282
+ showDialog('selectgallery', '<?php echo esc_js(__('Move image to...','nggallery')); ?>');
283
+ return false;
284
+ break;
285
+ case "add_tags":
286
+ showDialog('entertags', '<?php echo esc_js(__('Add new tags','nggallery')); ?>');
287
+ return false;
288
+ break;
289
+ case "delete_tags":
290
+ showDialog('entertags', '<?php echo esc_js(__('Delete tags','nggallery')); ?>');
291
+ return false;
292
+ break;
293
+ case "overwrite_tags":
294
+ showDialog('entertags', '<?php echo esc_js(__('Overwrite','nggallery')); ?>');
295
+ return false;
296
+ break;
297
+ case "resize_images":
298
+ showDialog('resize_images', '<?php echo esc_js(__('Resize images','nggallery')); ?>');
299
+ return false;
300
+ break;
301
+ case "new_thumbnail":
302
+ showDialog('new_thumbnail', '<?php echo esc_js(__('Create new thumbnails','nggallery')); ?>');
303
+ return false;
304
+ break;
305
+ }
306
+
307
+ return confirm('<?php echo sprintf(esc_js(__("You are about to start the bulk edit for %s images \n \n 'Cancel' to stop, 'OK' to proceed.",'nggallery')), "' + numchecked + '") ; ?>');
308
+ }
309
+
310
+ $(document).ready(function($) {
311
+ if ($(this).data('ready')) {
312
+ return;
313
+ }
314
+
315
+ // close postboxes that should be closed
316
+ $('.if-js-closed').removeClass('if-js-closed')
317
+ .addClass('closed');
318
+ postboxes.add_postbox_toggles('ngg-manage-gallery');
319
+
320
+ $(this).data('ready', true);
321
+ });
322
+ </script>
323
+
324
+ <?php if ($action_status['message'] != '') { ?>
325
+ <div id="message"
326
+ class="<?php echo ($action_status['status'] == 'ok' ? 'updated' : $action_status['status']); ?> fade">
327
+ <p>
328
+ <strong><?php echo $action_status['message']; ?></strong>
329
+ </p>
330
+ </div>
331
+ <?php } ?>
332
+
333
+ <div class="wrap ngg_manage_images">
334
+
335
+ <?php if ($is_search) :?>
336
+
337
+ <div class="ngg_page_content_header">
338
+ <img src="<?php echo(C_Router::get_instance()->get_static_url('photocrati-nextgen_admin#imagely_icon.png')); ?>"
339
+ alt="">
340
+ <h3>
341
+ <?php printf(__('Search results for &#8220;%s&#8221;', 'nggallery'), esc_html(get_search_query())); ?>
342
+ </h3>
343
+ </div>
344
+
345
+ <div class='ngg_page_content_main'>
346
+
347
+ <form class="search-form" action="" method="get">
348
+ <p class="search-box">
349
+ <label class="hidden"
350
+ for="media-search-input">
351
+ <?php _e('Search Images', 'nggallery'); ?>:
352
+ </label>
353
+
354
+ <input type="hidden"
355
+ id="page-name"
356
+ name="page"
357
+ value="nggallery-manage-gallery"/>
358
+
359
+ <input type="text"
360
+ id="media-search-input"
361
+ name="s"
362
+ placeholder="<?php _e('Search Images', 'nggallery'); ?>"
363
+ value="<?php the_search_query(); ?>"/>
364
+
365
+ <input type="submit"
366
+ value="<?php _e('Search Images', 'nggallery'); ?>"
367
+ class="button"/>
368
+ </p>
369
+ </form>
370
+
371
+ <br style="clear: both;"/>
372
+
373
+ <form id="updategallery"
374
+ class="nggform"
375
+ method="POST"
376
+ action="<?php echo $ngg->manage_page->base_page . '&amp;mode=edit&amp;s=' . get_search_query(); ?>"
377
+ accept-charset="utf-8">
378
+
379
+ <?php wp_nonce_field('ngg_updategallery') ?>
380
+ <input type="hidden" name="nggpage" value="manage-images"/>
381
+
382
+ <!-- form#updategallery continues below end of if statement -->
383
+
384
+ <!-- div.ngg_page_content_main continues below end of if statement -->
385
+
386
+ <?php else :?>
387
+
388
+ <div class="ngg_page_content_header">
389
+ <img src="<?php echo(C_Router::get_instance()->get_static_url('photocrati-nextgen_admin#imagely_icon.png')); ?>"
390
+ alt="">
391
+ <h3>
392
+ <?php echo _n('Gallery: ', 'Galleries: ', 1, 'nggallery'); ?>
393
+ <?php echo esc_html (M_I18N::translate($gallery->title)); ?>
394
+ </h3>
395
+ </div>
396
+
397
+ <div class='ngg_page_content_main'>
398
+
399
+ <form id="updategallery"
400
+ class="nggform"
401
+ method="POST"
402
+ action="<?php echo $ngg->manage_page->base_page . '&amp;mode=edit&amp;gid=' . $act_gid . '&amp;paged=' . esc_attr($_GET['paged']); ?>"
403
+ accept-charset="utf-8">
404
+
405
+ <?php wp_nonce_field('ngg_updategallery') ?>
406
+ <input type="hidden" name="nggpage" value="manage-images"/>
407
+
408
+ <?php if (nggGallery::current_user_can('NextGEN Edit gallery options')) : ?>
409
+
410
+ <div id="poststuff" class="meta-box-sortables">
411
+ <?php wp_nonce_field('closedpostboxes', 'closedpostboxesnonce', false); ?>
412
+ <div id="gallerydiv"
413
+ class="postbox closed <?php echo postbox_classes('gallerydiv', 'ngg-manage-gallery'); ?>">
414
+ <div class="handlediv" title="<?php esc_attr_e('Click to toggle'); ?>">
415
+ <span class="toggle-indicator"></span>
416
+ <h3>
417
+ <span>&nbsp;<?php _e('Gallery Settings', 'nggallery'); ?></span>
418
+ </h3>
419
+
420
+ </div>
421
+
422
+ <div class="inside">
423
+ <?php $controller->render_gallery_fields(); ?>
424
+
425
+ <div class="submit">
426
+ <?php if (wpmu_enable_function('wpmuImportFolder') && nggGallery::current_user_can('NextGEN Import image folder')) { ?>
427
+ <input type="submit"
428
+ class="button-primary"
429
+ name="scanfolder"
430
+ value="<?php _e("Scan Folder for new images",'nggallery'); ?>"/>
431
+ <?php } ?>
432
+ <input type="submit"
433
+ class="button-primary action ngg_save_gallery_changes"
434
+ name="updatepictures"
435
+ value="<?php _e("Save Changes",'nggallery'); ?>"/>
436
+ </div>
437
+
438
+ </div>
439
+ </div>
440
+ </div> <!-- poststuff -->
441
+
442
+ <?php endif; ?>
443
+
444
+ <!-- form#updategallery continues below end of if statement -->
445
+
446
+ <!-- div.ngg_page_content_main continues below end of if statement -->
447
+
448
+ <?php endif; ?>
449
+
450
+ <!-- div.ngg_page_content_main continues here -->
451
+
452
+ <!-- form#updategallery continues here -->
453
+
454
+ <div class="tablenav top ngg-tablenav">
455
+
456
+ <?php
457
+ $ngg->manage_page->pagination('top', $_GET['paged'], $total_number_of_images, $items_per_page);
458
+
459
+ $items_per_page_array = apply_filters('ngg_manage_images_items_per_page_array', array(
460
+ '25' => __(' 25', 'nggallery'),
461
+ '50' => __(' 50', 'nggallery'),
462
+ '75' => __(' 75', 'nggallery'),
463
+ '100' => __('100', 'nggallery'),
464
+ '200' => __('200', 'nggallery'),
465
+ 'all' => __('All', 'nggallery')
466
+ ));
467
+ ?>
468
+
469
+ <select id="ngg-manage-images-items-per-page">
470
+ <?php foreach ($items_per_page_array as $val => $label) { ?>
471
+ <?php
472
+ $selected = '';
473
+ if (!empty($_GET['items']) && $val == $_GET['items'])
474
+ $selected = 'selected';
475
+ elseif (empty($_GET['items']) && $val == $items_per_page)
476
+ $selected = 'selected';
477
+ ?>
478
+ <option value="<?php echo esc_attr($val); ?>" <?php echo $selected; ?>>
479
+ <?php echo esc_html($label); ?>
480
  </option>
481
+ <?php } ?>
482
+ </select>
483
+ <label id="ngg-manage-images-items-per-page-label"
484
+ for="ngg-manage-images-items-per-page"><?php echo __('Images per page:', 'nggallery'); ?></label>
485
+
486
+ <div class="alignleft actions">
487
+ <select id="bulkaction" name="bulkaction">
488
+ <option value="no_action"><?php _e("Bulk actions",'nggallery'); ?></option>
489
+ <option value="set_watermark"><?php _e("Set watermark",'nggallery'); ?></option>
490
+ <option value="new_thumbnail"><?php _e("Create new thumbnails",'nggallery'); ?></option>
491
+ <option value="resize_images"><?php _e("Resize images",'nggallery'); ?></option>
492
+ <option value="recover_images"><?php _e("Recover from backup",'nggallery'); ?></option>
493
+ <option value="delete_images"><?php _e("Delete images",'nggallery'); ?></option>
494
+ <option value="import_meta"><?php _e("Import metadata",'nggallery'); ?></option>
495
+ <option value="rotate_cw"><?php _e("Rotate images clockwise",'nggallery'); ?></option>
496
+ <option value="rotate_ccw"><?php _e("Rotate images counter-clockwise",'nggallery'); ?></option>
497
+ <option value="copy_to"><?php _e("Copy to...",'nggallery'); ?></option>
498
+ <option value="move_to"><?php _e("Move to...",'nggallery'); ?></option>
499
+ <option value="add_tags"><?php _e("Add tags",'nggallery'); ?></option>
500
+ <option value="delete_tags"><?php _e("Delete tags",'nggallery'); ?></option>
501
+ <option value="overwrite_tags"><?php _e("Overwrite tags",'nggallery'); ?></option>
502
+ </select>
503
+ <input class="button-primary"
504
+ type="submit"
505
+ name="showThickbox"
506
+ value="<?php _e('Apply', 'nggallery'); ?>"
507
+ onclick="if (!checkSelected()) return false;"/>
508
+
509
+ <?php if (($settings->galSort === "sortorder") && (!$is_search)) { ?>
510
+ <input class="button-primary"
511
+ type="submit"
512
+ name="sortGallery"
513
+ value="<?php _e('Sort gallery', 'nggallery');?>"/>
514
+ <?php } ?>
515
+
516
+ <input type="submit"
517
+ name="updatepictures"
518
+ class="button-primary action"
519
+ value="<?php _e('Save Changes', 'nggallery');?>"/>
520
+ </div>
521
+ </div>
522
+
523
+ <table id="ngg-listimages" class="widefat fixed" cellspacing="0">
524
+
525
+ <thead>
526
+ <?php $controller->render_image_row_header() ?>
527
+ </thead>
528
+
529
+ <tfoot>
530
+ <?php $controller->render_image_row_header() ?>
531
+ </tfoot>
532
+
533
+ <tbody id="the-list">
534
+
535
+ <?php
536
+ if ($picturelist)
537
+ {
538
+ $storage = C_Gallery_Storage::get_instance();
539
+ $gallery_mapper = C_Gallery_Mapper::get_instance();
540
+
541
+ foreach($picturelist as $picture) {
542
+
543
+ if (empty($gallery) && $is_search)
544
+ $gallery = $gallery_mapper->find($picture->galleryid, FALSE);
545
+
546
+ //for search result we need to check the capability
547
+ if (!nggAdmin::can_manage_this_gallery($gallery->author) && $is_search)
548
+ continue;
549
+
550
+ $counter++;
551
+ $picture->imageURL = $storage->get_image_url($picture);
552
+ $picture->thumbURL = $storage->get_image_url($picture, 'thumb');
553
+ $picture->imagePath = $storage->get_image_abspath($picture);
554
+ $picture->thumbPath = $storage->get_image_abspath($picture, 'thumb');
555
+ echo apply_filters('ngg_manage_images_row', $picture, $counter);
556
+ }
557
+ }
558
+
559
+ // In the case you have no capaptibility to see the search result
560
+ if ($counter == 0)
561
+ echo '<tr><td colspan="' . $num_columns . '" align="center"><strong>'.__('No entries found','nggallery').'</strong></td></tr>';
562
+ ?>
563
+
564
+ </tbody>
565
+ </table>
566
+
567
+ <div class="tablenav bottom">
568
+ <input type="submit"
569
+ class="button-primary action"
570
+ name="updatepictures"
571
+ value="<?php _e('Save Changes', 'nggallery'); ?>"/>
572
+ <?php $ngg->manage_page->pagination('bottom', $_GET['paged'], $total_number_of_images, $items_per_page); ?>
573
+ </div>
574
+
575
+ </form><!-- /form#updategallery -->
576
+
577
+ <br class="clear"/>
578
+
579
+ </div><!-- /div.ngg_page_content_main -->
580
+
581
+ </div><!-- /#wrap -->
582
+
583
+ <!-- #entertags -->
584
+ <div id="entertags" style="display: none;">
585
+ <form id="form-tags" method="POST" accept-charset="utf-8">
586
+ <?php wp_nonce_field('ngg_thickbox_form') ?>
587
+ <input type="hidden" id="entertags_imagelist" name="TB_imagelist" value=""/>
588
+ <input type="hidden" id="entertags_bulkaction" name="TB_bulkaction" value=""/>
589
+ <input type="hidden" name="nggpage" value="manage-images"/>
590
+ <input type="hidden" name="TB_EditTags" value="OK"/>
591
+ <table width="100%" border="0" cellspacing="3" cellpadding="3">
592
+ <tr>
593
+ <th>
594
+ <?php _e("Enter the tags",'nggallery'); ?> :
595
+ <input name="taglist"
596
+ type="text"
597
+ style="width:90%"
598
+ value=""/>
599
+ </th>
600
+ </tr>
601
+ <tr>
602
+ <td class="submit">
603
+ <input class="button-primary"
604
+ type="submit"
605
+ name="TB_EditTags"
606
+ onClick="jQuery(this).attr('disabled', true); submit();"
607
+ value="<?php _e("OK",'nggallery'); ?>"/>
608
+ <input class="button-primary dialog-cancel"
609
+ type="reset"
610
+ value="&nbsp;<?php _e("Cancel",'nggallery'); ?>&nbsp;"/>
611
+ </td>
612
+ </tr>
613
+ </table>
614
+ </form>
615
+ </div>
616
+ <!-- /#entertags -->
617
+
618
+ <!-- #selectgallery -->
619
+ <div id="selectgallery" style="display: none;">
620
+ <form id="form-select-gallery" method="POST" accept-charset="utf-8">
621
+ <?php wp_nonce_field('ngg_thickbox_form') ?>
622
+ <input type="hidden" id="selectgallery_imagelist" name="TB_imagelist" value=""/>
623
+ <input type="hidden" id="selectgallery_bulkaction" name="TB_bulkaction" value=""/>
624
+ <input type="hidden" name="nggpage" value="manage-images"/>
625
+ <input type="hidden" name="TB_SelectGallery" value="OK"/>
626
+ <table width="100%" border="0" cellspacing="3" cellpadding="3">
627
+ <tr>
628
+ <th>
629
+ <?php _e('Select the destination gallery:', 'nggallery'); ?>&nbsp;
630
+ <select name="dest_gid" style="width:90%">
631
+ <?php
632
+ foreach ($gallerylist as $gallery) {
633
+ if ($gallery->gid != $act_gid) { ?>
634
+ <option value="<?php echo esc_attr($gallery->gid); ?>">
635
+ <?php
636
+ print esc_attr(apply_filters('ngg_gallery_title_select_field', $gallery->title, $gallery, FALSE));
637
+ ?>
638
+ </option>
639
+ <?php }
640
+ }
641
+ ?>
642
+ </select>
643
+ </th>
644
+ </tr>
645
+ <tr>
646
+ <td class="submit">
647
+ <input type="submit"
648
+ class="button-primary"
649
+ name="TB_SelectGallery"
650
+ onClick="jQuery(this).attr('disabled', true); submit();"
651
+ value="<?php _e("OK",'nggallery'); ?>"/>
652
+ <input class="button-primary dialog-cancel"
653
+ type="reset"
654
+ value="<?php _e("Cancel",'nggallery'); ?>"/>
655
+ </td>
656
+ </tr>
657
+ </table>
658
+ </form>
659
+ </div>
660
+ <!-- /#selectgallery -->
661
+
662
+ <!-- #resize_images -->
663
+ <div id="resize_images" style="display: none;">
664
+ <form id="form-resize-images" method="POST" accept-charset="utf-8">
665
+ <?php wp_nonce_field('ngg_thickbox_form') ?>
666
+ <input type="hidden" id="resize_images_imagelist" name="TB_imagelist" value=""/>
667
+ <input type="hidden" id="resize_images_bulkaction" name="TB_bulkaction" value=""/>
668
+ <input type="hidden" name="nggpage" value="manage-images"/>
669
+ <input type="hidden" name="TB_ResizeImages" value="OK"/>
670
+ <table width="100%" border="0" cellspacing="3" cellpadding="3">
671
+ <tr valign="top">
672
+ <td>
673
+ <strong><?php _e('Resize Images to', 'nggallery'); ?>:</strong>
674
+ </td>
675
+ <td>
676
+ <input type="text"
677
+ size="5"
678
+ name="imgWidth"
679
+ value="<?php echo $settings->imgWidth ?>"/>
680
+ x
681
+ <input type="text"
682
+ size="5"
683
+ name="imgHeight"
684
+ value="<?php echo $settings->imgHeight; ?>"/>
685
+ <br/>
686
+ <small><?php _e('Width x height (in pixel). NextGEN Gallery will keep ratio size','nggallery') ?></small>
687
+ </td>
688
+ </tr>
689
+ <tr>
690
+ <td colspan="2" class="submit">
691
+ <input class="button-primary"
692
+ type="submit"
693
+ name="TB_ResizeImages"
694
+ onClick="jQuery(this).attr('disabled', true); submit();"
695
+ value="<?php _e('OK', 'nggallery'); ?>"/>
696
+ <input class="button-primary dialog-cancel"
697
+ type="reset"
698
+ value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
699
+ </td>
700
+ </tr>
701
+ </table>
702
+ </form>
703
+ </div>
704
+ <!-- /#resize_images -->
705
+
706
+ <!-- #new_thumbnail -->
707
+ <div id="new_thumbnail" style="display: none;">
708
+ <form id="form-new-thumbnail" method="POST" accept-charset="utf-8">
709
+ <?php wp_nonce_field('ngg_thickbox_form') ?>
710
+ <input type="hidden" id="new_thumbnail_imagelist" name="TB_imagelist" value=""/>
711
+ <input type="hidden" id="new_thumbnail_bulkaction" name="TB_bulkaction" value=""/>
712
+ <input type="hidden" name="nggpage" value="manage-images"/>
713
+ <input type="hidden" name="TB_NewThumbnail" value="OK"/>
714
+ <table width="100%" border="0" cellspacing="3" cellpadding="3">
715
+ <tr valign="top">
716
+ <th align="left">
717
+ <?php _e('Width x height (in pixel)','nggallery') ?>
718
+ </th>
719
+ <td>
720
+ <?php include(dirname(__FILE__) . '/thumbnails-template.php'); ?>
721
+ </td>
722
+ </tr>
723
+ <tr valign="top">
724
+ <th align="left">
725
+ <?php _e('Set fix dimension','nggallery') ?>
726
+ </th>
727
+ <td>
728
+ <input type="checkbox"
729
+ name="thumbfix"
730
+ value="1"
731
+ <?php checked('1', $settings->thumbfix); ?>/>
732
+ <br/>
733
+ <small><?php _e('Ignore the aspect ratio, no portrait thumbnails','nggallery') ?></small>
734
+ </td>
735
+ </tr>
736
+ <tr>
737
+ <td colspan="2" class="submit">
738
+ <input class="button-primary"
739
+ type="submit"
740
+ name="TB_NewThumbnail"
741
+ onClick="jQuery(this).attr('disabled', true); submit();"
742
+ value="<?php _e('OK', 'nggallery');?>"/>
743
+ <input class="button-primary dialog-cancel"
744
+ type="reset"
745
+ value="&nbsp;<?php _e('Cancel', 'nggallery'); ?>&nbsp;"/>
746
+ </td>
747
+ </tr>
748
+ </table>
749
+ </form>
750
+ </div>
751
+ <!-- /#new_thumbnail -->
752
+
753
+ <script type="text/javascript">
754
+ jQuery(document).ready(function($) {
755
+ columns.init('nggallery-manage-images');
756
+
757
+ // Ensure that thumb preview images are always up-to-date
758
+ $('#ngg-listimages img.thumb').each(function() {
759
+ var $this = $(this);
760
+ var src = $this.attr('src');
761
+ var matchData = src.match(/\?i=(\d+)$/);
762
+ if (matchData) {
763
+ var i = parseInt(matchData[1]) + 1;
764
+ src = src.replace(matchData[0], "?i=" + i.toString());
765
+ $this.attr('src', src);
766
+ }
767
+ })
768
+ });
769
+ </script>
770
+ <?php
771
  }
772
 
773
  /**
774
+ * Constructor class to create the table layout
775
  *
776
  * @package WordPress
777
  * @subpackage List_Table
778
  * @since 1.8.0
779
  * @access private
780
  */
781
+ class _NGG_Images_List_Table extends WP_List_Table
782
+ {
783
+ public $_screen;
784
+ public $_columns;
 
 
 
 
785
 
786
+ function __construct($screen)
787
+ {
788
+ if (is_string($screen))
789
+ $screen = convert_to_screen($screen);
790
 
791
+ $this->_screen = $screen;
792
+ $this->_columns = array() ;
793
 
794
+ add_filter('manage_' . $screen->id . '_columns', array($this, 'get_columns'), 0);
795
+ }
796
 
797
+ function get_column_info()
798
+ {
799
+ $columns = get_column_headers($this->_screen);
800
+ $hidden = get_hidden_columns($this->_screen);
801
+ $_sortable = $this->get_sortable_columns();
802
+ $sortable = array();
803
 
804
+ foreach ($_sortable as $id => $data) {
805
+ if (empty($data))
806
+ continue;
807
 
808
+ $data = (array) $data;
809
+ if (!isset($data[1]))
810
+ $data[1] = false;
811
 
812
+ $sortable[$id] = $data;
813
+ }
814
 
815
+ return array($columns, $hidden, $sortable);
816
+ }
817
 
818
  // define the columns to display, the syntax is 'internal name' => 'display name'
819
+ function get_columns()
820
+ {
821
+ $columns = array();
822
 
823
+ $columns['cb'] = '<input name="checkall" type="checkbox" onclick="checkAll(document.getElementById(\'updategallery\'));"/>';
824
+ $columns['id'] = __('ID');
825
+ $columns['thumbnail'] = __('Thumbnail', 'nggallery');
826
+ $columns['filename'] = __('Filename', 'nggallery');
827
+ $columns['alt_title_desc'] = __('Alt &amp; Title Text', 'nggallery') . ' / ' . __('Description', 'nggallery');
828
+ $columns['tags'] = __('Tags (comma separated list)', 'nggallery');
 
829
 
830
+ $columns = apply_filters('ngg_manage_images_columns', $columns);
831
+
832
+ return $columns;
833
+ }
834
 
835
+ function get_sortable_columns()
836
+ {
837
+ return array();
838
+ }
839
 
840
+ function the_list()
841
+ {
842
+ }
843
 
 
844
  }
products/photocrati_nextgen/modules/ngglegacy/admin/manage.php CHANGED
@@ -751,10 +751,43 @@ class nggManageGallery {
751
 
752
  switch ($_POST['TB_bulkaction']) {
753
  case 'copy_to':
754
- C_Gallery_Storage::get_instance()->copy_images($pic_ids, $dest_gid);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
755
  break;
756
  case 'move_to':
757
- C_Gallery_Storage::get_instance()->move_images($pic_ids, $dest_gid);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
758
  break;
759
  }
760
  }
751
 
752
  switch ($_POST['TB_bulkaction']) {
753
  case 'copy_to':
754
+ $destination = C_Gallery_Mapper::get_instance()->find($dest_gid);
755
+ $new_ids = C_Gallery_Storage::get_instance()->copy_images($pic_ids, $dest_gid);
756
+
757
+ if (!empty($new_ids))
758
+ {
759
+ $admin_url = admin_url();
760
+ $title = esc_html($destination->title);
761
+ $link = "<a href='{$admin_url}admin.php?page=nggallery-manage-gallery&mode=edit&gid={$destination->gid}'>{$title}</a>";
762
+ nggGallery::show_message(
763
+ sprintf(__('Copied %1$s picture(s) to gallery: %2$s .','nggallery'), count($new_ids), $link)
764
+ );
765
+ }
766
+ else {
767
+ nggGallery::show_error(
768
+ __('Failed to copy images', 'nggallery')
769
+ );
770
+ }
771
+
772
  break;
773
  case 'move_to':
774
+ $destination = C_Gallery_Mapper::get_instance()->find($dest_gid);
775
+ $new_ids = C_Gallery_Storage::get_instance()->move_images($pic_ids, $dest_gid);
776
+
777
+ if (!empty($new_ids))
778
+ {
779
+ $admin_url = admin_url();
780
+ $title = esc_html($destination->title);
781
+ $link = "<a href='{$admin_url}admin.php?page=nggallery-manage-gallery&mode=edit&gid={$destination->gid}'>{$title}</a>";
782
+ nggGallery::show_message(
783
+ sprintf(__('Moved %1$s picture(s) to gallery: %2$s .','nggallery'), count($new_ids), $link)
784
+ );
785
+ }
786
+ else {
787
+ nggGallery::show_error(
788
+ __('Failed to move images', 'nggallery')
789
+ );
790
+ }
791
  break;
792
  }
793
  }
products/photocrati_nextgen/modules/ngglegacy/lib/media-rss.php CHANGED
@@ -7,7 +7,7 @@
7
  */
8
  class nggMediaRss {
9
 
10
- function add_mrss_alternate_link() {
11
  echo "<link id='MediaRSS' rel='alternate' type='application/rss+xml' title='NextGEN Gallery RSS Feed' href='" . nggMediaRss::get_mrss_url() . "' />\n";
12
  }
13
 
7
  */
8
  class nggMediaRss {
9
 
10
+ public static function add_mrss_alternate_link() {
11
  echo "<link id='MediaRSS' rel='alternate' type='application/rss+xml' title='NextGEN Gallery RSS Feed' href='" . nggMediaRss::get_mrss_url() . "' />\n";
12
  }
13
 
products/photocrati_nextgen/modules/ngglegacy/nggallery.php CHANGED
@@ -9,9 +9,11 @@ class nggLoader
9
  var $dbversion = '1.8.1';
10
  var $minimum_WP = '3.6.1';
11
  var $options = '';
 
 
 
 
12
  var $manage_page;
13
- var $add_PHP5_notice = false;
14
- var $plugin_name = '';
15
 
16
  function __construct()
17
  {
9
  var $dbversion = '1.8.1';
10
  var $minimum_WP = '3.6.1';
11
  var $options = '';
12
+ var $add_PHP5_notice = false;
13
+ var $plugin_name = '';
14
+
15
+ /** @var nggManageGallery|nggManageAlbum $manage_page */
16
  var $manage_page;
 
 
17
 
18
  function __construct()
19
  {
products/photocrati_nextgen/modules/third_party_compat/module.third_party_compat.php CHANGED
@@ -108,9 +108,10 @@ class M_Third_Party_Compat extends C_Base_Module
108
 
109
  function _register_hooks()
110
  {
111
- add_action('init', array(&$this, 'colorbox'), PHP_INT_MAX);
112
- add_action('init', array(&$this, 'flattr'), PHP_INT_MAX);
113
- add_action('wp', array(&$this, 'bjlazyload'), PHP_INT_MAX);
 
114
 
115
  add_action('admin_init', array($this, 'excellent_themes_admin'), -10);
116
 
@@ -145,6 +146,14 @@ class M_Third_Party_Compat extends C_Base_Module
145
  add_action('the_post', array(&$this, 'add_ngg_pro_page_parameter'));
146
  }
147
 
 
 
 
 
 
 
 
 
148
  function is_ngg_page()
149
  {
150
  return (is_admin() && isset($_REQUEST['page']) && strpos($_REQUEST['page'], 'ngg') !== FALSE);
108
 
109
  function _register_hooks()
110
  {
111
+ add_action('init', array($this, 'divi'), 10);
112
+ add_action('init', array($this, 'colorbox'), PHP_INT_MAX);
113
+ add_action('init', array($this, 'flattr'), PHP_INT_MAX);
114
+ add_action('wp', array($this, 'bjlazyload'), PHP_INT_MAX);
115
 
116
  add_action('admin_init', array($this, 'excellent_themes_admin'), -10);
117
 
146
  add_action('the_post', array(&$this, 'add_ngg_pro_page_parameter'));
147
  }
148
 
149
+ public function divi()
150
+ {
151
+ // Divi / Divi Booster loads its own Iris JS under the 'iris' ID, but because NextGen has already
152
+ // registered the default /wp-admin/js/iris.js we effectively break their admin color selector
153
+ if (function_exists('et_divi_load_unminified_scripts') && !empty($_GET['et_fb']))
154
+ wp_deregister_script('iris');
155
+ }
156
+
157
  function is_ngg_page()
158
  {
159
  return (is_admin() && isset($_REQUEST['page']) && strpos($_REQUEST['page'], 'ngg') !== FALSE);
products/photocrati_nextgen/modules/widget/package.module.widget.php CHANGED
@@ -168,7 +168,7 @@ class C_Widget_Gallery extends WP_Widget
168
  // HTML of random galleries the following is a bit of a workaround: for random widgets we create a displayed
169
  // gallery object and then cache the results of get_entities() so that, for at least as long as
170
  // NGG_RENDERING_CACHE_TTL seconds, widgets will be temporarily cached
171
- if (in_array($params['source'], array('random', 'random_images')) && (double) $settings->random_widget_cache_ttl > 0) {
172
  $displayed_gallery = $renderer->params_to_displayed_gallery($params);
173
  if (is_null($displayed_gallery->id())) {
174
  $displayed_gallery->id(md5(json_encode($displayed_gallery->get_entity())));
@@ -186,7 +186,7 @@ class C_Widget_Gallery extends WP_Widget
186
  $ids[] = $item->{$item->id_field};
187
  }
188
  $params['image_ids'] = implode(',', $ids);
189
- $transientM->set($key, $params['image_ids'], (double) $settings->random_widget_cache_ttl * 60);
190
  }
191
  $params['source'] = 'images';
192
  unset($params['container_ids']);
168
  // HTML of random galleries the following is a bit of a workaround: for random widgets we create a displayed
169
  // gallery object and then cache the results of get_entities() so that, for at least as long as
170
  // NGG_RENDERING_CACHE_TTL seconds, widgets will be temporarily cached
171
+ if (in_array($params['source'], array('random', 'random_images')) && (float) $settings->random_widget_cache_ttl > 0) {
172
  $displayed_gallery = $renderer->params_to_displayed_gallery($params);
173
  if (is_null($displayed_gallery->id())) {
174
  $displayed_gallery->id(md5(json_encode($displayed_gallery->get_entity())));
186
  $ids[] = $item->{$item->id_field};
187
  }
188
  $params['image_ids'] = implode(',', $ids);
189
+ $transientM->set($key, $params['image_ids'], (float) $settings->random_widget_cache_ttl * 60);
190
  }
191
  $params['source'] = 'images';
192
  unset($params['container_ids']);
readme.txt CHANGED
@@ -2,12 +2,12 @@
2
  Contributors: photocrati, imagely
3
  Tags: wordpress gallery plugin, gallery, nextgen, nextgen gallery, photo gallery, image gallery, photography, slideshow, images, photo, photo album, watermark
4
  Requires at least: 4.0.0
5
- Stable tag: 3.2.23
6
- Tested up to: 5.3.0
7
- Requires PHP: 5.4
8
  License: GPLv2
 
9
 
10
- The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 27 million downloads.
11
 
12
  == Description ==
13
 
@@ -180,6 +180,25 @@ For more information, feel free to visit the official website for the NextGEN Ga
180
 
181
  == Changelog ==
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  = V3.2.23 - 12.02.2019 =
184
  * NEW: There is a new setting under Other Options > Misc to disable enqueueing FontAwesome entirely
185
  * Changed: WP-CLI commands have been namespaced and numerous new commands have been added
2
  Contributors: photocrati, imagely
3
  Tags: wordpress gallery plugin, gallery, nextgen, nextgen gallery, photo gallery, image gallery, photography, slideshow, images, photo, photo album, watermark
4
  Requires at least: 4.0.0
5
+ Stable tag: 3.3.0
6
+ Tested up to: 5.3.2
 
7
  License: GPLv2
8
+ Requires PHP: 5.4
9
 
10
+ The most popular WordPress gallery plugin and one of the most popular plugins of all time with over 28 million downloads.
11
 
12
  == Description ==
13
 
180
 
181
  == Changelog ==
182
 
183
+ = V3.2.24 - 03.10.2020 =
184
+ * NEW: Added feature on Manage Galleries page to search gallery names
185
+ * NEW: Added filter 'ngg_disable_shortcodes_in_request_api' to disable rendering of NextGen shortcodes in REST
186
+ * NEW: Added option to automatically watermark images during upload
187
+ * Changed: Minimum PHP version supported is now 5.4
188
+ * Changed: Pope framework now included via Composer
189
+ * Changed: Removed use of 'contextual_help' filter which is deprecated
190
+ * Changed: Renamed nggallery.po to nggallery.pot for better compatibility with Loco Translate
191
+ * Fixed: Compatibility with Divi Booster
192
+ * Fixed: Copying images to another gallery caused a PHP warning
193
+ * Fixed: Featured Image feature was not working
194
+ * Fixed: Fixed PHP warning sometimes displayed with album breadcrumbs
195
+ * Fixed: Fixed PHP warning when displaying certain albums
196
+ * Fixed: No notification was given when moving or copying images on Manage Gallery
197
+ * Fixed: PHP warning would be displayed when MediaRSS feature was enabled
198
+ * Fixed: SimpleLightbox would not use image alttext attribute for titles
199
+ * Fixed: Uploading zip files containing images with uppercase file extensions would fail to extract any images
200
+ * Fixed: Uploading images with invalid EXIF would reject the image entirely
201
+
202
  = V3.2.23 - 12.02.2019 =
203
  * NEW: There is a new setting under Other Options > Misc to disable enqueueing FontAwesome entirely
204
  * Changed: WP-CLI commands have been namespaced and numerous new commands have been added
vendor/autoload.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload.php @generated by Composer
4
+
5
+ require_once __DIR__ . '/composer/autoload_real.php';
6
+
7
+ return ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2::getLoader();
vendor/bin/php-parse ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+
4
+ foreach ([__DIR__ . '/../../../autoload.php', __DIR__ . '/../vendor/autoload.php'] as $file) {
5
+ if (file_exists($file)) {
6
+ require $file;
7
+ break;
8
+ }
9
+ }
10
+
11
+ ini_set('xdebug.max_nesting_level', 3000);
12
+
13
+ // Disable XDebug var_dump() output truncation
14
+ ini_set('xdebug.var_display_max_children', -1);
15
+ ini_set('xdebug.var_display_max_data', -1);
16
+ ini_set('xdebug.var_display_max_depth', -1);
17
+
18
+ list($operations, $files, $attributes) = parseArgs($argv);
19
+
20
+ /* Dump nodes by default */
21
+ if (empty($operations)) {
22
+ $operations[] = 'dump';
23
+ }
24
+
25
+ if (empty($files)) {
26
+ showHelp("Must specify at least one file.");
27
+ }
28
+
29
+ $lexer = new PhpParser\Lexer\Emulative(['usedAttributes' => [
30
+ 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments'
31
+ ]]);
32
+ $parser = (new PhpParser\ParserFactory)->create(
33
+ PhpParser\ParserFactory::PREFER_PHP7,
34
+ $lexer
35
+ );
36
+ $dumper = new PhpParser\NodeDumper([
37
+ 'dumpComments' => true,
38
+ 'dumpPositions' => $attributes['with-positions'],
39
+ ]);
40
+ $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
41
+
42
+ $traverser = new PhpParser\NodeTraverser();
43
+ $traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver);
44
+
45
+ foreach ($files as $file) {
46
+ if (strpos($file, '<?php') === 0) {
47
+ $code = $file;
48
+ fwrite(STDERR, "====> Code $code\n");
49
+ } else {
50
+ if (!file_exists($file)) {
51
+ fwrite(STDERR, "File $file does not exist.\n");
52
+ exit(1);
53
+ }
54
+
55
+ $code = file_get_contents($file);
56
+ fwrite(STDERR, "====> File $file:\n");
57
+ }
58
+
59
+ if ($attributes['with-recovery']) {
60
+ $errorHandler = new PhpParser\ErrorHandler\Collecting;
61
+ $stmts = $parser->parse($code, $errorHandler);
62
+ foreach ($errorHandler->getErrors() as $error) {
63
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
64
+ fwrite(STDERR, $message . "\n");
65
+ }
66
+ if (null === $stmts) {
67
+ continue;
68
+ }
69
+ } else {
70
+ try {
71
+ $stmts = $parser->parse($code);
72
+ } catch (PhpParser\Error $error) {
73
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
74
+ fwrite(STDERR, $message . "\n");
75
+ exit(1);
76
+ }
77
+ }
78
+
79
+ foreach ($operations as $operation) {
80
+ if ('dump' === $operation) {
81
+ fwrite(STDERR, "==> Node dump:\n");
82
+ echo $dumper->dump($stmts, $code), "\n";
83
+ } elseif ('pretty-print' === $operation) {
84
+ fwrite(STDERR, "==> Pretty print:\n");
85
+ echo $prettyPrinter->prettyPrintFile($stmts), "\n";
86
+ } elseif ('json-dump' === $operation) {
87
+ fwrite(STDERR, "==> JSON dump:\n");
88
+ echo json_encode($stmts, JSON_PRETTY_PRINT), "\n";
89
+ } elseif ('var-dump' === $operation) {
90
+ fwrite(STDERR, "==> var_dump():\n");
91
+ var_dump($stmts);
92
+ } elseif ('resolve-names' === $operation) {
93
+ fwrite(STDERR, "==> Resolved names.\n");
94
+ $stmts = $traverser->traverse($stmts);
95
+ }
96
+ }
97
+ }
98
+
99
+ function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) {
100
+ if ($withColumnInfo && $e->hasColumnInfo()) {
101
+ return $e->getMessageWithColumnInfo($code);
102
+ } else {
103
+ return $e->getMessage();
104
+ }
105
+ }
106
+
107
+ function showHelp($error = '') {
108
+ if ($error) {
109
+ fwrite(STDERR, $error . "\n\n");
110
+ }
111
+ fwrite($error ? STDERR : STDOUT, <<<OUTPUT
112
+ Usage: php-parse [operations] file1.php [file2.php ...]
113
+ or: php-parse [operations] "<?php code"
114
+ Turn PHP source code into an abstract syntax tree.
115
+
116
+ Operations is a list of the following options (--dump by default):
117
+
118
+ -d, --dump Dump nodes using NodeDumper
119
+ -p, --pretty-print Pretty print file using PrettyPrinter\Standard
120
+ -j, --json-dump Print json_encode() result
121
+ --var-dump var_dump() nodes (for exact structure)
122
+ -N, --resolve-names Resolve names using NodeVisitor\NameResolver
123
+ -c, --with-column-info Show column-numbers for errors (if available)
124
+ -P, --with-positions Show positions in node dumps
125
+ -r, --with-recovery Use parsing with error recovery
126
+ -h, --help Display this page
127
+
128
+ Example:
129
+ php-parse -d -p -N -d file.php
130
+
131
+ Dumps nodes, pretty prints them, then resolves names and dumps them again.
132
+
133
+
134
+ OUTPUT
135
+ );
136
+ exit($error ? 1 : 0);
137
+ }
138
+
139
+ function parseArgs($args) {
140
+ $operations = [];
141
+ $files = [];
142
+ $attributes = [
143
+ 'with-column-info' => false,
144
+ 'with-positions' => false,
145
+ 'with-recovery' => false,
146
+ ];
147
+
148
+ array_shift($args);
149
+ $parseOptions = true;
150
+ foreach ($args as $arg) {
151
+ if (!$parseOptions) {
152
+ $files[] = $arg;
153
+ continue;
154
+ }
155
+
156
+ switch ($arg) {
157
+ case '--dump':
158
+ case '-d':
159
+ $operations[] = 'dump';
160
+ break;
161
+ case '--pretty-print':
162
+ case '-p':
163
+ $operations[] = 'pretty-print';
164
+ break;
165
+ case '--json-dump':
166
+ case '-j':
167
+ $operations[] = 'json-dump';
168
+ break;
169
+ case '--var-dump':
170
+ $operations[] = 'var-dump';
171
+ break;
172
+ case '--resolve-names':
173
+ case '-N';
174
+ $operations[] = 'resolve-names';
175
+ break;
176
+ case '--with-column-info':
177
+ case '-c';
178
+ $attributes['with-column-info'] = true;
179
+ break;
180
+ case '--with-positions':
181
+ case '-P':
182
+ $attributes['with-positions'] = true;
183
+ break;
184
+ case '--with-recovery':
185
+ case '-r':
186
+ $attributes['with-recovery'] = true;
187
+ break;
188
+ case '--help':
189
+ case '-h';
190
+ showHelp();
191
+ break;
192
+ case '--':
193
+ $parseOptions = false;
194
+ break;
195
+ default:
196
+ if ($arg[0] === '-') {
197
+ showHelp("Invalid operation $arg.");
198
+ } else {
199
+ $files[] = $arg;
200
+ }
201
+ }
202
+ }
203
+
204
+ return [$operations, $files, $attributes];
205
+ }
vendor/composer/ClassLoader.php ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * This file is part of Composer.
5
+ *
6
+ * (c) Nils Adermann <naderman@naderman.de>
7
+ * Jordi Boggiano <j.boggiano@seld.be>
8
+ *
9
+ * For the full copyright and license information, please view the LICENSE
10
+ * file that was distributed with this source code.
11
+ */
12
+
13
+ namespace Composer\Autoload;
14
+
15
+ /**
16
+ * ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
17
+ *
18
+ * $loader = new \Composer\Autoload\ClassLoader();
19
+ *
20
+ * // register classes with namespaces
21
+ * $loader->add('Symfony\Component', __DIR__.'/component');
22
+ * $loader->add('Symfony', __DIR__.'/framework');
23
+ *
24
+ * // activate the autoloader
25
+ * $loader->register();
26
+ *
27
+ * // to enable searching the include path (eg. for PEAR packages)
28
+ * $loader->setUseIncludePath(true);
29
+ *
30
+ * In this example, if you try to use a class in the Symfony\Component
31
+ * namespace or one of its children (Symfony\Component\Console for instance),
32
+ * the autoloader will first look for the class under the component/
33
+ * directory, and it will then fallback to the framework/ directory if not
34
+ * found before giving up.
35
+ *
36
+ * This class is loosely based on the Symfony UniversalClassLoader.
37
+ *
38
+ * @author Fabien Potencier <fabien@symfony.com>
39
+ * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see http://www.php-fig.org/psr/psr-0/
41
+ * @see http://www.php-fig.org/psr/psr-4/
42
+ */
43
+ class ClassLoader
44
+ {
45
+ // PSR-4
46
+ private $prefixLengthsPsr4 = array();
47
+ private $prefixDirsPsr4 = array();
48
+ private $fallbackDirsPsr4 = array();
49
+
50
+ // PSR-0
51
+ private $prefixesPsr0 = array();
52
+ private $fallbackDirsPsr0 = array();
53
+
54
+ private $useIncludePath = false;
55
+ private $classMap = array();
56
+ private $classMapAuthoritative = false;
57
+ private $missingClasses = array();
58
+ private $apcuPrefix;
59
+
60
+ public function getPrefixes()
61
+ {
62
+ if (!empty($this->prefixesPsr0)) {
63
+ return call_user_func_array('array_merge', $this->prefixesPsr0);
64
+ }
65
+
66
+ return array();
67
+ }
68
+
69
+ public function getPrefixesPsr4()
70
+ {
71
+ return $this->prefixDirsPsr4;
72
+ }
73
+
74
+ public function getFallbackDirs()
75
+ {
76
+ return $this->fallbackDirsPsr0;
77
+ }
78
+
79
+ public function getFallbackDirsPsr4()
80
+ {
81
+ return $this->fallbackDirsPsr4;
82
+ }
83
+
84
+ public function getClassMap()
85
+ {
86
+ return $this->classMap;
87
+ }
88
+
89
+ /**
90
+ * @param array $classMap Class to filename map
91
+ */
92
+ public function addClassMap(array $classMap)
93
+ {
94
+ if ($this->classMap) {
95
+ $this->classMap = array_merge($this->classMap, $classMap);
96
+ } else {
97
+ $this->classMap = $classMap;
98
+ }
99
+ }
100
+
101
+ /**
102
+ * Registers a set of PSR-0 directories for a given prefix, either
103
+ * appending or prepending to the ones previously set for this prefix.
104
+ *
105
+ * @param string $prefix The prefix
106
+ * @param array|string $paths The PSR-0 root directories
107
+ * @param bool $prepend Whether to prepend the directories
108
+ */
109
+ public function add($prefix, $paths, $prepend = false)
110
+ {
111
+ if (!$prefix) {
112
+ if ($prepend) {
113
+ $this->fallbackDirsPsr0 = array_merge(
114
+ (array) $paths,
115
+ $this->fallbackDirsPsr0
116
+ );
117
+ } else {
118
+ $this->fallbackDirsPsr0 = array_merge(
119
+ $this->fallbackDirsPsr0,
120
+ (array) $paths
121
+ );
122
+ }
123
+
124
+ return;
125
+ }
126
+
127
+ $first = $prefix[0];
128
+ if (!isset($this->prefixesPsr0[$first][$prefix])) {
129
+ $this->prefixesPsr0[$first][$prefix] = (array) $paths;
130
+
131
+ return;
132
+ }
133
+ if ($prepend) {
134
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
135
+ (array) $paths,
136
+ $this->prefixesPsr0[$first][$prefix]
137
+ );
138
+ } else {
139
+ $this->prefixesPsr0[$first][$prefix] = array_merge(
140
+ $this->prefixesPsr0[$first][$prefix],
141
+ (array) $paths
142
+ );
143
+ }
144
+ }
145
+
146
+ /**
147
+ * Registers a set of PSR-4 directories for a given namespace, either
148
+ * appending or prepending to the ones previously set for this namespace.
149
+ *
150
+ * @param string $prefix The prefix/namespace, with trailing '\\'
151
+ * @param array|string $paths The PSR-4 base directories
152
+ * @param bool $prepend Whether to prepend the directories
153
+ *
154
+ * @throws \InvalidArgumentException
155
+ */
156
+ public function addPsr4($prefix, $paths, $prepend = false)
157
+ {
158
+ if (!$prefix) {
159
+ // Register directories for the root namespace.
160
+ if ($prepend) {
161
+ $this->fallbackDirsPsr4 = array_merge(
162
+ (array) $paths,
163
+ $this->fallbackDirsPsr4
164
+ );
165
+ } else {
166
+ $this->fallbackDirsPsr4 = array_merge(
167
+ $this->fallbackDirsPsr4,
168
+ (array) $paths
169
+ );
170
+ }
171
+ } elseif (!isset($this->prefixDirsPsr4[$prefix])) {
172
+ // Register directories for a new namespace.
173
+ $length = strlen($prefix);
174
+ if ('\\' !== $prefix[$length - 1]) {
175
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
176
+ }
177
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
178
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
179
+ } elseif ($prepend) {
180
+ // Prepend directories for an already registered namespace.
181
+ $this->prefixDirsPsr4[$prefix] = array_merge(
182
+ (array) $paths,
183
+ $this->prefixDirsPsr4[$prefix]
184
+ );
185
+ } else {
186
+ // Append directories for an already registered namespace.
187
+ $this->prefixDirsPsr4[$prefix] = array_merge(
188
+ $this->prefixDirsPsr4[$prefix],
189
+ (array) $paths
190
+ );
191
+ }
192
+ }
193
+
194
+ /**
195
+ * Registers a set of PSR-0 directories for a given prefix,
196
+ * replacing any others previously set for this prefix.
197
+ *
198
+ * @param string $prefix The prefix
199
+ * @param array|string $paths The PSR-0 base directories
200
+ */
201
+ public function set($prefix, $paths)
202
+ {
203
+ if (!$prefix) {
204
+ $this->fallbackDirsPsr0 = (array) $paths;
205
+ } else {
206
+ $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
207
+ }
208
+ }
209
+
210
+ /**
211
+ * Registers a set of PSR-4 directories for a given namespace,
212
+ * replacing any others previously set for this namespace.
213
+ *
214
+ * @param string $prefix The prefix/namespace, with trailing '\\'
215
+ * @param array|string $paths The PSR-4 base directories
216
+ *
217
+ * @throws \InvalidArgumentException
218
+ */
219
+ public function setPsr4($prefix, $paths)
220
+ {
221
+ if (!$prefix) {
222
+ $this->fallbackDirsPsr4 = (array) $paths;
223
+ } else {
224
+ $length = strlen($prefix);
225
+ if ('\\' !== $prefix[$length - 1]) {
226
+ throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
227
+ }
228
+ $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
229
+ $this->prefixDirsPsr4[$prefix] = (array) $paths;
230
+ }
231
+ }
232
+
233
+ /**
234
+ * Turns on searching the include path for class files.
235
+ *
236
+ * @param bool $useIncludePath
237
+ */
238
+ public function setUseIncludePath($useIncludePath)
239
+ {
240
+ $this->useIncludePath = $useIncludePath;
241
+ }
242
+
243
+ /**
244
+ * Can be used to check if the autoloader uses the include path to check
245
+ * for classes.
246
+ *
247
+ * @return bool
248
+ */
249
+ public function getUseIncludePath()
250
+ {
251
+ return $this->useIncludePath;
252
+ }
253
+
254
+ /**
255
+ * Turns off searching the prefix and fallback directories for classes
256
+ * that have not been registered with the class map.
257
+ *
258
+ * @param bool $classMapAuthoritative
259
+ */
260
+ public function setClassMapAuthoritative($classMapAuthoritative)
261
+ {
262
+ $this->classMapAuthoritative = $classMapAuthoritative;
263
+ }
264
+
265
+ /**
266
+ * Should class lookup fail if not found in the current class map?
267
+ *
268
+ * @return bool
269
+ */
270
+ public function isClassMapAuthoritative()
271
+ {
272
+ return $this->classMapAuthoritative;
273
+ }
274
+
275
+ /**
276
+ * APCu prefix to use to cache found/not-found classes, if the extension is enabled.
277
+ *
278
+ * @param string|null $apcuPrefix
279
+ */
280
+ public function setApcuPrefix($apcuPrefix)
281
+ {
282
+ $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
283
+ }
284
+
285
+ /**
286
+ * The APCu prefix in use, or null if APCu caching is not enabled.
287
+ *
288
+ * @return string|null
289
+ */
290
+ public function getApcuPrefix()
291
+ {
292
+ return $this->apcuPrefix;
293
+ }
294
+
295
+ /**
296
+ * Registers this instance as an autoloader.
297
+ *
298
+ * @param bool $prepend Whether to prepend the autoloader or not
299
+ */
300
+ public function register($prepend = false)
301
+ {
302
+ spl_autoload_register(array($this, 'loadClass'), true, $prepend);
303
+ }
304
+
305
+ /**
306
+ * Unregisters this instance as an autoloader.
307
+ */
308
+ public function unregister()
309
+ {
310
+ spl_autoload_unregister(array($this, 'loadClass'));
311
+ }
312
+
313
+ /**
314
+ * Loads the given class or interface.
315
+ *
316
+ * @param string $class The name of the class
317
+ * @return bool|null True if loaded, null otherwise
318
+ */
319
+ public function loadClass($class)
320
+ {
321
+ if ($file = $this->findFile($class)) {
322
+ includeFile($file);
323
+
324
+ return true;
325
+ }
326
+ }
327
+
328
+ /**
329
+ * Finds the path to the file where the class is defined.
330
+ *
331
+ * @param string $class The name of the class
332
+ *
333
+ * @return string|false The path if found, false otherwise
334
+ */
335
+ public function findFile($class)
336
+ {
337
+ // class map lookup
338
+ if (isset($this->classMap[$class])) {
339
+ return $this->classMap[$class];
340
+ }
341
+ if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
342
+ return false;
343
+ }
344
+ if (null !== $this->apcuPrefix) {
345
+ $file = apcu_fetch($this->apcuPrefix.$class, $hit);
346
+ if ($hit) {
347
+ return $file;
348
+ }
349
+ }
350
+
351
+ $file = $this->findFileWithExtension($class, '.php');
352
+
353
+ // Search for Hack files if we are running on HHVM
354
+ if (false === $file && defined('HHVM_VERSION')) {
355
+ $file = $this->findFileWithExtension($class, '.hh');
356
+ }
357
+
358
+ if (null !== $this->apcuPrefix) {
359
+ apcu_add($this->apcuPrefix.$class, $file);
360
+ }
361
+
362
+ if (false === $file) {
363
+ // Remember that this class does not exist.
364
+ $this->missingClasses[$class] = true;
365
+ }
366
+
367
+ return $file;
368
+ }
369
+
370
+ private function findFileWithExtension($class, $ext)
371
+ {
372
+ // PSR-4 lookup
373
+ $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
374
+
375
+ $first = $class[0];
376
+ if (isset($this->prefixLengthsPsr4[$first])) {
377
+ $subPath = $class;
378
+ while (false !== $lastPos = strrpos($subPath, '\\')) {
379
+ $subPath = substr($subPath, 0, $lastPos);
380
+ $search = $subPath . '\\';
381
+ if (isset($this->prefixDirsPsr4[$search])) {
382
+ $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
383
+ foreach ($this->prefixDirsPsr4[$search] as $dir) {
384
+ if (file_exists($file = $dir . $pathEnd)) {
385
+ return $file;
386
+ }
387
+ }
388
+ }
389
+ }
390
+ }
391
+
392
+ // PSR-4 fallback dirs
393
+ foreach ($this->fallbackDirsPsr4 as $dir) {
394
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
395
+ return $file;
396
+ }
397
+ }
398
+
399
+ // PSR-0 lookup
400
+ if (false !== $pos = strrpos($class, '\\')) {
401
+ // namespaced class name
402
+ $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
403
+ . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
404
+ } else {
405
+ // PEAR-like class name
406
+ $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
407
+ }
408
+
409
+ if (isset($this->prefixesPsr0[$first])) {
410
+ foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
411
+ if (0 === strpos($class, $prefix)) {
412
+ foreach ($dirs as $dir) {
413
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
414
+ return $file;
415
+ }
416
+ }
417
+ }
418
+ }
419
+ }
420
+
421
+ // PSR-0 fallback dirs
422
+ foreach ($this->fallbackDirsPsr0 as $dir) {
423
+ if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
424
+ return $file;
425
+ }
426
+ }
427
+
428
+ // PSR-0 include paths.
429
+ if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
430
+ return $file;
431
+ }
432
+
433
+ return false;
434
+ }
435
+ }
436
+
437
+ /**
438
+ * Scope isolated include.
439
+ *
440
+ * Prevents access to $this/self from included files.
441
+ */
442
+ function includeFile($file)
443
+ {
444
+ include $file;
445
+ }
vendor/composer/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ Copyright (c) Nils Adermann, Jordi Boggiano
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy
5
+ of this software and associated documentation files (the "Software"), to deal
6
+ in the Software without restriction, including without limitation the rights
7
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8
+ copies of the Software, and to permit persons to whom the Software is furnished
9
+ to do so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
20
+ THE SOFTWARE.
21
+
vendor/composer/autoload_classmap.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_classmap.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_files.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_files.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ 'c4ed057a6919e316c176e816418cc6a3' => $vendorDir . '/reactr-io/pope-framework/lib/autoload.php',
10
+ );
vendor/composer/autoload_namespaces.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_namespaces.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ );
vendor/composer/autoload_psr4.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_psr4.php @generated by Composer
4
+
5
+ $vendorDir = dirname(dirname(__FILE__));
6
+ $baseDir = dirname($vendorDir);
7
+
8
+ return array(
9
+ 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'),
10
+ );
vendor/composer/autoload_real.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_real.php @generated by Composer
4
+
5
+ class ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2
6
+ {
7
+ private static $loader;
8
+
9
+ public static function loadClassLoader($class)
10
+ {
11
+ if ('Composer\Autoload\ClassLoader' === $class) {
12
+ require __DIR__ . '/ClassLoader.php';
13
+ }
14
+ }
15
+
16
+ public static function getLoader()
17
+ {
18
+ if (null !== self::$loader) {
19
+ return self::$loader;
20
+ }
21
+
22
+ spl_autoload_register(array('ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2', 'loadClassLoader'), true, true);
23
+ self::$loader = $loader = new \Composer\Autoload\ClassLoader();
24
+ spl_autoload_unregister(array('ComposerAutoloaderInitcbd038d0e6fda9665671ad46ec9594a2', 'loadClassLoader'));
25
+
26
+ $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
+ if ($useStaticLoader) {
28
+ require_once __DIR__ . '/autoload_static.php';
29
+
30
+ call_user_func(\Composer\Autoload\ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::getInitializer($loader));
31
+ } else {
32
+ $map = require __DIR__ . '/autoload_namespaces.php';
33
+ foreach ($map as $namespace => $path) {
34
+ $loader->set($namespace, $path);
35
+ }
36
+
37
+ $map = require __DIR__ . '/autoload_psr4.php';
38
+ foreach ($map as $namespace => $path) {
39
+ $loader->setPsr4($namespace, $path);
40
+ }
41
+
42
+ $classMap = require __DIR__ . '/autoload_classmap.php';
43
+ if ($classMap) {
44
+ $loader->addClassMap($classMap);
45
+ }
46
+ }
47
+
48
+ $loader->register(true);
49
+
50
+ if ($useStaticLoader) {
51
+ $includeFiles = Composer\Autoload\ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::$files;
52
+ } else {
53
+ $includeFiles = require __DIR__ . '/autoload_files.php';
54
+ }
55
+ foreach ($includeFiles as $fileIdentifier => $file) {
56
+ composerRequirecbd038d0e6fda9665671ad46ec9594a2($fileIdentifier, $file);
57
+ }
58
+
59
+ return $loader;
60
+ }
61
+ }
62
+
63
+ function composerRequirecbd038d0e6fda9665671ad46ec9594a2($fileIdentifier, $file)
64
+ {
65
+ if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
66
+ require $file;
67
+
68
+ $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
69
+ }
70
+ }
vendor/composer/autoload_static.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // autoload_static.php @generated by Composer
4
+
5
+ namespace Composer\Autoload;
6
+
7
+ class ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2
8
+ {
9
+ public static $files = array (
10
+ 'c4ed057a6919e316c176e816418cc6a3' => __DIR__ . '/..' . '/reactr-io/pope-framework/lib/autoload.php',
11
+ );
12
+
13
+ public static $prefixLengthsPsr4 = array (
14
+ 'P' =>
15
+ array (
16
+ 'PhpParser\\' => 10,
17
+ ),
18
+ );
19
+
20
+ public static $prefixDirsPsr4 = array (
21
+ 'PhpParser\\' =>
22
+ array (
23
+ 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser',
24
+ ),
25
+ );
26
+
27
+ public static function getInitializer(ClassLoader $loader)
28
+ {
29
+ return \Closure::bind(function () use ($loader) {
30
+ $loader->prefixLengthsPsr4 = ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::$prefixLengthsPsr4;
31
+ $loader->prefixDirsPsr4 = ComposerStaticInitcbd038d0e6fda9665671ad46ec9594a2::$prefixDirsPsr4;
32
+
33
+ }, null, ClassLoader::class);
34
+ }
35
+ }
vendor/composer/installed.json ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ {
3
+ "name": "nikic/php-parser",
4
+ "version": "v4.3.0",
5
+ "version_normalized": "4.3.0.0",
6
+ "source": {
7
+ "type": "git",
8
+ "url": "https://github.com/nikic/PHP-Parser.git",
9
+ "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc"
10
+ },
11
+ "dist": {
12
+ "type": "zip",
13
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/9a9981c347c5c49d6dfe5cf826bb882b824080dc",
14
+ "reference": "9a9981c347c5c49d6dfe5cf826bb882b824080dc",
15
+ "shasum": "",
16
+ "mirrors": [
17
+ {
18
+ "url": "https://repo.packagist.com/reactr-io/dists/%package%/%version%/%reference%.%type%",
19
+ "preferred": true
20
+ }
21
+ ]
22
+ },
23
+ "require": {
24
+ "ext-tokenizer": "*",
25
+ "php": ">=7.0"
26
+ },
27
+ "require-dev": {
28
+ "ircmaxell/php-yacc": "0.0.5",
29
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0"
30
+ },
31
+ "time": "2019-11-08T13:50:10+00:00",
32
+ "bin": [
33
+ "bin/php-parse"
34
+ ],
35
+ "type": "library",
36
+ "extra": {
37
+ "branch-alias": {
38
+ "dev-master": "4.3-dev"
39
+ }
40
+ },
41
+ "installation-source": "dist",
42
+ "autoload": {
43
+ "psr-4": {
44
+ "PhpParser\\": "lib/PhpParser"
45
+ }
46
+ },
47
+ "notification-url": "https://repo.packagist.com/reactr-io/downloads/",
48
+ "license": [
49
+ "BSD-3-Clause"
50
+ ],
51
+ "authors": [
52
+ {
53
+ "name": "Nikita Popov"
54
+ }
55
+ ],
56
+ "description": "A PHP parser written in PHP",
57
+ "keywords": [
58
+ "parser",
59
+ "php"
60
+ ]
61
+ },
62
+ {
63
+ "name": "reactr-io/pope-framework",
64
+ "version": "v0.14",
65
+ "version_normalized": "0.14.0.0",
66
+ "source": {
67
+ "type": "git",
68
+ "url": "https://github.com/reactr-io/pope-framework.git",
69
+ "reference": "a157586db8705910b33f7f05157dddcb88631110"
70
+ },
71
+ "dist": {
72
+ "type": "zip",
73
+ "url": "https://api.github.com/repos/reactr-io/pope-framework/zipball/a157586db8705910b33f7f05157dddcb88631110",
74
+ "reference": "a157586db8705910b33f7f05157dddcb88631110",
75
+ "shasum": "",
76
+ "mirrors": [
77
+ {
78
+ "url": "https://repo.packagist.com/reactr-io/dists/%package%/%version%/%reference%.%type%",
79
+ "preferred": true
80
+ }
81
+ ]
82
+ },
83
+ "time": "2020-02-10T18:04:47+00:00",
84
+ "type": "library",
85
+ "installation-source": "dist",
86
+ "autoload": {
87
+ "files": [
88
+ "./lib/autoload.php"
89
+ ]
90
+ },
91
+ "notification-url": "https://repo.packagist.com/reactr-io/downloads/",
92
+ "license": [
93
+ "GPL-2.0-only"
94
+ ],
95
+ "authors": [
96
+ {
97
+ "name": "Imagely",
98
+ "email": "support@imagely.com"
99
+ }
100
+ ],
101
+ "description": "A component framework inspired by Zope 3. Pope is \"PHP's Zope\".",
102
+ "support": {
103
+ "source": "https://github.com/reactr-io/pope-framework/tree/v0.14",
104
+ "issues": "https://github.com/reactr-io/pope-framework/issues"
105
+ }
106
+ }
107
+ ]
vendor/nikic/php-parser/LICENSE ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ Copyright (c) 2011-2018 by Nikita Popov.
2
+
3
+ Some rights reserved.
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are
7
+ met:
8
+
9
+ * Redistributions of source code must retain the above copyright
10
+ notice, this list of conditions and the following disclaimer.
11
+
12
+ * Redistributions in binary form must reproduce the above
13
+ copyright notice, this list of conditions and the following
14
+ disclaimer in the documentation and/or other materials provided
15
+ with the distribution.
16
+
17
+ * The names of the contributors may not be used to endorse or
18
+ promote products derived from this software without specific
19
+ prior written permission.
20
+
21
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
vendor/nikic/php-parser/README.md ADDED
@@ -0,0 +1,225 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ PHP Parser
2
+ ==========
3
+
4
+ [![Build Status](https://travis-ci.org/nikic/PHP-Parser.svg?branch=master)](https://travis-ci.org/nikic/PHP-Parser) [![Coverage Status](https://coveralls.io/repos/github/nikic/PHP-Parser/badge.svg?branch=master)](https://coveralls.io/github/nikic/PHP-Parser?branch=master)
5
+
6
+ This is a PHP 5.2 to PHP 7.4 parser written in PHP. Its purpose is to simplify static code analysis and
7
+ manipulation.
8
+
9
+ [**Documentation for version 4.x**][doc_master] (stable; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 7.4).
10
+
11
+ [Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2).
12
+
13
+ Features
14
+ --------
15
+
16
+ The main features provided by this library are:
17
+
18
+ * Parsing PHP 5 and PHP 7 code into an abstract syntax tree (AST).
19
+ * Invalid code can be parsed into a partial AST.
20
+ * The AST contains accurate location information.
21
+ * Dumping the AST in human-readable form.
22
+ * Converting an AST back to PHP code.
23
+ * Experimental: Formatting can be preserved for partially changed ASTs.
24
+ * Infrastructure to traverse and modify ASTs.
25
+ * Resolution of namespaced names.
26
+ * Evaluation of constant expressions.
27
+ * Builders to simplify AST construction for code generation.
28
+ * Converting an AST into JSON and back.
29
+
30
+ Quick Start
31
+ -----------
32
+
33
+ Install the library using [composer](https://getcomposer.org):
34
+
35
+ php composer.phar require nikic/php-parser
36
+
37
+ Parse some PHP code into an AST and dump the result in human-readable form:
38
+
39
+ ```php
40
+ <?php
41
+ use PhpParser\Error;
42
+ use PhpParser\NodeDumper;
43
+ use PhpParser\ParserFactory;
44
+
45
+ $code = <<<'CODE'
46
+ <?php
47
+
48
+ function test($foo)
49
+ {
50
+ var_dump($foo);
51
+ }
52
+ CODE;
53
+
54
+ $parser = (new ParserFactory)->create(ParserFactory::PREFER_PHP7);
55
+ try {
56
+ $ast = $parser->parse($code);
57
+ } catch (Error $error) {
58
+ echo "Parse error: {$error->getMessage()}\n";
59
+ return;
60
+ }
61
+
62
+ $dumper = new NodeDumper;
63
+ echo $dumper->dump($ast) . "\n";
64
+ ```
65
+
66
+ This dumps an AST looking something like this:
67
+
68
+ ```
69
+ array(
70
+ 0: Stmt_Function(
71
+ byRef: false
72
+ name: Identifier(
73
+ name: test
74
+ )
75
+ params: array(
76
+ 0: Param(
77
+ type: null
78
+ byRef: false
79
+ variadic: false
80
+ var: Expr_Variable(
81
+ name: foo
82
+ )
83
+ default: null
84
+ )
85
+ )
86
+ returnType: null
87
+ stmts: array(
88
+ 0: Stmt_Expression(
89
+ expr: Expr_FuncCall(
90
+ name: Name(
91
+ parts: array(
92
+ 0: var_dump
93
+ )
94
+ )
95
+ args: array(
96
+ 0: Arg(
97
+ value: Expr_Variable(
98
+ name: foo
99
+ )
100
+ byRef: false
101
+ unpack: false
102
+ )
103
+ )
104
+ )
105
+ )
106
+ )
107
+ )
108
+ )
109
+ ```
110
+
111
+ Let's traverse the AST and perform some kind of modification. For example, drop all function bodies:
112
+
113
+ ```php
114
+ use PhpParser\Node;
115
+ use PhpParser\Node\Stmt\Function_;
116
+ use PhpParser\NodeTraverser;
117
+ use PhpParser\NodeVisitorAbstract;
118
+
119
+ $traverser = new NodeTraverser();
120
+ $traverser->addVisitor(new class extends NodeVisitorAbstract {
121
+ public function enterNode(Node $node) {
122
+ if ($node instanceof Function_) {
123
+ // Clean out the function body
124
+ $node->stmts = [];
125
+ }
126
+ }
127
+ });
128
+
129
+ $ast = $traverser->traverse($ast);
130
+ echo $dumper->dump($ast) . "\n";
131
+ ```
132
+
133
+ This gives us an AST where the `Function_::$stmts` are empty:
134
+
135
+ ```
136
+ array(
137
+ 0: Stmt_Function(
138
+ byRef: false
139
+ name: Identifier(
140
+ name: test
141
+ )
142
+ params: array(
143
+ 0: Param(
144
+ type: null
145
+ byRef: false
146
+ variadic: false
147
+ var: Expr_Variable(
148
+ name: foo
149
+ )
150
+ default: null
151
+ )
152
+ )
153
+ returnType: null
154
+ stmts: array(
155
+ )
156
+ )
157
+ )
158
+ ```
159
+
160
+ Finally, we can convert the new AST back to PHP code:
161
+
162
+ ```php
163
+ use PhpParser\PrettyPrinter;
164
+
165
+ $prettyPrinter = new PrettyPrinter\Standard;
166
+ echo $prettyPrinter->prettyPrintFile($ast);
167
+ ```
168
+
169
+ This gives us our original code, minus the `var_dump()` call inside the function:
170
+
171
+ ```php
172
+ <?php
173
+
174
+ function test($foo)
175
+ {
176
+ }
177
+ ```
178
+
179
+ For a more comprehensive introduction, see the documentation.
180
+
181
+ Documentation
182
+ -------------
183
+
184
+ 1. [Introduction](doc/0_Introduction.markdown)
185
+ 2. [Usage of basic components](doc/2_Usage_of_basic_components.markdown)
186
+
187
+ Component documentation:
188
+
189
+ * [Walking the AST](doc/component/Walking_the_AST.markdown)
190
+ * Node visitors
191
+ * Modifying the AST from a visitor
192
+ * Short-circuiting traversals
193
+ * Interleaved visitors
194
+ * Simple node finding API
195
+ * Parent and sibling references
196
+ * [Name resolution](doc/component/Name_resolution.markdown)
197
+ * Name resolver options
198
+ * Name resolution context
199
+ * [Pretty printing](doc/component/Pretty_printing.markdown)
200
+ * Converting AST back to PHP code
201
+ * Customizing formatting
202
+ * Formatting-preserving code transformations
203
+ * [AST builders](doc/component/AST_builders.markdown)
204
+ * Fluent builders for AST nodes
205
+ * [Lexer](doc/component/Lexer.markdown)
206
+ * Lexer options
207
+ * Token and file positions for nodes
208
+ * Custom attributes
209
+ * [Error handling](doc/component/Error_handling.markdown)
210
+ * Column information for errors
211
+ * Error recovery (parsing of syntactically incorrect code)
212
+ * [Constant expression evaluation](doc/component/Constant_expression_evaluation.markdown)
213
+ * Evaluating constant/property/etc initializers
214
+ * Handling errors and unsupported expressions
215
+ * [JSON representation](doc/component/JSON_representation.markdown)
216
+ * JSON encoding and decoding of ASTs
217
+ * [Performance](doc/component/Performance.markdown)
218
+ * Disabling XDebug
219
+ * Reusing objects
220
+ * Garbage collection impact
221
+ * [Frequently asked questions](doc/component/FAQ.markdown)
222
+ * Parent and sibling references
223
+
224
+ [doc_3_x]: https://github.com/nikic/PHP-Parser/tree/3.x/doc
225
+ [doc_master]: https://github.com/nikic/PHP-Parser/tree/master/doc
vendor/nikic/php-parser/bin/php-parse ADDED
@@ -0,0 +1,205 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+
4
+ foreach ([__DIR__ . '/../../../autoload.php', __DIR__ . '/../vendor/autoload.php'] as $file) {
5
+ if (file_exists($file)) {
6
+ require $file;
7
+ break;
8
+ }
9
+ }
10
+
11
+ ini_set('xdebug.max_nesting_level', 3000);
12
+
13
+ // Disable XDebug var_dump() output truncation
14
+ ini_set('xdebug.var_display_max_children', -1);
15
+ ini_set('xdebug.var_display_max_data', -1);
16
+ ini_set('xdebug.var_display_max_depth', -1);
17
+
18
+ list($operations, $files, $attributes) = parseArgs($argv);
19
+
20
+ /* Dump nodes by default */
21
+ if (empty($operations)) {
22
+ $operations[] = 'dump';
23
+ }
24
+
25
+ if (empty($files)) {
26
+ showHelp("Must specify at least one file.");
27
+ }
28
+
29
+ $lexer = new PhpParser\Lexer\Emulative(['usedAttributes' => [
30
+ 'startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments'
31
+ ]]);
32
+ $parser = (new PhpParser\ParserFactory)->create(
33
+ PhpParser\ParserFactory::PREFER_PHP7,
34
+ $lexer
35
+ );
36
+ $dumper = new PhpParser\NodeDumper([
37
+ 'dumpComments' => true,
38
+ 'dumpPositions' => $attributes['with-positions'],
39
+ ]);
40
+ $prettyPrinter = new PhpParser\PrettyPrinter\Standard;
41
+
42
+ $traverser = new PhpParser\NodeTraverser();
43
+ $traverser->addVisitor(new PhpParser\NodeVisitor\NameResolver);
44
+
45
+ foreach ($files as $file) {
46
+ if (strpos($file, '<?php') === 0) {
47
+ $code = $file;
48
+ fwrite(STDERR, "====> Code $code\n");
49
+ } else {
50
+ if (!file_exists($file)) {
51
+ fwrite(STDERR, "File $file does not exist.\n");
52
+ exit(1);
53
+ }
54
+
55
+ $code = file_get_contents($file);
56
+ fwrite(STDERR, "====> File $file:\n");
57
+ }
58
+
59
+ if ($attributes['with-recovery']) {
60
+ $errorHandler = new PhpParser\ErrorHandler\Collecting;
61
+ $stmts = $parser->parse($code, $errorHandler);
62
+ foreach ($errorHandler->getErrors() as $error) {
63
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
64
+ fwrite(STDERR, $message . "\n");
65
+ }
66
+ if (null === $stmts) {
67
+ continue;
68
+ }
69
+ } else {
70
+ try {
71
+ $stmts = $parser->parse($code);
72
+ } catch (PhpParser\Error $error) {
73
+ $message = formatErrorMessage($error, $code, $attributes['with-column-info']);
74
+ fwrite(STDERR, $message . "\n");
75
+ exit(1);
76
+ }
77
+ }
78
+
79
+ foreach ($operations as $operation) {
80
+ if ('dump' === $operation) {
81
+ fwrite(STDERR, "==> Node dump:\n");
82
+ echo $dumper->dump($stmts, $code), "\n";
83
+ } elseif ('pretty-print' === $operation) {
84
+ fwrite(STDERR, "==> Pretty print:\n");
85
+ echo $prettyPrinter->prettyPrintFile($stmts), "\n";
86
+ } elseif ('json-dump' === $operation) {
87
+ fwrite(STDERR, "==> JSON dump:\n");
88
+ echo json_encode($stmts, JSON_PRETTY_PRINT), "\n";
89
+ } elseif ('var-dump' === $operation) {
90
+ fwrite(STDERR, "==> var_dump():\n");
91
+ var_dump($stmts);
92
+ } elseif ('resolve-names' === $operation) {
93
+ fwrite(STDERR, "==> Resolved names.\n");
94
+ $stmts = $traverser->traverse($stmts);
95
+ }
96
+ }
97
+ }
98
+
99
+ function formatErrorMessage(PhpParser\Error $e, $code, $withColumnInfo) {
100
+ if ($withColumnInfo && $e->hasColumnInfo()) {
101
+ return $e->getMessageWithColumnInfo($code);
102
+ } else {
103
+ return $e->getMessage();
104
+ }
105
+ }
106
+
107
+ function showHelp($error = '') {
108
+ if ($error) {
109
+ fwrite(STDERR, $error . "\n\n");
110
+ }
111
+ fwrite($error ? STDERR : STDOUT, <<<OUTPUT
112
+ Usage: php-parse [operations] file1.php [file2.php ...]
113
+ or: php-parse [operations] "<?php code"
114
+ Turn PHP source code into an abstract syntax tree.
115
+
116
+ Operations is a list of the following options (--dump by default):
117
+
118
+ -d, --dump Dump nodes using NodeDumper
119
+ -p, --pretty-print Pretty print file using PrettyPrinter\Standard
120
+ -j, --json-dump Print json_encode() result
121
+ --var-dump var_dump() nodes (for exact structure)
122
+ -N, --resolve-names Resolve names using NodeVisitor\NameResolver
123
+ -c, --with-column-info Show column-numbers for errors (if available)
124
+ -P, --with-positions Show positions in node dumps
125
+ -r, --with-recovery Use parsing with error recovery
126
+ -h, --help Display this page
127
+
128
+ Example:
129
+ php-parse -d -p -N -d file.php
130
+
131
+ Dumps nodes, pretty prints them, then resolves names and dumps them again.
132
+
133
+
134
+ OUTPUT
135
+ );
136
+ exit($error ? 1 : 0);
137
+ }
138
+
139
+ function parseArgs($args) {
140
+ $operations = [];
141
+ $files = [];
142
+ $attributes = [
143
+ 'with-column-info' => false,
144
+ 'with-positions' => false,
145
+ 'with-recovery' => false,
146
+ ];
147
+
148
+ array_shift($args);
149
+ $parseOptions = true;
150
+ foreach ($args as $arg) {
151
+ if (!$parseOptions) {
152
+ $files[] = $arg;
153
+ continue;
154
+ }
155
+
156
+ switch ($arg) {
157
+ case '--dump':
158
+ case '-d':
159
+ $operations[] = 'dump';
160
+ break;
161
+ case '--pretty-print':
162
+ case '-p':
163
+ $operations[] = 'pretty-print';
164
+ break;
165
+ case '--json-dump':
166
+ case '-j':
167
+ $operations[] = 'json-dump';
168
+ break;
169
+ case '--var-dump':
170
+ $operations[] = 'var-dump';
171
+ break;
172
+ case '--resolve-names':
173
+ case '-N';
174
+ $operations[] = 'resolve-names';
175
+ break;
176
+ case '--with-column-info':
177
+ case '-c';
178
+ $attributes['with-column-info'] = true;
179
+ break;
180
+ case '--with-positions':
181
+ case '-P':
182
+ $attributes['with-positions'] = true;
183
+ break;
184
+ case '--with-recovery':
185
+ case '-r':
186
+ $attributes['with-recovery'] = true;
187
+ break;
188
+ case '--help':
189
+ case '-h';
190
+ showHelp();
191
+ break;
192
+ case '--':
193
+ $parseOptions = false;
194
+ break;
195
+ default:
196
+ if ($arg[0] === '-') {
197
+ showHelp("Invalid operation $arg.");
198
+ } else {
199
+ $files[] = $arg;
200
+ }
201
+ }
202
+ }
203
+
204
+ return [$operations, $files, $attributes];
205
+ }
vendor/nikic/php-parser/composer.json ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "nikic/php-parser",
3
+ "type": "library",
4
+ "description": "A PHP parser written in PHP",
5
+ "keywords": [
6
+ "php",
7
+ "parser"
8
+ ],
9
+ "license": "BSD-3-Clause",
10
+ "authors": [
11
+ {
12
+ "name": "Nikita Popov"
13
+ }
14
+ ],
15
+ "require": {
16
+ "php": ">=7.0",
17
+ "ext-tokenizer": "*"
18
+ },
19
+ "require-dev": {
20
+ "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0",
21
+ "ircmaxell/php-yacc": "0.0.5"
22
+ },
23
+ "extra": {
24
+ "branch-alias": {
25
+ "dev-master": "4.3-dev"
26
+ }
27
+ },
28
+ "autoload": {
29
+ "psr-4": {
30
+ "PhpParser\\": "lib/PhpParser"
31
+ }
32
+ },
33
+ "autoload-dev": {
34
+ "psr-4": {
35
+ "PhpParser\\": "test/PhpParser/"
36
+ }
37
+ },
38
+ "bin": [
39
+ "bin/php-parse"
40
+ ]
41
+ }
vendor/nikic/php-parser/grammar/README.md ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ What do all those files mean?
2
+ =============================
3
+
4
+ * `php5.y`: PHP 5 grammar written in a pseudo language
5
+ * `php7.y`: PHP 7 grammar written in a pseudo language
6
+ * `tokens.y`: Tokens definition shared between PHP 5 and PHP 7 grammars
7
+ * `parser.template`: A `kmyacc` parser prototype file for PHP
8
+ * `tokens.template`: A `kmyacc` prototype file for the `Tokens` class
9
+ * `rebuildParsers.php`: Preprocesses the grammar and builds the parser using `kmyacc`
10
+
11
+ .phpy pseudo language
12
+ =====================
13
+
14
+ The `.y` file is a normal grammar in `kmyacc` (`yacc`) style, with some transformations
15
+ applied to it:
16
+
17
+ * Nodes are created using the syntax `Name[..., ...]`. This is transformed into
18
+ `new Name(..., ..., attributes())`
19
+ * Some function-like constructs are resolved (see `rebuildParsers.php` for a list)
20
+
21
+ Building the parser
22
+ ===================
23
+
24
+ Run `php grammar/rebuildParsers.php` to rebuild the parsers. Additional options:
25
+
26
+ * The `KMYACC` environment variable can be used to specify an alternative `kmyacc` binary.
27
+ By default the `phpyacc` dev dependency will be used. To use the original `kmyacc`, you
28
+ need to compile [moriyoshi's fork](https://github.com/moriyoshi/kmyacc-forked).
29
+ * The `--debug` option enables emission of debug symbols and creates the `y.output` file.
30
+ * The `--keep-tmp-grammar` option preserves the preprocessed grammar file.
vendor/nikic/php-parser/grammar/parser.template ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $meta #
3
+ #semval($) $this->semValue
4
+ #semval($,%t) $this->semValue
5
+ #semval(%n) $stackPos-(%l-%n)
6
+ #semval(%n,%t) $stackPos-(%l-%n)
7
+
8
+ namespace PhpParser\Parser;
9
+
10
+ use PhpParser\Error;
11
+ use PhpParser\Node;
12
+ use PhpParser\Node\Expr;
13
+ use PhpParser\Node\Name;
14
+ use PhpParser\Node\Scalar;
15
+ use PhpParser\Node\Stmt;
16
+ #include;
17
+
18
+ /* This is an automatically GENERATED file, which should not be manually edited.
19
+ * Instead edit one of the following:
20
+ * * the grammar files grammar/php5.y or grammar/php7.y
21
+ * * the skeleton file grammar/parser.template
22
+ * * the preprocessing script grammar/rebuildParsers.php
23
+ */
24
+ class #(-p) extends \PhpParser\ParserAbstract
25
+ {
26
+ protected $tokenToSymbolMapSize = #(YYMAXLEX);
27
+ protected $actionTableSize = #(YYLAST);
28
+ protected $gotoTableSize = #(YYGLAST);
29
+
30
+ protected $invalidSymbol = #(YYBADCH);
31
+ protected $errorSymbol = #(YYINTERRTOK);
32
+ protected $defaultAction = #(YYDEFAULT);
33
+ protected $unexpectedTokenRule = #(YYUNEXPECTED);
34
+
35
+ protected $YY2TBLSTATE = #(YY2TBLSTATE);
36
+ protected $numNonLeafStates = #(YYNLSTATES);
37
+
38
+ protected $symbolToName = array(
39
+ #listvar terminals
40
+ );
41
+
42
+ protected $tokenToSymbol = array(
43
+ #listvar yytranslate
44
+ );
45
+
46
+ protected $action = array(
47
+ #listvar yyaction
48
+ );
49
+
50
+ protected $actionCheck = array(
51
+ #listvar yycheck
52
+ );
53
+
54
+ protected $actionBase = array(
55
+ #listvar yybase
56
+ );
57
+
58
+ protected $actionDefault = array(
59
+ #listvar yydefault
60
+ );
61
+
62
+ protected $goto = array(
63
+ #listvar yygoto
64
+ );
65
+
66
+ protected $gotoCheck = array(
67
+ #listvar yygcheck
68
+ );
69
+
70
+ protected $gotoBase = array(
71
+ #listvar yygbase
72
+ );
73
+
74
+ protected $gotoDefault = array(
75
+ #listvar yygdefault
76
+ );
77
+
78
+ protected $ruleToNonTerminal = array(
79
+ #listvar yylhs
80
+ );
81
+
82
+ protected $ruleToLength = array(
83
+ #listvar yylen
84
+ );
85
+ #if -t
86
+
87
+ protected $productions = array(
88
+ #production-strings;
89
+ );
90
+ #endif
91
+
92
+ protected function initReduceCallbacks() {
93
+ $this->reduceCallbacks = [
94
+ #reduce
95
+ %n => function ($stackPos) {
96
+ %b
97
+ },
98
+ #noact
99
+ %n => function ($stackPos) {
100
+ $this->semValue = $this->semStack[$stackPos];
101
+ },
102
+ #endreduce
103
+ ];
104
+ }
105
+ }
106
+ #tailcode;
vendor/nikic/php-parser/grammar/php5.y ADDED
@@ -0,0 +1,1026 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ %pure_parser
2
+ %expect 6
3
+
4
+ %tokens
5
+
6
+ %%
7
+
8
+ start:
9
+ top_statement_list { $$ = $this->handleNamespaces($1); }
10
+ ;
11
+
12
+ top_statement_list_ex:
13
+ top_statement_list_ex top_statement { pushNormalizing($1, $2); }
14
+ | /* empty */ { init(); }
15
+ ;
16
+
17
+ top_statement_list:
18
+ top_statement_list_ex
19
+ { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
20
+ if ($nop !== null) { $1[] = $nop; } $$ = $1; }
21
+ ;
22
+
23
+ reserved_non_modifiers:
24
+ T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
25
+ | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE
26
+ | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH
27
+ | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO
28
+ | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
29
+ | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
30
+ | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
31
+ ;
32
+
33
+ semi_reserved:
34
+ reserved_non_modifiers
35
+ | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC
36
+ ;
37
+
38
+ identifier_ex:
39
+ T_STRING { $$ = Node\Identifier[$1]; }
40
+ | semi_reserved { $$ = Node\Identifier[$1]; }
41
+ ;
42
+
43
+ identifier:
44
+ T_STRING { $$ = Node\Identifier[$1]; }
45
+ ;
46
+
47
+ reserved_non_modifiers_identifier:
48
+ reserved_non_modifiers { $$ = Node\Identifier[$1]; }
49
+ ;
50
+
51
+ namespace_name_parts:
52
+ T_STRING { init($1); }
53
+ | namespace_name_parts T_NS_SEPARATOR T_STRING { push($1, $3); }
54
+ ;
55
+
56
+ namespace_name:
57
+ namespace_name_parts { $$ = Name[$1]; }
58
+ ;
59
+
60
+ plain_variable:
61
+ T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; }
62
+ ;
63
+
64
+ top_statement:
65
+ statement { $$ = $1; }
66
+ | function_declaration_statement { $$ = $1; }
67
+ | class_declaration_statement { $$ = $1; }
68
+ | T_HALT_COMPILER
69
+ { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; }
70
+ | T_NAMESPACE namespace_name ';'
71
+ { $$ = Stmt\Namespace_[$2, null];
72
+ $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
73
+ $this->checkNamespace($$); }
74
+ | T_NAMESPACE namespace_name '{' top_statement_list '}'
75
+ { $$ = Stmt\Namespace_[$2, $4];
76
+ $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
77
+ $this->checkNamespace($$); }
78
+ | T_NAMESPACE '{' top_statement_list '}'
79
+ { $$ = Stmt\Namespace_[null, $3];
80
+ $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
81
+ $this->checkNamespace($$); }
82
+ | T_USE use_declarations ';' { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; }
83
+ | T_USE use_type use_declarations ';' { $$ = Stmt\Use_[$3, $2]; }
84
+ | group_use_declaration ';' { $$ = $1; }
85
+ | T_CONST constant_declaration_list ';' { $$ = Stmt\Const_[$2]; }
86
+ ;
87
+
88
+ use_type:
89
+ T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; }
90
+ | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; }
91
+ ;
92
+
93
+ /* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */
94
+ group_use_declaration:
95
+ T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
96
+ { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; }
97
+ | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
98
+ { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; }
99
+ | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
100
+ { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; }
101
+ | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
102
+ { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; }
103
+ ;
104
+
105
+ unprefixed_use_declarations:
106
+ unprefixed_use_declarations ',' unprefixed_use_declaration
107
+ { push($1, $3); }
108
+ | unprefixed_use_declaration { init($1); }
109
+ ;
110
+
111
+ use_declarations:
112
+ use_declarations ',' use_declaration { push($1, $3); }
113
+ | use_declaration { init($1); }
114
+ ;
115
+
116
+ inline_use_declarations:
117
+ inline_use_declarations ',' inline_use_declaration { push($1, $3); }
118
+ | inline_use_declaration { init($1); }
119
+ ;
120
+
121
+ unprefixed_use_declaration:
122
+ namespace_name
123
+ { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
124
+ | namespace_name T_AS identifier
125
+ { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
126
+ ;
127
+
128
+ use_declaration:
129
+ unprefixed_use_declaration { $$ = $1; }
130
+ | T_NS_SEPARATOR unprefixed_use_declaration { $$ = $2; }
131
+ ;
132
+
133
+ inline_use_declaration:
134
+ unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; }
135
+ | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; }
136
+ ;
137
+
138
+ constant_declaration_list:
139
+ constant_declaration_list ',' constant_declaration { push($1, $3); }
140
+ | constant_declaration { init($1); }
141
+ ;
142
+
143
+ constant_declaration:
144
+ identifier '=' static_scalar { $$ = Node\Const_[$1, $3]; }
145
+ ;
146
+
147
+ class_const_list:
148
+ class_const_list ',' class_const { push($1, $3); }
149
+ | class_const { init($1); }
150
+ ;
151
+
152
+ class_const:
153
+ identifier_ex '=' static_scalar { $$ = Node\Const_[$1, $3]; }
154
+ ;
155
+
156
+ inner_statement_list_ex:
157
+ inner_statement_list_ex inner_statement { pushNormalizing($1, $2); }
158
+ | /* empty */ { init(); }
159
+ ;
160
+
161
+ inner_statement_list:
162
+ inner_statement_list_ex
163
+ { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
164
+ if ($nop !== null) { $1[] = $nop; } $$ = $1; }
165
+ ;
166
+
167
+ inner_statement:
168
+ statement { $$ = $1; }
169
+ | function_declaration_statement { $$ = $1; }
170
+ | class_declaration_statement { $$ = $1; }
171
+ | T_HALT_COMPILER
172
+ { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); }
173
+ ;
174
+
175
+ non_empty_statement:
176
+ '{' inner_statement_list '}'
177
+ {
178
+ if ($2) {
179
+ $$ = $2; prependLeadingComments($$);
180
+ } else {
181
+ makeNop($$, $this->startAttributeStack[#1], $this->endAttributes);
182
+ if (null === $$) { $$ = array(); }
183
+ }
184
+ }
185
+ | T_IF parentheses_expr statement elseif_list else_single
186
+ { $$ = Stmt\If_[$2, ['stmts' => toArray($3), 'elseifs' => $4, 'else' => $5]]; }
187
+ | T_IF parentheses_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';'
188
+ { $$ = Stmt\If_[$2, ['stmts' => $4, 'elseifs' => $5, 'else' => $6]]; }
189
+ | T_WHILE parentheses_expr while_statement { $$ = Stmt\While_[$2, $3]; }
190
+ | T_DO statement T_WHILE parentheses_expr ';' { $$ = Stmt\Do_ [$4, toArray($2)]; }
191
+ | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement
192
+ { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; }
193
+ | T_SWITCH parentheses_expr switch_case_list { $$ = Stmt\Switch_[$2, $3]; }
194
+ | T_BREAK ';' { $$ = Stmt\Break_[null]; }
195
+ | T_BREAK expr ';' { $$ = Stmt\Break_[$2]; }
196
+ | T_CONTINUE ';' { $$ = Stmt\Continue_[null]; }
197
+ | T_CONTINUE expr ';' { $$ = Stmt\Continue_[$2]; }
198
+ | T_RETURN ';' { $$ = Stmt\Return_[null]; }
199
+ | T_RETURN expr ';' { $$ = Stmt\Return_[$2]; }
200
+ | T_GLOBAL global_var_list ';' { $$ = Stmt\Global_[$2]; }
201
+ | T_STATIC static_var_list ';' { $$ = Stmt\Static_[$2]; }
202
+ | T_ECHO expr_list ';' { $$ = Stmt\Echo_[$2]; }
203
+ | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; }
204
+ | yield_expr ';' { $$ = Stmt\Expression[$1]; }
205
+ | expr ';' { $$ = Stmt\Expression[$1]; }
206
+ | T_UNSET '(' variables_list ')' ';' { $$ = Stmt\Unset_[$3]; }
207
+ | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
208
+ { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; }
209
+ | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement
210
+ { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; }
211
+ | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; }
212
+ | T_TRY '{' inner_statement_list '}' catches optional_finally
213
+ { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); }
214
+ | T_THROW expr ';' { $$ = Stmt\Throw_[$2]; }
215
+ | T_GOTO identifier ';' { $$ = Stmt\Goto_[$2]; }
216
+ | identifier ':' { $$ = Stmt\Label[$1]; }
217
+ | expr error { $$ = Stmt\Expression[$1]; }
218
+ | error { $$ = array(); /* means: no statement */ }
219
+ ;
220
+
221
+ statement:
222
+ non_empty_statement { $$ = $1; }
223
+ | ';'
224
+ { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes);
225
+ if ($$ === null) $$ = array(); /* means: no statement */ }
226
+ ;
227
+
228
+ catches:
229
+ /* empty */ { init(); }
230
+ | catches catch { push($1, $2); }
231
+ ;
232
+
233
+ catch:
234
+ T_CATCH '(' name plain_variable ')' '{' inner_statement_list '}'
235
+ { $$ = Stmt\Catch_[array($3), $4, $7]; }
236
+ ;
237
+
238
+ optional_finally:
239
+ /* empty */ { $$ = null; }
240
+ | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; }
241
+ ;
242
+
243
+ variables_list:
244
+ variable { init($1); }
245
+ | variables_list ',' variable { push($1, $3); }
246
+ ;
247
+
248
+ optional_ref:
249
+ /* empty */ { $$ = false; }
250
+ | '&' { $$ = true; }
251
+ ;
252
+
253
+ optional_ellipsis:
254
+ /* empty */ { $$ = false; }
255
+ | T_ELLIPSIS { $$ = true; }
256
+ ;
257
+
258
+ function_declaration_statement:
259
+ T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type '{' inner_statement_list '}'
260
+ { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $9]]; }
261
+ ;
262
+
263
+ class_declaration_statement:
264
+ class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
265
+ { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]];
266
+ $this->checkClass($$, #2); }
267
+ | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
268
+ { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]];
269
+ $this->checkInterface($$, #2); }
270
+ | T_TRAIT identifier '{' class_statement_list '}'
271
+ { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; }
272
+ ;
273
+
274
+ class_entry_type:
275
+ T_CLASS { $$ = 0; }
276
+ | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
277
+ | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; }
278
+ ;
279
+
280
+ extends_from:
281
+ /* empty */ { $$ = null; }
282
+ | T_EXTENDS class_name { $$ = $2; }
283
+ ;
284
+
285
+ interface_extends_list:
286
+ /* empty */ { $$ = array(); }
287
+ | T_EXTENDS class_name_list { $$ = $2; }
288
+ ;
289
+
290
+ implements_list:
291
+ /* empty */ { $$ = array(); }
292
+ | T_IMPLEMENTS class_name_list { $$ = $2; }
293
+ ;
294
+
295
+ class_name_list:
296
+ class_name { init($1); }
297
+ | class_name_list ',' class_name { push($1, $3); }
298
+ ;
299
+
300
+ for_statement:
301
+ statement { $$ = toArray($1); }
302
+ | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; }
303
+ ;
304
+
305
+ foreach_statement:
306
+ statement { $$ = toArray($1); }
307
+ | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; }
308
+ ;
309
+
310
+ declare_statement:
311
+ non_empty_statement { $$ = toArray($1); }
312
+ | ';' { $$ = null; }
313
+ | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; }
314
+ ;
315
+
316
+ declare_list:
317
+ declare_list_element { init($1); }
318
+ | declare_list ',' declare_list_element { push($1, $3); }
319
+ ;
320
+
321
+ declare_list_element:
322
+ identifier '=' static_scalar { $$ = Stmt\DeclareDeclare[$1, $3]; }
323
+ ;
324
+
325
+ switch_case_list:
326
+ '{' case_list '}' { $$ = $2; }
327
+ | '{' ';' case_list '}' { $$ = $3; }
328
+ | ':' case_list T_ENDSWITCH ';' { $$ = $2; }
329
+ | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
330
+ ;
331
+
332
+ case_list:
333
+ /* empty */ { init(); }
334
+ | case_list case { push($1, $2); }
335
+ ;
336
+
337
+ case:
338
+ T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; }
339
+ | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; }
340
+ ;
341
+
342
+ case_separator:
343
+ ':'
344
+ | ';'
345
+ ;
346
+
347
+ while_statement:
348
+ statement { $$ = toArray($1); }
349
+ | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; }
350
+ ;
351
+
352
+ elseif_list:
353
+ /* empty */ { init(); }
354
+ | elseif_list elseif { push($1, $2); }
355
+ ;
356
+
357
+ elseif:
358
+ T_ELSEIF parentheses_expr statement { $$ = Stmt\ElseIf_[$2, toArray($3)]; }
359
+ ;
360
+
361
+ new_elseif_list:
362
+ /* empty */ { init(); }
363
+ | new_elseif_list new_elseif { push($1, $2); }
364
+ ;
365
+
366
+ new_elseif:
367
+ T_ELSEIF parentheses_expr ':' inner_statement_list { $$ = Stmt\ElseIf_[$2, $4]; }
368
+ ;
369
+
370
+ else_single:
371
+ /* empty */ { $$ = null; }
372
+ | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; }
373
+ ;
374
+
375
+ new_else_single:
376
+ /* empty */ { $$ = null; }
377
+ | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; }
378
+ ;
379
+
380
+ foreach_variable:
381
+ variable { $$ = array($1, false); }
382
+ | '&' variable { $$ = array($2, true); }
383
+ | list_expr { $$ = array($1, false); }
384
+ ;
385
+
386
+ parameter_list:
387
+ non_empty_parameter_list { $$ = $1; }
388
+ | /* empty */ { $$ = array(); }
389
+ ;
390
+
391
+ non_empty_parameter_list:
392
+ parameter { init($1); }
393
+ | non_empty_parameter_list ',' parameter { push($1, $3); }
394
+ ;
395
+
396
+ parameter:
397
+ optional_param_type optional_ref optional_ellipsis plain_variable
398
+ { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); }
399
+ | optional_param_type optional_ref optional_ellipsis plain_variable '=' static_scalar
400
+ { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); }
401
+ ;
402
+
403
+ type:
404
+ name { $$ = $1; }
405
+ | T_ARRAY { $$ = Node\Identifier['array']; }
406
+ | T_CALLABLE { $$ = Node\Identifier['callable']; }
407
+ ;
408
+
409
+ optional_param_type:
410
+ /* empty */ { $$ = null; }
411
+ | type { $$ = $1; }
412
+ ;
413
+
414
+ optional_return_type:
415
+ /* empty */ { $$ = null; }
416
+ | ':' type { $$ = $2; }
417
+ ;
418
+
419
+ argument_list:
420
+ '(' ')' { $$ = array(); }
421
+ | '(' non_empty_argument_list ')' { $$ = $2; }
422
+ | '(' yield_expr ')' { $$ = array(Node\Arg[$2, false, false]); }
423
+ ;
424
+
425
+ non_empty_argument_list:
426
+ argument { init($1); }
427
+ | non_empty_argument_list ',' argument { push($1, $3); }
428
+ ;
429
+
430
+ argument:
431
+ expr { $$ = Node\Arg[$1, false, false]; }
432
+ | '&' variable { $$ = Node\Arg[$2, true, false]; }
433
+ | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; }
434
+ ;
435
+
436
+ global_var_list:
437
+ global_var_list ',' global_var { push($1, $3); }
438
+ | global_var { init($1); }
439
+ ;
440
+
441
+ global_var:
442
+ plain_variable { $$ = $1; }
443
+ | '$' variable { $$ = Expr\Variable[$2]; }
444
+ | '$' '{' expr '}' { $$ = Expr\Variable[$3]; }
445
+ ;
446
+
447
+ static_var_list:
448
+ static_var_list ',' static_var { push($1, $3); }
449
+ | static_var { init($1); }
450
+ ;
451
+
452
+ static_var:
453
+ plain_variable { $$ = Stmt\StaticVar[$1, null]; }
454
+ | plain_variable '=' static_scalar { $$ = Stmt\StaticVar[$1, $3]; }
455
+ ;
456
+
457
+ class_statement_list_ex:
458
+ class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } }
459
+ | /* empty */ { init(); }
460
+ ;
461
+
462
+ class_statement_list:
463
+ class_statement_list_ex
464
+ { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
465
+ if ($nop !== null) { $1[] = $nop; } $$ = $1; }
466
+ ;
467
+
468
+ class_statement:
469
+ variable_modifiers property_declaration_list ';'
470
+ { $$ = Stmt\Property[$1, $2]; $this->checkProperty($$, #1); }
471
+ | T_CONST class_const_list ';' { $$ = Stmt\ClassConst[$2, 0]; }
472
+ | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
473
+ { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]];
474
+ $this->checkClassMethod($$, #1); }
475
+ | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; }
476
+ ;
477
+
478
+ trait_adaptations:
479
+ ';' { $$ = array(); }
480
+ | '{' trait_adaptation_list '}' { $$ = $2; }
481
+ ;
482
+
483
+ trait_adaptation_list:
484
+ /* empty */ { init(); }
485
+ | trait_adaptation_list trait_adaptation { push($1, $2); }
486
+ ;
487
+
488
+ trait_adaptation:
489
+ trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';'
490
+ { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; }
491
+ | trait_method_reference T_AS member_modifier identifier_ex ';'
492
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; }
493
+ | trait_method_reference T_AS member_modifier ';'
494
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; }
495
+ | trait_method_reference T_AS identifier ';'
496
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
497
+ | trait_method_reference T_AS reserved_non_modifiers_identifier ';'
498
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
499
+ ;
500
+
501
+ trait_method_reference_fully_qualified:
502
+ name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); }
503
+ ;
504
+ trait_method_reference:
505
+ trait_method_reference_fully_qualified { $$ = $1; }
506
+ | identifier_ex { $$ = array(null, $1); }
507
+ ;
508
+
509
+ method_body:
510
+ ';' /* abstract method */ { $$ = null; }
511
+ | '{' inner_statement_list '}' { $$ = $2; }
512
+ ;
513
+
514
+ variable_modifiers:
515
+ non_empty_member_modifiers { $$ = $1; }
516
+ | T_VAR { $$ = 0; }
517
+ ;
518
+
519
+ method_modifiers:
520
+ /* empty */ { $$ = 0; }
521
+ | non_empty_member_modifiers { $$ = $1; }
522
+ ;
523
+
524
+ non_empty_member_modifiers:
525
+ member_modifier { $$ = $1; }
526
+ | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; }
527
+ ;
528
+
529
+ member_modifier:
530
+ T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
531
+ | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
532
+ | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
533
+ | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; }
534
+ | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
535
+ | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; }
536
+ ;
537
+
538
+ property_declaration_list:
539
+ property_declaration { init($1); }
540
+ | property_declaration_list ',' property_declaration { push($1, $3); }
541
+ ;
542
+
543
+ property_decl_name:
544
+ T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; }
545
+ ;
546
+
547
+ property_declaration:
548
+ property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; }
549
+ | property_decl_name '=' static_scalar { $$ = Stmt\PropertyProperty[$1, $3]; }
550
+ ;
551
+
552
+ expr_list:
553
+ expr_list ',' expr { push($1, $3); }
554
+ | expr { init($1); }
555
+ ;
556
+
557
+ for_expr:
558
+ /* empty */ { $$ = array(); }
559
+ | expr_list { $$ = $1; }
560
+ ;
561
+
562
+ expr:
563
+ variable { $$ = $1; }
564
+ | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; }
565
+ | variable '=' expr { $$ = Expr\Assign[$1, $3]; }
566
+ | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; }
567
+ | variable '=' '&' new_expr { $$ = Expr\AssignRef[$1, $4]; }
568
+ | new_expr { $$ = $1; }
569
+ | T_CLONE expr { $$ = Expr\Clone_[$2]; }
570
+ | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; }
571
+ | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; }
572
+ | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; }
573
+ | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; }
574
+ | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; }
575
+ | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; }
576
+ | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; }
577
+ | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; }
578
+ | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; }
579
+ | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; }
580
+ | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; }
581
+ | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; }
582
+ | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; }
583
+ | variable T_INC { $$ = Expr\PostInc[$1]; }
584
+ | T_INC variable { $$ = Expr\PreInc [$2]; }
585
+ | variable T_DEC { $$ = Expr\PostDec[$1]; }
586
+ | T_DEC variable { $$ = Expr\PreDec [$2]; }
587
+ | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; }
588
+ | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; }
589
+ | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; }
590
+ | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
591
+ | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
592
+ | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
593
+ | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
594
+ | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
595
+ | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; }
596
+ | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; }
597
+ | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; }
598
+ | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; }
599
+ | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; }
600
+ | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; }
601
+ | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; }
602
+ | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; }
603
+ | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; }
604
+ | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; }
605
+ | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; }
606
+ | '!' expr { $$ = Expr\BooleanNot[$2]; }
607
+ | '~' expr { $$ = Expr\BitwiseNot[$2]; }
608
+ | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; }
609
+ | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; }
610
+ | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; }
611
+ | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; }
612
+ | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; }
613
+ | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; }
614
+ | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; }
615
+ | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; }
616
+ | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; }
617
+ | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; }
618
+ | parentheses_expr { $$ = $1; }
619
+ /* we need a separate '(' new_expr ')' rule to avoid problems caused by a s/r conflict */
620
+ | '(' new_expr ')' { $$ = $2; }
621
+ | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; }
622
+ | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; }
623
+ | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; }
624
+ | T_ISSET '(' variables_list ')' { $$ = Expr\Isset_[$3]; }
625
+ | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; }
626
+ | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; }
627
+ | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; }
628
+ | T_EVAL parentheses_expr { $$ = Expr\Eval_[$2]; }
629
+ | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; }
630
+ | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; }
631
+ | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; }
632
+ | T_DOUBLE_CAST expr
633
+ { $attrs = attributes();
634
+ $attrs['kind'] = $this->getFloatCastKind($1);
635
+ $$ = new Expr\Cast\Double($2, $attrs); }
636
+ | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; }
637
+ | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; }
638
+ | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; }
639
+ | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; }
640
+ | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; }
641
+ | T_EXIT exit_expr
642
+ { $attrs = attributes();
643
+ $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
644
+ $$ = new Expr\Exit_($2, $attrs); }
645
+ | '@' expr { $$ = Expr\ErrorSuppress[$2]; }
646
+ | scalar { $$ = $1; }
647
+ | array_expr { $$ = $1; }
648
+ | scalar_dereference { $$ = $1; }
649
+ | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; }
650
+ | T_PRINT expr { $$ = Expr\Print_[$2]; }
651
+ | T_YIELD { $$ = Expr\Yield_[null, null]; }
652
+ | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; }
653
+ | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
654
+ '{' inner_statement_list '}'
655
+ { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $9]]; }
656
+ | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
657
+ '{' inner_statement_list '}'
658
+ { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $10]]; }
659
+ ;
660
+
661
+ parentheses_expr:
662
+ '(' expr ')' { $$ = $2; }
663
+ | '(' yield_expr ')' { $$ = $2; }
664
+ ;
665
+
666
+ yield_expr:
667
+ T_YIELD expr { $$ = Expr\Yield_[$2, null]; }
668
+ | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; }
669
+ ;
670
+
671
+ array_expr:
672
+ T_ARRAY '(' array_pair_list ')'
673
+ { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG;
674
+ $$ = new Expr\Array_($3, $attrs); }
675
+ | '[' array_pair_list ']'
676
+ { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT;
677
+ $$ = new Expr\Array_($2, $attrs); }
678
+ ;
679
+
680
+ scalar_dereference:
681
+ array_expr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
682
+ | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']'
683
+ { $attrs = attributes(); $attrs['kind'] = strKind($1);
684
+ $$ = Expr\ArrayDimFetch[new Scalar\String_(Scalar\String_::parse($1), $attrs), $3]; }
685
+ | constant '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
686
+ | scalar_dereference '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
687
+ /* alternative array syntax missing intentionally */
688
+ ;
689
+
690
+ anonymous_class:
691
+ T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
692
+ { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2);
693
+ $this->checkClass($$[0], -1); }
694
+ ;
695
+
696
+ new_expr:
697
+ T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; }
698
+ | T_NEW anonymous_class
699
+ { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; }
700
+ ;
701
+
702
+ lexical_vars:
703
+ /* empty */ { $$ = array(); }
704
+ | T_USE '(' lexical_var_list ')' { $$ = $3; }
705
+ ;
706
+
707
+ lexical_var_list:
708
+ lexical_var { init($1); }
709
+ | lexical_var_list ',' lexical_var { push($1, $3); }
710
+ ;
711
+
712
+ lexical_var:
713
+ optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; }
714
+ ;
715
+
716
+ function_call:
717
+ name argument_list { $$ = Expr\FuncCall[$1, $2]; }
718
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex argument_list
719
+ { $$ = Expr\StaticCall[$1, $3, $4]; }
720
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '{' expr '}' argument_list
721
+ { $$ = Expr\StaticCall[$1, $4, $6]; }
722
+ | static_property argument_list
723
+ { $$ = $this->fixupPhp5StaticPropCall($1, $2, attributes()); }
724
+ | variable_without_objects argument_list
725
+ { $$ = Expr\FuncCall[$1, $2]; }
726
+ | function_call '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
727
+ /* alternative array syntax missing intentionally */
728
+ ;
729
+
730
+ class_name:
731
+ T_STATIC { $$ = Name[$1]; }
732
+ | name { $$ = $1; }
733
+ ;
734
+
735
+ name:
736
+ namespace_name_parts { $$ = Name[$1]; }
737
+ | T_NS_SEPARATOR namespace_name_parts { $$ = Name\FullyQualified[$2]; }
738
+ | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts { $$ = Name\Relative[$3]; }
739
+ ;
740
+
741
+ class_name_reference:
742
+ class_name { $$ = $1; }
743
+ | dynamic_class_name_reference { $$ = $1; }
744
+ ;
745
+
746
+ dynamic_class_name_reference:
747
+ object_access_for_dcnr { $$ = $1; }
748
+ | base_variable { $$ = $1; }
749
+ ;
750
+
751
+ class_name_or_var:
752
+ class_name { $$ = $1; }
753
+ | reference_variable { $$ = $1; }
754
+ ;
755
+
756
+ object_access_for_dcnr:
757
+ base_variable T_OBJECT_OPERATOR object_property
758
+ { $$ = Expr\PropertyFetch[$1, $3]; }
759
+ | object_access_for_dcnr T_OBJECT_OPERATOR object_property
760
+ { $$ = Expr\PropertyFetch[$1, $3]; }
761
+ | object_access_for_dcnr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
762
+ | object_access_for_dcnr '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
763
+ ;
764
+
765
+ exit_expr:
766
+ /* empty */ { $$ = null; }
767
+ | '(' ')' { $$ = null; }
768
+ | parentheses_expr { $$ = $1; }
769
+ ;
770
+
771
+ backticks_expr:
772
+ /* empty */ { $$ = array(); }
773
+ | T_ENCAPSED_AND_WHITESPACE
774
+ { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`', false)]); }
775
+ | encaps_list { parseEncapsed($1, '`', false); $$ = $1; }
776
+ ;
777
+
778
+ ctor_arguments:
779
+ /* empty */ { $$ = array(); }
780
+ | argument_list { $$ = $1; }
781
+ ;
782
+
783
+ common_scalar:
784
+ T_LNUMBER { $$ = $this->parseLNumber($1, attributes(), true); }
785
+ | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
786
+ | T_CONSTANT_ENCAPSED_STRING
787
+ { $attrs = attributes(); $attrs['kind'] = strKind($1);
788
+ $$ = new Scalar\String_(Scalar\String_::parse($1, false), $attrs); }
789
+ | T_LINE { $$ = Scalar\MagicConst\Line[]; }
790
+ | T_FILE { $$ = Scalar\MagicConst\File[]; }
791
+ | T_DIR { $$ = Scalar\MagicConst\Dir[]; }
792
+ | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; }
793
+ | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; }
794
+ | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; }
795
+ | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; }
796
+ | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; }
797
+ | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
798
+ { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), false); }
799
+ | T_START_HEREDOC T_END_HEREDOC
800
+ { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), false); }
801
+ ;
802
+
803
+ static_scalar:
804
+ common_scalar { $$ = $1; }
805
+ | class_name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = Expr\ClassConstFetch[$1, $3]; }
806
+ | name { $$ = Expr\ConstFetch[$1]; }
807
+ | T_ARRAY '(' static_array_pair_list ')' { $$ = Expr\Array_[$3]; }
808
+ | '[' static_array_pair_list ']' { $$ = Expr\Array_[$2]; }
809
+ | static_operation { $$ = $1; }
810
+ ;
811
+
812
+ static_operation:
813
+ static_scalar T_BOOLEAN_OR static_scalar { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; }
814
+ | static_scalar T_BOOLEAN_AND static_scalar { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; }
815
+ | static_scalar T_LOGICAL_OR static_scalar { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; }
816
+ | static_scalar T_LOGICAL_AND static_scalar { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
817
+ | static_scalar T_LOGICAL_XOR static_scalar { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
818
+ | static_scalar '|' static_scalar { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
819
+ | static_scalar '&' static_scalar { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
820
+ | static_scalar '^' static_scalar { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
821
+ | static_scalar '.' static_scalar { $$ = Expr\BinaryOp\Concat [$1, $3]; }
822
+ | static_scalar '+' static_scalar { $$ = Expr\BinaryOp\Plus [$1, $3]; }
823
+ | static_scalar '-' static_scalar { $$ = Expr\BinaryOp\Minus [$1, $3]; }
824
+ | static_scalar '*' static_scalar { $$ = Expr\BinaryOp\Mul [$1, $3]; }
825
+ | static_scalar '/' static_scalar { $$ = Expr\BinaryOp\Div [$1, $3]; }
826
+ | static_scalar '%' static_scalar { $$ = Expr\BinaryOp\Mod [$1, $3]; }
827
+ | static_scalar T_SL static_scalar { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; }
828
+ | static_scalar T_SR static_scalar { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; }
829
+ | static_scalar T_POW static_scalar { $$ = Expr\BinaryOp\Pow [$1, $3]; }
830
+ | '+' static_scalar %prec T_INC { $$ = Expr\UnaryPlus [$2]; }
831
+ | '-' static_scalar %prec T_INC { $$ = Expr\UnaryMinus[$2]; }
832
+ | '!' static_scalar { $$ = Expr\BooleanNot[$2]; }
833
+ | '~' static_scalar { $$ = Expr\BitwiseNot[$2]; }
834
+ | static_scalar T_IS_IDENTICAL static_scalar { $$ = Expr\BinaryOp\Identical [$1, $3]; }
835
+ | static_scalar T_IS_NOT_IDENTICAL static_scalar { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; }
836
+ | static_scalar T_IS_EQUAL static_scalar { $$ = Expr\BinaryOp\Equal [$1, $3]; }
837
+ | static_scalar T_IS_NOT_EQUAL static_scalar { $$ = Expr\BinaryOp\NotEqual [$1, $3]; }
838
+ | static_scalar '<' static_scalar { $$ = Expr\BinaryOp\Smaller [$1, $3]; }
839
+ | static_scalar T_IS_SMALLER_OR_EQUAL static_scalar { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; }
840
+ | static_scalar '>' static_scalar { $$ = Expr\BinaryOp\Greater [$1, $3]; }
841
+ | static_scalar T_IS_GREATER_OR_EQUAL static_scalar { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; }
842
+ | static_scalar '?' static_scalar ':' static_scalar { $$ = Expr\Ternary[$1, $3, $5]; }
843
+ | static_scalar '?' ':' static_scalar { $$ = Expr\Ternary[$1, null, $4]; }
844
+ | static_scalar '[' static_scalar ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
845
+ | '(' static_scalar ')' { $$ = $2; }
846
+ ;
847
+
848
+ constant:
849
+ name { $$ = Expr\ConstFetch[$1]; }
850
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
851
+ { $$ = Expr\ClassConstFetch[$1, $3]; }
852
+ ;
853
+
854
+ scalar:
855
+ common_scalar { $$ = $1; }
856
+ | constant { $$ = $1; }
857
+ | '"' encaps_list '"'
858
+ { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
859
+ parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
860
+ | T_START_HEREDOC encaps_list T_END_HEREDOC
861
+ { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
862
+ ;
863
+
864
+ static_array_pair_list:
865
+ /* empty */ { $$ = array(); }
866
+ | non_empty_static_array_pair_list optional_comma { $$ = $1; }
867
+ ;
868
+
869
+ optional_comma:
870
+ /* empty */
871
+ | ','
872
+ ;
873
+
874
+ non_empty_static_array_pair_list:
875
+ non_empty_static_array_pair_list ',' static_array_pair { push($1, $3); }
876
+ | static_array_pair { init($1); }
877
+ ;
878
+
879
+ static_array_pair:
880
+ static_scalar T_DOUBLE_ARROW static_scalar { $$ = Expr\ArrayItem[$3, $1, false]; }
881
+ | static_scalar { $$ = Expr\ArrayItem[$1, null, false]; }
882
+ ;
883
+
884
+ variable:
885
+ object_access { $$ = $1; }
886
+ | base_variable { $$ = $1; }
887
+ | function_call { $$ = $1; }
888
+ | new_expr_array_deref { $$ = $1; }
889
+ ;
890
+
891
+ new_expr_array_deref:
892
+ '(' new_expr ')' '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$2, $5]; }
893
+ | new_expr_array_deref '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
894
+ /* alternative array syntax missing intentionally */
895
+ ;
896
+
897
+ object_access:
898
+ variable_or_new_expr T_OBJECT_OPERATOR object_property
899
+ { $$ = Expr\PropertyFetch[$1, $3]; }
900
+ | variable_or_new_expr T_OBJECT_OPERATOR object_property argument_list
901
+ { $$ = Expr\MethodCall[$1, $3, $4]; }
902
+ | object_access argument_list { $$ = Expr\FuncCall[$1, $2]; }
903
+ | object_access '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
904
+ | object_access '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
905
+ ;
906
+
907
+ variable_or_new_expr:
908
+ variable { $$ = $1; }
909
+ | '(' new_expr ')' { $$ = $2; }
910
+ ;
911
+
912
+ variable_without_objects:
913
+ reference_variable { $$ = $1; }
914
+ | '$' variable_without_objects { $$ = Expr\Variable[$2]; }
915
+ ;
916
+
917
+ base_variable:
918
+ variable_without_objects { $$ = $1; }
919
+ | static_property { $$ = $1; }
920
+ ;
921
+
922
+ static_property:
923
+ class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' reference_variable
924
+ { $$ = Expr\StaticPropertyFetch[$1, $4]; }
925
+ | static_property_with_arrays { $$ = $1; }
926
+ ;
927
+
928
+ static_property_simple_name:
929
+ T_VARIABLE
930
+ { $var = parseVar($1); $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; }
931
+ ;
932
+
933
+ static_property_with_arrays:
934
+ class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_property_simple_name
935
+ { $$ = Expr\StaticPropertyFetch[$1, $3]; }
936
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' '{' expr '}'
937
+ { $$ = Expr\StaticPropertyFetch[$1, $5]; }
938
+ | static_property_with_arrays '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
939
+ | static_property_with_arrays '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
940
+ ;
941
+
942
+ reference_variable:
943
+ reference_variable '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
944
+ | reference_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
945
+ | plain_variable { $$ = $1; }
946
+ | '$' '{' expr '}' { $$ = Expr\Variable[$3]; }
947
+ ;
948
+
949
+ dim_offset:
950
+ /* empty */ { $$ = null; }
951
+ | expr { $$ = $1; }
952
+ ;
953
+
954
+ object_property:
955
+ identifier { $$ = $1; }
956
+ | '{' expr '}' { $$ = $2; }
957
+ | variable_without_objects { $$ = $1; }
958
+ | error { $$ = Expr\Error[]; $this->errorState = 2; }
959
+ ;
960
+
961
+ list_expr:
962
+ T_LIST '(' list_expr_elements ')' { $$ = Expr\List_[$3]; }
963
+ ;
964
+
965
+ list_expr_elements:
966
+ list_expr_elements ',' list_expr_element { push($1, $3); }
967
+ | list_expr_element { init($1); }
968
+ ;
969
+
970
+ list_expr_element:
971
+ variable { $$ = Expr\ArrayItem[$1, null, false]; }
972
+ | list_expr { $$ = Expr\ArrayItem[$1, null, false]; }
973
+ | /* empty */ { $$ = null; }
974
+ ;
975
+
976
+ array_pair_list:
977
+ /* empty */ { $$ = array(); }
978
+ | non_empty_array_pair_list optional_comma { $$ = $1; }
979
+ ;
980
+
981
+ non_empty_array_pair_list:
982
+ non_empty_array_pair_list ',' array_pair { push($1, $3); }
983
+ | array_pair { init($1); }
984
+ ;
985
+
986
+ array_pair:
987
+ expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; }
988
+ | expr { $$ = Expr\ArrayItem[$1, null, false]; }
989
+ | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; }
990
+ | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; }
991
+ | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
992
+ ;
993
+
994
+ encaps_list:
995
+ encaps_list encaps_var { push($1, $2); }
996
+ | encaps_list encaps_string_part { push($1, $2); }
997
+ | encaps_var { init($1); }
998
+ | encaps_string_part encaps_var { init($1, $2); }
999
+ ;
1000
+
1001
+ encaps_string_part:
1002
+ T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; }
1003
+ ;
1004
+
1005
+ encaps_str_varname:
1006
+ T_STRING_VARNAME { $$ = Expr\Variable[$1]; }
1007
+ ;
1008
+
1009
+ encaps_var:
1010
+ plain_variable { $$ = $1; }
1011
+ | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1012
+ | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; }
1013
+ | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; }
1014
+ | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; }
1015
+ | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}'
1016
+ { $$ = Expr\ArrayDimFetch[$2, $4]; }
1017
+ | T_CURLY_OPEN variable '}' { $$ = $2; }
1018
+ ;
1019
+
1020
+ encaps_var_offset:
1021
+ T_STRING { $$ = Scalar\String_[$1]; }
1022
+ | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); }
1023
+ | plain_variable { $$ = $1; }
1024
+ ;
1025
+
1026
+ %%
vendor/nikic/php-parser/grammar/php7.y ADDED
@@ -0,0 +1,1029 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ %pure_parser
2
+ %expect 2
3
+
4
+ %tokens
5
+
6
+ %%
7
+
8
+ start:
9
+ top_statement_list { $$ = $this->handleNamespaces($1); }
10
+ ;
11
+
12
+ top_statement_list_ex:
13
+ top_statement_list_ex top_statement { pushNormalizing($1, $2); }
14
+ | /* empty */ { init(); }
15
+ ;
16
+
17
+ top_statement_list:
18
+ top_statement_list_ex
19
+ { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
20
+ if ($nop !== null) { $1[] = $nop; } $$ = $1; }
21
+ ;
22
+
23
+ reserved_non_modifiers:
24
+ T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND
25
+ | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE
26
+ | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH
27
+ | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO
28
+ | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT
29
+ | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS
30
+ | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN
31
+ ;
32
+
33
+ semi_reserved:
34
+ reserved_non_modifiers
35
+ | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC
36
+ ;
37
+
38
+ identifier_ex:
39
+ T_STRING { $$ = Node\Identifier[$1]; }
40
+ | semi_reserved { $$ = Node\Identifier[$1]; }
41
+ ;
42
+
43
+ identifier:
44
+ T_STRING { $$ = Node\Identifier[$1]; }
45
+ ;
46
+
47
+ reserved_non_modifiers_identifier:
48
+ reserved_non_modifiers { $$ = Node\Identifier[$1]; }
49
+ ;
50
+
51
+ namespace_name_parts:
52
+ T_STRING { init($1); }
53
+ | namespace_name_parts T_NS_SEPARATOR T_STRING { push($1, $3); }
54
+ ;
55
+
56
+ namespace_name:
57
+ namespace_name_parts { $$ = Name[$1]; }
58
+ ;
59
+
60
+ plain_variable:
61
+ T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; }
62
+ ;
63
+
64
+ semi:
65
+ ';' { /* nothing */ }
66
+ | error { /* nothing */ }
67
+ ;
68
+
69
+ no_comma:
70
+ /* empty */ { /* nothing */ }
71
+ | ',' { $this->emitError(new Error('A trailing comma is not allowed here', attributes())); }
72
+ ;
73
+
74
+ optional_comma:
75
+ /* empty */
76
+ | ','
77
+
78
+ top_statement:
79
+ statement { $$ = $1; }
80
+ | function_declaration_statement { $$ = $1; }
81
+ | class_declaration_statement { $$ = $1; }
82
+ | T_HALT_COMPILER
83
+ { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; }
84
+ | T_NAMESPACE namespace_name semi
85
+ { $$ = Stmt\Namespace_[$2, null];
86
+ $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON);
87
+ $this->checkNamespace($$); }
88
+ | T_NAMESPACE namespace_name '{' top_statement_list '}'
89
+ { $$ = Stmt\Namespace_[$2, $4];
90
+ $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
91
+ $this->checkNamespace($$); }
92
+ | T_NAMESPACE '{' top_statement_list '}'
93
+ { $$ = Stmt\Namespace_[null, $3];
94
+ $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED);
95
+ $this->checkNamespace($$); }
96
+ | T_USE use_declarations semi { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; }
97
+ | T_USE use_type use_declarations semi { $$ = Stmt\Use_[$3, $2]; }
98
+ | group_use_declaration semi { $$ = $1; }
99
+ | T_CONST constant_declaration_list semi { $$ = Stmt\Const_[$2]; }
100
+ ;
101
+
102
+ use_type:
103
+ T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; }
104
+ | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; }
105
+ ;
106
+
107
+ /* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */
108
+ group_use_declaration:
109
+ T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
110
+ { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; }
111
+ | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}'
112
+ { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; }
113
+ | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
114
+ { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; }
115
+ | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}'
116
+ { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; }
117
+ ;
118
+
119
+ unprefixed_use_declarations:
120
+ non_empty_unprefixed_use_declarations optional_comma { $$ = $1; }
121
+ ;
122
+
123
+ non_empty_unprefixed_use_declarations:
124
+ non_empty_unprefixed_use_declarations ',' unprefixed_use_declaration
125
+ { push($1, $3); }
126
+ | unprefixed_use_declaration { init($1); }
127
+ ;
128
+
129
+ use_declarations:
130
+ non_empty_use_declarations no_comma { $$ = $1; }
131
+ ;
132
+
133
+ non_empty_use_declarations:
134
+ non_empty_use_declarations ',' use_declaration { push($1, $3); }
135
+ | use_declaration { init($1); }
136
+ ;
137
+
138
+ inline_use_declarations:
139
+ non_empty_inline_use_declarations optional_comma { $$ = $1; }
140
+ ;
141
+
142
+ non_empty_inline_use_declarations:
143
+ non_empty_inline_use_declarations ',' inline_use_declaration
144
+ { push($1, $3); }
145
+ | inline_use_declaration { init($1); }
146
+ ;
147
+
148
+ unprefixed_use_declaration:
149
+ namespace_name
150
+ { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); }
151
+ | namespace_name T_AS identifier
152
+ { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); }
153
+ ;
154
+
155
+ use_declaration:
156
+ unprefixed_use_declaration { $$ = $1; }
157
+ | T_NS_SEPARATOR unprefixed_use_declaration { $$ = $2; }
158
+ ;
159
+
160
+ inline_use_declaration:
161
+ unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; }
162
+ | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; }
163
+ ;
164
+
165
+ constant_declaration_list:
166
+ non_empty_constant_declaration_list no_comma { $$ = $1; }
167
+ ;
168
+
169
+ non_empty_constant_declaration_list:
170
+ non_empty_constant_declaration_list ',' constant_declaration
171
+ { push($1, $3); }
172
+ | constant_declaration { init($1); }
173
+ ;
174
+
175
+ constant_declaration:
176
+ identifier '=' expr { $$ = Node\Const_[$1, $3]; }
177
+ ;
178
+
179
+ class_const_list:
180
+ non_empty_class_const_list no_comma { $$ = $1; }
181
+ ;
182
+
183
+ non_empty_class_const_list:
184
+ non_empty_class_const_list ',' class_const { push($1, $3); }
185
+ | class_const { init($1); }
186
+ ;
187
+
188
+ class_const:
189
+ identifier_ex '=' expr { $$ = Node\Const_[$1, $3]; }
190
+ ;
191
+
192
+ inner_statement_list_ex:
193
+ inner_statement_list_ex inner_statement { pushNormalizing($1, $2); }
194
+ | /* empty */ { init(); }
195
+ ;
196
+
197
+ inner_statement_list:
198
+ inner_statement_list_ex
199
+ { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
200
+ if ($nop !== null) { $1[] = $nop; } $$ = $1; }
201
+ ;
202
+
203
+ inner_statement:
204
+ statement { $$ = $1; }
205
+ | function_declaration_statement { $$ = $1; }
206
+ | class_declaration_statement { $$ = $1; }
207
+ | T_HALT_COMPILER
208
+ { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); }
209
+ ;
210
+
211
+ non_empty_statement:
212
+ '{' inner_statement_list '}'
213
+ {
214
+ if ($2) {
215
+ $$ = $2; prependLeadingComments($$);
216
+ } else {
217
+ makeNop($$, $this->startAttributeStack[#1], $this->endAttributes);
218
+ if (null === $$) { $$ = array(); }
219
+ }
220
+ }
221
+ | T_IF '(' expr ')' statement elseif_list else_single
222
+ { $$ = Stmt\If_[$3, ['stmts' => toArray($5), 'elseifs' => $6, 'else' => $7]]; }
223
+ | T_IF '(' expr ')' ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';'
224
+ { $$ = Stmt\If_[$3, ['stmts' => $6, 'elseifs' => $7, 'else' => $8]]; }
225
+ | T_WHILE '(' expr ')' while_statement { $$ = Stmt\While_[$3, $5]; }
226
+ | T_DO statement T_WHILE '(' expr ')' ';' { $$ = Stmt\Do_ [$5, toArray($2)]; }
227
+ | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement
228
+ { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; }
229
+ | T_SWITCH '(' expr ')' switch_case_list { $$ = Stmt\Switch_[$3, $5]; }
230
+ | T_BREAK optional_expr semi { $$ = Stmt\Break_[$2]; }
231
+ | T_CONTINUE optional_expr semi { $$ = Stmt\Continue_[$2]; }
232
+ | T_RETURN optional_expr semi { $$ = Stmt\Return_[$2]; }
233
+ | T_GLOBAL global_var_list semi { $$ = Stmt\Global_[$2]; }
234
+ | T_STATIC static_var_list semi { $$ = Stmt\Static_[$2]; }
235
+ | T_ECHO expr_list semi { $$ = Stmt\Echo_[$2]; }
236
+ | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; }
237
+ | expr semi { $$ = Stmt\Expression[$1]; }
238
+ | T_UNSET '(' variables_list ')' semi { $$ = Stmt\Unset_[$3]; }
239
+ | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement
240
+ { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; }
241
+ | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement
242
+ { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; }
243
+ | T_FOREACH '(' expr error ')' foreach_statement
244
+ { $$ = Stmt\Foreach_[$3, new Expr\Error(stackAttributes(#4)), ['stmts' => $6]]; }
245
+ | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; }
246
+ | T_TRY '{' inner_statement_list '}' catches optional_finally
247
+ { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); }
248
+ | T_THROW expr semi { $$ = Stmt\Throw_[$2]; }
249
+ | T_GOTO identifier semi { $$ = Stmt\Goto_[$2]; }
250
+ | identifier ':' { $$ = Stmt\Label[$1]; }
251
+ | error { $$ = array(); /* means: no statement */ }
252
+ ;
253
+
254
+ statement:
255
+ non_empty_statement { $$ = $1; }
256
+ | ';'
257
+ { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes);
258
+ if ($$ === null) $$ = array(); /* means: no statement */ }
259
+ ;
260
+
261
+ catches:
262
+ /* empty */ { init(); }
263
+ | catches catch { push($1, $2); }
264
+ ;
265
+
266
+ name_union:
267
+ name { init($1); }
268
+ | name_union '|' name { push($1, $3); }
269
+ ;
270
+
271
+ catch:
272
+ T_CATCH '(' name_union plain_variable ')' '{' inner_statement_list '}'
273
+ { $$ = Stmt\Catch_[$3, $4, $7]; }
274
+ ;
275
+
276
+ optional_finally:
277
+ /* empty */ { $$ = null; }
278
+ | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; }
279
+ ;
280
+
281
+ variables_list:
282
+ non_empty_variables_list optional_comma { $$ = $1; }
283
+ ;
284
+
285
+ non_empty_variables_list:
286
+ variable { init($1); }
287
+ | non_empty_variables_list ',' variable { push($1, $3); }
288
+ ;
289
+
290
+ optional_ref:
291
+ /* empty */ { $$ = false; }
292
+ | '&' { $$ = true; }
293
+ ;
294
+
295
+ optional_ellipsis:
296
+ /* empty */ { $$ = false; }
297
+ | T_ELLIPSIS { $$ = true; }
298
+ ;
299
+
300
+ block_or_error:
301
+ '{' inner_statement_list '}' { $$ = $2; }
302
+ | error { $$ = []; }
303
+ ;
304
+
305
+ function_declaration_statement:
306
+ T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error
307
+ { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8]]; }
308
+ ;
309
+
310
+ class_declaration_statement:
311
+ class_entry_type identifier extends_from implements_list '{' class_statement_list '}'
312
+ { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]];
313
+ $this->checkClass($$, #2); }
314
+ | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}'
315
+ { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]];
316
+ $this->checkInterface($$, #2); }
317
+ | T_TRAIT identifier '{' class_statement_list '}'
318
+ { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; }
319
+ ;
320
+
321
+ class_entry_type:
322
+ T_CLASS { $$ = 0; }
323
+ | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
324
+ | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; }
325
+ ;
326
+
327
+ extends_from:
328
+ /* empty */ { $$ = null; }
329
+ | T_EXTENDS class_name { $$ = $2; }
330
+ ;
331
+
332
+ interface_extends_list:
333
+ /* empty */ { $$ = array(); }
334
+ | T_EXTENDS class_name_list { $$ = $2; }
335
+ ;
336
+
337
+ implements_list:
338
+ /* empty */ { $$ = array(); }
339
+ | T_IMPLEMENTS class_name_list { $$ = $2; }
340
+ ;
341
+
342
+ class_name_list:
343
+ non_empty_class_name_list no_comma { $$ = $1; }
344
+ ;
345
+
346
+ non_empty_class_name_list:
347
+ class_name { init($1); }
348
+ | non_empty_class_name_list ',' class_name { push($1, $3); }
349
+ ;
350
+
351
+ for_statement:
352
+ statement { $$ = toArray($1); }
353
+ | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; }
354
+ ;
355
+
356
+ foreach_statement:
357
+ statement { $$ = toArray($1); }
358
+ | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; }
359
+ ;
360
+
361
+ declare_statement:
362
+ non_empty_statement { $$ = toArray($1); }
363
+ | ';' { $$ = null; }
364
+ | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; }
365
+ ;
366
+
367
+ declare_list:
368
+ non_empty_declare_list no_comma { $$ = $1; }
369
+ ;
370
+
371
+ non_empty_declare_list:
372
+ declare_list_element { init($1); }
373
+ | non_empty_declare_list ',' declare_list_element { push($1, $3); }
374
+ ;
375
+
376
+ declare_list_element:
377
+ identifier '=' expr { $$ = Stmt\DeclareDeclare[$1, $3]; }
378
+ ;
379
+
380
+ switch_case_list:
381
+ '{' case_list '}' { $$ = $2; }
382
+ | '{' ';' case_list '}' { $$ = $3; }
383
+ | ':' case_list T_ENDSWITCH ';' { $$ = $2; }
384
+ | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; }
385
+ ;
386
+
387
+ case_list:
388
+ /* empty */ { init(); }
389
+ | case_list case { push($1, $2); }
390
+ ;
391
+
392
+ case:
393
+ T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; }
394
+ | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; }
395
+ ;
396
+
397
+ case_separator:
398
+ ':'
399
+ | ';'
400
+ ;
401
+
402
+ while_statement:
403
+ statement { $$ = toArray($1); }
404
+ | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; }
405
+ ;
406
+
407
+ elseif_list:
408
+ /* empty */ { init(); }
409
+ | elseif_list elseif { push($1, $2); }
410
+ ;
411
+
412
+ elseif:
413
+ T_ELSEIF '(' expr ')' statement { $$ = Stmt\ElseIf_[$3, toArray($5)]; }
414
+ ;
415
+
416
+ new_elseif_list:
417
+ /* empty */ { init(); }
418
+ | new_elseif_list new_elseif { push($1, $2); }
419
+ ;
420
+
421
+ new_elseif:
422
+ T_ELSEIF '(' expr ')' ':' inner_statement_list { $$ = Stmt\ElseIf_[$3, $6]; }
423
+ ;
424
+
425
+ else_single:
426
+ /* empty */ { $$ = null; }
427
+ | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; }
428
+ ;
429
+
430
+ new_else_single:
431
+ /* empty */ { $$ = null; }
432
+ | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; }
433
+ ;
434
+
435
+ foreach_variable:
436
+ variable { $$ = array($1, false); }
437
+ | '&' variable { $$ = array($2, true); }
438
+ | list_expr { $$ = array($1, false); }
439
+ | array_short_syntax { $$ = array($1, false); }
440
+ ;
441
+
442
+ parameter_list:
443
+ non_empty_parameter_list no_comma { $$ = $1; }
444
+ | /* empty */ { $$ = array(); }
445
+ ;
446
+
447
+ non_empty_parameter_list:
448
+ parameter { init($1); }
449
+ | non_empty_parameter_list ',' parameter { push($1, $3); }
450
+ ;
451
+
452
+ parameter:
453
+ optional_type optional_ref optional_ellipsis plain_variable
454
+ { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); }
455
+ | optional_type optional_ref optional_ellipsis plain_variable '=' expr
456
+ { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); }
457
+ | optional_type optional_ref optional_ellipsis error
458
+ { $$ = Node\Param[Expr\Error[], null, $1, $2, $3]; }
459
+ ;
460
+
461
+ type_expr:
462
+ type { $$ = $1; }
463
+ | '?' type { $$ = Node\NullableType[$2]; }
464
+ | union_type { $$ = Node\UnionType[$1]; }
465
+ ;
466
+
467
+ type:
468
+ name { $$ = $this->handleBuiltinTypes($1); }
469
+ | T_ARRAY { $$ = Node\Identifier['array']; }
470
+ | T_CALLABLE { $$ = Node\Identifier['callable']; }
471
+ ;
472
+
473
+ union_type:
474
+ type '|' type { init($1, $3); }
475
+ | union_type '|' type { push($1, $3); }
476
+ ;
477
+
478
+ optional_type:
479
+ /* empty */ { $$ = null; }
480
+ | type_expr { $$ = $1; }
481
+ ;
482
+
483
+ optional_return_type:
484
+ /* empty */ { $$ = null; }
485
+ | ':' type_expr { $$ = $2; }
486
+ | ':' error { $$ = null; }
487
+ ;
488
+
489
+ argument_list:
490
+ '(' ')' { $$ = array(); }
491
+ | '(' non_empty_argument_list optional_comma ')' { $$ = $2; }
492
+ ;
493
+
494
+ non_empty_argument_list:
495
+ argument { init($1); }
496
+ | non_empty_argument_list ',' argument { push($1, $3); }
497
+ ;
498
+
499
+ argument:
500
+ expr { $$ = Node\Arg[$1, false, false]; }
501
+ | '&' variable { $$ = Node\Arg[$2, true, false]; }
502
+ | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; }
503
+ ;
504
+
505
+ global_var_list:
506
+ non_empty_global_var_list no_comma { $$ = $1; }
507
+ ;
508
+
509
+ non_empty_global_var_list:
510
+ non_empty_global_var_list ',' global_var { push($1, $3); }
511
+ | global_var { init($1); }
512
+ ;
513
+
514
+ global_var:
515
+ simple_variable { $$ = Expr\Variable[$1]; }
516
+ ;
517
+
518
+ static_var_list:
519
+ non_empty_static_var_list no_comma { $$ = $1; }
520
+ ;
521
+
522
+ non_empty_static_var_list:
523
+ non_empty_static_var_list ',' static_var { push($1, $3); }
524
+ | static_var { init($1); }
525
+ ;
526
+
527
+ static_var:
528
+ plain_variable { $$ = Stmt\StaticVar[$1, null]; }
529
+ | plain_variable '=' expr { $$ = Stmt\StaticVar[$1, $3]; }
530
+ ;
531
+
532
+ class_statement_list_ex:
533
+ class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } }
534
+ | /* empty */ { init(); }
535
+ ;
536
+
537
+ class_statement_list:
538
+ class_statement_list_ex
539
+ { makeZeroLengthNop($nop, $this->lookaheadStartAttributes);
540
+ if ($nop !== null) { $1[] = $nop; } $$ = $1; }
541
+ ;
542
+
543
+ class_statement:
544
+ variable_modifiers optional_type property_declaration_list ';'
545
+ { $attrs = attributes();
546
+ $$ = new Stmt\Property($1, $3, $attrs, $2); $this->checkProperty($$, #1); }
547
+ | method_modifiers T_CONST class_const_list ';'
548
+ { $$ = Stmt\ClassConst[$3, $1]; $this->checkClassConst($$, #1); }
549
+ | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body
550
+ { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]];
551
+ $this->checkClassMethod($$, #1); }
552
+ | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; }
553
+ | error { $$ = null; /* will be skipped */ }
554
+ ;
555
+
556
+ trait_adaptations:
557
+ ';' { $$ = array(); }
558
+ | '{' trait_adaptation_list '}' { $$ = $2; }
559
+ ;
560
+
561
+ trait_adaptation_list:
562
+ /* empty */ { init(); }
563
+ | trait_adaptation_list trait_adaptation { push($1, $2); }
564
+ ;
565
+
566
+ trait_adaptation:
567
+ trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';'
568
+ { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; }
569
+ | trait_method_reference T_AS member_modifier identifier_ex ';'
570
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; }
571
+ | trait_method_reference T_AS member_modifier ';'
572
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; }
573
+ | trait_method_reference T_AS identifier ';'
574
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
575
+ | trait_method_reference T_AS reserved_non_modifiers_identifier ';'
576
+ { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; }
577
+ ;
578
+
579
+ trait_method_reference_fully_qualified:
580
+ name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); }
581
+ ;
582
+ trait_method_reference:
583
+ trait_method_reference_fully_qualified { $$ = $1; }
584
+ | identifier_ex { $$ = array(null, $1); }
585
+ ;
586
+
587
+ method_body:
588
+ ';' /* abstract method */ { $$ = null; }
589
+ | block_or_error { $$ = $1; }
590
+ ;
591
+
592
+ variable_modifiers:
593
+ non_empty_member_modifiers { $$ = $1; }
594
+ | T_VAR { $$ = 0; }
595
+ ;
596
+
597
+ method_modifiers:
598
+ /* empty */ { $$ = 0; }
599
+ | non_empty_member_modifiers { $$ = $1; }
600
+ ;
601
+
602
+ non_empty_member_modifiers:
603
+ member_modifier { $$ = $1; }
604
+ | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; }
605
+ ;
606
+
607
+ member_modifier:
608
+ T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; }
609
+ | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; }
610
+ | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; }
611
+ | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; }
612
+ | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; }
613
+ | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; }
614
+ ;
615
+
616
+ property_declaration_list:
617
+ non_empty_property_declaration_list no_comma { $$ = $1; }
618
+ ;
619
+
620
+ non_empty_property_declaration_list:
621
+ property_declaration { init($1); }
622
+ | non_empty_property_declaration_list ',' property_declaration
623
+ { push($1, $3); }
624
+ ;
625
+
626
+ property_decl_name:
627
+ T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; }
628
+ ;
629
+
630
+ property_declaration:
631
+ property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; }
632
+ | property_decl_name '=' expr { $$ = Stmt\PropertyProperty[$1, $3]; }
633
+ ;
634
+
635
+ expr_list:
636
+ non_empty_expr_list no_comma { $$ = $1; }
637
+ ;
638
+
639
+ non_empty_expr_list:
640
+ non_empty_expr_list ',' expr { push($1, $3); }
641
+ | expr { init($1); }
642
+ ;
643
+
644
+ for_expr:
645
+ /* empty */ { $$ = array(); }
646
+ | expr_list { $$ = $1; }
647
+ ;
648
+
649
+ expr:
650
+ variable { $$ = $1; }
651
+ | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; }
652
+ | array_short_syntax '=' expr { $$ = Expr\Assign[$1, $3]; }
653
+ | variable '=' expr { $$ = Expr\Assign[$1, $3]; }
654
+ | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; }
655
+ | new_expr { $$ = $1; }
656
+ | T_CLONE expr { $$ = Expr\Clone_[$2]; }
657
+ | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; }
658
+ | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; }
659
+ | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; }
660
+ | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; }
661
+ | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; }
662
+ | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; }
663
+ | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; }
664
+ | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; }
665
+ | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; }
666
+ | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; }
667
+ | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; }
668
+ | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; }
669
+ | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; }
670
+ | variable T_INC { $$ = Expr\PostInc[$1]; }
671
+ | T_INC variable { $$ = Expr\PreInc [$2]; }
672
+ | variable T_DEC { $$ = Expr\PostDec[$1]; }
673
+ | T_DEC variable { $$ = Expr\PreDec [$2]; }
674
+ | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; }
675
+ | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; }
676
+ | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; }
677
+ | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; }
678
+ | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; }
679
+ | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; }
680
+ | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; }
681
+ | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; }
682
+ | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; }
683
+ | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; }
684
+ | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; }
685
+ | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; }
686
+ | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; }
687
+ | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; }
688
+ | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; }
689
+ | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; }
690
+ | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; }
691
+ | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; }
692
+ | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; }
693
+ | '!' expr { $$ = Expr\BooleanNot[$2]; }
694
+ | '~' expr { $$ = Expr\BitwiseNot[$2]; }
695
+ | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; }
696
+ | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; }
697
+ | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; }
698
+ | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; }
699
+ | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; }
700
+ | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; }
701
+ | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; }
702
+ | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; }
703
+ | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; }
704
+ | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; }
705
+ | '(' expr ')' { $$ = $2; }
706
+ | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; }
707
+ | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; }
708
+ | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; }
709
+ | T_ISSET '(' variables_list ')' { $$ = Expr\Isset_[$3]; }
710
+ | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; }
711
+ | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; }
712
+ | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; }
713
+ | T_EVAL '(' expr ')' { $$ = Expr\Eval_[$3]; }
714
+ | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; }
715
+ | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; }
716
+ | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; }
717
+ | T_DOUBLE_CAST expr
718
+ { $attrs = attributes();
719
+ $attrs['kind'] = $this->getFloatCastKind($1);
720
+ $$ = new Expr\Cast\Double($2, $attrs); }
721
+ | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; }
722
+ | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; }
723
+ | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; }
724
+ | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; }
725
+ | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; }
726
+ | T_EXIT exit_expr
727
+ { $attrs = attributes();
728
+ $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE;
729
+ $$ = new Expr\Exit_($2, $attrs); }
730
+ | '@' expr { $$ = Expr\ErrorSuppress[$2]; }
731
+ | scalar { $$ = $1; }
732
+ | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; }
733
+ | T_PRINT expr { $$ = Expr\Print_[$2]; }
734
+ | T_YIELD { $$ = Expr\Yield_[null, null]; }
735
+ | T_YIELD expr { $$ = Expr\Yield_[$2, null]; }
736
+ | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; }
737
+ | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; }
738
+
739
+ | T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
740
+ { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8]]; }
741
+ | T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr
742
+ { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9]]; }
743
+
744
+ | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
745
+ block_or_error
746
+ { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8]]; }
747
+ | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type
748
+ block_or_error
749
+ { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9]]; }
750
+ ;
751
+
752
+ anonymous_class:
753
+ T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}'
754
+ { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2);
755
+ $this->checkClass($$[0], -1); }
756
+ ;
757
+
758
+ new_expr:
759
+ T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; }
760
+ | T_NEW anonymous_class
761
+ { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; }
762
+ ;
763
+
764
+ lexical_vars:
765
+ /* empty */ { $$ = array(); }
766
+ | T_USE '(' lexical_var_list ')' { $$ = $3; }
767
+ ;
768
+
769
+ lexical_var_list:
770
+ non_empty_lexical_var_list no_comma { $$ = $1; }
771
+ ;
772
+
773
+ non_empty_lexical_var_list:
774
+ lexical_var { init($1); }
775
+ | non_empty_lexical_var_list ',' lexical_var { push($1, $3); }
776
+ ;
777
+
778
+ lexical_var:
779
+ optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; }
780
+ ;
781
+
782
+ function_call:
783
+ name argument_list { $$ = Expr\FuncCall[$1, $2]; }
784
+ | callable_expr argument_list { $$ = Expr\FuncCall[$1, $2]; }
785
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM member_name argument_list
786
+ { $$ = Expr\StaticCall[$1, $3, $4]; }
787
+ ;
788
+
789
+ class_name:
790
+ T_STATIC { $$ = Name[$1]; }
791
+ | name { $$ = $1; }
792
+ ;
793
+
794
+ name:
795
+ namespace_name_parts { $$ = Name[$1]; }
796
+ | T_NS_SEPARATOR namespace_name_parts { $$ = Name\FullyQualified[$2]; }
797
+ | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts { $$ = Name\Relative[$3]; }
798
+ ;
799
+
800
+ class_name_reference:
801
+ class_name { $$ = $1; }
802
+ | new_variable { $$ = $1; }
803
+ | error { $$ = Expr\Error[]; $this->errorState = 2; }
804
+ ;
805
+
806
+ class_name_or_var:
807
+ class_name { $$ = $1; }
808
+ | dereferencable { $$ = $1; }
809
+ ;
810
+
811
+ exit_expr:
812
+ /* empty */ { $$ = null; }
813
+ | '(' optional_expr ')' { $$ = $2; }
814
+ ;
815
+
816
+ backticks_expr:
817
+ /* empty */ { $$ = array(); }
818
+ | T_ENCAPSED_AND_WHITESPACE
819
+ { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`')]); }
820
+ | encaps_list { parseEncapsed($1, '`', true); $$ = $1; }
821
+ ;
822
+
823
+ ctor_arguments:
824
+ /* empty */ { $$ = array(); }
825
+ | argument_list { $$ = $1; }
826
+ ;
827
+
828
+ constant:
829
+ name { $$ = Expr\ConstFetch[$1]; }
830
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex
831
+ { $$ = Expr\ClassConstFetch[$1, $3]; }
832
+ /* We interpret and isolated FOO:: as an unfinished class constant fetch. It could also be
833
+ an unfinished static property fetch or unfinished scoped call. */
834
+ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error
835
+ { $$ = Expr\ClassConstFetch[$1, new Expr\Error(stackAttributes(#3))]; $this->errorState = 2; }
836
+ ;
837
+
838
+ array_short_syntax:
839
+ '[' array_pair_list ']'
840
+ { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT;
841
+ $$ = new Expr\Array_($2, $attrs); }
842
+ ;
843
+
844
+ dereferencable_scalar:
845
+ T_ARRAY '(' array_pair_list ')'
846
+ { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG;
847
+ $$ = new Expr\Array_($3, $attrs); }
848
+ | array_short_syntax { $$ = $1; }
849
+ | T_CONSTANT_ENCAPSED_STRING
850
+ { $attrs = attributes(); $attrs['kind'] = strKind($1);
851
+ $$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); }
852
+ ;
853
+
854
+ scalar:
855
+ T_LNUMBER { $$ = $this->parseLNumber($1, attributes()); }
856
+ | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; }
857
+ | T_LINE { $$ = Scalar\MagicConst\Line[]; }
858
+ | T_FILE { $$ = Scalar\MagicConst\File[]; }
859
+ | T_DIR { $$ = Scalar\MagicConst\Dir[]; }
860
+ | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; }
861
+ | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; }
862
+ | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; }
863
+ | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; }
864
+ | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; }
865
+ | dereferencable_scalar { $$ = $1; }
866
+ | constant { $$ = $1; }
867
+ | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC
868
+ { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
869
+ | T_START_HEREDOC T_END_HEREDOC
870
+ { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), true); }
871
+ | '"' encaps_list '"'
872
+ { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED;
873
+ parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); }
874
+ | T_START_HEREDOC encaps_list T_END_HEREDOC
875
+ { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); }
876
+ ;
877
+
878
+ optional_expr:
879
+ /* empty */ { $$ = null; }
880
+ | expr { $$ = $1; }
881
+ ;
882
+
883
+ dereferencable:
884
+ variable { $$ = $1; }
885
+ | '(' expr ')' { $$ = $2; }
886
+ | dereferencable_scalar { $$ = $1; }
887
+ ;
888
+
889
+ callable_expr:
890
+ callable_variable { $$ = $1; }
891
+ | '(' expr ')' { $$ = $2; }
892
+ | dereferencable_scalar { $$ = $1; }
893
+ ;
894
+
895
+ callable_variable:
896
+ simple_variable { $$ = Expr\Variable[$1]; }
897
+ | dereferencable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
898
+ | constant '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
899
+ | dereferencable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
900
+ | function_call { $$ = $1; }
901
+ | dereferencable T_OBJECT_OPERATOR property_name argument_list
902
+ { $$ = Expr\MethodCall[$1, $3, $4]; }
903
+ ;
904
+
905
+ variable:
906
+ callable_variable { $$ = $1; }
907
+ | static_member { $$ = $1; }
908
+ | dereferencable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; }
909
+ ;
910
+
911
+ simple_variable:
912
+ T_VARIABLE { $$ = parseVar($1); }
913
+ | '$' '{' expr '}' { $$ = $3; }
914
+ | '$' simple_variable { $$ = Expr\Variable[$2]; }
915
+ | '$' error { $$ = Expr\Error[]; $this->errorState = 2; }
916
+ ;
917
+
918
+ static_member_prop_name:
919
+ simple_variable
920
+ { $var = $1; $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; }
921
+ ;
922
+
923
+ static_member:
924
+ class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
925
+ { $$ = Expr\StaticPropertyFetch[$1, $3]; }
926
+ ;
927
+
928
+ new_variable:
929
+ simple_variable { $$ = Expr\Variable[$1]; }
930
+ | new_variable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
931
+ | new_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; }
932
+ | new_variable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; }
933
+ | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
934
+ { $$ = Expr\StaticPropertyFetch[$1, $3]; }
935
+ | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name
936
+ { $$ = Expr\StaticPropertyFetch[$1, $3]; }
937
+ ;
938
+
939
+ member_name:
940
+ identifier_ex { $$ = $1; }
941
+ | '{' expr '}' { $$ = $2; }
942
+ | simple_variable { $$ = Expr\Variable[$1]; }
943
+ ;
944
+
945
+ property_name:
946
+ identifier { $$ = $1; }
947
+ | '{' expr '}' { $$ = $2; }
948
+ | simple_variable { $$ = Expr\Variable[$1]; }
949
+ | error { $$ = Expr\Error[]; $this->errorState = 2; }
950
+ ;
951
+
952
+ list_expr:
953
+ T_LIST '(' list_expr_elements ')' { $$ = Expr\List_[$3]; }
954
+ ;
955
+
956
+ list_expr_elements:
957
+ list_expr_elements ',' list_expr_element { push($1, $3); }
958
+ | list_expr_element { init($1); }
959
+ ;
960
+
961
+ list_expr_element:
962
+ variable { $$ = Expr\ArrayItem[$1, null, false]; }
963
+ | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; }
964
+ | list_expr { $$ = Expr\ArrayItem[$1, null, false]; }
965
+ | expr T_DOUBLE_ARROW variable { $$ = Expr\ArrayItem[$3, $1, false]; }
966
+ | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; }
967
+ | expr T_DOUBLE_ARROW list_expr { $$ = Expr\ArrayItem[$3, $1, false]; }
968
+ | /* empty */ { $$ = null; }
969
+ ;
970
+
971
+ array_pair_list:
972
+ inner_array_pair_list
973
+ { $$ = $1; $end = count($$)-1; if ($$[$end] === null) array_pop($$); }
974
+ ;
975
+
976
+ comma_or_error:
977
+ ','
978
+ | error
979
+ { /* do nothing -- prevent default action of $$=$1. See #551. */ }
980
+ ;
981
+
982
+ inner_array_pair_list:
983
+ inner_array_pair_list comma_or_error array_pair { push($1, $3); }
984
+ | array_pair { init($1); }
985
+ ;
986
+
987
+ array_pair:
988
+ expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; }
989
+ | expr { $$ = Expr\ArrayItem[$1, null, false]; }
990
+ | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; }
991
+ | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; }
992
+ | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; }
993
+ | /* empty */ { $$ = null; }
994
+ ;
995
+
996
+ encaps_list:
997
+ encaps_list encaps_var { push($1, $2); }
998
+ | encaps_list encaps_string_part { push($1, $2); }
999
+ | encaps_var { init($1); }
1000
+ | encaps_string_part encaps_var { init($1, $2); }
1001
+ ;
1002
+
1003
+ encaps_string_part:
1004
+ T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; }
1005
+ ;
1006
+
1007
+ encaps_str_varname:
1008
+ T_STRING_VARNAME { $$ = Expr\Variable[$1]; }
1009
+ ;
1010
+
1011
+ encaps_var:
1012
+ plain_variable { $$ = $1; }
1013
+ | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; }
1014
+ | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; }
1015
+ | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; }
1016
+ | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; }
1017
+ | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}'
1018
+ { $$ = Expr\ArrayDimFetch[$2, $4]; }
1019
+ | T_CURLY_OPEN variable '}' { $$ = $2; }
1020
+ ;
1021
+
1022
+ encaps_var_offset:
1023
+ T_STRING { $$ = Scalar\String_[$1]; }
1024
+ | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); }
1025
+ | '-' T_NUM_STRING { $$ = $this->parseNumString('-' . $2, attributes()); }
1026
+ | plain_variable { $$ = $1; }
1027
+ ;
1028
+
1029
+ %%
vendor/nikic/php-parser/grammar/rebuildParsers.php ADDED
@@ -0,0 +1,261 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $grammarFileToName = [
4
+ __DIR__ . '/php5.y' => 'Php5',
5
+ __DIR__ . '/php7.y' => 'Php7',
6
+ ];
7
+
8
+ $tokensFile = __DIR__ . '/tokens.y';
9
+ $tokensTemplate = __DIR__ . '/tokens.template';
10
+ $skeletonFile = __DIR__ . '/parser.template';
11
+ $tmpGrammarFile = __DIR__ . '/tmp_parser.phpy';
12
+ $tmpResultFile = __DIR__ . '/tmp_parser.php';
13
+ $resultDir = __DIR__ . '/../lib/PhpParser/Parser';
14
+ $tokensResultsFile = $resultDir . '/Tokens.php';
15
+
16
+ $kmyacc = getenv('KMYACC');
17
+ if (!$kmyacc) {
18
+ // Use phpyacc from dev dependencies by default.
19
+ $kmyacc = PHP_BINARY . ' ' . __DIR__ . '/../vendor/bin/phpyacc';
20
+ }
21
+
22
+ $options = array_flip($argv);
23
+ $optionDebug = isset($options['--debug']);
24
+ $optionKeepTmpGrammar = isset($options['--keep-tmp-grammar']);
25
+
26
+ ///////////////////////////////
27
+ /// Utility regex constants ///
28
+ ///////////////////////////////
29
+
30
+ const LIB = '(?(DEFINE)
31
+ (?<singleQuotedString>\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\')
32
+ (?<doubleQuotedString>"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+")
33
+ (?<string>(?&singleQuotedString)|(?&doubleQuotedString))
34
+ (?<comment>/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/)
35
+ (?<code>\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+})
36
+ )';
37
+
38
+ const PARAMS = '\[(?<params>[^[\]]*+(?:\[(?&params)\][^[\]]*+)*+)\]';
39
+ const ARGS = '\((?<args>[^()]*+(?:\((?&args)\)[^()]*+)*+)\)';
40
+
41
+ ///////////////////
42
+ /// Main script ///
43
+ ///////////////////
44
+
45
+ $tokens = file_get_contents($tokensFile);
46
+
47
+ foreach ($grammarFileToName as $grammarFile => $name) {
48
+ echo "Building temporary $name grammar file.\n";
49
+
50
+ $grammarCode = file_get_contents($grammarFile);
51
+ $grammarCode = str_replace('%tokens', $tokens, $grammarCode);
52
+
53
+ $grammarCode = resolveNodes($grammarCode);
54
+ $grammarCode = resolveMacros($grammarCode);
55
+ $grammarCode = resolveStackAccess($grammarCode);
56
+
57
+ file_put_contents($tmpGrammarFile, $grammarCode);
58
+
59
+ $additionalArgs = $optionDebug ? '-t -v' : '';
60
+
61
+ echo "Building $name parser.\n";
62
+ $output = execCmd("$kmyacc $additionalArgs -m $skeletonFile -p $name $tmpGrammarFile");
63
+
64
+ $resultCode = file_get_contents($tmpResultFile);
65
+ $resultCode = removeTrailingWhitespace($resultCode);
66
+
67
+ ensureDirExists($resultDir);
68
+ file_put_contents("$resultDir/$name.php", $resultCode);
69
+ unlink($tmpResultFile);
70
+
71
+ echo "Building token definition.\n";
72
+ $output = execCmd("$kmyacc -m $tokensTemplate $tmpGrammarFile");
73
+ rename($tmpResultFile, $tokensResultsFile);
74
+
75
+ if (!$optionKeepTmpGrammar) {
76
+ unlink($tmpGrammarFile);
77
+ }
78
+ }
79
+
80
+ ///////////////////////////////
81
+ /// Preprocessing functions ///
82
+ ///////////////////////////////
83
+
84
+ function resolveNodes($code) {
85
+ return preg_replace_callback(
86
+ '~\b(?<name>[A-Z][a-zA-Z_\\\\]++)\s*' . PARAMS . '~',
87
+ function($matches) {
88
+ // recurse
89
+ $matches['params'] = resolveNodes($matches['params']);
90
+
91
+ $params = magicSplit(
92
+ '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
93
+ $matches['params']
94
+ );
95
+
96
+ $paramCode = '';
97
+ foreach ($params as $param) {
98
+ $paramCode .= $param . ', ';
99
+ }
100
+
101
+ return 'new ' . $matches['name'] . '(' . $paramCode . 'attributes())';
102
+ },
103
+ $code
104
+ );
105
+ }
106
+
107
+ function resolveMacros($code) {
108
+ return preg_replace_callback(
109
+ '~\b(?<!::|->)(?!array\()(?<name>[a-z][A-Za-z]++)' . ARGS . '~',
110
+ function($matches) {
111
+ // recurse
112
+ $matches['args'] = resolveMacros($matches['args']);
113
+
114
+ $name = $matches['name'];
115
+ $args = magicSplit(
116
+ '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,',
117
+ $matches['args']
118
+ );
119
+
120
+ if ('attributes' == $name) {
121
+ assertArgs(0, $args, $name);
122
+ return '$this->startAttributeStack[#1] + $this->endAttributes';
123
+ }
124
+
125
+ if ('stackAttributes' == $name) {
126
+ assertArgs(1, $args, $name);
127
+ return '$this->startAttributeStack[' . $args[0] . ']'
128
+ . ' + $this->endAttributeStack[' . $args[0] . ']';
129
+ }
130
+
131
+ if ('init' == $name) {
132
+ return '$$ = array(' . implode(', ', $args) . ')';
133
+ }
134
+
135
+ if ('push' == $name) {
136
+ assertArgs(2, $args, $name);
137
+
138
+ return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0];
139
+ }
140
+
141
+ if ('pushNormalizing' == $name) {
142
+ assertArgs(2, $args, $name);
143
+
144
+ return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); }'
145
+ . ' else { ' . $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0] . '; }';
146
+ }
147
+
148
+ if ('toArray' == $name) {
149
+ assertArgs(1, $args, $name);
150
+
151
+ return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')';
152
+ }
153
+
154
+ if ('parseVar' == $name) {
155
+ assertArgs(1, $args, $name);
156
+
157
+ return 'substr(' . $args[0] . ', 1)';
158
+ }
159
+
160
+ if ('parseEncapsed' == $name) {
161
+ assertArgs(3, $args, $name);
162
+
163
+ return 'foreach (' . $args[0] . ' as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) {'
164
+ . ' $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, ' . $args[1] . ', ' . $args[2] . '); } }';
165
+ }
166
+
167
+ if ('makeNop' == $name) {
168
+ assertArgs(3, $args, $name);
169
+
170
+ return '$startAttributes = ' . $args[1] . ';'
171
+ . ' if (isset($startAttributes[\'comments\']))'
172
+ . ' { ' . $args[0] . ' = new Stmt\Nop($startAttributes + ' . $args[2] . '); }'
173
+ . ' else { ' . $args[0] . ' = null; }';
174
+ }
175
+
176
+ if ('makeZeroLengthNop' == $name) {
177
+ assertArgs(2, $args, $name);
178
+
179
+ return '$startAttributes = ' . $args[1] . ';'
180
+ . ' if (isset($startAttributes[\'comments\']))'
181
+ . ' { ' . $args[0] . ' = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); }'
182
+ . ' else { ' . $args[0] . ' = null; }';
183
+ }
184
+
185
+ if ('strKind' == $name) {
186
+ assertArgs(1, $args, $name);
187
+
188
+ return '(' . $args[0] . '[0] === "\'" || (' . $args[0] . '[1] === "\'" && '
189
+ . '(' . $args[0] . '[0] === \'b\' || ' . $args[0] . '[0] === \'B\')) '
190
+ . '? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED)';
191
+ }
192
+
193
+ if ('prependLeadingComments' == $name) {
194
+ assertArgs(1, $args, $name);
195
+
196
+ return '$attrs = $this->startAttributeStack[#1]; $stmts = ' . $args[0] . '; '
197
+ . 'if (!empty($attrs[\'comments\'])) {'
198
+ . '$stmts[0]->setAttribute(\'comments\', '
199
+ . 'array_merge($attrs[\'comments\'], $stmts[0]->getAttribute(\'comments\', []))); }';
200
+ }
201
+
202
+ return $matches[0];
203
+ },
204
+ $code
205
+ );
206
+ }
207
+
208
+ function assertArgs($num, $args, $name) {
209
+ if ($num != count($args)) {
210
+ die('Wrong argument count for ' . $name . '().');
211
+ }
212
+ }
213
+
214
+ function resolveStackAccess($code) {
215
+ $code = preg_replace('/\$\d+/', '$this->semStack[$0]', $code);
216
+ $code = preg_replace('/#(\d+)/', '$$1', $code);
217
+ return $code;
218
+ }
219
+
220
+ function removeTrailingWhitespace($code) {
221
+ $lines = explode("\n", $code);
222
+ $lines = array_map('rtrim', $lines);
223
+ return implode("\n", $lines);
224
+ }
225
+
226
+ function ensureDirExists($dir) {
227
+ if (!is_dir($dir)) {
228
+ mkdir($dir, 0777, true);
229
+ }
230
+ }
231
+
232
+ function execCmd($cmd) {
233
+ $output = trim(shell_exec("$cmd 2>&1"));
234
+ if ($output !== "") {
235
+ echo "> " . $cmd . "\n";
236
+ echo $output;
237
+ }
238
+ return $output;
239
+ }
240
+
241
+ //////////////////////////////
242
+ /// Regex helper functions ///
243
+ //////////////////////////////
244
+
245
+ function regex($regex) {
246
+ return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~';
247
+ }
248
+
249
+ function magicSplit($regex, $string) {
250
+ $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string);
251
+
252
+ foreach ($pieces as &$piece) {
253
+ $piece = trim($piece);
254
+ }
255
+
256
+ if ($pieces === ['']) {
257
+ return [];
258
+ }
259
+
260
+ return $pieces;
261
+ }
vendor/nikic/php-parser/grammar/tokens.template ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $meta #
3
+ #semval($) $this->semValue
4
+ #semval($,%t) $this->semValue
5
+ #semval(%n) $this->stackPos-(%l-%n)
6
+ #semval(%n,%t) $this->stackPos-(%l-%n)
7
+
8
+ namespace PhpParser\Parser;
9
+ #include;
10
+
11
+ /* GENERATED file based on grammar/tokens.y */
12
+ final class Tokens
13
+ {
14
+ #tokenval
15
+ const %s = %n;
16
+ #endtokenval
17
+ }
vendor/nikic/php-parser/grammar/tokens.y ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* We currently rely on the token ID mapping to be the same between PHP 5 and PHP 7 - so the same lexer can be used for
2
+ * both. This is enforced by sharing this token file. */
3
+
4
+ %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE
5
+ %left ','
6
+ %left T_LOGICAL_OR
7
+ %left T_LOGICAL_XOR
8
+ %left T_LOGICAL_AND
9
+ %right T_PRINT
10
+ %right T_YIELD
11
+ %right T_DOUBLE_ARROW
12
+ %right T_YIELD_FROM
13
+ %left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL T_COALESCE_EQUAL
14
+ %left '?' ':'
15
+ %right T_COALESCE
16
+ %left T_BOOLEAN_OR
17
+ %left T_BOOLEAN_AND
18
+ %left '|'
19
+ %left '^'
20
+ %left '&'
21
+ %nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP
22
+ %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL
23
+ %left T_SL T_SR
24
+ %left '+' '-' '.'
25
+ %left '*' '/' '%'
26
+ %right '!'
27
+ %nonassoc T_INSTANCEOF
28
+ %right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@'
29
+ %right T_POW
30
+ %right '['
31
+ %nonassoc T_NEW T_CLONE
32
+ %token T_EXIT
33
+ %token T_IF
34
+ %left T_ELSEIF
35
+ %left T_ELSE
36
+ %left T_ENDIF
37
+ %token T_LNUMBER
38
+ %token T_DNUMBER
39
+ %token T_STRING
40
+ %token T_STRING_VARNAME
41
+ %token T_VARIABLE
42
+ %token T_NUM_STRING
43
+ %token T_INLINE_HTML
44
+ %token T_CHARACTER
45
+ %token T_BAD_CHARACTER
46
+ %token T_ENCAPSED_AND_WHITESPACE
47
+ %token T_CONSTANT_ENCAPSED_STRING
48
+ %token T_ECHO
49
+ %token T_DO
50
+ %token T_WHILE
51
+ %token T_ENDWHILE
52
+ %token T_FOR
53
+ %token T_ENDFOR
54
+ %token T_FOREACH
55
+ %token T_ENDFOREACH
56
+ %token T_DECLARE
57
+ %token T_ENDDECLARE
58
+ %token T_AS
59
+ %token T_SWITCH
60
+ %token T_ENDSWITCH
61
+ %token T_CASE
62
+ %token T_DEFAULT
63
+ %token T_BREAK
64
+ %token T_CONTINUE
65
+ %token T_GOTO
66
+ %token T_FUNCTION
67
+ %token T_FN
68
+ %token T_CONST
69
+ %token T_RETURN
70
+ %token T_TRY
71
+ %token T_CATCH
72
+ %token T_FINALLY
73
+ %token T_THROW
74
+ %token T_USE
75
+ %token T_INSTEADOF
76
+ %token T_GLOBAL
77
+ %right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC
78
+ %token T_VAR
79
+ %token T_UNSET
80
+ %token T_ISSET
81
+ %token T_EMPTY
82
+ %token T_HALT_COMPILER
83
+ %token T_CLASS
84
+ %token T_TRAIT
85
+ %token T_INTERFACE
86
+ %token T_EXTENDS
87
+ %token T_IMPLEMENTS
88
+ %token T_OBJECT_OPERATOR
89
+ %token T_DOUBLE_ARROW
90
+ %token T_LIST
91
+ %token T_ARRAY
92
+ %token T_CALLABLE
93
+ %token T_CLASS_C
94
+ %token T_TRAIT_C
95
+ %token T_METHOD_C
96
+ %token T_FUNC_C
97
+ %token T_LINE
98
+ %token T_FILE
99
+ %token T_COMMENT
100
+ %token T_DOC_COMMENT
101
+ %token T_OPEN_TAG
102
+ %token T_OPEN_TAG_WITH_ECHO
103
+ %token T_CLOSE_TAG
104
+ %token T_WHITESPACE
105
+ %token T_START_HEREDOC
106
+ %token T_END_HEREDOC
107
+ %token T_DOLLAR_OPEN_CURLY_BRACES
108
+ %token T_CURLY_OPEN
109
+ %token T_PAAMAYIM_NEKUDOTAYIM
110
+ %token T_NAMESPACE
111
+ %token T_NS_C
112
+ %token T_DIR
113
+ %token T_NS_SEPARATOR
114
+ %token T_ELLIPSIS
vendor/nikic/php-parser/lib/PhpParser/Builder.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface Builder
6
+ {
7
+ /**
8
+ * Returns the built node.
9
+ *
10
+ * @return Node The built node
11
+ */
12
+ public function getNode() : Node;
13
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node\Name;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class Class_ extends Declaration
11
+ {
12
+ protected $name;
13
+
14
+ protected $extends = null;
15
+ protected $implements = [];
16
+ protected $flags = 0;
17
+
18
+ protected $uses = [];
19
+ protected $constants = [];
20
+ protected $properties = [];
21
+ protected $methods = [];
22
+
23
+ /**
24
+ * Creates a class builder.
25
+ *
26
+ * @param string $name Name of the class
27
+ */
28
+ public function __construct(string $name) {
29
+ $this->name = $name;
30
+ }
31
+
32
+ /**
33
+ * Extends a class.
34
+ *
35
+ * @param Name|string $class Name of class to extend
36
+ *
37
+ * @return $this The builder instance (for fluid interface)
38
+ */
39
+ public function extend($class) {
40
+ $this->extends = BuilderHelpers::normalizeName($class);
41
+
42
+ return $this;
43
+ }
44
+
45
+ /**
46
+ * Implements one or more interfaces.
47
+ *
48
+ * @param Name|string ...$interfaces Names of interfaces to implement
49
+ *
50
+ * @return $this The builder instance (for fluid interface)
51
+ */
52
+ public function implement(...$interfaces) {
53
+ foreach ($interfaces as $interface) {
54
+ $this->implements[] = BuilderHelpers::normalizeName($interface);
55
+ }
56
+
57
+ return $this;
58
+ }
59
+
60
+ /**
61
+ * Makes the class abstract.
62
+ *
63
+ * @return $this The builder instance (for fluid interface)
64
+ */
65
+ public function makeAbstract() {
66
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT);
67
+
68
+ return $this;
69
+ }
70
+
71
+ /**
72
+ * Makes the class final.
73
+ *
74
+ * @return $this The builder instance (for fluid interface)
75
+ */
76
+ public function makeFinal() {
77
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL);
78
+
79
+ return $this;
80
+ }
81
+
82
+ /**
83
+ * Adds a statement.
84
+ *
85
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
86
+ *
87
+ * @return $this The builder instance (for fluid interface)
88
+ */
89
+ public function addStmt($stmt) {
90
+ $stmt = BuilderHelpers::normalizeNode($stmt);
91
+
92
+ $targets = [
93
+ Stmt\TraitUse::class => &$this->uses,
94
+ Stmt\ClassConst::class => &$this->constants,
95
+ Stmt\Property::class => &$this->properties,
96
+ Stmt\ClassMethod::class => &$this->methods,
97
+ ];
98
+
99
+ $class = \get_class($stmt);
100
+ if (!isset($targets[$class])) {
101
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
102
+ }
103
+
104
+ $targets[$class][] = $stmt;
105
+
106
+ return $this;
107
+ }
108
+
109
+ /**
110
+ * Returns the built class node.
111
+ *
112
+ * @return Stmt\Class_ The built class node
113
+ */
114
+ public function getNode() : PhpParser\Node {
115
+ return new Stmt\Class_($this->name, [
116
+ 'flags' => $this->flags,
117
+ 'extends' => $this->extends,
118
+ 'implements' => $this->implements,
119
+ 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods),
120
+ ], $this->attributes);
121
+ }
122
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+
8
+ abstract class Declaration implements PhpParser\Builder
9
+ {
10
+ protected $attributes = [];
11
+
12
+ abstract public function addStmt($stmt);
13
+
14
+ /**
15
+ * Adds multiple statements.
16
+ *
17
+ * @param array $stmts The statements to add
18
+ *
19
+ * @return $this The builder instance (for fluid interface)
20
+ */
21
+ public function addStmts(array $stmts) {
22
+ foreach ($stmts as $stmt) {
23
+ $this->addStmt($stmt);
24
+ }
25
+
26
+ return $this;
27
+ }
28
+
29
+ /**
30
+ * Sets doc comment for the declaration.
31
+ *
32
+ * @param PhpParser\Comment\Doc|string $docComment Doc comment to set
33
+ *
34
+ * @return $this The builder instance (for fluid interface)
35
+ */
36
+ public function setDocComment($docComment) {
37
+ $this->attributes['comments'] = [
38
+ BuilderHelpers::normalizeDocComment($docComment)
39
+ ];
40
+
41
+ return $this;
42
+ }
43
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser\BuilderHelpers;
6
+ use PhpParser\Node;
7
+
8
+ abstract class FunctionLike extends Declaration
9
+ {
10
+ protected $returnByRef = false;
11
+ protected $params = [];
12
+
13
+ /** @var string|Node\Name|Node\NullableType|null */
14
+ protected $returnType = null;
15
+
16
+ /**
17
+ * Make the function return by reference.
18
+ *
19
+ * @return $this The builder instance (for fluid interface)
20
+ */
21
+ public function makeReturnByRef() {
22
+ $this->returnByRef = true;
23
+
24
+ return $this;
25
+ }
26
+
27
+ /**
28
+ * Adds a parameter.
29
+ *
30
+ * @param Node\Param|Param $param The parameter to add
31
+ *
32
+ * @return $this The builder instance (for fluid interface)
33
+ */
34
+ public function addParam($param) {
35
+ $param = BuilderHelpers::normalizeNode($param);
36
+
37
+ if (!$param instanceof Node\Param) {
38
+ throw new \LogicException(sprintf('Expected parameter node, got "%s"', $param->getType()));
39
+ }
40
+
41
+ $this->params[] = $param;
42
+
43
+ return $this;
44
+ }
45
+
46
+ /**
47
+ * Adds multiple parameters.
48
+ *
49
+ * @param array $params The parameters to add
50
+ *
51
+ * @return $this The builder instance (for fluid interface)
52
+ */
53
+ public function addParams(array $params) {
54
+ foreach ($params as $param) {
55
+ $this->addParam($param);
56
+ }
57
+
58
+ return $this;
59
+ }
60
+
61
+ /**
62
+ * Sets the return type for PHP 7.
63
+ *
64
+ * @param string|Node\Name|Node\NullableType $type One of array, callable, string, int, float,
65
+ * bool, iterable, or a class/interface name.
66
+ *
67
+ * @return $this The builder instance (for fluid interface)
68
+ */
69
+ public function setReturnType($type) {
70
+ $this->returnType = BuilderHelpers::normalizeType($type);
71
+
72
+ return $this;
73
+ }
74
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class Function_ extends FunctionLike
11
+ {
12
+ protected $name;
13
+ protected $stmts = [];
14
+
15
+ /**
16
+ * Creates a function builder.
17
+ *
18
+ * @param string $name Name of the function
19
+ */
20
+ public function __construct(string $name) {
21
+ $this->name = $name;
22
+ }
23
+
24
+ /**
25
+ * Adds a statement.
26
+ *
27
+ * @param Node|PhpParser\Builder $stmt The statement to add
28
+ *
29
+ * @return $this The builder instance (for fluid interface)
30
+ */
31
+ public function addStmt($stmt) {
32
+ $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
33
+
34
+ return $this;
35
+ }
36
+
37
+ /**
38
+ * Returns the built function node.
39
+ *
40
+ * @return Stmt\Function_ The built function node
41
+ */
42
+ public function getNode() : Node {
43
+ return new Stmt\Function_($this->name, [
44
+ 'byRef' => $this->returnByRef,
45
+ 'params' => $this->params,
46
+ 'returnType' => $this->returnType,
47
+ 'stmts' => $this->stmts,
48
+ ], $this->attributes);
49
+ }
50
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node\Name;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class Interface_ extends Declaration
11
+ {
12
+ protected $name;
13
+ protected $extends = [];
14
+ protected $constants = [];
15
+ protected $methods = [];
16
+
17
+ /**
18
+ * Creates an interface builder.
19
+ *
20
+ * @param string $name Name of the interface
21
+ */
22
+ public function __construct(string $name) {
23
+ $this->name = $name;
24
+ }
25
+
26
+ /**
27
+ * Extends one or more interfaces.
28
+ *
29
+ * @param Name|string ...$interfaces Names of interfaces to extend
30
+ *
31
+ * @return $this The builder instance (for fluid interface)
32
+ */
33
+ public function extend(...$interfaces) {
34
+ foreach ($interfaces as $interface) {
35
+ $this->extends[] = BuilderHelpers::normalizeName($interface);
36
+ }
37
+
38
+ return $this;
39
+ }
40
+
41
+ /**
42
+ * Adds a statement.
43
+ *
44
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
45
+ *
46
+ * @return $this The builder instance (for fluid interface)
47
+ */
48
+ public function addStmt($stmt) {
49
+ $stmt = BuilderHelpers::normalizeNode($stmt);
50
+
51
+ if ($stmt instanceof Stmt\ClassConst) {
52
+ $this->constants[] = $stmt;
53
+ } elseif ($stmt instanceof Stmt\ClassMethod) {
54
+ // we erase all statements in the body of an interface method
55
+ $stmt->stmts = null;
56
+ $this->methods[] = $stmt;
57
+ } else {
58
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
59
+ }
60
+
61
+ return $this;
62
+ }
63
+
64
+ /**
65
+ * Returns the built interface node.
66
+ *
67
+ * @return Stmt\Interface_ The built interface node
68
+ */
69
+ public function getNode() : PhpParser\Node {
70
+ return new Stmt\Interface_($this->name, [
71
+ 'extends' => $this->extends,
72
+ 'stmts' => array_merge($this->constants, $this->methods),
73
+ ], $this->attributes);
74
+ }
75
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class Method extends FunctionLike
11
+ {
12
+ protected $name;
13
+ protected $flags = 0;
14
+
15
+ /** @var array|null */
16
+ protected $stmts = [];
17
+
18
+ /**
19
+ * Creates a method builder.
20
+ *
21
+ * @param string $name Name of the method
22
+ */
23
+ public function __construct(string $name) {
24
+ $this->name = $name;
25
+ }
26
+
27
+ /**
28
+ * Makes the method public.
29
+ *
30
+ * @return $this The builder instance (for fluid interface)
31
+ */
32
+ public function makePublic() {
33
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC);
34
+
35
+ return $this;
36
+ }
37
+
38
+ /**
39
+ * Makes the method protected.
40
+ *
41
+ * @return $this The builder instance (for fluid interface)
42
+ */
43
+ public function makeProtected() {
44
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED);
45
+
46
+ return $this;
47
+ }
48
+
49
+ /**
50
+ * Makes the method private.
51
+ *
52
+ * @return $this The builder instance (for fluid interface)
53
+ */
54
+ public function makePrivate() {
55
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE);
56
+
57
+ return $this;
58
+ }
59
+
60
+ /**
61
+ * Makes the method static.
62
+ *
63
+ * @return $this The builder instance (for fluid interface)
64
+ */
65
+ public function makeStatic() {
66
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC);
67
+
68
+ return $this;
69
+ }
70
+
71
+ /**
72
+ * Makes the method abstract.
73
+ *
74
+ * @return $this The builder instance (for fluid interface)
75
+ */
76
+ public function makeAbstract() {
77
+ if (!empty($this->stmts)) {
78
+ throw new \LogicException('Cannot make method with statements abstract');
79
+ }
80
+
81
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT);
82
+ $this->stmts = null; // abstract methods don't have statements
83
+
84
+ return $this;
85
+ }
86
+
87
+ /**
88
+ * Makes the method final.
89
+ *
90
+ * @return $this The builder instance (for fluid interface)
91
+ */
92
+ public function makeFinal() {
93
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL);
94
+
95
+ return $this;
96
+ }
97
+
98
+ /**
99
+ * Adds a statement.
100
+ *
101
+ * @param Node|PhpParser\Builder $stmt The statement to add
102
+ *
103
+ * @return $this The builder instance (for fluid interface)
104
+ */
105
+ public function addStmt($stmt) {
106
+ if (null === $this->stmts) {
107
+ throw new \LogicException('Cannot add statements to an abstract method');
108
+ }
109
+
110
+ $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
111
+
112
+ return $this;
113
+ }
114
+
115
+ /**
116
+ * Returns the built method node.
117
+ *
118
+ * @return Stmt\ClassMethod The built method node
119
+ */
120
+ public function getNode() : Node {
121
+ return new Stmt\ClassMethod($this->name, [
122
+ 'flags' => $this->flags,
123
+ 'byRef' => $this->returnByRef,
124
+ 'params' => $this->params,
125
+ 'returnType' => $this->returnType,
126
+ 'stmts' => $this->stmts,
127
+ ], $this->attributes);
128
+ }
129
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class Namespace_ extends Declaration
11
+ {
12
+ private $name;
13
+ private $stmts = [];
14
+
15
+ /**
16
+ * Creates a namespace builder.
17
+ *
18
+ * @param Node\Name|string|null $name Name of the namespace
19
+ */
20
+ public function __construct($name) {
21
+ $this->name = null !== $name ? BuilderHelpers::normalizeName($name) : null;
22
+ }
23
+
24
+ /**
25
+ * Adds a statement.
26
+ *
27
+ * @param Node|PhpParser\Builder $stmt The statement to add
28
+ *
29
+ * @return $this The builder instance (for fluid interface)
30
+ */
31
+ public function addStmt($stmt) {
32
+ $this->stmts[] = BuilderHelpers::normalizeStmt($stmt);
33
+
34
+ return $this;
35
+ }
36
+
37
+ /**
38
+ * Returns the built node.
39
+ *
40
+ * @return Node The built node
41
+ */
42
+ public function getNode() : Node {
43
+ return new Stmt\Namespace_($this->name, $this->stmts, $this->attributes);
44
+ }
45
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+
9
+ class Param implements PhpParser\Builder
10
+ {
11
+ protected $name;
12
+
13
+ protected $default = null;
14
+
15
+ /** @var Node\Identifier|Node\Name|Node\NullableType|null */
16
+ protected $type = null;
17
+
18
+ protected $byRef = false;
19
+
20
+ protected $variadic = false;
21
+
22
+ /**
23
+ * Creates a parameter builder.
24
+ *
25
+ * @param string $name Name of the parameter
26
+ */
27
+ public function __construct(string $name) {
28
+ $this->name = $name;
29
+ }
30
+
31
+ /**
32
+ * Sets default value for the parameter.
33
+ *
34
+ * @param mixed $value Default value to use
35
+ *
36
+ * @return $this The builder instance (for fluid interface)
37
+ */
38
+ public function setDefault($value) {
39
+ $this->default = BuilderHelpers::normalizeValue($value);
40
+
41
+ return $this;
42
+ }
43
+
44
+ /**
45
+ * Sets type for the parameter.
46
+ *
47
+ * @param string|Node\Name|Node\NullableType $type Parameter type
48
+ *
49
+ * @return $this The builder instance (for fluid interface)
50
+ */
51
+ public function setType($type) {
52
+ $this->type = BuilderHelpers::normalizeType($type);
53
+ if ($this->type == 'void') {
54
+ throw new \LogicException('Parameter type cannot be void');
55
+ }
56
+
57
+ return $this;
58
+ }
59
+
60
+ /**
61
+ * Sets type for the parameter.
62
+ *
63
+ * @param string|Node\Name|Node\NullableType $type Parameter type
64
+ *
65
+ * @return $this The builder instance (for fluid interface)
66
+ *
67
+ * @deprecated Use setType() instead
68
+ */
69
+ public function setTypeHint($type) {
70
+ return $this->setType($type);
71
+ }
72
+
73
+ /**
74
+ * Make the parameter accept the value by reference.
75
+ *
76
+ * @return $this The builder instance (for fluid interface)
77
+ */
78
+ public function makeByRef() {
79
+ $this->byRef = true;
80
+
81
+ return $this;
82
+ }
83
+
84
+ /**
85
+ * Make the parameter variadic
86
+ *
87
+ * @return $this The builder instance (for fluid interface)
88
+ */
89
+ public function makeVariadic() {
90
+ $this->variadic = true;
91
+
92
+ return $this;
93
+ }
94
+
95
+ /**
96
+ * Returns the built parameter node.
97
+ *
98
+ * @return Node\Param The built parameter node
99
+ */
100
+ public function getNode() : Node {
101
+ return new Node\Param(
102
+ new Node\Expr\Variable($this->name),
103
+ $this->default, $this->type, $this->byRef, $this->variadic
104
+ );
105
+ }
106
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node\Identifier;
8
+ use PhpParser\Node\Name;
9
+ use PhpParser\Node\NullableType;
10
+ use PhpParser\Node\Stmt;
11
+
12
+ class Property implements PhpParser\Builder
13
+ {
14
+ protected $name;
15
+
16
+ protected $flags = 0;
17
+ protected $default = null;
18
+ protected $attributes = [];
19
+
20
+ /** @var null|Identifier|Name|NullableType */
21
+ protected $type;
22
+
23
+ /**
24
+ * Creates a property builder.
25
+ *
26
+ * @param string $name Name of the property
27
+ */
28
+ public function __construct(string $name) {
29
+ $this->name = $name;
30
+ }
31
+
32
+ /**
33
+ * Makes the property public.
34
+ *
35
+ * @return $this The builder instance (for fluid interface)
36
+ */
37
+ public function makePublic() {
38
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC);
39
+
40
+ return $this;
41
+ }
42
+
43
+ /**
44
+ * Makes the property protected.
45
+ *
46
+ * @return $this The builder instance (for fluid interface)
47
+ */
48
+ public function makeProtected() {
49
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED);
50
+
51
+ return $this;
52
+ }
53
+
54
+ /**
55
+ * Makes the property private.
56
+ *
57
+ * @return $this The builder instance (for fluid interface)
58
+ */
59
+ public function makePrivate() {
60
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE);
61
+
62
+ return $this;
63
+ }
64
+
65
+ /**
66
+ * Makes the property static.
67
+ *
68
+ * @return $this The builder instance (for fluid interface)
69
+ */
70
+ public function makeStatic() {
71
+ $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC);
72
+
73
+ return $this;
74
+ }
75
+
76
+ /**
77
+ * Sets default value for the property.
78
+ *
79
+ * @param mixed $value Default value to use
80
+ *
81
+ * @return $this The builder instance (for fluid interface)
82
+ */
83
+ public function setDefault($value) {
84
+ $this->default = BuilderHelpers::normalizeValue($value);
85
+
86
+ return $this;
87
+ }
88
+
89
+ /**
90
+ * Sets doc comment for the property.
91
+ *
92
+ * @param PhpParser\Comment\Doc|string $docComment Doc comment to set
93
+ *
94
+ * @return $this The builder instance (for fluid interface)
95
+ */
96
+ public function setDocComment($docComment) {
97
+ $this->attributes = [
98
+ 'comments' => [BuilderHelpers::normalizeDocComment($docComment)]
99
+ ];
100
+
101
+ return $this;
102
+ }
103
+
104
+ /**
105
+ * Sets the property type for PHP 7.4+.
106
+ *
107
+ * @param string|Name|NullableType|Identifier $type
108
+ *
109
+ * @return $this
110
+ */
111
+ public function setType($type) {
112
+ $this->type = BuilderHelpers::normalizeType($type);
113
+
114
+ return $this;
115
+ }
116
+
117
+ /**
118
+ * Returns the built class node.
119
+ *
120
+ * @return Stmt\Property The built property node
121
+ */
122
+ public function getNode() : PhpParser\Node {
123
+ return new Stmt\Property(
124
+ $this->flags !== 0 ? $this->flags : Stmt\Class_::MODIFIER_PUBLIC,
125
+ [
126
+ new Stmt\PropertyProperty($this->name, $this->default)
127
+ ],
128
+ $this->attributes,
129
+ $this->type
130
+ );
131
+ }
132
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser\Builder;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class TraitUse implements Builder
11
+ {
12
+ protected $traits = [];
13
+ protected $adaptations = [];
14
+
15
+ /**
16
+ * Creates a trait use builder.
17
+ *
18
+ * @param Node\Name|string ...$traits Names of used traits
19
+ */
20
+ public function __construct(...$traits) {
21
+ foreach ($traits as $trait) {
22
+ $this->and($trait);
23
+ }
24
+ }
25
+
26
+ /**
27
+ * Adds used trait.
28
+ *
29
+ * @param Node\Name|string $trait Trait name
30
+ *
31
+ * @return $this The builder instance (for fluid interface)
32
+ */
33
+ public function and($trait) {
34
+ $this->traits[] = BuilderHelpers::normalizeName($trait);
35
+ return $this;
36
+ }
37
+
38
+ /**
39
+ * Adds trait adaptation.
40
+ *
41
+ * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation
42
+ *
43
+ * @return $this The builder instance (for fluid interface)
44
+ */
45
+ public function with($adaptation) {
46
+ $adaptation = BuilderHelpers::normalizeNode($adaptation);
47
+
48
+ if (!$adaptation instanceof Stmt\TraitUseAdaptation) {
49
+ throw new \LogicException('Adaptation must have type TraitUseAdaptation');
50
+ }
51
+
52
+ $this->adaptations[] = $adaptation;
53
+ return $this;
54
+ }
55
+
56
+ /**
57
+ * Returns the built node.
58
+ *
59
+ * @return Node The built node
60
+ */
61
+ public function getNode() : Node {
62
+ return new Stmt\TraitUse($this->traits, $this->adaptations);
63
+ }
64
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser\Builder;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class TraitUseAdaptation implements Builder
11
+ {
12
+ const TYPE_UNDEFINED = 0;
13
+ const TYPE_ALIAS = 1;
14
+ const TYPE_PRECEDENCE = 2;
15
+
16
+ /** @var int Type of building adaptation */
17
+ protected $type;
18
+
19
+ protected $trait;
20
+ protected $method;
21
+
22
+ protected $modifier = null;
23
+ protected $alias = null;
24
+
25
+ protected $insteadof = [];
26
+
27
+ /**
28
+ * Creates a trait use adaptation builder.
29
+ *
30
+ * @param Node\Name|string|null $trait Name of adaptated trait
31
+ * @param Node\Identifier|string $method Name of adaptated method
32
+ */
33
+ public function __construct($trait, $method) {
34
+ $this->type = self::TYPE_UNDEFINED;
35
+
36
+ $this->trait = is_null($trait)? null: BuilderHelpers::normalizeName($trait);
37
+ $this->method = BuilderHelpers::normalizeIdentifier($method);
38
+ }
39
+
40
+ /**
41
+ * Sets alias of method.
42
+ *
43
+ * @param Node\Identifier|string $alias Alias for adaptated method
44
+ *
45
+ * @return $this The builder instance (for fluid interface)
46
+ */
47
+ public function as($alias) {
48
+ if ($this->type === self::TYPE_UNDEFINED) {
49
+ $this->type = self::TYPE_ALIAS;
50
+ }
51
+
52
+ if ($this->type !== self::TYPE_ALIAS) {
53
+ throw new \LogicException('Cannot set alias for not alias adaptation buider');
54
+ }
55
+
56
+ $this->alias = $alias;
57
+ return $this;
58
+ }
59
+
60
+ /**
61
+ * Sets adaptated method public.
62
+ *
63
+ * @return $this The builder instance (for fluid interface)
64
+ */
65
+ public function makePublic() {
66
+ $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC);
67
+ return $this;
68
+ }
69
+
70
+ /**
71
+ * Sets adaptated method protected.
72
+ *
73
+ * @return $this The builder instance (for fluid interface)
74
+ */
75
+ public function makeProtected() {
76
+ $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED);
77
+ return $this;
78
+ }
79
+
80
+ /**
81
+ * Sets adaptated method private.
82
+ *
83
+ * @return $this The builder instance (for fluid interface)
84
+ */
85
+ public function makePrivate() {
86
+ $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE);
87
+ return $this;
88
+ }
89
+
90
+ /**
91
+ * Adds overwritten traits.
92
+ *
93
+ * @param Node\Name|string ...$traits Traits for overwrite
94
+ *
95
+ * @return $this The builder instance (for fluid interface)
96
+ */
97
+ public function insteadof(...$traits) {
98
+ if ($this->type === self::TYPE_UNDEFINED) {
99
+ if (is_null($this->trait)) {
100
+ throw new \LogicException('Precedence adaptation must have trait');
101
+ }
102
+
103
+ $this->type = self::TYPE_PRECEDENCE;
104
+ }
105
+
106
+ if ($this->type !== self::TYPE_PRECEDENCE) {
107
+ throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider');
108
+ }
109
+
110
+ foreach ($traits as $trait) {
111
+ $this->insteadof[] = BuilderHelpers::normalizeName($trait);
112
+ }
113
+
114
+ return $this;
115
+ }
116
+
117
+ protected function setModifier(int $modifier) {
118
+ if ($this->type === self::TYPE_UNDEFINED) {
119
+ $this->type = self::TYPE_ALIAS;
120
+ }
121
+
122
+ if ($this->type !== self::TYPE_ALIAS) {
123
+ throw new \LogicException('Cannot set access modifier for not alias adaptation buider');
124
+ }
125
+
126
+ if (is_null($this->modifier)) {
127
+ $this->modifier = $modifier;
128
+ } else {
129
+ throw new \LogicException('Multiple access type modifiers are not allowed');
130
+ }
131
+ }
132
+
133
+ /**
134
+ * Returns the built node.
135
+ *
136
+ * @return Node The built node
137
+ */
138
+ public function getNode() : Node {
139
+ switch ($this->type) {
140
+ case self::TYPE_ALIAS:
141
+ return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias);
142
+ case self::TYPE_PRECEDENCE:
143
+ return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof);
144
+ default:
145
+ throw new \LogicException('Type of adaptation is not defined');
146
+ }
147
+ }
148
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node\Stmt;
8
+
9
+ class Trait_ extends Declaration
10
+ {
11
+ protected $name;
12
+ protected $uses = [];
13
+ protected $properties = [];
14
+ protected $methods = [];
15
+
16
+ /**
17
+ * Creates an interface builder.
18
+ *
19
+ * @param string $name Name of the interface
20
+ */
21
+ public function __construct(string $name) {
22
+ $this->name = $name;
23
+ }
24
+
25
+ /**
26
+ * Adds a statement.
27
+ *
28
+ * @param Stmt|PhpParser\Builder $stmt The statement to add
29
+ *
30
+ * @return $this The builder instance (for fluid interface)
31
+ */
32
+ public function addStmt($stmt) {
33
+ $stmt = BuilderHelpers::normalizeNode($stmt);
34
+
35
+ if ($stmt instanceof Stmt\Property) {
36
+ $this->properties[] = $stmt;
37
+ } elseif ($stmt instanceof Stmt\ClassMethod) {
38
+ $this->methods[] = $stmt;
39
+ } elseif ($stmt instanceof Stmt\TraitUse) {
40
+ $this->uses[] = $stmt;
41
+ } else {
42
+ throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType()));
43
+ }
44
+
45
+ return $this;
46
+ }
47
+
48
+ /**
49
+ * Returns the built trait node.
50
+ *
51
+ * @return Stmt\Trait_ The built interface node
52
+ */
53
+ public function getNode() : PhpParser\Node {
54
+ return new Stmt\Trait_(
55
+ $this->name, [
56
+ 'stmts' => array_merge($this->uses, $this->properties, $this->methods)
57
+ ], $this->attributes
58
+ );
59
+ }
60
+ }
vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Builder;
4
+
5
+ use PhpParser\Builder;
6
+ use PhpParser\BuilderHelpers;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Stmt;
9
+
10
+ class Use_ implements Builder
11
+ {
12
+ protected $name;
13
+ protected $type;
14
+ protected $alias = null;
15
+
16
+ /**
17
+ * Creates a name use (alias) builder.
18
+ *
19
+ * @param Node\Name|string $name Name of the entity (namespace, class, function, constant) to alias
20
+ * @param int $type One of the Stmt\Use_::TYPE_* constants
21
+ */
22
+ public function __construct($name, int $type) {
23
+ $this->name = BuilderHelpers::normalizeName($name);
24
+ $this->type = $type;
25
+ }
26
+
27
+ /**
28
+ * Sets alias for used name.
29
+ *
30
+ * @param string $alias Alias to use (last component of full name by default)
31
+ *
32
+ * @return $this The builder instance (for fluid interface)
33
+ */
34
+ public function as(string $alias) {
35
+ $this->alias = $alias;
36
+ return $this;
37
+ }
38
+
39
+ /**
40
+ * Returns the built node.
41
+ *
42
+ * @return Node The built node
43
+ */
44
+ public function getNode() : Node {
45
+ return new Stmt\Use_([
46
+ new Stmt\UseUse($this->name, $this->alias)
47
+ ], $this->type);
48
+ }
49
+ }
vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php ADDED
@@ -0,0 +1,348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Arg;
6
+ use PhpParser\Node\Expr;
7
+ use PhpParser\Node\Expr\BinaryOp\Concat;
8
+ use PhpParser\Node\Identifier;
9
+ use PhpParser\Node\Name;
10
+ use PhpParser\Node\Scalar\String_;
11
+ use PhpParser\Node\Stmt\Use_;
12
+
13
+ class BuilderFactory
14
+ {
15
+ /**
16
+ * Creates a namespace builder.
17
+ *
18
+ * @param null|string|Node\Name $name Name of the namespace
19
+ *
20
+ * @return Builder\Namespace_ The created namespace builder
21
+ */
22
+ public function namespace($name) : Builder\Namespace_ {
23
+ return new Builder\Namespace_($name);
24
+ }
25
+
26
+ /**
27
+ * Creates a class builder.
28
+ *
29
+ * @param string $name Name of the class
30
+ *
31
+ * @return Builder\Class_ The created class builder
32
+ */
33
+ public function class(string $name) : Builder\Class_ {
34
+ return new Builder\Class_($name);
35
+ }
36
+
37
+ /**
38
+ * Creates an interface builder.
39
+ *
40
+ * @param string $name Name of the interface
41
+ *
42
+ * @return Builder\Interface_ The created interface builder
43
+ */
44
+ public function interface(string $name) : Builder\Interface_ {
45
+ return new Builder\Interface_($name);
46
+ }
47
+
48
+ /**
49
+ * Creates a trait builder.
50
+ *
51
+ * @param string $name Name of the trait
52
+ *
53
+ * @return Builder\Trait_ The created trait builder
54
+ */
55
+ public function trait(string $name) : Builder\Trait_ {
56
+ return new Builder\Trait_($name);
57
+ }
58
+
59
+ /**
60
+ * Creates a trait use builder.
61
+ *
62
+ * @param Node\Name|string ...$traits Trait names
63
+ *
64
+ * @return Builder\TraitUse The create trait use builder
65
+ */
66
+ public function useTrait(...$traits) : Builder\TraitUse {
67
+ return new Builder\TraitUse(...$traits);
68
+ }
69
+
70
+ /**
71
+ * Creates a trait use adaptation builder.
72
+ *
73
+ * @param Node\Name|string|null $trait Trait name
74
+ * @param Node\Identifier|string $method Method name
75
+ *
76
+ * @return Builder\TraitUseAdaptation The create trait use adaptation builder
77
+ */
78
+ public function traitUseAdaptation($trait, $method = null) : Builder\TraitUseAdaptation {
79
+ if ($method === null) {
80
+ $method = $trait;
81
+ $trait = null;
82
+ }
83
+
84
+ return new Builder\TraitUseAdaptation($trait, $method);
85
+ }
86
+
87
+ /**
88
+ * Creates a method builder.
89
+ *
90
+ * @param string $name Name of the method
91
+ *
92
+ * @return Builder\Method The created method builder
93
+ */
94
+ public function method(string $name) : Builder\Method {
95
+ return new Builder\Method($name);
96
+ }
97
+
98
+ /**
99
+ * Creates a parameter builder.
100
+ *
101
+ * @param string $name Name of the parameter
102
+ *
103
+ * @return Builder\Param The created parameter builder
104
+ */
105
+ public function param(string $name) : Builder\Param {
106
+ return new Builder\Param($name);
107
+ }
108
+
109
+ /**
110
+ * Creates a property builder.
111
+ *
112
+ * @param string $name Name of the property
113
+ *
114
+ * @return Builder\Property The created property builder
115
+ */
116
+ public function property(string $name) : Builder\Property {
117
+ return new Builder\Property($name);
118
+ }
119
+
120
+ /**
121
+ * Creates a function builder.
122
+ *
123
+ * @param string $name Name of the function
124
+ *
125
+ * @return Builder\Function_ The created function builder
126
+ */
127
+ public function function(string $name) : Builder\Function_ {
128
+ return new Builder\Function_($name);
129
+ }
130
+
131
+ /**
132
+ * Creates a namespace/class use builder.
133
+ *
134
+ * @param Node\Name|string $name Name of the entity (namespace or class) to alias
135
+ *
136
+ * @return Builder\Use_ The created use builder
137
+ */
138
+ public function use($name) : Builder\Use_ {
139
+ return new Builder\Use_($name, Use_::TYPE_NORMAL);
140
+ }
141
+
142
+ /**
143
+ * Creates a function use builder.
144
+ *
145
+ * @param Node\Name|string $name Name of the function to alias
146
+ *
147
+ * @return Builder\Use_ The created use function builder
148
+ */
149
+ public function useFunction($name) : Builder\Use_ {
150
+ return new Builder\Use_($name, Use_::TYPE_FUNCTION);
151
+ }
152
+
153
+ /**
154
+ * Creates a constant use builder.
155
+ *
156
+ * @param Node\Name|string $name Name of the const to alias
157
+ *
158
+ * @return Builder\Use_ The created use const builder
159
+ */
160
+ public function useConst($name) : Builder\Use_ {
161
+ return new Builder\Use_($name, Use_::TYPE_CONSTANT);
162
+ }
163
+
164
+ /**
165
+ * Creates node a for a literal value.
166
+ *
167
+ * @param Expr|bool|null|int|float|string|array $value $value
168
+ *
169
+ * @return Expr
170
+ */
171
+ public function val($value) : Expr {
172
+ return BuilderHelpers::normalizeValue($value);
173
+ }
174
+
175
+ /**
176
+ * Creates variable node.
177
+ *
178
+ * @param string|Expr $name Name
179
+ *
180
+ * @return Expr\Variable
181
+ */
182
+ public function var($name) : Expr\Variable {
183
+ if (!\is_string($name) && !$name instanceof Expr) {
184
+ throw new \LogicException('Variable name must be string or Expr');
185
+ }
186
+
187
+ return new Expr\Variable($name);
188
+ }
189
+
190
+ /**
191
+ * Normalizes an argument list.
192
+ *
193
+ * Creates Arg nodes for all arguments and converts literal values to expressions.
194
+ *
195
+ * @param array $args List of arguments to normalize
196
+ *
197
+ * @return Arg[]
198
+ */
199
+ public function args(array $args) : array {
200
+ $normalizedArgs = [];
201
+ foreach ($args as $arg) {
202
+ if ($arg instanceof Arg) {
203
+ $normalizedArgs[] = $arg;
204
+ } else {
205
+ $normalizedArgs[] = new Arg(BuilderHelpers::normalizeValue($arg));
206
+ }
207
+ }
208
+ return $normalizedArgs;
209
+ }
210
+
211
+ /**
212
+ * Creates a function call node.
213
+ *
214
+ * @param string|Name|Expr $name Function name
215
+ * @param array $args Function arguments
216
+ *
217
+ * @return Expr\FuncCall
218
+ */
219
+ public function funcCall($name, array $args = []) : Expr\FuncCall {
220
+ return new Expr\FuncCall(
221
+ BuilderHelpers::normalizeNameOrExpr($name),
222
+ $this->args($args)
223
+ );
224
+ }
225
+
226
+ /**
227
+ * Creates a method call node.
228
+ *
229
+ * @param Expr $var Variable the method is called on
230
+ * @param string|Identifier|Expr $name Method name
231
+ * @param array $args Method arguments
232
+ *
233
+ * @return Expr\MethodCall
234
+ */
235
+ public function methodCall(Expr $var, $name, array $args = []) : Expr\MethodCall {
236
+ return new Expr\MethodCall(
237
+ $var,
238
+ BuilderHelpers::normalizeIdentifierOrExpr($name),
239
+ $this->args($args)
240
+ );
241
+ }
242
+
243
+ /**
244
+ * Creates a static method call node.
245
+ *
246
+ * @param string|Name|Expr $class Class name
247
+ * @param string|Identifier|Expr $name Method name
248
+ * @param array $args Method arguments
249
+ *
250
+ * @return Expr\StaticCall
251
+ */
252
+ public function staticCall($class, $name, array $args = []) : Expr\StaticCall {
253
+ return new Expr\StaticCall(
254
+ BuilderHelpers::normalizeNameOrExpr($class),
255
+ BuilderHelpers::normalizeIdentifierOrExpr($name),
256
+ $this->args($args)
257
+ );
258
+ }
259
+
260
+ /**
261
+ * Creates an object creation node.
262
+ *
263
+ * @param string|Name|Expr $class Class name
264
+ * @param array $args Constructor arguments
265
+ *
266
+ * @return Expr\New_
267
+ */
268
+ public function new($class, array $args = []) : Expr\New_ {
269
+ return new Expr\New_(
270
+ BuilderHelpers::normalizeNameOrExpr($class),
271
+ $this->args($args)
272
+ );
273
+ }
274
+
275
+ /**
276
+ * Creates a constant fetch node.
277
+ *
278
+ * @param string|Name $name Constant name
279
+ *
280
+ * @return Expr\ConstFetch
281
+ */
282
+ public function constFetch($name) : Expr\ConstFetch {
283
+ return new Expr\ConstFetch(BuilderHelpers::normalizeName($name));
284
+ }
285
+
286
+ /**
287
+ * Creates a property fetch node.
288
+ *
289
+ * @param Expr $var Variable holding object
290
+ * @param string|Identifier|Expr $name Property name
291
+ *
292
+ * @return Expr\PropertyFetch
293
+ */
294
+ public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch {
295
+ return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name));
296
+ }
297
+
298
+ /**
299
+ * Creates a class constant fetch node.
300
+ *
301
+ * @param string|Name|Expr $class Class name
302
+ * @param string|Identifier $name Constant name
303
+ *
304
+ * @return Expr\ClassConstFetch
305
+ */
306
+ public function classConstFetch($class, $name): Expr\ClassConstFetch {
307
+ return new Expr\ClassConstFetch(
308
+ BuilderHelpers::normalizeNameOrExpr($class),
309
+ BuilderHelpers::normalizeIdentifier($name)
310
+ );
311
+ }
312
+
313
+ /**
314
+ * Creates nested Concat nodes from a list of expressions.
315
+ *
316
+ * @param Expr|string ...$exprs Expressions or literal strings
317
+ *
318
+ * @return Concat
319
+ */
320
+ public function concat(...$exprs) : Concat {
321
+ $numExprs = count($exprs);
322
+ if ($numExprs < 2) {
323
+ throw new \LogicException('Expected at least two expressions');
324
+ }
325
+
326
+ $lastConcat = $this->normalizeStringExpr($exprs[0]);
327
+ for ($i = 1; $i < $numExprs; $i++) {
328
+ $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i]));
329
+ }
330
+ return $lastConcat;
331
+ }
332
+
333
+ /**
334
+ * @param string|Expr $expr
335
+ * @return Expr
336
+ */
337
+ private function normalizeStringExpr($expr) : Expr {
338
+ if ($expr instanceof Expr) {
339
+ return $expr;
340
+ }
341
+
342
+ if (\is_string($expr)) {
343
+ return new String_($expr);
344
+ }
345
+
346
+ throw new \LogicException('Expected string or Expr');
347
+ }
348
+ }
vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php ADDED
@@ -0,0 +1,277 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Identifier;
7
+ use PhpParser\Node\Name;
8
+ use PhpParser\Node\NullableType;
9
+ use PhpParser\Node\Scalar;
10
+ use PhpParser\Node\Stmt;
11
+
12
+ /**
13
+ * This class defines helpers used in the implementation of builders. Don't use it directly.
14
+ *
15
+ * @internal
16
+ */
17
+ final class BuilderHelpers
18
+ {
19
+ /**
20
+ * Normalizes a node: Converts builder objects to nodes.
21
+ *
22
+ * @param Node|Builder $node The node to normalize
23
+ *
24
+ * @return Node The normalized node
25
+ */
26
+ public static function normalizeNode($node) : Node {
27
+ if ($node instanceof Builder) {
28
+ return $node->getNode();
29
+ } elseif ($node instanceof Node) {
30
+ return $node;
31
+ }
32
+
33
+ throw new \LogicException('Expected node or builder object');
34
+ }
35
+
36
+ /**
37
+ * Normalizes a node to a statement.
38
+ *
39
+ * Expressions are wrapped in a Stmt\Expression node.
40
+ *
41
+ * @param Node|Builder $node The node to normalize
42
+ *
43
+ * @return Stmt The normalized statement node
44
+ */
45
+ public static function normalizeStmt($node) : Stmt {
46
+ $node = self::normalizeNode($node);
47
+ if ($node instanceof Stmt) {
48
+ return $node;
49
+ }
50
+
51
+ if ($node instanceof Expr) {
52
+ return new Stmt\Expression($node);
53
+ }
54
+
55
+ throw new \LogicException('Expected statement or expression node');
56
+ }
57
+
58
+ /**
59
+ * Normalizes strings to Identifier.
60
+ *
61
+ * @param string|Identifier $name The identifier to normalize
62
+ *
63
+ * @return Identifier The normalized identifier
64
+ */
65
+ public static function normalizeIdentifier($name) : Identifier {
66
+ if ($name instanceof Identifier) {
67
+ return $name;
68
+ }
69
+
70
+ if (\is_string($name)) {
71
+ return new Identifier($name);
72
+ }
73
+
74
+ throw new \LogicException('Expected string or instance of Node\Identifier');
75
+ }
76
+
77
+ /**
78
+ * Normalizes strings to Identifier, also allowing expressions.
79
+ *
80
+ * @param string|Identifier|Expr $name The identifier to normalize
81
+ *
82
+ * @return Identifier|Expr The normalized identifier or expression
83
+ */
84
+ public static function normalizeIdentifierOrExpr($name) {
85
+ if ($name instanceof Identifier || $name instanceof Expr) {
86
+ return $name;
87
+ }
88
+
89
+ if (\is_string($name)) {
90
+ return new Identifier($name);
91
+ }
92
+
93
+ throw new \LogicException('Expected string or instance of Node\Identifier or Node\Expr');
94
+ }
95
+
96
+ /**
97
+ * Normalizes a name: Converts string names to Name nodes.
98
+ *
99
+ * @param Name|string $name The name to normalize
100
+ *
101
+ * @return Name The normalized name
102
+ */
103
+ public static function normalizeName($name) : Name {
104
+ return self::normalizeNameCommon($name, false);
105
+ }
106
+
107
+ /**
108
+ * Normalizes a name: Converts string names to Name nodes, while also allowing expressions.
109
+ *
110
+ * @param Expr|Name|string $name The name to normalize
111
+ *
112
+ * @return Name|Expr The normalized name or expression
113
+ */
114
+ public static function normalizeNameOrExpr($name) {
115
+ return self::normalizeNameCommon($name, true);
116
+ }
117
+
118
+ /**
119
+ * Normalizes a name: Converts string names to Name nodes, optionally allowing expressions.
120
+ *
121
+ * @param Expr|Name|string $name The name to normalize
122
+ * @param bool $allowExpr Whether to also allow expressions
123
+ *
124
+ * @return Name|Expr The normalized name, or expression (if allowed)
125
+ */
126
+ private static function normalizeNameCommon($name, bool $allowExpr) {
127
+ if ($name instanceof Name) {
128
+ return $name;
129
+ } elseif (is_string($name)) {
130
+ if (!$name) {
131
+ throw new \LogicException('Name cannot be empty');
132
+ }
133
+
134
+ if ($name[0] === '\\') {
135
+ return new Name\FullyQualified(substr($name, 1));
136
+ } elseif (0 === strpos($name, 'namespace\\')) {
137
+ return new Name\Relative(substr($name, strlen('namespace\\')));
138
+ } else {
139
+ return new Name($name);
140
+ }
141
+ }
142
+
143
+ if ($allowExpr) {
144
+ if ($name instanceof Expr) {
145
+ return $name;
146
+ }
147
+ throw new \LogicException(
148
+ 'Name must be a string or an instance of Node\Name or Node\Expr'
149
+ );
150
+ } else {
151
+ throw new \LogicException('Name must be a string or an instance of Node\Name');
152
+ }
153
+ }
154
+
155
+ /**
156
+ * Normalizes a type: Converts plain-text type names into proper AST representation.
157
+ *
158
+ * In particular, builtin types become Identifiers, custom types become Names and nullables
159
+ * are wrapped in NullableType nodes.
160
+ *
161
+ * @param string|Name|Identifier|NullableType $type The type to normalize
162
+ *
163
+ * @return Name|Identifier|NullableType The normalized type
164
+ */
165
+ public static function normalizeType($type) {
166
+ if (!is_string($type)) {
167
+ if (!$type instanceof Name && !$type instanceof Identifier
168
+ && !$type instanceof NullableType) {
169
+ throw new \LogicException(
170
+ 'Type must be a string, or an instance of Name, Identifier or NullableType');
171
+ }
172
+ return $type;
173
+ }
174
+
175
+ $nullable = false;
176
+ if (strlen($type) > 0 && $type[0] === '?') {
177
+ $nullable = true;
178
+ $type = substr($type, 1);
179
+ }
180
+
181
+ $builtinTypes = [
182
+ 'array', 'callable', 'string', 'int', 'float', 'bool', 'iterable', 'void', 'object'
183
+ ];
184
+
185
+ $lowerType = strtolower($type);
186
+ if (in_array($lowerType, $builtinTypes)) {
187
+ $type = new Identifier($lowerType);
188
+ } else {
189
+ $type = self::normalizeName($type);
190
+ }
191
+
192
+ if ($nullable && (string) $type === 'void') {
193
+ throw new \LogicException('void type cannot be nullable');
194
+ }
195
+
196
+ return $nullable ? new Node\NullableType($type) : $type;
197
+ }
198
+
199
+ /**
200
+ * Normalizes a value: Converts nulls, booleans, integers,
201
+ * floats, strings and arrays into their respective nodes
202
+ *
203
+ * @param Node\Expr|bool|null|int|float|string|array $value The value to normalize
204
+ *
205
+ * @return Expr The normalized value
206
+ */
207
+ public static function normalizeValue($value) : Expr {
208
+ if ($value instanceof Node\Expr) {
209
+ return $value;
210
+ } elseif (is_null($value)) {
211
+ return new Expr\ConstFetch(
212
+ new Name('null')
213
+ );
214
+ } elseif (is_bool($value)) {
215
+ return new Expr\ConstFetch(
216
+ new Name($value ? 'true' : 'false')
217
+ );
218
+ } elseif (is_int($value)) {
219
+ return new Scalar\LNumber($value);
220
+ } elseif (is_float($value)) {
221
+ return new Scalar\DNumber($value);
222
+ } elseif (is_string($value)) {
223
+ return new Scalar\String_($value);
224
+ } elseif (is_array($value)) {
225
+ $items = [];
226
+ $lastKey = -1;
227
+ foreach ($value as $itemKey => $itemValue) {
228
+ // for consecutive, numeric keys don't generate keys
229
+ if (null !== $lastKey && ++$lastKey === $itemKey) {
230
+ $items[] = new Expr\ArrayItem(
231
+ self::normalizeValue($itemValue)
232
+ );
233
+ } else {
234
+ $lastKey = null;
235
+ $items[] = new Expr\ArrayItem(
236
+ self::normalizeValue($itemValue),
237
+ self::normalizeValue($itemKey)
238
+ );
239
+ }
240
+ }
241
+
242
+ return new Expr\Array_($items);
243
+ } else {
244
+ throw new \LogicException('Invalid value');
245
+ }
246
+ }
247
+
248
+ /**
249
+ * Normalizes a doc comment: Converts plain strings to PhpParser\Comment\Doc.
250
+ *
251
+ * @param Comment\Doc|string $docComment The doc comment to normalize
252
+ *
253
+ * @return Comment\Doc The normalized doc comment
254
+ */
255
+ public static function normalizeDocComment($docComment) : Comment\Doc {
256
+ if ($docComment instanceof Comment\Doc) {
257
+ return $docComment;
258
+ } elseif (is_string($docComment)) {
259
+ return new Comment\Doc($docComment);
260
+ } else {
261
+ throw new \LogicException('Doc comment must be a string or an instance of PhpParser\Comment\Doc');
262
+ }
263
+ }
264
+
265
+ /**
266
+ * Adds a modifier and returns new modifier bitmask.
267
+ *
268
+ * @param int $modifiers Existing modifiers
269
+ * @param int $modifier Modifier to set
270
+ *
271
+ * @return int New modifiers
272
+ */
273
+ public static function addModifier(int $modifiers, int $modifier) : int {
274
+ Stmt\Class_::verifyModifier($modifiers, $modifier);
275
+ return $modifiers | $modifier;
276
+ }
277
+ }
vendor/nikic/php-parser/lib/PhpParser/Comment.php ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class Comment implements \JsonSerializable
6
+ {
7
+ protected $text;
8
+ protected $line;
9
+ protected $filePos;
10
+ protected $tokenPos;
11
+
12
+ /**
13
+ * Constructs a comment node.
14
+ *
15
+ * @param string $text Comment text (including comment delimiters like /*)
16
+ * @param int $startLine Line number the comment started on
17
+ * @param int $startFilePos File offset the comment started on
18
+ * @param int $startTokenPos Token offset the comment started on
19
+ */
20
+ public function __construct(
21
+ string $text, int $startLine = -1, int $startFilePos = -1, int $startTokenPos = -1
22
+ ) {
23
+ $this->text = $text;
24
+ $this->line = $startLine;
25
+ $this->filePos = $startFilePos;
26
+ $this->tokenPos = $startTokenPos;
27
+ }
28
+
29
+ /**
30
+ * Gets the comment text.
31
+ *
32
+ * @return string The comment text (including comment delimiters like /*)
33
+ */
34
+ public function getText() : string {
35
+ return $this->text;
36
+ }
37
+
38
+ /**
39
+ * Gets the line number the comment started on.
40
+ *
41
+ * @return int Line number
42
+ */
43
+ public function getLine() : int {
44
+ return $this->line;
45
+ }
46
+
47
+ /**
48
+ * Gets the file offset the comment started on.
49
+ *
50
+ * @return int File offset
51
+ */
52
+ public function getFilePos() : int {
53
+ return $this->filePos;
54
+ }
55
+
56
+ /**
57
+ * Gets the token offset the comment started on.
58
+ *
59
+ * @return int Token offset
60
+ */
61
+ public function getTokenPos() : int {
62
+ return $this->tokenPos;
63
+ }
64
+
65
+ /**
66
+ * Gets the comment text.
67
+ *
68
+ * @return string The comment text (including comment delimiters like /*)
69
+ */
70
+ public function __toString() : string {
71
+ return $this->text;
72
+ }
73
+
74
+ /**
75
+ * Gets the reformatted comment text.
76
+ *
77
+ * "Reformatted" here means that we try to clean up the whitespace at the
78
+ * starts of the lines. This is necessary because we receive the comments
79
+ * without trailing whitespace on the first line, but with trailing whitespace
80
+ * on all subsequent lines.
81
+ *
82
+ * @return mixed|string
83
+ */
84
+ public function getReformattedText() {
85
+ $text = trim($this->text);
86
+ $newlinePos = strpos($text, "\n");
87
+ if (false === $newlinePos) {
88
+ // Single line comments don't need further processing
89
+ return $text;
90
+ } elseif (preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\R\s+\*.*)+$)', $text)) {
91
+ // Multi line comment of the type
92
+ //
93
+ // /*
94
+ // * Some text.
95
+ // * Some more text.
96
+ // */
97
+ //
98
+ // is handled by replacing the whitespace sequences before the * by a single space
99
+ return preg_replace('(^\s+\*)m', ' *', $this->text);
100
+ } elseif (preg_match('(^/\*\*?\s*[\r\n])', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) {
101
+ // Multi line comment of the type
102
+ //
103
+ // /*
104
+ // Some text.
105
+ // Some more text.
106
+ // */
107
+ //
108
+ // is handled by removing the whitespace sequence on the line before the closing
109
+ // */ on all lines. So if the last line is " */", then " " is removed at the
110
+ // start of all lines.
111
+ return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text);
112
+ } elseif (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) {
113
+ // Multi line comment of the type
114
+ //
115
+ // /* Some text.
116
+ // Some more text.
117
+ // Indented text.
118
+ // Even more text. */
119
+ //
120
+ // is handled by removing the difference between the shortest whitespace prefix on all
121
+ // lines and the length of the "/* " opening sequence.
122
+ $prefixLen = $this->getShortestWhitespacePrefixLen(substr($text, $newlinePos + 1));
123
+ $removeLen = $prefixLen - strlen($matches[0]);
124
+ return preg_replace('(^\s{' . $removeLen . '})m', '', $text);
125
+ }
126
+
127
+ // No idea how to format this comment, so simply return as is
128
+ return $text;
129
+ }
130
+
131
+ /**
132
+ * Get length of shortest whitespace prefix (at the start of a line).
133
+ *
134
+ * If there is a line with no prefix whitespace, 0 is a valid return value.
135
+ *
136
+ * @param string $str String to check
137
+ * @return int Length in characters. Tabs count as single characters.
138
+ */
139
+ private function getShortestWhitespacePrefixLen(string $str) : int {
140
+ $lines = explode("\n", $str);
141
+ $shortestPrefixLen = \INF;
142
+ foreach ($lines as $line) {
143
+ preg_match('(^\s*)', $line, $matches);
144
+ $prefixLen = strlen($matches[0]);
145
+ if ($prefixLen < $shortestPrefixLen) {
146
+ $shortestPrefixLen = $prefixLen;
147
+ }
148
+ }
149
+ return $shortestPrefixLen;
150
+ }
151
+
152
+ /**
153
+ * @return array
154
+ * @psalm-return array{nodeType:string, text:mixed, line:mixed, filePos:mixed}
155
+ */
156
+ public function jsonSerialize() : array {
157
+ // Technically not a node, but we make it look like one anyway
158
+ $type = $this instanceof Comment\Doc ? 'Comment_Doc' : 'Comment';
159
+ return [
160
+ 'nodeType' => $type,
161
+ 'text' => $this->text,
162
+ 'line' => $this->line,
163
+ 'filePos' => $this->filePos,
164
+ 'tokenPos' => $this->tokenPos,
165
+ ];
166
+ }
167
+ }
vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Comment;
4
+
5
+ class Doc extends \PhpParser\Comment
6
+ {
7
+ }
vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PhpParser;
4
+
5
+ class ConstExprEvaluationException extends \Exception
6
+ {}
vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Scalar;
7
+
8
+ /**
9
+ * Evaluates constant expressions.
10
+ *
11
+ * This evaluator is able to evaluate all constant expressions (as defined by PHP), which can be
12
+ * evaluated without further context. If a subexpression is not of this type, a user-provided
13
+ * fallback evaluator is invoked. To support all constant expressions that are also supported by
14
+ * PHP (and not already handled by this class), the fallback evaluator must be able to handle the
15
+ * following node types:
16
+ *
17
+ * * All Scalar\MagicConst\* nodes.
18
+ * * Expr\ConstFetch nodes. Only null/false/true are already handled by this class.
19
+ * * Expr\ClassConstFetch nodes.
20
+ *
21
+ * The fallback evaluator should throw ConstExprEvaluationException for nodes it cannot evaluate.
22
+ *
23
+ * The evaluation is dependent on runtime configuration in two respects: Firstly, floating
24
+ * point to string conversions are affected by the precision ini setting. Secondly, they are also
25
+ * affected by the LC_NUMERIC locale.
26
+ */
27
+ class ConstExprEvaluator
28
+ {
29
+ private $fallbackEvaluator;
30
+
31
+ /**
32
+ * Create a constant expression evaluator.
33
+ *
34
+ * The provided fallback evaluator is invoked whenever a subexpression cannot be evaluated. See
35
+ * class doc comment for more information.
36
+ *
37
+ * @param callable|null $fallbackEvaluator To call if subexpression cannot be evaluated
38
+ */
39
+ public function __construct(callable $fallbackEvaluator = null) {
40
+ $this->fallbackEvaluator = $fallbackEvaluator ?? function(Expr $expr) {
41
+ throw new ConstExprEvaluationException(
42
+ "Expression of type {$expr->getType()} cannot be evaluated"
43
+ );
44
+ };
45
+ }
46
+
47
+ /**
48
+ * Silently evaluates a constant expression into a PHP value.
49
+ *
50
+ * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException.
51
+ * The original source of the exception is available through getPrevious().
52
+ *
53
+ * If some part of the expression cannot be evaluated, the fallback evaluator passed to the
54
+ * constructor will be invoked. By default, if no fallback is provided, an exception of type
55
+ * ConstExprEvaluationException is thrown.
56
+ *
57
+ * See class doc comment for caveats and limitations.
58
+ *
59
+ * @param Expr $expr Constant expression to evaluate
60
+ * @return mixed Result of evaluation
61
+ *
62
+ * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred
63
+ */
64
+ public function evaluateSilently(Expr $expr) {
65
+ set_error_handler(function($num, $str, $file, $line) {
66
+ throw new \ErrorException($str, 0, $num, $file, $line);
67
+ });
68
+
69
+ try {
70
+ return $this->evaluate($expr);
71
+ } catch (\Throwable $e) {
72
+ if (!$e instanceof ConstExprEvaluationException) {
73
+ $e = new ConstExprEvaluationException(
74
+ "An error occurred during constant expression evaluation", 0, $e);
75
+ }
76
+ throw $e;
77
+ } finally {
78
+ restore_error_handler();
79
+ }
80
+ }
81
+
82
+ /**
83
+ * Directly evaluates a constant expression into a PHP value.
84
+ *
85
+ * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these
86
+ * into a ConstExprEvaluationException.
87
+ *
88
+ * If some part of the expression cannot be evaluated, the fallback evaluator passed to the
89
+ * constructor will be invoked. By default, if no fallback is provided, an exception of type
90
+ * ConstExprEvaluationException is thrown.
91
+ *
92
+ * See class doc comment for caveats and limitations.
93
+ *
94
+ * @param Expr $expr Constant expression to evaluate
95
+ * @return mixed Result of evaluation
96
+ *
97
+ * @throws ConstExprEvaluationException if the expression cannot be evaluated
98
+ */
99
+ public function evaluateDirectly(Expr $expr) {
100
+ return $this->evaluate($expr);
101
+ }
102
+
103
+ private function evaluate(Expr $expr) {
104
+ if ($expr instanceof Scalar\LNumber
105
+ || $expr instanceof Scalar\DNumber
106
+ || $expr instanceof Scalar\String_
107
+ ) {
108
+ return $expr->value;
109
+ }
110
+
111
+ if ($expr instanceof Expr\Array_) {
112
+ return $this->evaluateArray($expr);
113
+ }
114
+
115
+ // Unary operators
116
+ if ($expr instanceof Expr\UnaryPlus) {
117
+ return +$this->evaluate($expr->expr);
118
+ }
119
+ if ($expr instanceof Expr\UnaryMinus) {
120
+ return -$this->evaluate($expr->expr);
121
+ }
122
+ if ($expr instanceof Expr\BooleanNot) {
123
+ return !$this->evaluate($expr->expr);
124
+ }
125
+ if ($expr instanceof Expr\BitwiseNot) {
126
+ return ~$this->evaluate($expr->expr);
127
+ }
128
+
129
+ if ($expr instanceof Expr\BinaryOp) {
130
+ return $this->evaluateBinaryOp($expr);
131
+ }
132
+
133
+ if ($expr instanceof Expr\Ternary) {
134
+ return $this->evaluateTernary($expr);
135
+ }
136
+
137
+ if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) {
138
+ return $this->evaluate($expr->var)[$this->evaluate($expr->dim)];
139
+ }
140
+
141
+ if ($expr instanceof Expr\ConstFetch) {
142
+ return $this->evaluateConstFetch($expr);
143
+ }
144
+
145
+ return ($this->fallbackEvaluator)($expr);
146
+ }
147
+
148
+ private function evaluateArray(Expr\Array_ $expr) {
149
+ $array = [];
150
+ foreach ($expr->items as $item) {
151
+ if (null !== $item->key) {
152
+ $array[$this->evaluate($item->key)] = $this->evaluate($item->value);
153
+ } else {
154
+ $array[] = $this->evaluate($item->value);
155
+ }
156
+ }
157
+ return $array;
158
+ }
159
+
160
+ private function evaluateTernary(Expr\Ternary $expr) {
161
+ if (null === $expr->if) {
162
+ return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else);
163
+ }
164
+
165
+ return $this->evaluate($expr->cond)
166
+ ? $this->evaluate($expr->if)
167
+ : $this->evaluate($expr->else);
168
+ }
169
+
170
+ private function evaluateBinaryOp(Expr\BinaryOp $expr) {
171
+ if ($expr instanceof Expr\BinaryOp\Coalesce
172
+ && $expr->left instanceof Expr\ArrayDimFetch
173
+ ) {
174
+ // This needs to be special cased to respect BP_VAR_IS fetch semantics
175
+ return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)]
176
+ ?? $this->evaluate($expr->right);
177
+ }
178
+
179
+ // The evaluate() calls are repeated in each branch, because some of the operators are
180
+ // short-circuiting and evaluating the RHS in advance may be illegal in that case
181
+ $l = $expr->left;
182
+ $r = $expr->right;
183
+ switch ($expr->getOperatorSigil()) {
184
+ case '&': return $this->evaluate($l) & $this->evaluate($r);
185
+ case '|': return $this->evaluate($l) | $this->evaluate($r);
186
+ case '^': return $this->evaluate($l) ^ $this->evaluate($r);
187
+ case '&&': return $this->evaluate($l) && $this->evaluate($r);
188
+ case '||': return $this->evaluate($l) || $this->evaluate($r);
189
+ case '??': return $this->evaluate($l) ?? $this->evaluate($r);
190
+ case '.': return $this->evaluate($l) . $this->evaluate($r);
191
+ case '/': return $this->evaluate($l) / $this->evaluate($r);
192
+ case '==': return $this->evaluate($l) == $this->evaluate($r);
193
+ case '>': return $this->evaluate($l) > $this->evaluate($r);
194
+ case '>=': return $this->evaluate($l) >= $this->evaluate($r);
195
+ case '===': return $this->evaluate($l) === $this->evaluate($r);
196
+ case 'and': return $this->evaluate($l) and $this->evaluate($r);
197
+ case 'or': return $this->evaluate($l) or $this->evaluate($r);
198
+ case 'xor': return $this->evaluate($l) xor $this->evaluate($r);
199
+ case '-': return $this->evaluate($l) - $this->evaluate($r);
200
+ case '%': return $this->evaluate($l) % $this->evaluate($r);
201
+ case '*': return $this->evaluate($l) * $this->evaluate($r);
202
+ case '!=': return $this->evaluate($l) != $this->evaluate($r);
203
+ case '!==': return $this->evaluate($l) !== $this->evaluate($r);
204
+ case '+': return $this->evaluate($l) + $this->evaluate($r);
205
+ case '**': return $this->evaluate($l) ** $this->evaluate($r);
206
+ case '<<': return $this->evaluate($l) << $this->evaluate($r);
207
+ case '>>': return $this->evaluate($l) >> $this->evaluate($r);
208
+ case '<': return $this->evaluate($l) < $this->evaluate($r);
209
+ case '<=': return $this->evaluate($l) <= $this->evaluate($r);
210
+ case '<=>': return $this->evaluate($l) <=> $this->evaluate($r);
211
+ }
212
+
213
+ throw new \Exception('Should not happen');
214
+ }
215
+
216
+ private function evaluateConstFetch(Expr\ConstFetch $expr) {
217
+ $name = $expr->name->toLowerString();
218
+ switch ($name) {
219
+ case 'null': return null;
220
+ case 'false': return false;
221
+ case 'true': return true;
222
+ }
223
+
224
+ return ($this->fallbackEvaluator)($expr);
225
+ }
226
+ }
vendor/nikic/php-parser/lib/PhpParser/Error.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class Error extends \RuntimeException
6
+ {
7
+ protected $rawMessage;
8
+ protected $attributes;
9
+
10
+ /**
11
+ * Creates an Exception signifying a parse error.
12
+ *
13
+ * @param string $message Error message
14
+ * @param array|int $attributes Attributes of node/token where error occurred
15
+ * (or start line of error -- deprecated)
16
+ */
17
+ public function __construct(string $message, $attributes = []) {
18
+ $this->rawMessage = $message;
19
+ if (is_array($attributes)) {
20
+ $this->attributes = $attributes;
21
+ } else {
22
+ $this->attributes = ['startLine' => $attributes];
23
+ }
24
+ $this->updateMessage();
25
+ }
26
+
27
+ /**
28
+ * Gets the error message
29
+ *
30
+ * @return string Error message
31
+ */
32
+ public function getRawMessage() : string {
33
+ return $this->rawMessage;
34
+ }
35
+
36
+ /**
37
+ * Gets the line the error starts in.
38
+ *
39
+ * @return int Error start line
40
+ */
41
+ public function getStartLine() : int {
42
+ return $this->attributes['startLine'] ?? -1;
43
+ }
44
+
45
+ /**
46
+ * Gets the line the error ends in.
47
+ *
48
+ * @return int Error end line
49
+ */
50
+ public function getEndLine() : int {
51
+ return $this->attributes['endLine'] ?? -1;
52
+ }
53
+
54
+ /**
55
+ * Gets the attributes of the node/token the error occurred at.
56
+ *
57
+ * @return array
58
+ */
59
+ public function getAttributes() : array {
60
+ return $this->attributes;
61
+ }
62
+
63
+ /**
64
+ * Sets the attributes of the node/token the error occurred at.
65
+ *
66
+ * @param array $attributes
67
+ */
68
+ public function setAttributes(array $attributes) {
69
+ $this->attributes = $attributes;
70
+ $this->updateMessage();
71
+ }
72
+
73
+ /**
74
+ * Sets the line of the PHP file the error occurred in.
75
+ *
76
+ * @param string $message Error message
77
+ */
78
+ public function setRawMessage(string $message) {
79
+ $this->rawMessage = $message;
80
+ $this->updateMessage();
81
+ }
82
+
83
+ /**
84
+ * Sets the line the error starts in.
85
+ *
86
+ * @param int $line Error start line
87
+ */
88
+ public function setStartLine(int $line) {
89
+ $this->attributes['startLine'] = $line;
90
+ $this->updateMessage();
91
+ }
92
+
93
+ /**
94
+ * Returns whether the error has start and end column information.
95
+ *
96
+ * For column information enable the startFilePos and endFilePos in the lexer options.
97
+ *
98
+ * @return bool
99
+ */
100
+ public function hasColumnInfo() : bool {
101
+ return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']);
102
+ }
103
+
104
+ /**
105
+ * Gets the start column (1-based) into the line where the error started.
106
+ *
107
+ * @param string $code Source code of the file
108
+ * @return int
109
+ */
110
+ public function getStartColumn(string $code) : int {
111
+ if (!$this->hasColumnInfo()) {
112
+ throw new \RuntimeException('Error does not have column information');
113
+ }
114
+
115
+ return $this->toColumn($code, $this->attributes['startFilePos']);
116
+ }
117
+
118
+ /**
119
+ * Gets the end column (1-based) into the line where the error ended.
120
+ *
121
+ * @param string $code Source code of the file
122
+ * @return int
123
+ */
124
+ public function getEndColumn(string $code) : int {
125
+ if (!$this->hasColumnInfo()) {
126
+ throw new \RuntimeException('Error does not have column information');
127
+ }
128
+
129
+ return $this->toColumn($code, $this->attributes['endFilePos']);
130
+ }
131
+
132
+ /**
133
+ * Formats message including line and column information.
134
+ *
135
+ * @param string $code Source code associated with the error, for calculation of the columns
136
+ *
137
+ * @return string Formatted message
138
+ */
139
+ public function getMessageWithColumnInfo(string $code) : string {
140
+ return sprintf(
141
+ '%s from %d:%d to %d:%d', $this->getRawMessage(),
142
+ $this->getStartLine(), $this->getStartColumn($code),
143
+ $this->getEndLine(), $this->getEndColumn($code)
144
+ );
145
+ }
146
+
147
+ /**
148
+ * Converts a file offset into a column.
149
+ *
150
+ * @param string $code Source code that $pos indexes into
151
+ * @param int $pos 0-based position in $code
152
+ *
153
+ * @return int 1-based column (relative to start of line)
154
+ */
155
+ private function toColumn(string $code, int $pos) : int {
156
+ if ($pos > strlen($code)) {
157
+ throw new \RuntimeException('Invalid position information');
158
+ }
159
+
160
+ $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
161
+ if (false === $lineStartPos) {
162
+ $lineStartPos = -1;
163
+ }
164
+
165
+ return $pos - $lineStartPos;
166
+ }
167
+
168
+ /**
169
+ * Updates the exception message after a change to rawMessage or rawLine.
170
+ */
171
+ protected function updateMessage() {
172
+ $this->message = $this->rawMessage;
173
+
174
+ if (-1 === $this->getStartLine()) {
175
+ $this->message .= ' on unknown line';
176
+ } else {
177
+ $this->message .= ' on line ' . $this->getStartLine();
178
+ }
179
+ }
180
+ }
vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface ErrorHandler
6
+ {
7
+ /**
8
+ * Handle an error generated during lexing, parsing or some other operation.
9
+ *
10
+ * @param Error $error The error that needs to be handled
11
+ */
12
+ public function handleError(Error $error);
13
+ }
vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\ErrorHandler;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\ErrorHandler;
7
+
8
+ /**
9
+ * Error handler that collects all errors into an array.
10
+ *
11
+ * This allows graceful handling of errors.
12
+ */
13
+ class Collecting implements ErrorHandler
14
+ {
15
+ /** @var Error[] Collected errors */
16
+ private $errors = [];
17
+
18
+ public function handleError(Error $error) {
19
+ $this->errors[] = $error;
20
+ }
21
+
22
+ /**
23
+ * Get collected errors.
24
+ *
25
+ * @return Error[]
26
+ */
27
+ public function getErrors() : array {
28
+ return $this->errors;
29
+ }
30
+
31
+ /**
32
+ * Check whether there are any errors.
33
+ *
34
+ * @return bool
35
+ */
36
+ public function hasErrors() : bool {
37
+ return !empty($this->errors);
38
+ }
39
+
40
+ /**
41
+ * Reset/clear collected errors.
42
+ */
43
+ public function clearErrors() {
44
+ $this->errors = [];
45
+ }
46
+ }
vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\ErrorHandler;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\ErrorHandler;
7
+
8
+ /**
9
+ * Error handler that handles all errors by throwing them.
10
+ *
11
+ * This is the default strategy used by all components.
12
+ */
13
+ class Throwing implements ErrorHandler
14
+ {
15
+ public function handleError(Error $error) {
16
+ throw $error;
17
+ }
18
+ }
vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Internal;
4
+
5
+ /**
6
+ * @internal
7
+ */
8
+ class DiffElem
9
+ {
10
+ const TYPE_KEEP = 0;
11
+ const TYPE_REMOVE = 1;
12
+ const TYPE_ADD = 2;
13
+ const TYPE_REPLACE = 3;
14
+
15
+ /** @var int One of the TYPE_* constants */
16
+ public $type;
17
+ /** @var mixed Is null for add operations */
18
+ public $old;
19
+ /** @var mixed Is null for remove operations */
20
+ public $new;
21
+
22
+ public function __construct(int $type, $old, $new) {
23
+ $this->type = $type;
24
+ $this->old = $old;
25
+ $this->new = $new;
26
+ }
27
+ }
vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php ADDED
@@ -0,0 +1,164 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Internal;
4
+
5
+ /**
6
+ * Implements the Myers diff algorithm.
7
+ *
8
+ * Myers, Eugene W. "An O (ND) difference algorithm and its variations."
9
+ * Algorithmica 1.1 (1986): 251-266.
10
+ *
11
+ * @internal
12
+ */
13
+ class Differ
14
+ {
15
+ private $isEqual;
16
+
17
+ /**
18
+ * Create differ over the given equality relation.
19
+ *
20
+ * @param callable $isEqual Equality relation with signature function($a, $b) : bool
21
+ */
22
+ public function __construct(callable $isEqual) {
23
+ $this->isEqual = $isEqual;
24
+ }
25
+
26
+ /**
27
+ * Calculate diff (edit script) from $old to $new.
28
+ *
29
+ * @param array $old Original array
30
+ * @param array $new New array
31
+ *
32
+ * @return DiffElem[] Diff (edit script)
33
+ */
34
+ public function diff(array $old, array $new) {
35
+ list($trace, $x, $y) = $this->calculateTrace($old, $new);
36
+ return $this->extractDiff($trace, $x, $y, $old, $new);
37
+ }
38
+
39
+ /**
40
+ * Calculate diff, including "replace" operations.
41
+ *
42
+ * If a sequence of remove operations is followed by the same number of add operations, these
43
+ * will be coalesced into replace operations.
44
+ *
45
+ * @param array $old Original array
46
+ * @param array $new New array
47
+ *
48
+ * @return DiffElem[] Diff (edit script), including replace operations
49
+ */
50
+ public function diffWithReplacements(array $old, array $new) {
51
+ return $this->coalesceReplacements($this->diff($old, $new));
52
+ }
53
+
54
+ private function calculateTrace(array $a, array $b) {
55
+ $n = \count($a);
56
+ $m = \count($b);
57
+ $max = $n + $m;
58
+ $v = [1 => 0];
59
+ $trace = [];
60
+ for ($d = 0; $d <= $max; $d++) {
61
+ $trace[] = $v;
62
+ for ($k = -$d; $k <= $d; $k += 2) {
63
+ if ($k === -$d || ($k !== $d && $v[$k-1] < $v[$k+1])) {
64
+ $x = $v[$k+1];
65
+ } else {
66
+ $x = $v[$k-1] + 1;
67
+ }
68
+
69
+ $y = $x - $k;
70
+ while ($x < $n && $y < $m && ($this->isEqual)($a[$x], $b[$y])) {
71
+ $x++;
72
+ $y++;
73
+ }
74
+
75
+ $v[$k] = $x;
76
+ if ($x >= $n && $y >= $m) {
77
+ return [$trace, $x, $y];
78
+ }
79
+ }
80
+ }
81
+ throw new \Exception('Should not happen');
82
+ }
83
+
84
+ private function extractDiff(array $trace, int $x, int $y, array $a, array $b) {
85
+ $result = [];
86
+ for ($d = \count($trace) - 1; $d >= 0; $d--) {
87
+ $v = $trace[$d];
88
+ $k = $x - $y;
89
+
90
+ if ($k === -$d || ($k !== $d && $v[$k-1] < $v[$k+1])) {
91
+ $prevK = $k + 1;
92
+ } else {
93
+ $prevK = $k - 1;
94
+ }
95
+
96
+ $prevX = $v[$prevK];
97
+ $prevY = $prevX - $prevK;
98
+
99
+ while ($x > $prevX && $y > $prevY) {
100
+ $result[] = new DiffElem(DiffElem::TYPE_KEEP, $a[$x-1], $b[$y-1]);
101
+ $x--;
102
+ $y--;
103
+ }
104
+
105
+ if ($d === 0) {
106
+ break;
107
+ }
108
+
109
+ while ($x > $prevX) {
110
+ $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $a[$x-1], null);
111
+ $x--;
112
+ }
113
+
114
+ while ($y > $prevY) {
115
+ $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $b[$y-1]);
116
+ $y--;
117
+ }
118
+ }
119
+ return array_reverse($result);
120
+ }
121
+
122
+ /**
123
+ * Coalesce equal-length sequences of remove+add into a replace operation.
124
+ *
125
+ * @param DiffElem[] $diff
126
+ * @return DiffElem[]
127
+ */
128
+ private function coalesceReplacements(array $diff) {
129
+ $newDiff = [];
130
+ $c = \count($diff);
131
+ for ($i = 0; $i < $c; $i++) {
132
+ $diffType = $diff[$i]->type;
133
+ if ($diffType !== DiffElem::TYPE_REMOVE) {
134
+ $newDiff[] = $diff[$i];
135
+ continue;
136
+ }
137
+
138
+ $j = $i;
139
+ while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) {
140
+ $j++;
141
+ }
142
+
143
+ $k = $j;
144
+ while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) {
145
+ $k++;
146
+ }
147
+
148
+ if ($j - $i === $k - $j) {
149
+ $len = $j - $i;
150
+ for ($n = 0; $n < $len; $n++) {
151
+ $newDiff[] = new DiffElem(
152
+ DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new
153
+ );
154
+ }
155
+ } else {
156
+ for (; $i < $k; $i++) {
157
+ $newDiff[] = $diff[$i];
158
+ }
159
+ }
160
+ $i = $k - 1;
161
+ }
162
+ return $newDiff;
163
+ }
164
+ }
vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Internal;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+
8
+ /**
9
+ * This node is used internally by the format-preserving pretty printer to print anonymous classes.
10
+ *
11
+ * The normal anonymous class structure violates assumptions about the order of token offsets.
12
+ * Namely, the constructor arguments are part of the Expr\New_ node and follow the class node, even
13
+ * though they are actually interleaved with them. This special node type is used temporarily to
14
+ * restore a sane token offset order.
15
+ *
16
+ * @internal
17
+ */
18
+ class PrintableNewAnonClassNode extends Expr
19
+ {
20
+ /** @var Node\Arg[] Arguments */
21
+ public $args;
22
+ /** @var null|Node\Name Name of extended class */
23
+ public $extends;
24
+ /** @var Node\Name[] Names of implemented interfaces */
25
+ public $implements;
26
+ /** @var Node\Stmt[] Statements */
27
+ public $stmts;
28
+
29
+ public function __construct(
30
+ array $args, Node\Name $extends = null, array $implements, array $stmts, array $attributes
31
+ ) {
32
+ parent::__construct($attributes);
33
+ $this->args = $args;
34
+ $this->extends = $extends;
35
+ $this->implements = $implements;
36
+ $this->stmts = $stmts;
37
+ }
38
+
39
+ public static function fromNewNode(Expr\New_ $newNode) {
40
+ $class = $newNode->class;
41
+ assert($class instanceof Node\Stmt\Class_);
42
+ // We don't assert that $class->name is null here, to allow consumers to assign unique names
43
+ // to anonymous classes for their own purposes. We simplify ignore the name here.
44
+ return new self(
45
+ $newNode->args, $class->extends, $class->implements,
46
+ $class->stmts, $newNode->getAttributes()
47
+ );
48
+ }
49
+
50
+ public function getType() : string {
51
+ return 'Expr_PrintableNewAnonClass';
52
+ }
53
+
54
+ public function getSubNodeNames() : array {
55
+ return ['args', 'extends', 'implements', 'stmts'];
56
+ }
57
+ }
vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php ADDED
@@ -0,0 +1,256 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Internal;
4
+
5
+ /**
6
+ * Provides operations on token streams, for use by pretty printer.
7
+ *
8
+ * @internal
9
+ */
10
+ class TokenStream
11
+ {
12
+ /** @var array Tokens (in token_get_all format) */
13
+ private $tokens;
14
+ /** @var int[] Map from position to indentation */
15
+ private $indentMap;
16
+
17
+ /**
18
+ * Create token stream instance.
19
+ *
20
+ * @param array $tokens Tokens in token_get_all() format
21
+ */
22
+ public function __construct(array $tokens) {
23
+ $this->tokens = $tokens;
24
+ $this->indentMap = $this->calcIndentMap();
25
+ }
26
+
27
+ /**
28
+ * Whether the given position is immediately surrounded by parenthesis.
29
+ *
30
+ * @param int $startPos Start position
31
+ * @param int $endPos End position
32
+ *
33
+ * @return bool
34
+ */
35
+ public function haveParens(int $startPos, int $endPos) : bool {
36
+ return $this->haveTokenImmediativelyBefore($startPos, '(')
37
+ && $this->haveTokenImmediatelyAfter($endPos, ')');
38
+ }
39
+
40
+ /**
41
+ * Whether the given position is immediately surrounded by braces.
42
+ *
43
+ * @param int $startPos Start position
44
+ * @param int $endPos End position
45
+ *
46
+ * @return bool
47
+ */
48
+ public function haveBraces(int $startPos, int $endPos) : bool {
49
+ return $this->haveTokenImmediativelyBefore($startPos, '{')
50
+ && $this->haveTokenImmediatelyAfter($endPos, '}');
51
+ }
52
+
53
+ /**
54
+ * Check whether the position is directly preceded by a certain token type.
55
+ *
56
+ * During this check whitespace and comments are skipped.
57
+ *
58
+ * @param int $pos Position before which the token should occur
59
+ * @param int|string $expectedTokenType Token to check for
60
+ *
61
+ * @return bool Whether the expected token was found
62
+ */
63
+ public function haveTokenImmediativelyBefore(int $pos, $expectedTokenType) : bool {
64
+ $tokens = $this->tokens;
65
+ $pos--;
66
+ for (; $pos >= 0; $pos--) {
67
+ $tokenType = $tokens[$pos][0];
68
+ if ($tokenType === $expectedTokenType) {
69
+ return true;
70
+ }
71
+ if ($tokenType !== \T_WHITESPACE
72
+ && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) {
73
+ break;
74
+ }
75
+ }
76
+ return false;
77
+ }
78
+
79
+ /**
80
+ * Check whether the position is directly followed by a certain token type.
81
+ *
82
+ * During this check whitespace and comments are skipped.
83
+ *
84
+ * @param int $pos Position after which the token should occur
85
+ * @param int|string $expectedTokenType Token to check for
86
+ *
87
+ * @return bool Whether the expected token was found
88
+ */
89
+ public function haveTokenImmediatelyAfter(int $pos, $expectedTokenType) : bool {
90
+ $tokens = $this->tokens;
91
+ $pos++;
92
+ for (; $pos < \count($tokens); $pos++) {
93
+ $tokenType = $tokens[$pos][0];
94
+ if ($tokenType === $expectedTokenType) {
95
+ return true;
96
+ }
97
+ if ($tokenType !== \T_WHITESPACE
98
+ && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) {
99
+ break;
100
+ }
101
+ }
102
+ return false;
103
+ }
104
+
105
+ public function skipLeft(int $pos, $skipTokenType) {
106
+ $tokens = $this->tokens;
107
+
108
+ $pos = $this->skipLeftWhitespace($pos);
109
+ if ($skipTokenType === \T_WHITESPACE) {
110
+ return $pos;
111
+ }
112
+
113
+ if ($tokens[$pos][0] !== $skipTokenType) {
114
+ // Shouldn't happen. The skip token MUST be there
115
+ throw new \Exception('Encountered unexpected token');
116
+ }
117
+ $pos--;
118
+
119
+ return $this->skipLeftWhitespace($pos);
120
+ }
121
+
122
+ public function skipRight(int $pos, $skipTokenType) {
123
+ $tokens = $this->tokens;
124
+
125
+ $pos = $this->skipRightWhitespace($pos);
126
+ if ($skipTokenType === \T_WHITESPACE) {
127
+ return $pos;
128
+ }
129
+
130
+ if ($tokens[$pos][0] !== $skipTokenType) {
131
+ // Shouldn't happen. The skip token MUST be there
132
+ throw new \Exception('Encountered unexpected token');
133
+ }
134
+ $pos++;
135
+
136
+ return $this->skipRightWhitespace($pos);
137
+ }
138
+
139
+ /**
140
+ * Return first non-whitespace token position smaller or equal to passed position.
141
+ *
142
+ * @param int $pos Token position
143
+ * @return int Non-whitespace token position
144
+ */
145
+ public function skipLeftWhitespace(int $pos) {
146
+ $tokens = $this->tokens;
147
+ for (; $pos >= 0; $pos--) {
148
+ $type = $tokens[$pos][0];
149
+ if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) {
150
+ break;
151
+ }
152
+ }
153
+ return $pos;
154
+ }
155
+
156
+ /**
157
+ * Return first non-whitespace position greater or equal to passed position.
158
+ *
159
+ * @param int $pos Token position
160
+ * @return int Non-whitespace token position
161
+ */
162
+ public function skipRightWhitespace(int $pos) {
163
+ $tokens = $this->tokens;
164
+ for ($count = \count($tokens); $pos < $count; $pos++) {
165
+ $type = $tokens[$pos][0];
166
+ if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) {
167
+ break;
168
+ }
169
+ }
170
+ return $pos;
171
+ }
172
+
173
+ public function findRight($pos, $findTokenType) {
174
+ $tokens = $this->tokens;
175
+ for ($count = \count($tokens); $pos < $count; $pos++) {
176
+ $type = $tokens[$pos][0];
177
+ if ($type === $findTokenType) {
178
+ return $pos;
179
+ }
180
+ }
181
+ return -1;
182
+ }
183
+
184
+ /**
185
+ * Get indentation before token position.
186
+ *
187
+ * @param int $pos Token position
188
+ *
189
+ * @return int Indentation depth (in spaces)
190
+ */
191
+ public function getIndentationBefore(int $pos) : int {
192
+ return $this->indentMap[$pos];
193
+ }
194
+
195
+ /**
196
+ * Get the code corresponding to a token offset range, optionally adjusted for indentation.
197
+ *
198
+ * @param int $from Token start position (inclusive)
199
+ * @param int $to Token end position (exclusive)
200
+ * @param int $indent By how much the code should be indented (can be negative as well)
201
+ *
202
+ * @return string Code corresponding to token range, adjusted for indentation
203
+ */
204
+ public function getTokenCode(int $from, int $to, int $indent) : string {
205
+ $tokens = $this->tokens;
206
+ $result = '';
207
+ for ($pos = $from; $pos < $to; $pos++) {
208
+ $token = $tokens[$pos];
209
+ if (\is_array($token)) {
210
+ $type = $token[0];
211
+ $content = $token[1];
212
+ if ($type === \T_CONSTANT_ENCAPSED_STRING || $type === \T_ENCAPSED_AND_WHITESPACE) {
213
+ $result .= $content;
214
+ } else {
215
+ // TODO Handle non-space indentation
216
+ if ($indent < 0) {
217
+ $result .= str_replace("\n" . str_repeat(" ", -$indent), "\n", $content);
218
+ } elseif ($indent > 0) {
219
+ $result .= str_replace("\n", "\n" . str_repeat(" ", $indent), $content);
220
+ } else {
221
+ $result .= $content;
222
+ }
223
+ }
224
+ } else {
225
+ $result .= $token;
226
+ }
227
+ }
228
+ return $result;
229
+ }
230
+
231
+ /**
232
+ * Precalculate the indentation at every token position.
233
+ *
234
+ * @return int[] Token position to indentation map
235
+ */
236
+ private function calcIndentMap() {
237
+ $indentMap = [];
238
+ $indent = 0;
239
+ foreach ($this->tokens as $token) {
240
+ $indentMap[] = $indent;
241
+
242
+ if ($token[0] === \T_WHITESPACE) {
243
+ $content = $token[1];
244
+ $newlinePos = \strrpos($content, "\n");
245
+ if (false !== $newlinePos) {
246
+ $indent = \strlen($content) - $newlinePos - 1;
247
+ }
248
+ }
249
+ }
250
+
251
+ // Add a sentinel for one past end of the file
252
+ $indentMap[] = $indent;
253
+
254
+ return $indentMap;
255
+ }
256
+ }
vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class JsonDecoder
6
+ {
7
+ /** @var \ReflectionClass[] Node type to reflection class map */
8
+ private $reflectionClassCache;
9
+
10
+ public function decode(string $json) {
11
+ $value = json_decode($json, true);
12
+ if (json_last_error()) {
13
+ throw new \RuntimeException('JSON decoding error: ' . json_last_error_msg());
14
+ }
15
+
16
+ return $this->decodeRecursive($value);
17
+ }
18
+
19
+ private function decodeRecursive($value) {
20
+ if (\is_array($value)) {
21
+ if (isset($value['nodeType'])) {
22
+ if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') {
23
+ return $this->decodeComment($value);
24
+ }
25
+ return $this->decodeNode($value);
26
+ }
27
+ return $this->decodeArray($value);
28
+ }
29
+ return $value;
30
+ }
31
+
32
+ private function decodeArray(array $array) : array {
33
+ $decodedArray = [];
34
+ foreach ($array as $key => $value) {
35
+ $decodedArray[$key] = $this->decodeRecursive($value);
36
+ }
37
+ return $decodedArray;
38
+ }
39
+
40
+ private function decodeNode(array $value) : Node {
41
+ $nodeType = $value['nodeType'];
42
+ if (!\is_string($nodeType)) {
43
+ throw new \RuntimeException('Node type must be a string');
44
+ }
45
+
46
+ $reflectionClass = $this->reflectionClassFromNodeType($nodeType);
47
+ /** @var Node $node */
48
+ $node = $reflectionClass->newInstanceWithoutConstructor();
49
+
50
+ if (isset($value['attributes'])) {
51
+ if (!\is_array($value['attributes'])) {
52
+ throw new \RuntimeException('Attributes must be an array');
53
+ }
54
+
55
+ $node->setAttributes($this->decodeArray($value['attributes']));
56
+ }
57
+
58
+ foreach ($value as $name => $subNode) {
59
+ if ($name === 'nodeType' || $name === 'attributes') {
60
+ continue;
61
+ }
62
+
63
+ $node->$name = $this->decodeRecursive($subNode);
64
+ }
65
+
66
+ return $node;
67
+ }
68
+
69
+ private function decodeComment(array $value) : Comment {
70
+ $className = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class;
71
+ if (!isset($value['text'])) {
72
+ throw new \RuntimeException('Comment must have text');
73
+ }
74
+
75
+ return new $className(
76
+ $value['text'], $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1
77
+ );
78
+ }
79
+
80
+ private function reflectionClassFromNodeType(string $nodeType) : \ReflectionClass {
81
+ if (!isset($this->reflectionClassCache[$nodeType])) {
82
+ $className = $this->classNameFromNodeType($nodeType);
83
+ $this->reflectionClassCache[$nodeType] = new \ReflectionClass($className);
84
+ }
85
+ return $this->reflectionClassCache[$nodeType];
86
+ }
87
+
88
+ private function classNameFromNodeType(string $nodeType) : string {
89
+ $className = 'PhpParser\\Node\\' . strtr($nodeType, '_', '\\');
90
+ if (class_exists($className)) {
91
+ return $className;
92
+ }
93
+
94
+ $className .= '_';
95
+ if (class_exists($className)) {
96
+ return $className;
97
+ }
98
+
99
+ throw new \RuntimeException("Unknown node type \"$nodeType\"");
100
+ }
101
+ }
vendor/nikic/php-parser/lib/PhpParser/Lexer.php ADDED
@@ -0,0 +1,416 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Parser\Tokens;
6
+
7
+ class Lexer
8
+ {
9
+ protected $code;
10
+ protected $tokens;
11
+ protected $pos;
12
+ protected $line;
13
+ protected $filePos;
14
+ protected $prevCloseTagHasNewline;
15
+
16
+ protected $tokenMap;
17
+ protected $dropTokens;
18
+
19
+ private $attributeStartLineUsed;
20
+ private $attributeEndLineUsed;
21
+ private $attributeStartTokenPosUsed;
22
+ private $attributeEndTokenPosUsed;
23
+ private $attributeStartFilePosUsed;
24
+ private $attributeEndFilePosUsed;
25
+ private $attributeCommentsUsed;
26
+
27
+ /**
28
+ * Creates a Lexer.
29
+ *
30
+ * @param array $options Options array. Currently only the 'usedAttributes' option is supported,
31
+ * which is an array of attributes to add to the AST nodes. Possible
32
+ * attributes are: 'comments', 'startLine', 'endLine', 'startTokenPos',
33
+ * 'endTokenPos', 'startFilePos', 'endFilePos'. The option defaults to the
34
+ * first three. For more info see getNextToken() docs.
35
+ */
36
+ public function __construct(array $options = []) {
37
+ // map from internal tokens to PhpParser tokens
38
+ $this->tokenMap = $this->createTokenMap();
39
+
40
+ // Compatibility define for PHP < 7.4
41
+ if (!defined('T_BAD_CHARACTER')) {
42
+ \define('T_BAD_CHARACTER', -1);
43
+ }
44
+
45
+ // map of tokens to drop while lexing (the map is only used for isset lookup,
46
+ // that's why the value is simply set to 1; the value is never actually used.)
47
+ $this->dropTokens = array_fill_keys(
48
+ [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], 1
49
+ );
50
+
51
+ $defaultAttributes = ['comments', 'startLine', 'endLine'];
52
+ $usedAttributes = array_fill_keys($options['usedAttributes'] ?? $defaultAttributes, true);
53
+
54
+ // Create individual boolean properties to make these checks faster.
55
+ $this->attributeStartLineUsed = isset($usedAttributes['startLine']);
56
+ $this->attributeEndLineUsed = isset($usedAttributes['endLine']);
57
+ $this->attributeStartTokenPosUsed = isset($usedAttributes['startTokenPos']);
58
+ $this->attributeEndTokenPosUsed = isset($usedAttributes['endTokenPos']);
59
+ $this->attributeStartFilePosUsed = isset($usedAttributes['startFilePos']);
60
+ $this->attributeEndFilePosUsed = isset($usedAttributes['endFilePos']);
61
+ $this->attributeCommentsUsed = isset($usedAttributes['comments']);
62
+ }
63
+
64
+ /**
65
+ * Initializes the lexer for lexing the provided source code.
66
+ *
67
+ * This function does not throw if lexing errors occur. Instead, errors may be retrieved using
68
+ * the getErrors() method.
69
+ *
70
+ * @param string $code The source code to lex
71
+ * @param ErrorHandler|null $errorHandler Error handler to use for lexing errors. Defaults to
72
+ * ErrorHandler\Throwing
73
+ */
74
+ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
75
+ if (null === $errorHandler) {
76
+ $errorHandler = new ErrorHandler\Throwing();
77
+ }
78
+
79
+ $this->code = $code; // keep the code around for __halt_compiler() handling
80
+ $this->pos = -1;
81
+ $this->line = 1;
82
+ $this->filePos = 0;
83
+
84
+ // If inline HTML occurs without preceding code, treat it as if it had a leading newline.
85
+ // This ensures proper composability, because having a newline is the "safe" assumption.
86
+ $this->prevCloseTagHasNewline = true;
87
+
88
+ $scream = ini_set('xdebug.scream', '0');
89
+
90
+ error_clear_last();
91
+ $this->tokens = @token_get_all($code);
92
+ $this->handleErrors($errorHandler);
93
+
94
+ if (false !== $scream) {
95
+ ini_set('xdebug.scream', $scream);
96
+ }
97
+ }
98
+
99
+ private function handleInvalidCharacterRange($start, $end, $line, ErrorHandler $errorHandler) {
100
+ $tokens = [];
101
+ for ($i = $start; $i < $end; $i++) {
102
+ $chr = $this->code[$i];
103
+ if ($chr === "\0") {
104
+ // PHP cuts error message after null byte, so need special case
105
+ $errorMsg = 'Unexpected null byte';
106
+ } else {
107
+ $errorMsg = sprintf(
108
+ 'Unexpected character "%s" (ASCII %d)', $chr, ord($chr)
109
+ );
110
+ }
111
+
112
+ $tokens[] = [\T_BAD_CHARACTER, $chr, $line];
113
+ $errorHandler->handleError(new Error($errorMsg, [
114
+ 'startLine' => $line,
115
+ 'endLine' => $line,
116
+ 'startFilePos' => $i,
117
+ 'endFilePos' => $i,
118
+ ]));
119
+ }
120
+ return $tokens;
121
+ }
122
+
123
+ /**
124
+ * Check whether comment token is unterminated.
125
+ *
126
+ * @return bool
127
+ */
128
+ private function isUnterminatedComment($token) : bool {
129
+ return ($token[0] === \T_COMMENT || $token[0] === \T_DOC_COMMENT)
130
+ && substr($token[1], 0, 2) === '/*'
131
+ && substr($token[1], -2) !== '*/';
132
+ }
133
+
134
+ /**
135
+ * Check whether an error *may* have occurred during tokenization.
136
+ *
137
+ * @return bool
138
+ */
139
+ private function errorMayHaveOccurred() : bool {
140
+ if (defined('HHVM_VERSION')) {
141
+ // In HHVM token_get_all() does not throw warnings, so we need to conservatively
142
+ // assume that an error occurred
143
+ return true;
144
+ }
145
+
146
+ if (PHP_VERSION_ID >= 80000) {
147
+ // PHP 8 converts the "bad character" case into a parse error, rather than treating
148
+ // it as a lexing warning. To preserve previous behavior, we need to assume that an
149
+ // error occurred.
150
+ // TODO: We should handle this the same way as PHP 8: Only generate T_BAD_CHARACTER
151
+ // token here (for older PHP versions) and leave generationg of the actual parse error
152
+ // to the parser. This will also save the full token scan on PHP 8 here.
153
+ return true;
154
+ }
155
+
156
+ return null !== error_get_last();
157
+ }
158
+
159
+ protected function handleErrors(ErrorHandler $errorHandler) {
160
+ if (!$this->errorMayHaveOccurred()) {
161
+ return;
162
+ }
163
+
164
+ // PHP's error handling for token_get_all() is rather bad, so if we want detailed
165
+ // error information we need to compute it ourselves. Invalid character errors are
166
+ // detected by finding "gaps" in the token array. Unterminated comments are detected
167
+ // by checking if a trailing comment has a "*/" at the end.
168
+
169
+ $filePos = 0;
170
+ $line = 1;
171
+ $numTokens = \count($this->tokens);
172
+ for ($i = 0; $i < $numTokens; $i++) {
173
+ $token = $this->tokens[$i];
174
+
175
+ // Since PHP 7.4 invalid characters are represented by a T_BAD_CHARACTER token.
176
+ // In this case we only need to emit an error.
177
+ if ($token[0] === \T_BAD_CHARACTER) {
178
+ $this->handleInvalidCharacterRange($filePos, $filePos + 1, $line, $errorHandler);
179
+ }
180
+
181
+ $tokenValue = \is_string($token) ? $token : $token[1];
182
+ $tokenLen = \strlen($tokenValue);
183
+
184
+ if (substr($this->code, $filePos, $tokenLen) !== $tokenValue) {
185
+ // Something is missing, must be an invalid character
186
+ $nextFilePos = strpos($this->code, $tokenValue, $filePos);
187
+ $badCharTokens = $this->handleInvalidCharacterRange(
188
+ $filePos, $nextFilePos, $line, $errorHandler);
189
+ $filePos = (int) $nextFilePos;
190
+
191
+ array_splice($this->tokens, $i, 0, $badCharTokens);
192
+ $numTokens += \count($badCharTokens);
193
+ $i += \count($badCharTokens);
194
+ }
195
+
196
+ $filePos += $tokenLen;
197
+ $line += substr_count($tokenValue, "\n");
198
+ }
199
+
200
+ if ($filePos !== \strlen($this->code)) {
201
+ if (substr($this->code, $filePos, 2) === '/*') {
202
+ // Unlike PHP, HHVM will drop unterminated comments entirely
203
+ $comment = substr($this->code, $filePos);
204
+ $errorHandler->handleError(new Error('Unterminated comment', [
205
+ 'startLine' => $line,
206
+ 'endLine' => $line + substr_count($comment, "\n"),
207
+ 'startFilePos' => $filePos,
208
+ 'endFilePos' => $filePos + \strlen($comment),
209
+ ]));
210
+
211
+ // Emulate the PHP behavior
212
+ $isDocComment = isset($comment[3]) && $comment[3] === '*';
213
+ $this->tokens[] = [$isDocComment ? \T_DOC_COMMENT : \T_COMMENT, $comment, $line];
214
+ } else {
215
+ // Invalid characters at the end of the input
216
+ $badCharTokens = $this->handleInvalidCharacterRange(
217
+ $filePos, \strlen($this->code), $line, $errorHandler);
218
+ $this->tokens = array_merge($this->tokens, $badCharTokens);
219
+ }
220
+ return;
221
+ }
222
+
223
+ if (count($this->tokens) > 0) {
224
+ // Check for unterminated comment
225
+ $lastToken = $this->tokens[count($this->tokens) - 1];
226
+ if ($this->isUnterminatedComment($lastToken)) {
227
+ $errorHandler->handleError(new Error('Unterminated comment', [
228
+ 'startLine' => $line - substr_count($lastToken[1], "\n"),
229
+ 'endLine' => $line,
230
+ 'startFilePos' => $filePos - \strlen($lastToken[1]),
231
+ 'endFilePos' => $filePos,
232
+ ]));
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Fetches the next token.
239
+ *
240
+ * The available attributes are determined by the 'usedAttributes' option, which can
241
+ * be specified in the constructor. The following attributes are supported:
242
+ *
243
+ * * 'comments' => Array of PhpParser\Comment or PhpParser\Comment\Doc instances,
244
+ * representing all comments that occurred between the previous
245
+ * non-discarded token and the current one.
246
+ * * 'startLine' => Line in which the node starts.
247
+ * * 'endLine' => Line in which the node ends.
248
+ * * 'startTokenPos' => Offset into the token array of the first token in the node.
249
+ * * 'endTokenPos' => Offset into the token array of the last token in the node.
250
+ * * 'startFilePos' => Offset into the code string of the first character that is part of the node.
251
+ * * 'endFilePos' => Offset into the code string of the last character that is part of the node.
252
+ *
253
+ * @param mixed $value Variable to store token content in
254
+ * @param mixed $startAttributes Variable to store start attributes in
255
+ * @param mixed $endAttributes Variable to store end attributes in
256
+ *
257
+ * @return int Token id
258
+ */
259
+ public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int {
260
+ $startAttributes = [];
261
+ $endAttributes = [];
262
+
263
+ while (1) {
264
+ if (isset($this->tokens[++$this->pos])) {
265
+ $token = $this->tokens[$this->pos];
266
+ } else {
267
+ // EOF token with ID 0
268
+ $token = "\0";
269
+ }
270
+
271
+ if ($this->attributeStartLineUsed) {
272
+ $startAttributes['startLine'] = $this->line;
273
+ }
274
+ if ($this->attributeStartTokenPosUsed) {
275
+ $startAttributes['startTokenPos'] = $this->pos;
276
+ }
277
+ if ($this->attributeStartFilePosUsed) {
278
+ $startAttributes['startFilePos'] = $this->filePos;
279
+ }
280
+
281
+ if (\is_string($token)) {
282
+ $value = $token;
283
+ if (isset($token[1])) {
284
+ // bug in token_get_all
285
+ $this->filePos += 2;
286
+ $id = ord('"');
287
+ } else {
288
+ $this->filePos += 1;
289
+ $id = ord($token);
290
+ }
291
+ } elseif (!isset($this->dropTokens[$token[0]])) {
292
+ $value = $token[1];
293
+ $id = $this->tokenMap[$token[0]];
294
+ if (\T_CLOSE_TAG === $token[0]) {
295
+ $this->prevCloseTagHasNewline = false !== strpos($token[1], "\n");
296
+ } elseif (\T_INLINE_HTML === $token[0]) {
297
+ $startAttributes['hasLeadingNewline'] = $this->prevCloseTagHasNewline;
298
+ }
299
+
300
+ $this->line += substr_count($value, "\n");
301
+ $this->filePos += \strlen($value);
302
+ } else {
303
+ if (\T_COMMENT === $token[0] || \T_DOC_COMMENT === $token[0]) {
304
+ if ($this->attributeCommentsUsed) {
305
+ $comment = \T_DOC_COMMENT === $token[0]
306
+ ? new Comment\Doc($token[1], $this->line, $this->filePos, $this->pos)
307
+ : new Comment($token[1], $this->line, $this->filePos, $this->pos);
308
+ $startAttributes['comments'][] = $comment;
309
+ }
310
+ }
311
+
312
+ $this->line += substr_count($token[1], "\n");
313
+ $this->filePos += \strlen($token[1]);
314
+ continue;
315
+ }
316
+
317
+ if ($this->attributeEndLineUsed) {
318
+ $endAttributes['endLine'] = $this->line;
319
+ }
320
+ if ($this->attributeEndTokenPosUsed) {
321
+ $endAttributes['endTokenPos'] = $this->pos;
322
+ }
323
+ if ($this->attributeEndFilePosUsed) {
324
+ $endAttributes['endFilePos'] = $this->filePos - 1;
325
+ }
326
+
327
+ return $id;
328
+ }
329
+
330
+ throw new \RuntimeException('Reached end of lexer loop');
331
+ }
332
+
333
+ /**
334
+ * Returns the token array for current code.
335
+ *
336
+ * The token array is in the same format as provided by the
337
+ * token_get_all() function and does not discard tokens (i.e.
338
+ * whitespace and comments are included). The token position
339
+ * attributes are against this token array.
340
+ *
341
+ * @return array Array of tokens in token_get_all() format
342
+ */
343
+ public function getTokens() : array {
344
+ return $this->tokens;
345
+ }
346
+
347
+ /**
348
+ * Handles __halt_compiler() by returning the text after it.
349
+ *
350
+ * @return string Remaining text
351
+ */
352
+ public function handleHaltCompiler() : string {
353
+ // text after T_HALT_COMPILER, still including ();
354
+ $textAfter = substr($this->code, $this->filePos);
355
+
356
+ // ensure that it is followed by ();
357
+ // this simplifies the situation, by not allowing any comments
358
+ // in between of the tokens.
359
+ if (!preg_match('~^\s*\(\s*\)\s*(?:;|\?>\r?\n?)~', $textAfter, $matches)) {
360
+ throw new Error('__HALT_COMPILER must be followed by "();"');
361
+ }
362
+
363
+ // prevent the lexer from returning any further tokens
364
+ $this->pos = count($this->tokens);
365
+
366
+ // return with (); removed
367
+ return substr($textAfter, strlen($matches[0]));
368
+ }
369
+
370
+ /**
371
+ * Creates the token map.
372
+ *
373
+ * The token map maps the PHP internal token identifiers
374
+ * to the identifiers used by the Parser. Additionally it
375
+ * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'.
376
+ *
377
+ * @return array The token map
378
+ */
379
+ protected function createTokenMap() : array {
380
+ $tokenMap = [];
381
+
382
+ // 256 is the minimum possible token number, as everything below
383
+ // it is an ASCII value
384
+ for ($i = 256; $i < 1000; ++$i) {
385
+ if (\T_DOUBLE_COLON === $i) {
386
+ // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM
387
+ $tokenMap[$i] = Tokens::T_PAAMAYIM_NEKUDOTAYIM;
388
+ } elseif(\T_OPEN_TAG_WITH_ECHO === $i) {
389
+ // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO
390
+ $tokenMap[$i] = Tokens::T_ECHO;
391
+ } elseif(\T_CLOSE_TAG === $i) {
392
+ // T_CLOSE_TAG is equivalent to ';'
393
+ $tokenMap[$i] = ord(';');
394
+ } elseif ('UNKNOWN' !== $name = token_name($i)) {
395
+ if ('T_HASHBANG' === $name) {
396
+ // HHVM uses a special token for #! hashbang lines
397
+ $tokenMap[$i] = Tokens::T_INLINE_HTML;
398
+ } elseif (defined($name = Tokens::class . '::' . $name)) {
399
+ // Other tokens can be mapped directly
400
+ $tokenMap[$i] = constant($name);
401
+ }
402
+ }
403
+ }
404
+
405
+ // HHVM uses a special token for numbers that overflow to double
406
+ if (defined('T_ONUMBER')) {
407
+ $tokenMap[\T_ONUMBER] = Tokens::T_DNUMBER;
408
+ }
409
+ // HHVM also has a separate token for the __COMPILER_HALT_OFFSET__ constant
410
+ if (defined('T_COMPILER_HALT_OFFSET')) {
411
+ $tokenMap[\T_COMPILER_HALT_OFFSET] = Tokens::T_STRING;
412
+ }
413
+
414
+ return $tokenMap;
415
+ }
416
+ }
vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php ADDED
@@ -0,0 +1,250 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\ErrorHandler;
7
+ use PhpParser\Lexer;
8
+ use PhpParser\Lexer\TokenEmulator\CoaleseEqualTokenEmulator;
9
+ use PhpParser\Lexer\TokenEmulator\FnTokenEmulator;
10
+ use PhpParser\Lexer\TokenEmulator\NumericLiteralSeparatorEmulator;
11
+ use PhpParser\Lexer\TokenEmulator\TokenEmulatorInterface;
12
+ use PhpParser\Parser\Tokens;
13
+
14
+ class Emulative extends Lexer
15
+ {
16
+ const PHP_7_3 = '7.3.0dev';
17
+ const PHP_7_4 = '7.4.0dev';
18
+
19
+ const T_COALESCE_EQUAL = 1007;
20
+ const T_FN = 1008;
21
+
22
+ const FLEXIBLE_DOC_STRING_REGEX = <<<'REGEX'
23
+ /<<<[ \t]*(['"]?)([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)\1\r?\n
24
+ (?:.*\r?\n)*?
25
+ (?<indentation>\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?<separator>(?:;?[\r\n])?)/x
26
+ REGEX;
27
+
28
+ /** @var mixed[] Patches used to reverse changes introduced in the code */
29
+ private $patches = [];
30
+
31
+ /** @var TokenEmulatorInterface[] */
32
+ private $tokenEmulators = [];
33
+
34
+ /**
35
+ * @param mixed[] $options
36
+ */
37
+ public function __construct(array $options = [])
38
+ {
39
+ parent::__construct($options);
40
+
41
+ $this->tokenEmulators[] = new FnTokenEmulator();
42
+ $this->tokenEmulators[] = new CoaleseEqualTokenEmulator();
43
+ $this->tokenEmulators[] = new NumericLiteralSeparatorEmulator();
44
+
45
+ $this->tokenMap[self::T_COALESCE_EQUAL] = Tokens::T_COALESCE_EQUAL;
46
+ $this->tokenMap[self::T_FN] = Tokens::T_FN;
47
+ }
48
+
49
+ public function startLexing(string $code, ErrorHandler $errorHandler = null) {
50
+ $this->patches = [];
51
+
52
+ if ($this->isEmulationNeeded($code) === false) {
53
+ // Nothing to emulate, yay
54
+ parent::startLexing($code, $errorHandler);
55
+ return;
56
+ }
57
+
58
+ $collector = new ErrorHandler\Collecting();
59
+
60
+ // 1. emulation of heredoc and nowdoc new syntax
61
+ $preparedCode = $this->processHeredocNowdoc($code);
62
+ parent::startLexing($preparedCode, $collector);
63
+ $this->fixupTokens();
64
+
65
+ $errors = $collector->getErrors();
66
+ if (!empty($errors)) {
67
+ $this->fixupErrors($errors);
68
+ foreach ($errors as $error) {
69
+ $errorHandler->handleError($error);
70
+ }
71
+ }
72
+
73
+ // add token emulation
74
+ foreach ($this->tokenEmulators as $emulativeToken) {
75
+ if ($emulativeToken->isEmulationNeeded($code)) {
76
+ $this->tokens = $emulativeToken->emulate($code, $this->tokens);
77
+ }
78
+ }
79
+ }
80
+
81
+ private function isHeredocNowdocEmulationNeeded(string $code): bool
82
+ {
83
+ // skip version where this works without emulation
84
+ if (version_compare(\PHP_VERSION, self::PHP_7_3, '>=')) {
85
+ return false;
86
+ }
87
+
88
+ return strpos($code, '<<<') !== false;
89
+ }
90
+
91
+ private function processHeredocNowdoc(string $code): string
92
+ {
93
+ if ($this->isHeredocNowdocEmulationNeeded($code) === false) {
94
+ return $code;
95
+ }
96
+
97
+ if (!preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, PREG_SET_ORDER|PREG_OFFSET_CAPTURE)) {
98
+ // No heredoc/nowdoc found
99
+ return $code;
100
+ }
101
+
102
+ // Keep track of how much we need to adjust string offsets due to the modifications we
103
+ // already made
104
+ $posDelta = 0;
105
+ foreach ($matches as $match) {
106
+ $indentation = $match['indentation'][0];
107
+ $indentationStart = $match['indentation'][1];
108
+
109
+ $separator = $match['separator'][0];
110
+ $separatorStart = $match['separator'][1];
111
+
112
+ if ($indentation === '' && $separator !== '') {
113
+ // Ordinary heredoc/nowdoc
114
+ continue;
115
+ }
116
+
117
+ if ($indentation !== '') {
118
+ // Remove indentation
119
+ $indentationLen = strlen($indentation);
120
+ $code = substr_replace($code, '', $indentationStart + $posDelta, $indentationLen);
121
+ $this->patches[] = [$indentationStart + $posDelta, 'add', $indentation];
122
+ $posDelta -= $indentationLen;
123
+ }
124
+
125
+ if ($separator === '') {
126
+ // Insert newline as separator
127
+ $code = substr_replace($code, "\n", $separatorStart + $posDelta, 0);
128
+ $this->patches[] = [$separatorStart + $posDelta, 'remove', "\n"];
129
+ $posDelta += 1;
130
+ }
131
+ }
132
+
133
+ return $code;
134
+ }
135
+
136
+ private function isEmulationNeeded(string $code): bool
137
+ {
138
+ foreach ($this->tokenEmulators as $emulativeToken) {
139
+ if ($emulativeToken->isEmulationNeeded($code)) {
140
+ return true;
141
+ }
142
+ }
143
+
144
+ return $this->isHeredocNowdocEmulationNeeded($code);
145
+ }
146
+
147
+ private function fixupTokens()
148
+ {
149
+ if (\count($this->patches) === 0) {
150
+ return;
151
+ }
152
+
153
+ // Load first patch
154
+ $patchIdx = 0;
155
+
156
+ list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx];
157
+
158
+ // We use a manual loop over the tokens, because we modify the array on the fly
159
+ $pos = 0;
160
+ for ($i = 0, $c = \count($this->tokens); $i < $c; $i++) {
161
+ $token = $this->tokens[$i];
162
+ if (\is_string($token)) {
163
+ // We assume that patches don't apply to string tokens
164
+ $pos += \strlen($token);
165
+ continue;
166
+ }
167
+
168
+ $len = \strlen($token[1]);
169
+ $posDelta = 0;
170
+ while ($patchPos >= $pos && $patchPos < $pos + $len) {
171
+ $patchTextLen = \strlen($patchText);
172
+ if ($patchType === 'remove') {
173
+ if ($patchPos === $pos && $patchTextLen === $len) {
174
+ // Remove token entirely
175
+ array_splice($this->tokens, $i, 1, []);
176
+ $i--;
177
+ $c--;
178
+ } else {
179
+ // Remove from token string
180
+ $this->tokens[$i][1] = substr_replace(
181
+ $token[1], '', $patchPos - $pos + $posDelta, $patchTextLen
182
+ );
183
+ $posDelta -= $patchTextLen;
184
+ }
185
+ } elseif ($patchType === 'add') {
186
+ // Insert into the token string
187
+ $this->tokens[$i][1] = substr_replace(
188
+ $token[1], $patchText, $patchPos - $pos + $posDelta, 0
189
+ );
190
+ $posDelta += $patchTextLen;
191
+ } else {
192
+ assert(false);
193
+ }
194
+
195
+ // Fetch the next patch
196
+ $patchIdx++;
197
+ if ($patchIdx >= \count($this->patches)) {
198
+ // No more patches, we're done
199
+ return;
200
+ }
201
+
202
+ list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx];
203
+
204
+ // Multiple patches may apply to the same token. Reload the current one to check
205
+ // If the new patch applies
206
+ $token = $this->tokens[$i];
207
+ }
208
+
209
+ $pos += $len;
210
+ }
211
+
212
+ // A patch did not apply
213
+ assert(false);
214
+ }
215
+
216
+ /**
217
+ * Fixup line and position information in errors.
218
+ *
219
+ * @param Error[] $errors
220
+ */
221
+ private function fixupErrors(array $errors) {
222
+ foreach ($errors as $error) {
223
+ $attrs = $error->getAttributes();
224
+
225
+ $posDelta = 0;
226
+ $lineDelta = 0;
227
+ foreach ($this->patches as $patch) {
228
+ list($patchPos, $patchType, $patchText) = $patch;
229
+ if ($patchPos >= $attrs['startFilePos']) {
230
+ // No longer relevant
231
+ break;
232
+ }
233
+
234
+ if ($patchType === 'add') {
235
+ $posDelta += strlen($patchText);
236
+ $lineDelta += substr_count($patchText, "\n");
237
+ } else {
238
+ $posDelta -= strlen($patchText);
239
+ $lineDelta -= substr_count($patchText, "\n");
240
+ }
241
+ }
242
+
243
+ $attrs['startFilePos'] += $posDelta;
244
+ $attrs['endFilePos'] += $posDelta;
245
+ $attrs['startLine'] += $lineDelta;
246
+ $attrs['endLine'] += $lineDelta;
247
+ $error->setAttributes($attrs);
248
+ }
249
+ }
250
+ }
vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class CoaleseEqualTokenEmulator implements TokenEmulatorInterface
8
+ {
9
+ public function isEmulationNeeded(string $code) : bool
10
+ {
11
+ // skip version where this is supported
12
+ if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
13
+ return false;
14
+ }
15
+
16
+ return strpos($code, '??=') !== false;
17
+ }
18
+
19
+ public function emulate(string $code, array $tokens): array
20
+ {
21
+ // We need to manually iterate and manage a count because we'll change
22
+ // the tokens array on the way
23
+ $line = 1;
24
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
25
+ if (isset($tokens[$i + 1])) {
26
+ if ($tokens[$i][0] === T_COALESCE && $tokens[$i + 1] === '=') {
27
+ array_splice($tokens, $i, 2, [
28
+ [Emulative::T_COALESCE_EQUAL, '??=', $line]
29
+ ]);
30
+ $c--;
31
+ continue;
32
+ }
33
+ }
34
+ if (\is_array($tokens[$i])) {
35
+ $line += substr_count($tokens[$i][1], "\n");
36
+ }
37
+ }
38
+
39
+ return $tokens;
40
+ }
41
+ }
vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class FnTokenEmulator implements TokenEmulatorInterface
8
+ {
9
+ public function isEmulationNeeded(string $code) : bool
10
+ {
11
+ // skip version where this is supported
12
+ if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
13
+ return false;
14
+ }
15
+
16
+ return strpos($code, 'fn') !== false;
17
+ }
18
+
19
+ public function emulate(string $code, array $tokens): array
20
+ {
21
+ // We need to manually iterate and manage a count because we'll change
22
+ // the tokens array on the way
23
+ foreach ($tokens as $i => $token) {
24
+ if ($token[0] === T_STRING && $token[1] === 'fn') {
25
+ $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $i);
26
+ if ($previousNonSpaceToken !== null && $previousNonSpaceToken[0] === T_OBJECT_OPERATOR) {
27
+ continue;
28
+ }
29
+
30
+ $tokens[$i][0] = Emulative::T_FN;
31
+ }
32
+ }
33
+
34
+ return $tokens;
35
+ }
36
+
37
+ /**
38
+ * @param mixed[] $tokens
39
+ * @return mixed[]|null
40
+ */
41
+ private function getPreviousNonSpaceToken(array $tokens, int $start)
42
+ {
43
+ for ($i = $start - 1; $i >= 0; --$i) {
44
+ if ($tokens[$i][0] === T_WHITESPACE) {
45
+ continue;
46
+ }
47
+
48
+ return $tokens[$i];
49
+ }
50
+
51
+ return null;
52
+ }
53
+ }
vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ use PhpParser\Lexer\Emulative;
6
+
7
+ final class NumericLiteralSeparatorEmulator implements TokenEmulatorInterface
8
+ {
9
+ const BIN = '(?:0b[01]+(?:_[01]+)*)';
10
+ const HEX = '(?:0x[0-9a-f]+(?:_[0-9a-f]+)*)';
11
+ const DEC = '(?:[0-9]+(?:_[0-9]+)*)';
12
+ const SIMPLE_FLOAT = '(?:' . self::DEC . '\.' . self::DEC . '?|\.' . self::DEC . ')';
13
+ const EXP = '(?:e[+-]?' . self::DEC . ')';
14
+ const FLOAT = '(?:' . self::SIMPLE_FLOAT . self::EXP . '?|' . self::DEC . self::EXP . ')';
15
+ const NUMBER = '~' . self::FLOAT . '|' . self::BIN . '|' . self::HEX . '|' . self::DEC . '~iA';
16
+
17
+ public function isEmulationNeeded(string $code) : bool
18
+ {
19
+ // skip version where this is supported
20
+ if (version_compare(\PHP_VERSION, Emulative::PHP_7_4, '>=')) {
21
+ return false;
22
+ }
23
+
24
+ return preg_match('~[0-9a-f]_[0-9a-f]~i', $code) !== false;
25
+ }
26
+
27
+ public function emulate(string $code, array $tokens): array
28
+ {
29
+ // We need to manually iterate and manage a count because we'll change
30
+ // the tokens array on the way
31
+ $codeOffset = 0;
32
+ for ($i = 0, $c = count($tokens); $i < $c; ++$i) {
33
+ $token = $tokens[$i];
34
+ $tokenLen = \strlen(\is_array($token) ? $token[1] : $token);
35
+
36
+ if ($token[0] !== T_LNUMBER && $token[0] !== T_DNUMBER) {
37
+ $codeOffset += $tokenLen;
38
+ continue;
39
+ }
40
+
41
+ $res = preg_match(self::NUMBER, $code, $matches, 0, $codeOffset);
42
+ assert($res, "No number at number token position");
43
+
44
+ $match = $matches[0];
45
+ $matchLen = \strlen($match);
46
+ if ($matchLen === $tokenLen) {
47
+ // Original token already holds the full number.
48
+ $codeOffset += $tokenLen;
49
+ continue;
50
+ }
51
+
52
+ $tokenKind = $this->resolveIntegerOrFloatToken($match);
53
+ $newTokens = [[$tokenKind, $match, $token[2]]];
54
+
55
+ $numTokens = 1;
56
+ $len = $tokenLen;
57
+ while ($matchLen > $len) {
58
+ $nextToken = $tokens[$i + $numTokens];
59
+ $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken;
60
+ $nextTokenLen = \strlen($nextTokenText);
61
+
62
+ $numTokens++;
63
+ if ($matchLen < $len + $nextTokenLen) {
64
+ // Split trailing characters into a partial token.
65
+ assert(is_array($nextToken), "Partial token should be an array token");
66
+ $partialText = substr($nextTokenText, $matchLen - $len);
67
+ $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]];
68
+ break;
69
+ }
70
+
71
+ $len += $nextTokenLen;
72
+ }
73
+
74
+ array_splice($tokens, $i, $numTokens, $newTokens);
75
+ $c -= $numTokens - \count($newTokens);
76
+ $codeOffset += $matchLen;
77
+ }
78
+
79
+ return $tokens;
80
+ }
81
+
82
+ private function resolveIntegerOrFloatToken(string $str): int
83
+ {
84
+ $str = str_replace('_', '', $str);
85
+
86
+ if (stripos($str, '0b') === 0) {
87
+ $num = bindec($str);
88
+ } elseif (stripos($str, '0x') === 0) {
89
+ $num = hexdec($str);
90
+ } elseif (stripos($str, '0') === 0 && ctype_digit($str)) {
91
+ $num = octdec($str);
92
+ } else {
93
+ $num = +$str;
94
+ }
95
+
96
+ return is_float($num) ? T_DNUMBER : T_LNUMBER;
97
+ }
98
+ }
vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Lexer\TokenEmulator;
4
+
5
+ /** @internal */
6
+ interface TokenEmulatorInterface
7
+ {
8
+ public function isEmulationNeeded(string $code): bool;
9
+
10
+ /**
11
+ * @return array Modified Tokens
12
+ */
13
+ public function emulate(string $code, array $tokens): array;
14
+ }
vendor/nikic/php-parser/lib/PhpParser/NameContext.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Name;
6
+ use PhpParser\Node\Name\FullyQualified;
7
+ use PhpParser\Node\Stmt;
8
+
9
+ class NameContext
10
+ {
11
+ /** @var null|Name Current namespace */
12
+ protected $namespace;
13
+
14
+ /** @var Name[][] Map of format [aliasType => [aliasName => originalName]] */
15
+ protected $aliases = [];
16
+
17
+ /** @var Name[][] Same as $aliases but preserving original case */
18
+ protected $origAliases = [];
19
+
20
+ /** @var ErrorHandler Error handler */
21
+ protected $errorHandler;
22
+
23
+ /**
24
+ * Create a name context.
25
+ *
26
+ * @param ErrorHandler $errorHandler Error handling used to report errors
27
+ */
28
+ public function __construct(ErrorHandler $errorHandler) {
29
+ $this->errorHandler = $errorHandler;
30
+ }
31
+
32
+ /**
33
+ * Start a new namespace.
34
+ *
35
+ * This also resets the alias table.
36
+ *
37
+ * @param Name|null $namespace Null is the global namespace
38
+ */
39
+ public function startNamespace(Name $namespace = null) {
40
+ $this->namespace = $namespace;
41
+ $this->origAliases = $this->aliases = [
42
+ Stmt\Use_::TYPE_NORMAL => [],
43
+ Stmt\Use_::TYPE_FUNCTION => [],
44
+ Stmt\Use_::TYPE_CONSTANT => [],
45
+ ];
46
+ }
47
+
48
+ /**
49
+ * Add an alias / import.
50
+ *
51
+ * @param Name $name Original name
52
+ * @param string $aliasName Aliased name
53
+ * @param int $type One of Stmt\Use_::TYPE_*
54
+ * @param array $errorAttrs Attributes to use to report an error
55
+ */
56
+ public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []) {
57
+ // Constant names are case sensitive, everything else case insensitive
58
+ if ($type === Stmt\Use_::TYPE_CONSTANT) {
59
+ $aliasLookupName = $aliasName;
60
+ } else {
61
+ $aliasLookupName = strtolower($aliasName);
62
+ }
63
+
64
+ if (isset($this->aliases[$type][$aliasLookupName])) {
65
+ $typeStringMap = [
66
+ Stmt\Use_::TYPE_NORMAL => '',
67
+ Stmt\Use_::TYPE_FUNCTION => 'function ',
68
+ Stmt\Use_::TYPE_CONSTANT => 'const ',
69
+ ];
70
+
71
+ $this->errorHandler->handleError(new Error(
72
+ sprintf(
73
+ 'Cannot use %s%s as %s because the name is already in use',
74
+ $typeStringMap[$type], $name, $aliasName
75
+ ),
76
+ $errorAttrs
77
+ ));
78
+ return;
79
+ }
80
+
81
+ $this->aliases[$type][$aliasLookupName] = $name;
82
+ $this->origAliases[$type][$aliasName] = $name;
83
+ }
84
+
85
+ /**
86
+ * Get current namespace.
87
+ *
88
+ * @return null|Name Namespace (or null if global namespace)
89
+ */
90
+ public function getNamespace() {
91
+ return $this->namespace;
92
+ }
93
+
94
+ /**
95
+ * Get resolved name.
96
+ *
97
+ * @param Name $name Name to resolve
98
+ * @param int $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT}
99
+ *
100
+ * @return null|Name Resolved name, or null if static resolution is not possible
101
+ */
102
+ public function getResolvedName(Name $name, int $type) {
103
+ // don't resolve special class names
104
+ if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) {
105
+ if (!$name->isUnqualified()) {
106
+ $this->errorHandler->handleError(new Error(
107
+ sprintf("'\\%s' is an invalid class name", $name->toString()),
108
+ $name->getAttributes()
109
+ ));
110
+ }
111
+ return $name;
112
+ }
113
+
114
+ // fully qualified names are already resolved
115
+ if ($name->isFullyQualified()) {
116
+ return $name;
117
+ }
118
+
119
+ // Try to resolve aliases
120
+ if (null !== $resolvedName = $this->resolveAlias($name, $type)) {
121
+ return $resolvedName;
122
+ }
123
+
124
+ if ($type !== Stmt\Use_::TYPE_NORMAL && $name->isUnqualified()) {
125
+ if (null === $this->namespace) {
126
+ // outside of a namespace unaliased unqualified is same as fully qualified
127
+ return new FullyQualified($name, $name->getAttributes());
128
+ }
129
+
130
+ // Cannot resolve statically
131
+ return null;
132
+ }
133
+
134
+ // if no alias exists prepend current namespace
135
+ return FullyQualified::concat($this->namespace, $name, $name->getAttributes());
136
+ }
137
+
138
+ /**
139
+ * Get resolved class name.
140
+ *
141
+ * @param Name $name Class ame to resolve
142
+ *
143
+ * @return Name Resolved name
144
+ */
145
+ public function getResolvedClassName(Name $name) : Name {
146
+ return $this->getResolvedName($name, Stmt\Use_::TYPE_NORMAL);
147
+ }
148
+
149
+ /**
150
+ * Get possible ways of writing a fully qualified name (e.g., by making use of aliases).
151
+ *
152
+ * @param string $name Fully-qualified name (without leading namespace separator)
153
+ * @param int $type One of Stmt\Use_::TYPE_*
154
+ *
155
+ * @return Name[] Possible representations of the name
156
+ */
157
+ public function getPossibleNames(string $name, int $type) : array {
158
+ $lcName = strtolower($name);
159
+
160
+ if ($type === Stmt\Use_::TYPE_NORMAL) {
161
+ // self, parent and static must always be unqualified
162
+ if ($lcName === "self" || $lcName === "parent" || $lcName === "static") {
163
+ return [new Name($name)];
164
+ }
165
+ }
166
+
167
+ // Collect possible ways to write this name, starting with the fully-qualified name
168
+ $possibleNames = [new FullyQualified($name)];
169
+
170
+ if (null !== $nsRelativeName = $this->getNamespaceRelativeName($name, $lcName, $type)) {
171
+ // Make sure there is no alias that makes the normally namespace-relative name
172
+ // into something else
173
+ if (null === $this->resolveAlias($nsRelativeName, $type)) {
174
+ $possibleNames[] = $nsRelativeName;
175
+ }
176
+ }
177
+
178
+ // Check for relevant namespace use statements
179
+ foreach ($this->origAliases[Stmt\Use_::TYPE_NORMAL] as $alias => $orig) {
180
+ $lcOrig = $orig->toLowerString();
181
+ if (0 === strpos($lcName, $lcOrig . '\\')) {
182
+ $possibleNames[] = new Name($alias . substr($name, strlen($lcOrig)));
183
+ }
184
+ }
185
+
186
+ // Check for relevant type-specific use statements
187
+ foreach ($this->origAliases[$type] as $alias => $orig) {
188
+ if ($type === Stmt\Use_::TYPE_CONSTANT) {
189
+ // Constants are are complicated-sensitive
190
+ $normalizedOrig = $this->normalizeConstName($orig->toString());
191
+ if ($normalizedOrig === $this->normalizeConstName($name)) {
192
+ $possibleNames[] = new Name($alias);
193
+ }
194
+ } else {
195
+ // Everything else is case-insensitive
196
+ if ($orig->toLowerString() === $lcName) {
197
+ $possibleNames[] = new Name($alias);
198
+ }
199
+ }
200
+ }
201
+
202
+ return $possibleNames;
203
+ }
204
+
205
+ /**
206
+ * Get shortest representation of this fully-qualified name.
207
+ *
208
+ * @param string $name Fully-qualified name (without leading namespace separator)
209
+ * @param int $type One of Stmt\Use_::TYPE_*
210
+ *
211
+ * @return Name Shortest representation
212
+ */
213
+ public function getShortName(string $name, int $type) : Name {
214
+ $possibleNames = $this->getPossibleNames($name, $type);
215
+
216
+ // Find shortest name
217
+ $shortestName = null;
218
+ $shortestLength = \INF;
219
+ foreach ($possibleNames as $possibleName) {
220
+ $length = strlen($possibleName->toCodeString());
221
+ if ($length < $shortestLength) {
222
+ $shortestName = $possibleName;
223
+ $shortestLength = $length;
224
+ }
225
+ }
226
+
227
+ return $shortestName;
228
+ }
229
+
230
+ private function resolveAlias(Name $name, $type) {
231
+ $firstPart = $name->getFirst();
232
+
233
+ if ($name->isQualified()) {
234
+ // resolve aliases for qualified names, always against class alias table
235
+ $checkName = strtolower($firstPart);
236
+ if (isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName])) {
237
+ $alias = $this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName];
238
+ return FullyQualified::concat($alias, $name->slice(1), $name->getAttributes());
239
+ }
240
+ } elseif ($name->isUnqualified()) {
241
+ // constant aliases are case-sensitive, function aliases case-insensitive
242
+ $checkName = $type === Stmt\Use_::TYPE_CONSTANT ? $firstPart : strtolower($firstPart);
243
+ if (isset($this->aliases[$type][$checkName])) {
244
+ // resolve unqualified aliases
245
+ return new FullyQualified($this->aliases[$type][$checkName], $name->getAttributes());
246
+ }
247
+ }
248
+
249
+ // No applicable aliases
250
+ return null;
251
+ }
252
+
253
+ private function getNamespaceRelativeName(string $name, string $lcName, int $type) {
254
+ if (null === $this->namespace) {
255
+ return new Name($name);
256
+ }
257
+
258
+ if ($type === Stmt\Use_::TYPE_CONSTANT) {
259
+ // The constants true/false/null always resolve to the global symbols, even inside a
260
+ // namespace, so they may be used without qualification
261
+ if ($lcName === "true" || $lcName === "false" || $lcName === "null") {
262
+ return new Name($name);
263
+ }
264
+ }
265
+
266
+ $namespacePrefix = strtolower($this->namespace . '\\');
267
+ if (0 === strpos($lcName, $namespacePrefix)) {
268
+ return new Name(substr($name, strlen($namespacePrefix)));
269
+ }
270
+
271
+ return null;
272
+ }
273
+
274
+ private function normalizeConstName(string $name) {
275
+ $nsSep = strrpos($name, '\\');
276
+ if (false === $nsSep) {
277
+ return $name;
278
+ }
279
+
280
+ // Constants have case-insensitive namespace and case-sensitive short-name
281
+ $ns = substr($name, 0, $nsSep);
282
+ $shortName = substr($name, $nsSep + 1);
283
+ return strtolower($ns) . '\\' . $shortName;
284
+ }
285
+ }
vendor/nikic/php-parser/lib/PhpParser/Node.php ADDED
@@ -0,0 +1,153 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface Node
6
+ {
7
+ /**
8
+ * Gets the type of the node.
9
+ *
10
+ * @return string Type of the node
11
+ */
12
+ public function getType() : string;
13
+
14
+ /**
15
+ * Gets the names of the sub nodes.
16
+ *
17
+ * @return array Names of sub nodes
18
+ */
19
+ public function getSubNodeNames() : array;
20
+
21
+ /**
22
+ * Gets line the node started in (alias of getStartLine).
23
+ *
24
+ * @return int Start line (or -1 if not available)
25
+ */
26
+ public function getLine() : int;
27
+
28
+ /**
29
+ * Gets line the node started in.
30
+ *
31
+ * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default).
32
+ *
33
+ * @return int Start line (or -1 if not available)
34
+ */
35
+ public function getStartLine() : int;
36
+
37
+ /**
38
+ * Gets the line the node ended in.
39
+ *
40
+ * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default).
41
+ *
42
+ * @return int End line (or -1 if not available)
43
+ */
44
+ public function getEndLine() : int;
45
+
46
+ /**
47
+ * Gets the token offset of the first token that is part of this node.
48
+ *
49
+ * The offset is an index into the array returned by Lexer::getTokens().
50
+ *
51
+ * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default).
52
+ *
53
+ * @return int Token start position (or -1 if not available)
54
+ */
55
+ public function getStartTokenPos() : int;
56
+
57
+ /**
58
+ * Gets the token offset of the last token that is part of this node.
59
+ *
60
+ * The offset is an index into the array returned by Lexer::getTokens().
61
+ *
62
+ * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default).
63
+ *
64
+ * @return int Token end position (or -1 if not available)
65
+ */
66
+ public function getEndTokenPos() : int;
67
+
68
+ /**
69
+ * Gets the file offset of the first character that is part of this node.
70
+ *
71
+ * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default).
72
+ *
73
+ * @return int File start position (or -1 if not available)
74
+ */
75
+ public function getStartFilePos() : int;
76
+
77
+ /**
78
+ * Gets the file offset of the last character that is part of this node.
79
+ *
80
+ * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default).
81
+ *
82
+ * @return int File end position (or -1 if not available)
83
+ */
84
+ public function getEndFilePos() : int;
85
+
86
+ /**
87
+ * Gets all comments directly preceding this node.
88
+ *
89
+ * The comments are also available through the "comments" attribute.
90
+ *
91
+ * @return Comment[]
92
+ */
93
+ public function getComments() : array;
94
+
95
+ /**
96
+ * Gets the doc comment of the node.
97
+ *
98
+ * The doc comment has to be the last comment associated with the node.
99
+ *
100
+ * @return null|Comment\Doc Doc comment object or null
101
+ */
102
+ public function getDocComment();
103
+
104
+ /**
105
+ * Sets the doc comment of the node.
106
+ *
107
+ * This will either replace an existing doc comment or add it to the comments array.
108
+ *
109
+ * @param Comment\Doc $docComment Doc comment to set
110
+ */
111
+ public function setDocComment(Comment\Doc $docComment);
112
+
113
+ /**
114
+ * Sets an attribute on a node.
115
+ *
116
+ * @param string $key
117
+ * @param mixed $value
118
+ */
119
+ public function setAttribute(string $key, $value);
120
+
121
+ /**
122
+ * Returns whether an attribute exists.
123
+ *
124
+ * @param string $key
125
+ *
126
+ * @return bool
127
+ */
128
+ public function hasAttribute(string $key) : bool;
129
+
130
+ /**
131
+ * Returns the value of an attribute.
132
+ *
133
+ * @param string $key
134
+ * @param mixed $default
135
+ *
136
+ * @return mixed
137
+ */
138
+ public function getAttribute(string $key, $default = null);
139
+
140
+ /**
141
+ * Returns all the attributes of this node.
142
+ *
143
+ * @return array
144
+ */
145
+ public function getAttributes() : array;
146
+
147
+ /**
148
+ * Replaces all the attributes of this node.
149
+ *
150
+ * @param array $attributes
151
+ */
152
+ public function setAttributes(array $attributes);
153
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ class Arg extends NodeAbstract
8
+ {
9
+ /** @var Expr Value to pass */
10
+ public $value;
11
+ /** @var bool Whether to pass by ref */
12
+ public $byRef;
13
+ /** @var bool Whether to unpack the argument */
14
+ public $unpack;
15
+
16
+ /**
17
+ * Constructs a function call argument node.
18
+ *
19
+ * @param Expr $value Value to pass
20
+ * @param bool $byRef Whether to pass by ref
21
+ * @param bool $unpack Whether to unpack the argument
22
+ * @param array $attributes Additional attributes
23
+ */
24
+ public function __construct(Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = []) {
25
+ $this->attributes = $attributes;
26
+ $this->value = $value;
27
+ $this->byRef = $byRef;
28
+ $this->unpack = $unpack;
29
+ }
30
+
31
+ public function getSubNodeNames() : array {
32
+ return ['value', 'byRef', 'unpack'];
33
+ }
34
+
35
+ public function getType() : string {
36
+ return 'Arg';
37
+ }
38
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ /**
8
+ * @property Name $namespacedName Namespaced name (for class constants, if using NameResolver)
9
+ */
10
+ class Const_ extends NodeAbstract
11
+ {
12
+ /** @var Identifier Name */
13
+ public $name;
14
+ /** @var Expr Value */
15
+ public $value;
16
+
17
+ /**
18
+ * Constructs a const node for use in class const and const statements.
19
+ *
20
+ * @param string|Identifier $name Name
21
+ * @param Expr $value Value
22
+ * @param array $attributes Additional attributes
23
+ */
24
+ public function __construct($name, Expr $value, array $attributes = []) {
25
+ $this->attributes = $attributes;
26
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
27
+ $this->value = $value;
28
+ }
29
+
30
+ public function getSubNodeNames() : array {
31
+ return ['name', 'value'];
32
+ }
33
+
34
+ public function getType() : string {
35
+ return 'Const';
36
+ }
37
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ abstract class Expr extends NodeAbstract
8
+ {
9
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class ArrayDimFetch extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+ /** @var null|Expr Array index / dim */
12
+ public $dim;
13
+
14
+ /**
15
+ * Constructs an array index fetch node.
16
+ *
17
+ * @param Expr $var Variable
18
+ * @param null|Expr $dim Array index / dim
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr $var, Expr $dim = null, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->var = $var;
24
+ $this->dim = $dim;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['var', 'dim'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_ArrayDimFetch';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class ArrayItem extends Expr
8
+ {
9
+ /** @var null|Expr Key */
10
+ public $key;
11
+ /** @var Expr Value */
12
+ public $value;
13
+ /** @var bool Whether to assign by reference */
14
+ public $byRef;
15
+ /** @var bool Whether to unpack the argument */
16
+ public $unpack;
17
+
18
+ /**
19
+ * Constructs an array item node.
20
+ *
21
+ * @param Expr $value Value
22
+ * @param null|Expr $key Key
23
+ * @param bool $byRef Whether to assign by reference
24
+ * @param array $attributes Additional attributes
25
+ */
26
+ public function __construct(Expr $value, Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) {
27
+ $this->attributes = $attributes;
28
+ $this->key = $key;
29
+ $this->value = $value;
30
+ $this->byRef = $byRef;
31
+ $this->unpack = $unpack;
32
+ }
33
+
34
+ public function getSubNodeNames() : array {
35
+ return ['key', 'value', 'byRef', 'unpack'];
36
+ }
37
+
38
+ public function getType() : string {
39
+ return 'Expr_ArrayItem';
40
+ }
41
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Array_ extends Expr
8
+ {
9
+ // For use in "kind" attribute
10
+ const KIND_LONG = 1; // array() syntax
11
+ const KIND_SHORT = 2; // [] syntax
12
+
13
+ /** @var ArrayItem[] Items */
14
+ public $items;
15
+
16
+ /**
17
+ * Constructs an array node.
18
+ *
19
+ * @param ArrayItem[] $items Items of the array
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct(array $items = [], array $attributes = []) {
23
+ $this->attributes = $attributes;
24
+ $this->items = $items;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['items'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_Array';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+ use PhpParser\Node\FunctionLike;
8
+
9
+ class ArrowFunction extends Expr implements FunctionLike
10
+ {
11
+ /** @var bool */
12
+ public $static;
13
+
14
+ /** @var bool */
15
+ public $byRef;
16
+
17
+ /** @var Node\Param[] */
18
+ public $params = [];
19
+
20
+ /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType */
21
+ public $returnType;
22
+
23
+ /** @var Expr */
24
+ public $expr;
25
+
26
+ /**
27
+ * @param array $subNodes Array of the following optional subnodes:
28
+ * 'static' => false : Whether the closure is static
29
+ * 'byRef' => false : Whether to return by reference
30
+ * 'params' => array() : Parameters
31
+ * 'returnType' => null : Return type
32
+ * 'expr' => Expr : Expression body
33
+ * @param array $attributes Additional attributes
34
+ */
35
+ public function __construct(array $subNodes = [], array $attributes = []) {
36
+ $this->attributes = $attributes;
37
+ $this->static = $subNodes['static'] ?? false;
38
+ $this->byRef = $subNodes['byRef'] ?? false;
39
+ $this->params = $subNodes['params'] ?? [];
40
+ $returnType = $subNodes['returnType'] ?? null;
41
+ $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
42
+ $this->expr = $subNodes['expr'] ?? null;
43
+ }
44
+
45
+ public function getSubNodeNames() : array {
46
+ return ['static', 'byRef', 'params', 'returnType', 'expr'];
47
+ }
48
+
49
+ public function returnsByRef() : bool {
50
+ return $this->byRef;
51
+ }
52
+
53
+ public function getParams() : array {
54
+ return $this->params;
55
+ }
56
+
57
+ public function getReturnType() {
58
+ return $this->returnType;
59
+ }
60
+
61
+ /**
62
+ * @return Node\Stmt\Return_[]
63
+ */
64
+ public function getStmts() : array {
65
+ return [new Node\Stmt\Return_($this->expr)];
66
+ }
67
+
68
+ public function getType() : string {
69
+ return 'Expr_ArrowFunction';
70
+ }
71
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Assign extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+ /** @var Expr Expression */
12
+ public $expr;
13
+
14
+ /**
15
+ * Constructs an assignment node.
16
+ *
17
+ * @param Expr $var Variable
18
+ * @param Expr $expr Expression
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr $var, Expr $expr, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->var = $var;
24
+ $this->expr = $expr;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['var', 'expr'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_Assign';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ abstract class AssignOp extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+ /** @var Expr Expression */
12
+ public $expr;
13
+
14
+ /**
15
+ * Constructs a compound assignment operation node.
16
+ *
17
+ * @param Expr $var Variable
18
+ * @param Expr $expr Expression
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr $var, Expr $expr, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->var = $var;
24
+ $this->expr = $expr;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['var', 'expr'];
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class BitwiseAnd extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_BitwiseAnd';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class BitwiseOr extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_BitwiseOr';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class BitwiseXor extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_BitwiseXor';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Coalesce extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Coalesce';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Concat extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Concat';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Div extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Div';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Minus extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Minus';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Mod extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Mod';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Mul extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Mul';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Plus extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Plus';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class Pow extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_Pow';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class ShiftLeft extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_ShiftLeft';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\AssignOp;
4
+
5
+ use PhpParser\Node\Expr\AssignOp;
6
+
7
+ class ShiftRight extends AssignOp
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_AssignOp_ShiftRight';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class AssignRef extends Expr
8
+ {
9
+ /** @var Expr Variable reference is assigned to */
10
+ public $var;
11
+ /** @var Expr Variable which is referenced */
12
+ public $expr;
13
+
14
+ /**
15
+ * Constructs an assignment node.
16
+ *
17
+ * @param Expr $var Variable
18
+ * @param Expr $expr Expression
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr $var, Expr $expr, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->var = $var;
24
+ $this->expr = $expr;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['var', 'expr'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_AssignRef';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ abstract class BinaryOp extends Expr
8
+ {
9
+ /** @var Expr The left hand side expression */
10
+ public $left;
11
+ /** @var Expr The right hand side expression */
12
+ public $right;
13
+
14
+ /**
15
+ * Constructs a binary operator node.
16
+ *
17
+ * @param Expr $left The left hand side expression
18
+ * @param Expr $right The right hand side expression
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr $left, Expr $right, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->left = $left;
24
+ $this->right = $right;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['left', 'right'];
29
+ }
30
+
31
+ /**
32
+ * Get the operator sigil for this binary operation.
33
+ *
34
+ * In the case there are multiple possible sigils for an operator, this method does not
35
+ * necessarily return the one used in the parsed code.
36
+ *
37
+ * @return string
38
+ */
39
+ abstract public function getOperatorSigil() : string;
40
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class BitwiseAnd extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '&';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_BitwiseAnd';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class BitwiseOr extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '|';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_BitwiseOr';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class BitwiseXor extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '^';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_BitwiseXor';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class BooleanAnd extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '&&';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_BooleanAnd';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class BooleanOr extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '||';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_BooleanOr';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Coalesce extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '??';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Coalesce';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Concat extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '.';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Concat';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Div extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '/';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Div';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Equal extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '==';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Equal';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Greater extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '>';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Greater';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class GreaterOrEqual extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '>=';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_GreaterOrEqual';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Identical extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '===';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Identical';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class LogicalAnd extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return 'and';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_LogicalAnd';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class LogicalOr extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return 'or';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_LogicalOr';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class LogicalXor extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return 'xor';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_LogicalXor';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Minus extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '-';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Minus';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Mod extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '%';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Mod';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Mul extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '*';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Mul';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class NotEqual extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '!=';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_NotEqual';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class NotIdentical extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '!==';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_NotIdentical';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Plus extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '+';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Plus';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Pow extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '**';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Pow';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class ShiftLeft extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '<<';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_ShiftLeft';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class ShiftRight extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '>>';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_ShiftRight';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Smaller extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '<';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Smaller';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class SmallerOrEqual extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '<=';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_SmallerOrEqual';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\BinaryOp;
4
+
5
+ use PhpParser\Node\Expr\BinaryOp;
6
+
7
+ class Spaceship extends BinaryOp
8
+ {
9
+ public function getOperatorSigil() : string {
10
+ return '<=>';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Expr_BinaryOp_Spaceship';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class BitwiseNot extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a bitwise not node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_BitwiseNot';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class BooleanNot extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a boolean not node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_BooleanNot';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ abstract class Cast extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a cast node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class Array_ extends Cast
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_Cast_Array';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class Bool_ extends Cast
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_Cast_Bool';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class Double extends Cast
8
+ {
9
+ // For use in "kind" attribute
10
+ const KIND_DOUBLE = 1; // "double" syntax
11
+ const KIND_FLOAT = 2; // "float" syntax
12
+ const KIND_REAL = 3; // "real" syntax
13
+
14
+ public function getType() : string {
15
+ return 'Expr_Cast_Double';
16
+ }
17
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class Int_ extends Cast
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_Cast_Int';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class Object_ extends Cast
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_Cast_Object';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class String_ extends Cast
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_Cast_String';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr\Cast;
4
+
5
+ use PhpParser\Node\Expr\Cast;
6
+
7
+ class Unset_ extends Cast
8
+ {
9
+ public function getType() : string {
10
+ return 'Expr_Cast_Unset';
11
+ }
12
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Identifier;
7
+ use PhpParser\Node\Name;
8
+
9
+ class ClassConstFetch extends Expr
10
+ {
11
+ /** @var Name|Expr Class name */
12
+ public $class;
13
+ /** @var Identifier|Error Constant name */
14
+ public $name;
15
+
16
+ /**
17
+ * Constructs a class const fetch node.
18
+ *
19
+ * @param Name|Expr $class Class name
20
+ * @param string|Identifier|Error $name Constant name
21
+ * @param array $attributes Additional attributes
22
+ */
23
+ public function __construct($class, $name, array $attributes = []) {
24
+ $this->attributes = $attributes;
25
+ $this->class = $class;
26
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
27
+ }
28
+
29
+ public function getSubNodeNames() : array {
30
+ return ['class', 'name'];
31
+ }
32
+
33
+ public function getType() : string {
34
+ return 'Expr_ClassConstFetch';
35
+ }
36
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Clone_ extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a clone node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_Clone';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+ use PhpParser\Node\FunctionLike;
8
+
9
+ class Closure extends Expr implements FunctionLike
10
+ {
11
+ /** @var bool Whether the closure is static */
12
+ public $static;
13
+ /** @var bool Whether to return by reference */
14
+ public $byRef;
15
+ /** @var Node\Param[] Parameters */
16
+ public $params;
17
+ /** @var ClosureUse[] use()s */
18
+ public $uses;
19
+ /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
20
+ public $returnType;
21
+ /** @var Node\Stmt[] Statements */
22
+ public $stmts;
23
+
24
+ /**
25
+ * Constructs a lambda function node.
26
+ *
27
+ * @param array $subNodes Array of the following optional subnodes:
28
+ * 'static' => false : Whether the closure is static
29
+ * 'byRef' => false : Whether to return by reference
30
+ * 'params' => array(): Parameters
31
+ * 'uses' => array(): use()s
32
+ * 'returnType' => null : Return type
33
+ * 'stmts' => array(): Statements
34
+ * @param array $attributes Additional attributes
35
+ */
36
+ public function __construct(array $subNodes = [], array $attributes = []) {
37
+ $this->attributes = $attributes;
38
+ $this->static = $subNodes['static'] ?? false;
39
+ $this->byRef = $subNodes['byRef'] ?? false;
40
+ $this->params = $subNodes['params'] ?? [];
41
+ $this->uses = $subNodes['uses'] ?? [];
42
+ $returnType = $subNodes['returnType'] ?? null;
43
+ $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
44
+ $this->stmts = $subNodes['stmts'] ?? [];
45
+ }
46
+
47
+ public function getSubNodeNames() : array {
48
+ return ['static', 'byRef', 'params', 'uses', 'returnType', 'stmts'];
49
+ }
50
+
51
+ public function returnsByRef() : bool {
52
+ return $this->byRef;
53
+ }
54
+
55
+ public function getParams() : array {
56
+ return $this->params;
57
+ }
58
+
59
+ public function getReturnType() {
60
+ return $this->returnType;
61
+ }
62
+
63
+ /** @return Node\Stmt[] */
64
+ public function getStmts() : array {
65
+ return $this->stmts;
66
+ }
67
+
68
+ public function getType() : string {
69
+ return 'Expr_Closure';
70
+ }
71
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class ClosureUse extends Expr
8
+ {
9
+ /** @var Expr\Variable Variable to use */
10
+ public $var;
11
+ /** @var bool Whether to use by reference */
12
+ public $byRef;
13
+
14
+ /**
15
+ * Constructs a closure use node.
16
+ *
17
+ * @param Expr\Variable $var Variable to use
18
+ * @param bool $byRef Whether to use by reference
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr\Variable $var, bool $byRef = false, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->var = $var;
24
+ $this->byRef = $byRef;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['var', 'byRef'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_ClosureUse';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Name;
7
+
8
+ class ConstFetch extends Expr
9
+ {
10
+ /** @var Name Constant name */
11
+ public $name;
12
+
13
+ /**
14
+ * Constructs a const fetch node.
15
+ *
16
+ * @param Name $name Constant name
17
+ * @param array $attributes Additional attributes
18
+ */
19
+ public function __construct(Name $name, array $attributes = []) {
20
+ $this->attributes = $attributes;
21
+ $this->name = $name;
22
+ }
23
+
24
+ public function getSubNodeNames() : array {
25
+ return ['name'];
26
+ }
27
+
28
+ public function getType() : string {
29
+ return 'Expr_ConstFetch';
30
+ }
31
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Empty_ extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs an empty() node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_Empty';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ /**
8
+ * Error node used during parsing with error recovery.
9
+ *
10
+ * An error node may be placed at a position where an expression is required, but an error occurred.
11
+ * Error nodes will not be present if the parser is run in throwOnError mode (the default).
12
+ */
13
+ class Error extends Expr
14
+ {
15
+ /**
16
+ * Constructs an error node.
17
+ *
18
+ * @param array $attributes Additional attributes
19
+ */
20
+ public function __construct(array $attributes = []) {
21
+ $this->attributes = $attributes;
22
+ }
23
+
24
+ public function getSubNodeNames() : array {
25
+ return [];
26
+ }
27
+
28
+ public function getType() : string {
29
+ return 'Expr_Error';
30
+ }
31
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class ErrorSuppress extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs an error suppress node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_ErrorSuppress';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Eval_ extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs an eval() node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_Eval';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Exit_ extends Expr
8
+ {
9
+ /* For use in "kind" attribute */
10
+ const KIND_EXIT = 1;
11
+ const KIND_DIE = 2;
12
+
13
+ /** @var null|Expr Expression */
14
+ public $expr;
15
+
16
+ /**
17
+ * Constructs an exit() node.
18
+ *
19
+ * @param null|Expr $expr Expression
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct(Expr $expr = null, array $attributes = []) {
23
+ $this->attributes = $attributes;
24
+ $this->expr = $expr;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['expr'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_Exit';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+
8
+ class FuncCall extends Expr
9
+ {
10
+ /** @var Node\Name|Expr Function name */
11
+ public $name;
12
+ /** @var Node\Arg[] Arguments */
13
+ public $args;
14
+
15
+ /**
16
+ * Constructs a function call node.
17
+ *
18
+ * @param Node\Name|Expr $name Function name
19
+ * @param Node\Arg[] $args Arguments
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct($name, array $args = [], array $attributes = []) {
23
+ $this->attributes = $attributes;
24
+ $this->name = $name;
25
+ $this->args = $args;
26
+ }
27
+
28
+ public function getSubNodeNames() : array {
29
+ return ['name', 'args'];
30
+ }
31
+
32
+ public function getType() : string {
33
+ return 'Expr_FuncCall';
34
+ }
35
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Include_ extends Expr
8
+ {
9
+ const TYPE_INCLUDE = 1;
10
+ const TYPE_INCLUDE_ONCE = 2;
11
+ const TYPE_REQUIRE = 3;
12
+ const TYPE_REQUIRE_ONCE = 4;
13
+
14
+ /** @var Expr Expression */
15
+ public $expr;
16
+ /** @var int Type of include */
17
+ public $type;
18
+
19
+ /**
20
+ * Constructs an include node.
21
+ *
22
+ * @param Expr $expr Expression
23
+ * @param int $type Type of include
24
+ * @param array $attributes Additional attributes
25
+ */
26
+ public function __construct(Expr $expr, int $type, array $attributes = []) {
27
+ $this->attributes = $attributes;
28
+ $this->expr = $expr;
29
+ $this->type = $type;
30
+ }
31
+
32
+ public function getSubNodeNames() : array {
33
+ return ['expr', 'type'];
34
+ }
35
+
36
+ public function getType() : string {
37
+ return 'Expr_Include';
38
+ }
39
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Name;
7
+
8
+ class Instanceof_ extends Expr
9
+ {
10
+ /** @var Expr Expression */
11
+ public $expr;
12
+ /** @var Name|Expr Class name */
13
+ public $class;
14
+
15
+ /**
16
+ * Constructs an instanceof check node.
17
+ *
18
+ * @param Expr $expr Expression
19
+ * @param Name|Expr $class Class name
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct(Expr $expr, $class, array $attributes = []) {
23
+ $this->attributes = $attributes;
24
+ $this->expr = $expr;
25
+ $this->class = $class;
26
+ }
27
+
28
+ public function getSubNodeNames() : array {
29
+ return ['expr', 'class'];
30
+ }
31
+
32
+ public function getType() : string {
33
+ return 'Expr_Instanceof';
34
+ }
35
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Isset_ extends Expr
8
+ {
9
+ /** @var Expr[] Variables */
10
+ public $vars;
11
+
12
+ /**
13
+ * Constructs an array node.
14
+ *
15
+ * @param Expr[] $vars Variables
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $vars, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->vars = $vars;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['vars'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_Isset';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class List_ extends Expr
8
+ {
9
+ /** @var (ArrayItem|null)[] List of items to assign to */
10
+ public $items;
11
+
12
+ /**
13
+ * Constructs a list() destructuring node.
14
+ *
15
+ * @param (ArrayItem|null)[] $items List of items to assign to
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $items, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->items = $items;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['items'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_List';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Arg;
6
+ use PhpParser\Node\Expr;
7
+ use PhpParser\Node\Identifier;
8
+
9
+ class MethodCall extends Expr
10
+ {
11
+ /** @var Expr Variable holding object */
12
+ public $var;
13
+ /** @var Identifier|Expr Method name */
14
+ public $name;
15
+ /** @var Arg[] Arguments */
16
+ public $args;
17
+
18
+ /**
19
+ * Constructs a function call node.
20
+ *
21
+ * @param Expr $var Variable holding object
22
+ * @param string|Identifier|Expr $name Method name
23
+ * @param Arg[] $args Arguments
24
+ * @param array $attributes Additional attributes
25
+ */
26
+ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) {
27
+ $this->attributes = $attributes;
28
+ $this->var = $var;
29
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
30
+ $this->args = $args;
31
+ }
32
+
33
+ public function getSubNodeNames() : array {
34
+ return ['var', 'name', 'args'];
35
+ }
36
+
37
+ public function getType() : string {
38
+ return 'Expr_MethodCall';
39
+ }
40
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+
8
+ class New_ extends Expr
9
+ {
10
+ /** @var Node\Name|Expr|Node\Stmt\Class_ Class name */
11
+ public $class;
12
+ /** @var Node\Arg[] Arguments */
13
+ public $args;
14
+
15
+ /**
16
+ * Constructs a function call node.
17
+ *
18
+ * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes)
19
+ * @param Node\Arg[] $args Arguments
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct($class, array $args = [], array $attributes = []) {
23
+ $this->attributes = $attributes;
24
+ $this->class = $class;
25
+ $this->args = $args;
26
+ }
27
+
28
+ public function getSubNodeNames() : array {
29
+ return ['class', 'args'];
30
+ }
31
+
32
+ public function getType() : string {
33
+ return 'Expr_New';
34
+ }
35
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class PostDec extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+
12
+ /**
13
+ * Constructs a post decrement node.
14
+ *
15
+ * @param Expr $var Variable
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $var, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->var = $var;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['var'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_PostDec';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class PostInc extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+
12
+ /**
13
+ * Constructs a post increment node.
14
+ *
15
+ * @param Expr $var Variable
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $var, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->var = $var;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['var'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_PostInc';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class PreDec extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+
12
+ /**
13
+ * Constructs a pre decrement node.
14
+ *
15
+ * @param Expr $var Variable
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $var, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->var = $var;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['var'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_PreDec';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class PreInc extends Expr
8
+ {
9
+ /** @var Expr Variable */
10
+ public $var;
11
+
12
+ /**
13
+ * Constructs a pre increment node.
14
+ *
15
+ * @param Expr $var Variable
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $var, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->var = $var;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['var'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_PreInc';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Print_ extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs an print() node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_Print';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Identifier;
7
+
8
+ class PropertyFetch extends Expr
9
+ {
10
+ /** @var Expr Variable holding object */
11
+ public $var;
12
+ /** @var Identifier|Expr Property name */
13
+ public $name;
14
+
15
+ /**
16
+ * Constructs a function call node.
17
+ *
18
+ * @param Expr $var Variable holding object
19
+ * @param string|Identifier|Expr $name Property name
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct(Expr $var, $name, array $attributes = []) {
23
+ $this->attributes = $attributes;
24
+ $this->var = $var;
25
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
26
+ }
27
+
28
+ public function getSubNodeNames() : array {
29
+ return ['var', 'name'];
30
+ }
31
+
32
+ public function getType() : string {
33
+ return 'Expr_PropertyFetch';
34
+ }
35
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class ShellExec extends Expr
8
+ {
9
+ /** @var array Encapsed string array */
10
+ public $parts;
11
+
12
+ /**
13
+ * Constructs a shell exec (backtick) node.
14
+ *
15
+ * @param array $parts Encapsed string array
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $parts, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->parts = $parts;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['parts'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_ShellExec';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+ use PhpParser\Node\Identifier;
8
+
9
+ class StaticCall extends Expr
10
+ {
11
+ /** @var Node\Name|Expr Class name */
12
+ public $class;
13
+ /** @var Identifier|Expr Method name */
14
+ public $name;
15
+ /** @var Node\Arg[] Arguments */
16
+ public $args;
17
+
18
+ /**
19
+ * Constructs a static method call node.
20
+ *
21
+ * @param Node\Name|Expr $class Class name
22
+ * @param string|Identifier|Expr $name Method name
23
+ * @param Node\Arg[] $args Arguments
24
+ * @param array $attributes Additional attributes
25
+ */
26
+ public function __construct($class, $name, array $args = [], array $attributes = []) {
27
+ $this->attributes = $attributes;
28
+ $this->class = $class;
29
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
30
+ $this->args = $args;
31
+ }
32
+
33
+ public function getSubNodeNames() : array {
34
+ return ['class', 'name', 'args'];
35
+ }
36
+
37
+ public function getType() : string {
38
+ return 'Expr_StaticCall';
39
+ }
40
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Name;
7
+ use PhpParser\Node\VarLikeIdentifier;
8
+
9
+ class StaticPropertyFetch extends Expr
10
+ {
11
+ /** @var Name|Expr Class name */
12
+ public $class;
13
+ /** @var VarLikeIdentifier|Expr Property name */
14
+ public $name;
15
+
16
+ /**
17
+ * Constructs a static property fetch node.
18
+ *
19
+ * @param Name|Expr $class Class name
20
+ * @param string|VarLikeIdentifier|Expr $name Property name
21
+ * @param array $attributes Additional attributes
22
+ */
23
+ public function __construct($class, $name, array $attributes = []) {
24
+ $this->attributes = $attributes;
25
+ $this->class = $class;
26
+ $this->name = \is_string($name) ? new VarLikeIdentifier($name) : $name;
27
+ }
28
+
29
+ public function getSubNodeNames() : array {
30
+ return ['class', 'name'];
31
+ }
32
+
33
+ public function getType() : string {
34
+ return 'Expr_StaticPropertyFetch';
35
+ }
36
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Ternary extends Expr
8
+ {
9
+ /** @var Expr Condition */
10
+ public $cond;
11
+ /** @var null|Expr Expression for true */
12
+ public $if;
13
+ /** @var Expr Expression for false */
14
+ public $else;
15
+
16
+ /**
17
+ * Constructs a ternary operator node.
18
+ *
19
+ * @param Expr $cond Condition
20
+ * @param null|Expr $if Expression for true
21
+ * @param Expr $else Expression for false
22
+ * @param array $attributes Additional attributes
23
+ */
24
+ public function __construct(Expr $cond, $if, Expr $else, array $attributes = []) {
25
+ $this->attributes = $attributes;
26
+ $this->cond = $cond;
27
+ $this->if = $if;
28
+ $this->else = $else;
29
+ }
30
+
31
+ public function getSubNodeNames() : array {
32
+ return ['cond', 'if', 'else'];
33
+ }
34
+
35
+ public function getType() : string {
36
+ return 'Expr_Ternary';
37
+ }
38
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class UnaryMinus extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a unary minus node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_UnaryMinus';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class UnaryPlus extends Expr
8
+ {
9
+ /** @var Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a unary plus node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_UnaryPlus';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Variable extends Expr
8
+ {
9
+ /** @var string|Expr Name */
10
+ public $name;
11
+
12
+ /**
13
+ * Constructs a variable node.
14
+ *
15
+ * @param string|Expr $name Name
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct($name, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->name = $name;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['name'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_Variable';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class YieldFrom extends Expr
8
+ {
9
+ /** @var Expr Expression to yield from */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs an "yield from" node.
14
+ *
15
+ * @param Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Expr_YieldFrom';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Expr;
4
+
5
+ use PhpParser\Node\Expr;
6
+
7
+ class Yield_ extends Expr
8
+ {
9
+ /** @var null|Expr Key expression */
10
+ public $key;
11
+ /** @var null|Expr Value expression */
12
+ public $value;
13
+
14
+ /**
15
+ * Constructs a yield expression node.
16
+ *
17
+ * @param null|Expr $value Value expression
18
+ * @param null|Expr $key Key expression
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Expr $value = null, Expr $key = null, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->key = $key;
24
+ $this->value = $value;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['key', 'value'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Expr_Yield';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\Node;
6
+
7
+ interface FunctionLike extends Node
8
+ {
9
+ /**
10
+ * Whether to return by reference
11
+ *
12
+ * @return bool
13
+ */
14
+ public function returnsByRef() : bool;
15
+
16
+ /**
17
+ * List of parameters
18
+ *
19
+ * @return Node\Param[]
20
+ */
21
+ public function getParams() : array;
22
+
23
+ /**
24
+ * Get the declared return type or null
25
+ *
26
+ * @return null|Identifier|Node\Name|Node\NullableType|Node\UnionType
27
+ */
28
+ public function getReturnType();
29
+
30
+ /**
31
+ * The function body
32
+ *
33
+ * @return Node\Stmt[]|null
34
+ */
35
+ public function getStmts();
36
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ /**
8
+ * Represents a non-namespaced name. Namespaced names are represented using Name nodes.
9
+ */
10
+ class Identifier extends NodeAbstract
11
+ {
12
+ /** @var string Identifier as string */
13
+ public $name;
14
+
15
+ private static $specialClassNames = [
16
+ 'self' => true,
17
+ 'parent' => true,
18
+ 'static' => true,
19
+ ];
20
+
21
+ /**
22
+ * Constructs an identifier node.
23
+ *
24
+ * @param string $name Identifier as string
25
+ * @param array $attributes Additional attributes
26
+ */
27
+ public function __construct(string $name, array $attributes = []) {
28
+ $this->attributes = $attributes;
29
+ $this->name = $name;
30
+ }
31
+
32
+ public function getSubNodeNames() : array {
33
+ return ['name'];
34
+ }
35
+
36
+ /**
37
+ * Get identifier as string.
38
+ *
39
+ * @return string Identifier as string.
40
+ */
41
+ public function toString() : string {
42
+ return $this->name;
43
+ }
44
+
45
+ /**
46
+ * Get lowercased identifier as string.
47
+ *
48
+ * @return string Lowercased identifier as string
49
+ */
50
+ public function toLowerString() : string {
51
+ return strtolower($this->name);
52
+ }
53
+
54
+ /**
55
+ * Checks whether the identifier is a special class name (self, parent or static).
56
+ *
57
+ * @return bool Whether identifier is a special class name
58
+ */
59
+ public function isSpecialClassName() : bool {
60
+ return isset(self::$specialClassNames[strtolower($this->name)]);
61
+ }
62
+
63
+ /**
64
+ * Get identifier as string.
65
+ *
66
+ * @return string Identifier as string
67
+ */
68
+ public function __toString() : string {
69
+ return $this->name;
70
+ }
71
+
72
+ public function getType() : string {
73
+ return 'Identifier';
74
+ }
75
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Name.php ADDED
@@ -0,0 +1,242 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ class Name extends NodeAbstract
8
+ {
9
+ /** @var string[] Parts of the name */
10
+ public $parts;
11
+
12
+ private static $specialClassNames = [
13
+ 'self' => true,
14
+ 'parent' => true,
15
+ 'static' => true,
16
+ ];
17
+
18
+ /**
19
+ * Constructs a name node.
20
+ *
21
+ * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor)
22
+ * @param array $attributes Additional attributes
23
+ */
24
+ public function __construct($name, array $attributes = []) {
25
+ $this->attributes = $attributes;
26
+ $this->parts = self::prepareName($name);
27
+ }
28
+
29
+ public function getSubNodeNames() : array {
30
+ return ['parts'];
31
+ }
32
+
33
+ /**
34
+ * Gets the first part of the name, i.e. everything before the first namespace separator.
35
+ *
36
+ * @return string First part of the name
37
+ */
38
+ public function getFirst() : string {
39
+ return $this->parts[0];
40
+ }
41
+
42
+ /**
43
+ * Gets the last part of the name, i.e. everything after the last namespace separator.
44
+ *
45
+ * @return string Last part of the name
46
+ */
47
+ public function getLast() : string {
48
+ return $this->parts[count($this->parts) - 1];
49
+ }
50
+
51
+ /**
52
+ * Checks whether the name is unqualified. (E.g. Name)
53
+ *
54
+ * @return bool Whether the name is unqualified
55
+ */
56
+ public function isUnqualified() : bool {
57
+ return 1 === count($this->parts);
58
+ }
59
+
60
+ /**
61
+ * Checks whether the name is qualified. (E.g. Name\Name)
62
+ *
63
+ * @return bool Whether the name is qualified
64
+ */
65
+ public function isQualified() : bool {
66
+ return 1 < count($this->parts);
67
+ }
68
+
69
+ /**
70
+ * Checks whether the name is fully qualified. (E.g. \Name)
71
+ *
72
+ * @return bool Whether the name is fully qualified
73
+ */
74
+ public function isFullyQualified() : bool {
75
+ return false;
76
+ }
77
+
78
+ /**
79
+ * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
80
+ *
81
+ * @return bool Whether the name is relative
82
+ */
83
+ public function isRelative() : bool {
84
+ return false;
85
+ }
86
+
87
+ /**
88
+ * Returns a string representation of the name itself, without taking taking the name type into
89
+ * account (e.g., not including a leading backslash for fully qualified names).
90
+ *
91
+ * @return string String representation
92
+ */
93
+ public function toString() : string {
94
+ return implode('\\', $this->parts);
95
+ }
96
+
97
+ /**
98
+ * Returns a string representation of the name as it would occur in code (e.g., including
99
+ * leading backslash for fully qualified names.
100
+ *
101
+ * @return string String representation
102
+ */
103
+ public function toCodeString() : string {
104
+ return $this->toString();
105
+ }
106
+
107
+ /**
108
+ * Returns lowercased string representation of the name, without taking the name type into
109
+ * account (e.g., no leading backslash for fully qualified names).
110
+ *
111
+ * @return string Lowercased string representation
112
+ */
113
+ public function toLowerString() : string {
114
+ return strtolower(implode('\\', $this->parts));
115
+ }
116
+
117
+ /**
118
+ * Checks whether the identifier is a special class name (self, parent or static).
119
+ *
120
+ * @return bool Whether identifier is a special class name
121
+ */
122
+ public function isSpecialClassName() : bool {
123
+ return count($this->parts) === 1
124
+ && isset(self::$specialClassNames[strtolower($this->parts[0])]);
125
+ }
126
+
127
+ /**
128
+ * Returns a string representation of the name by imploding the namespace parts with the
129
+ * namespace separator.
130
+ *
131
+ * @return string String representation
132
+ */
133
+ public function __toString() : string {
134
+ return implode('\\', $this->parts);
135
+ }
136
+
137
+ /**
138
+ * Gets a slice of a name (similar to array_slice).
139
+ *
140
+ * This method returns a new instance of the same type as the original and with the same
141
+ * attributes.
142
+ *
143
+ * If the slice is empty, null is returned. The null value will be correctly handled in
144
+ * concatenations using concat().
145
+ *
146
+ * Offset and length have the same meaning as in array_slice().
147
+ *
148
+ * @param int $offset Offset to start the slice at (may be negative)
149
+ * @param int|null $length Length of the slice (may be negative)
150
+ *
151
+ * @return static|null Sliced name
152
+ */
153
+ public function slice(int $offset, int $length = null) {
154
+ $numParts = count($this->parts);
155
+
156
+ $realOffset = $offset < 0 ? $offset + $numParts : $offset;
157
+ if ($realOffset < 0 || $realOffset > $numParts) {
158
+ throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset));
159
+ }
160
+
161
+ if (null === $length) {
162
+ $realLength = $numParts - $realOffset;
163
+ } else {
164
+ $realLength = $length < 0 ? $length + $numParts - $realOffset : $length;
165
+ if ($realLength < 0 || $realLength > $numParts) {
166
+ throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length));
167
+ }
168
+ }
169
+
170
+ if ($realLength === 0) {
171
+ // Empty slice is represented as null
172
+ return null;
173
+ }
174
+
175
+ return new static(array_slice($this->parts, $realOffset, $realLength), $this->attributes);
176
+ }
177
+
178
+ /**
179
+ * Concatenate two names, yielding a new Name instance.
180
+ *
181
+ * The type of the generated instance depends on which class this method is called on, for
182
+ * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance.
183
+ *
184
+ * If one of the arguments is null, a new instance of the other name will be returned. If both
185
+ * arguments are null, null will be returned. As such, writing
186
+ * Name::concat($namespace, $shortName)
187
+ * where $namespace is a Name node or null will work as expected.
188
+ *
189
+ * @param string|string[]|self|null $name1 The first name
190
+ * @param string|string[]|self|null $name2 The second name
191
+ * @param array $attributes Attributes to assign to concatenated name
192
+ *
193
+ * @return static|null Concatenated name
194
+ */
195
+ public static function concat($name1, $name2, array $attributes = []) {
196
+ if (null === $name1 && null === $name2) {
197
+ return null;
198
+ } elseif (null === $name1) {
199
+ return new static(self::prepareName($name2), $attributes);
200
+ } elseif (null === $name2) {
201
+ return new static(self::prepareName($name1), $attributes);
202
+ } else {
203
+ return new static(
204
+ array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes
205
+ );
206
+ }
207
+ }
208
+
209
+ /**
210
+ * Prepares a (string, array or Name node) name for use in name changing methods by converting
211
+ * it to an array.
212
+ *
213
+ * @param string|string[]|self $name Name to prepare
214
+ *
215
+ * @return string[] Prepared name
216
+ */
217
+ private static function prepareName($name) : array {
218
+ if (\is_string($name)) {
219
+ if ('' === $name) {
220
+ throw new \InvalidArgumentException('Name cannot be empty');
221
+ }
222
+
223
+ return explode('\\', $name);
224
+ } elseif (\is_array($name)) {
225
+ if (empty($name)) {
226
+ throw new \InvalidArgumentException('Name cannot be empty');
227
+ }
228
+
229
+ return $name;
230
+ } elseif ($name instanceof self) {
231
+ return $name->parts;
232
+ }
233
+
234
+ throw new \InvalidArgumentException(
235
+ 'Expected string, array of parts or Name instance'
236
+ );
237
+ }
238
+
239
+ public function getType() : string {
240
+ return 'Name';
241
+ }
242
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Name;
4
+
5
+ class FullyQualified extends \PhpParser\Node\Name
6
+ {
7
+ /**
8
+ * Checks whether the name is unqualified. (E.g. Name)
9
+ *
10
+ * @return bool Whether the name is unqualified
11
+ */
12
+ public function isUnqualified() : bool {
13
+ return false;
14
+ }
15
+
16
+ /**
17
+ * Checks whether the name is qualified. (E.g. Name\Name)
18
+ *
19
+ * @return bool Whether the name is qualified
20
+ */
21
+ public function isQualified() : bool {
22
+ return false;
23
+ }
24
+
25
+ /**
26
+ * Checks whether the name is fully qualified. (E.g. \Name)
27
+ *
28
+ * @return bool Whether the name is fully qualified
29
+ */
30
+ public function isFullyQualified() : bool {
31
+ return true;
32
+ }
33
+
34
+ /**
35
+ * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
36
+ *
37
+ * @return bool Whether the name is relative
38
+ */
39
+ public function isRelative() : bool {
40
+ return false;
41
+ }
42
+
43
+ public function toCodeString() : string {
44
+ return '\\' . $this->toString();
45
+ }
46
+
47
+ public function getType() : string {
48
+ return 'Name_FullyQualified';
49
+ }
50
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Name;
4
+
5
+ class Relative extends \PhpParser\Node\Name
6
+ {
7
+ /**
8
+ * Checks whether the name is unqualified. (E.g. Name)
9
+ *
10
+ * @return bool Whether the name is unqualified
11
+ */
12
+ public function isUnqualified() : bool {
13
+ return false;
14
+ }
15
+
16
+ /**
17
+ * Checks whether the name is qualified. (E.g. Name\Name)
18
+ *
19
+ * @return bool Whether the name is qualified
20
+ */
21
+ public function isQualified() : bool {
22
+ return false;
23
+ }
24
+
25
+ /**
26
+ * Checks whether the name is fully qualified. (E.g. \Name)
27
+ *
28
+ * @return bool Whether the name is fully qualified
29
+ */
30
+ public function isFullyQualified() : bool {
31
+ return false;
32
+ }
33
+
34
+ /**
35
+ * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name)
36
+ *
37
+ * @return bool Whether the name is relative
38
+ */
39
+ public function isRelative() : bool {
40
+ return true;
41
+ }
42
+
43
+ public function toCodeString() : string {
44
+ return 'namespace\\' . $this->toString();
45
+ }
46
+
47
+ public function getType() : string {
48
+ return 'Name_Relative';
49
+ }
50
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ class NullableType extends NodeAbstract
8
+ {
9
+ /** @var Identifier|Name Type */
10
+ public $type;
11
+
12
+ /**
13
+ * Constructs a nullable type (wrapping another type).
14
+ *
15
+ * @param string|Identifier|Name $type Type
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct($type, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->type = \is_string($type) ? new Identifier($type) : $type;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['type'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'NullableType';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Param.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ class Param extends NodeAbstract
8
+ {
9
+ /** @var null|Identifier|Name|NullableType|UnionType Type declaration */
10
+ public $type;
11
+ /** @var bool Whether parameter is passed by reference */
12
+ public $byRef;
13
+ /** @var bool Whether this is a variadic argument */
14
+ public $variadic;
15
+ /** @var Expr\Variable|Expr\Error Parameter variable */
16
+ public $var;
17
+ /** @var null|Expr Default value */
18
+ public $default;
19
+
20
+ /**
21
+ * Constructs a parameter node.
22
+ *
23
+ * @param Expr\Variable|Expr\Error $var Parameter variable
24
+ * @param null|Expr $default Default value
25
+ * @param null|string|Identifier|Name|NullableType|UnionType $type Type declaration
26
+ * @param bool $byRef Whether is passed by reference
27
+ * @param bool $variadic Whether this is a variadic argument
28
+ * @param array $attributes Additional attributes
29
+ */
30
+ public function __construct(
31
+ $var, Expr $default = null, $type = null,
32
+ bool $byRef = false, bool $variadic = false, array $attributes = []
33
+ ) {
34
+ $this->attributes = $attributes;
35
+ $this->type = \is_string($type) ? new Identifier($type) : $type;
36
+ $this->byRef = $byRef;
37
+ $this->variadic = $variadic;
38
+ $this->var = $var;
39
+ $this->default = $default;
40
+ }
41
+
42
+ public function getSubNodeNames() : array {
43
+ return ['type', 'byRef', 'variadic', 'var', 'default'];
44
+ }
45
+
46
+ public function getType() : string {
47
+ return 'Param';
48
+ }
49
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ abstract class Scalar extends Expr
6
+ {
7
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar;
4
+
5
+ use PhpParser\Node\Scalar;
6
+
7
+ class DNumber extends Scalar
8
+ {
9
+ /** @var float Number value */
10
+ public $value;
11
+
12
+ /**
13
+ * Constructs a float number scalar node.
14
+ *
15
+ * @param float $value Value of the number
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(float $value, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->value = $value;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['value'];
25
+ }
26
+
27
+ /**
28
+ * @internal
29
+ *
30
+ * Parses a DNUMBER token like PHP would.
31
+ *
32
+ * @param string $str A string number
33
+ *
34
+ * @return float The parsed number
35
+ */
36
+ public static function parse(string $str) : float {
37
+ $str = str_replace('_', '', $str);
38
+
39
+ // if string contains any of .eE just cast it to float
40
+ if (false !== strpbrk($str, '.eE')) {
41
+ return (float) $str;
42
+ }
43
+
44
+ // otherwise it's an integer notation that overflowed into a float
45
+ // if it starts with 0 it's one of the special integer notations
46
+ if ('0' === $str[0]) {
47
+ // hex
48
+ if ('x' === $str[1] || 'X' === $str[1]) {
49
+ return hexdec($str);
50
+ }
51
+
52
+ // bin
53
+ if ('b' === $str[1] || 'B' === $str[1]) {
54
+ return bindec($str);
55
+ }
56
+
57
+ // oct
58
+ // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit (8 or 9)
59
+ // so that only the digits before that are used
60
+ return octdec(substr($str, 0, strcspn($str, '89')));
61
+ }
62
+
63
+ // dec
64
+ return (float) $str;
65
+ }
66
+
67
+ public function getType() : string {
68
+ return 'Scalar_DNumber';
69
+ }
70
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar;
4
+
5
+ use PhpParser\Node\Expr;
6
+ use PhpParser\Node\Scalar;
7
+
8
+ class Encapsed extends Scalar
9
+ {
10
+ /** @var Expr[] list of string parts */
11
+ public $parts;
12
+
13
+ /**
14
+ * Constructs an encapsed string node.
15
+ *
16
+ * @param Expr[] $parts Encaps list
17
+ * @param array $attributes Additional attributes
18
+ */
19
+ public function __construct(array $parts, array $attributes = []) {
20
+ $this->attributes = $attributes;
21
+ $this->parts = $parts;
22
+ }
23
+
24
+ public function getSubNodeNames() : array {
25
+ return ['parts'];
26
+ }
27
+
28
+ public function getType() : string {
29
+ return 'Scalar_Encapsed';
30
+ }
31
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar;
4
+
5
+ use PhpParser\Node\Scalar;
6
+
7
+ class EncapsedStringPart extends Scalar
8
+ {
9
+ /** @var string String value */
10
+ public $value;
11
+
12
+ /**
13
+ * Constructs a node representing a string part of an encapsed string.
14
+ *
15
+ * @param string $value String value
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(string $value, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->value = $value;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['value'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Scalar_EncapsedStringPart';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\Node\Scalar;
7
+
8
+ class LNumber extends Scalar
9
+ {
10
+ /* For use in "kind" attribute */
11
+ const KIND_BIN = 2;
12
+ const KIND_OCT = 8;
13
+ const KIND_DEC = 10;
14
+ const KIND_HEX = 16;
15
+
16
+ /** @var int Number value */
17
+ public $value;
18
+
19
+ /**
20
+ * Constructs an integer number scalar node.
21
+ *
22
+ * @param int $value Value of the number
23
+ * @param array $attributes Additional attributes
24
+ */
25
+ public function __construct(int $value, array $attributes = []) {
26
+ $this->attributes = $attributes;
27
+ $this->value = $value;
28
+ }
29
+
30
+ public function getSubNodeNames() : array {
31
+ return ['value'];
32
+ }
33
+
34
+ /**
35
+ * Constructs an LNumber node from a string number literal.
36
+ *
37
+ * @param string $str String number literal (decimal, octal, hex or binary)
38
+ * @param array $attributes Additional attributes
39
+ * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5)
40
+ *
41
+ * @return LNumber The constructed LNumber, including kind attribute
42
+ */
43
+ public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false) : LNumber {
44
+ $str = str_replace('_', '', $str);
45
+
46
+ if ('0' !== $str[0] || '0' === $str) {
47
+ $attributes['kind'] = LNumber::KIND_DEC;
48
+ return new LNumber((int) $str, $attributes);
49
+ }
50
+
51
+ if ('x' === $str[1] || 'X' === $str[1]) {
52
+ $attributes['kind'] = LNumber::KIND_HEX;
53
+ return new LNumber(hexdec($str), $attributes);
54
+ }
55
+
56
+ if ('b' === $str[1] || 'B' === $str[1]) {
57
+ $attributes['kind'] = LNumber::KIND_BIN;
58
+ return new LNumber(bindec($str), $attributes);
59
+ }
60
+
61
+ if (!$allowInvalidOctal && strpbrk($str, '89')) {
62
+ throw new Error('Invalid numeric literal', $attributes);
63
+ }
64
+
65
+ // use intval instead of octdec to get proper cutting behavior with malformed numbers
66
+ $attributes['kind'] = LNumber::KIND_OCT;
67
+ return new LNumber(intval($str, 8), $attributes);
68
+ }
69
+
70
+ public function getType() : string {
71
+ return 'Scalar_LNumber';
72
+ }
73
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar;
4
+
5
+ use PhpParser\Node\Scalar;
6
+
7
+ abstract class MagicConst extends Scalar
8
+ {
9
+ /**
10
+ * Constructs a magic constant node.
11
+ *
12
+ * @param array $attributes Additional attributes
13
+ */
14
+ public function __construct(array $attributes = []) {
15
+ $this->attributes = $attributes;
16
+ }
17
+
18
+ public function getSubNodeNames() : array {
19
+ return [];
20
+ }
21
+
22
+ /**
23
+ * Get name of magic constant.
24
+ *
25
+ * @return string Name of magic constant
26
+ */
27
+ abstract public function getName() : string;
28
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Class_ extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__CLASS__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Class';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Dir extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__DIR__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Dir';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class File extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__FILE__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_File';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Function_ extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__FUNCTION__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Function';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Line extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__LINE__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Line';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Method extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__METHOD__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Method';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Namespace_ extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__NAMESPACE__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Namespace';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar\MagicConst;
4
+
5
+ use PhpParser\Node\Scalar\MagicConst;
6
+
7
+ class Trait_ extends MagicConst
8
+ {
9
+ public function getName() : string {
10
+ return '__TRAIT__';
11
+ }
12
+
13
+ public function getType() : string {
14
+ return 'Scalar_MagicConst_Trait';
15
+ }
16
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Scalar;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\Node\Scalar;
7
+
8
+ class String_ extends Scalar
9
+ {
10
+ /* For use in "kind" attribute */
11
+ const KIND_SINGLE_QUOTED = 1;
12
+ const KIND_DOUBLE_QUOTED = 2;
13
+ const KIND_HEREDOC = 3;
14
+ const KIND_NOWDOC = 4;
15
+
16
+ /** @var string String value */
17
+ public $value;
18
+
19
+ protected static $replacements = [
20
+ '\\' => '\\',
21
+ '$' => '$',
22
+ 'n' => "\n",
23
+ 'r' => "\r",
24
+ 't' => "\t",
25
+ 'f' => "\f",
26
+ 'v' => "\v",
27
+ 'e' => "\x1B",
28
+ ];
29
+
30
+ /**
31
+ * Constructs a string scalar node.
32
+ *
33
+ * @param string $value Value of the string
34
+ * @param array $attributes Additional attributes
35
+ */
36
+ public function __construct(string $value, array $attributes = []) {
37
+ $this->attributes = $attributes;
38
+ $this->value = $value;
39
+ }
40
+
41
+ public function getSubNodeNames() : array {
42
+ return ['value'];
43
+ }
44
+
45
+ /**
46
+ * @internal
47
+ *
48
+ * Parses a string token.
49
+ *
50
+ * @param string $str String token content
51
+ * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes
52
+ *
53
+ * @return string The parsed string
54
+ */
55
+ public static function parse(string $str, bool $parseUnicodeEscape = true) : string {
56
+ $bLength = 0;
57
+ if ('b' === $str[0] || 'B' === $str[0]) {
58
+ $bLength = 1;
59
+ }
60
+
61
+ if ('\'' === $str[$bLength]) {
62
+ return str_replace(
63
+ ['\\\\', '\\\''],
64
+ ['\\', '\''],
65
+ substr($str, $bLength + 1, -1)
66
+ );
67
+ } else {
68
+ return self::parseEscapeSequences(
69
+ substr($str, $bLength + 1, -1), '"', $parseUnicodeEscape
70
+ );
71
+ }
72
+ }
73
+
74
+ /**
75
+ * @internal
76
+ *
77
+ * Parses escape sequences in strings (all string types apart from single quoted).
78
+ *
79
+ * @param string $str String without quotes
80
+ * @param null|string $quote Quote type
81
+ * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes
82
+ *
83
+ * @return string String with escape sequences parsed
84
+ */
85
+ public static function parseEscapeSequences(string $str, $quote, bool $parseUnicodeEscape = true) : string {
86
+ if (null !== $quote) {
87
+ $str = str_replace('\\' . $quote, $quote, $str);
88
+ }
89
+
90
+ $extra = '';
91
+ if ($parseUnicodeEscape) {
92
+ $extra = '|u\{([0-9a-fA-F]+)\}';
93
+ }
94
+
95
+ return preg_replace_callback(
96
+ '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}' . $extra . ')~',
97
+ function($matches) {
98
+ $str = $matches[1];
99
+
100
+ if (isset(self::$replacements[$str])) {
101
+ return self::$replacements[$str];
102
+ } elseif ('x' === $str[0] || 'X' === $str[0]) {
103
+ return chr(hexdec(substr($str, 1)));
104
+ } elseif ('u' === $str[0]) {
105
+ return self::codePointToUtf8(hexdec($matches[2]));
106
+ } else {
107
+ return chr(octdec($str));
108
+ }
109
+ },
110
+ $str
111
+ );
112
+ }
113
+
114
+ /**
115
+ * Converts a Unicode code point to its UTF-8 encoded representation.
116
+ *
117
+ * @param int $num Code point
118
+ *
119
+ * @return string UTF-8 representation of code point
120
+ */
121
+ private static function codePointToUtf8(int $num) : string {
122
+ if ($num <= 0x7F) {
123
+ return chr($num);
124
+ }
125
+ if ($num <= 0x7FF) {
126
+ return chr(($num>>6) + 0xC0) . chr(($num&0x3F) + 0x80);
127
+ }
128
+ if ($num <= 0xFFFF) {
129
+ return chr(($num>>12) + 0xE0) . chr((($num>>6)&0x3F) + 0x80) . chr(($num&0x3F) + 0x80);
130
+ }
131
+ if ($num <= 0x1FFFFF) {
132
+ return chr(($num>>18) + 0xF0) . chr((($num>>12)&0x3F) + 0x80)
133
+ . chr((($num>>6)&0x3F) + 0x80) . chr(($num&0x3F) + 0x80);
134
+ }
135
+ throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large');
136
+ }
137
+
138
+ public function getType() : string {
139
+ return 'Scalar_String';
140
+ }
141
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ abstract class Stmt extends NodeAbstract
8
+ {
9
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Break_ extends Node\Stmt
8
+ {
9
+ /** @var null|Node\Expr Number of loops to break */
10
+ public $num;
11
+
12
+ /**
13
+ * Constructs a break node.
14
+ *
15
+ * @param null|Node\Expr $num Number of loops to break
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Node\Expr $num = null, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->num = $num;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['num'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Break';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Case_ extends Node\Stmt
8
+ {
9
+ /** @var null|Node\Expr Condition (null for default) */
10
+ public $cond;
11
+ /** @var Node\Stmt[] Statements */
12
+ public $stmts;
13
+
14
+ /**
15
+ * Constructs a case node.
16
+ *
17
+ * @param null|Node\Expr $cond Condition (null for default)
18
+ * @param Node\Stmt[] $stmts Statements
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct($cond, array $stmts = [], array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->cond = $cond;
24
+ $this->stmts = $stmts;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['cond', 'stmts'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_Case';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+
8
+ class Catch_ extends Node\Stmt
9
+ {
10
+ /** @var Node\Name[] Types of exceptions to catch */
11
+ public $types;
12
+ /** @var Expr\Variable Variable for exception */
13
+ public $var;
14
+ /** @var Node\Stmt[] Statements */
15
+ public $stmts;
16
+
17
+ /**
18
+ * Constructs a catch node.
19
+ *
20
+ * @param Node\Name[] $types Types of exceptions to catch
21
+ * @param Expr\Variable $var Variable for exception
22
+ * @param Node\Stmt[] $stmts Statements
23
+ * @param array $attributes Additional attributes
24
+ */
25
+ public function __construct(
26
+ array $types, Expr\Variable $var, array $stmts = [], array $attributes = []
27
+ ) {
28
+ $this->attributes = $attributes;
29
+ $this->types = $types;
30
+ $this->var = $var;
31
+ $this->stmts = $stmts;
32
+ }
33
+
34
+ public function getSubNodeNames() : array {
35
+ return ['types', 'var', 'stmts'];
36
+ }
37
+
38
+ public function getType() : string {
39
+ return 'Stmt_Catch';
40
+ }
41
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class ClassConst extends Node\Stmt
8
+ {
9
+ /** @var int Modifiers */
10
+ public $flags;
11
+ /** @var Node\Const_[] Constant declarations */
12
+ public $consts;
13
+
14
+ /**
15
+ * Constructs a class const list node.
16
+ *
17
+ * @param Node\Const_[] $consts Constant declarations
18
+ * @param int $flags Modifiers
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(array $consts, int $flags = 0, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->flags = $flags;
24
+ $this->consts = $consts;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['flags', 'consts'];
29
+ }
30
+
31
+ /**
32
+ * Whether constant is explicitly or implicitly public.
33
+ *
34
+ * @return bool
35
+ */
36
+ public function isPublic() : bool {
37
+ return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0
38
+ || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0;
39
+ }
40
+
41
+ /**
42
+ * Whether constant is protected.
43
+ *
44
+ * @return bool
45
+ */
46
+ public function isProtected() : bool {
47
+ return (bool) ($this->flags & Class_::MODIFIER_PROTECTED);
48
+ }
49
+
50
+ /**
51
+ * Whether constant is private.
52
+ *
53
+ * @return bool
54
+ */
55
+ public function isPrivate() : bool {
56
+ return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
57
+ }
58
+
59
+ public function getType() : string {
60
+ return 'Stmt_ClassConst';
61
+ }
62
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ /**
8
+ * @property Node\Name $namespacedName Namespaced name (if using NameResolver)
9
+ */
10
+ abstract class ClassLike extends Node\Stmt
11
+ {
12
+ /** @var Node\Identifier|null Name */
13
+ public $name;
14
+ /** @var Node\Stmt[] Statements */
15
+ public $stmts;
16
+
17
+ /**
18
+ * @return TraitUse[]
19
+ */
20
+ public function getTraitUses() : array {
21
+ $traitUses = [];
22
+ foreach ($this->stmts as $stmt) {
23
+ if ($stmt instanceof TraitUse) {
24
+ $traitUses[] = $stmt;
25
+ }
26
+ }
27
+ return $traitUses;
28
+ }
29
+
30
+ /**
31
+ * @return ClassConst[]
32
+ */
33
+ public function getConstants() : array {
34
+ $constants = [];
35
+ foreach ($this->stmts as $stmt) {
36
+ if ($stmt instanceof ClassConst) {
37
+ $constants[] = $stmt;
38
+ }
39
+ }
40
+ return $constants;
41
+ }
42
+
43
+ /**
44
+ * @return Property[]
45
+ */
46
+ public function getProperties() : array {
47
+ $properties = [];
48
+ foreach ($this->stmts as $stmt) {
49
+ if ($stmt instanceof Property) {
50
+ $properties[] = $stmt;
51
+ }
52
+ }
53
+ return $properties;
54
+ }
55
+
56
+ /**
57
+ * Gets all methods defined directly in this class/interface/trait
58
+ *
59
+ * @return ClassMethod[]
60
+ */
61
+ public function getMethods() : array {
62
+ $methods = [];
63
+ foreach ($this->stmts as $stmt) {
64
+ if ($stmt instanceof ClassMethod) {
65
+ $methods[] = $stmt;
66
+ }
67
+ }
68
+ return $methods;
69
+ }
70
+
71
+ /**
72
+ * Gets method with the given name defined directly in this class/interface/trait.
73
+ *
74
+ * @param string $name Name of the method (compared case-insensitively)
75
+ *
76
+ * @return ClassMethod|null Method node or null if the method does not exist
77
+ */
78
+ public function getMethod(string $name) {
79
+ $lowerName = strtolower($name);
80
+ foreach ($this->stmts as $stmt) {
81
+ if ($stmt instanceof ClassMethod && $lowerName === $stmt->name->toLowerString()) {
82
+ return $stmt;
83
+ }
84
+ }
85
+ return null;
86
+ }
87
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\FunctionLike;
7
+
8
+ class ClassMethod extends Node\Stmt implements FunctionLike
9
+ {
10
+ /** @var int Flags */
11
+ public $flags;
12
+ /** @var bool Whether to return by reference */
13
+ public $byRef;
14
+ /** @var Node\Identifier Name */
15
+ public $name;
16
+ /** @var Node\Param[] Parameters */
17
+ public $params;
18
+ /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
19
+ public $returnType;
20
+ /** @var Node\Stmt[]|null Statements */
21
+ public $stmts;
22
+
23
+ private static $magicNames = [
24
+ '__construct' => true,
25
+ '__destruct' => true,
26
+ '__call' => true,
27
+ '__callstatic' => true,
28
+ '__get' => true,
29
+ '__set' => true,
30
+ '__isset' => true,
31
+ '__unset' => true,
32
+ '__sleep' => true,
33
+ '__wakeup' => true,
34
+ '__tostring' => true,
35
+ '__set_state' => true,
36
+ '__clone' => true,
37
+ '__invoke' => true,
38
+ '__debuginfo' => true,
39
+ ];
40
+
41
+ /**
42
+ * Constructs a class method node.
43
+ *
44
+ * @param string|Node\Identifier $name Name
45
+ * @param array $subNodes Array of the following optional subnodes:
46
+ * 'flags => MODIFIER_PUBLIC: Flags
47
+ * 'byRef' => false : Whether to return by reference
48
+ * 'params' => array() : Parameters
49
+ * 'returnType' => null : Return type
50
+ * 'stmts' => array() : Statements
51
+ * @param array $attributes Additional attributes
52
+ */
53
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
54
+ $this->attributes = $attributes;
55
+ $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
56
+ $this->byRef = $subNodes['byRef'] ?? false;
57
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
58
+ $this->params = $subNodes['params'] ?? [];
59
+ $returnType = $subNodes['returnType'] ?? null;
60
+ $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
61
+ $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : [];
62
+ }
63
+
64
+ public function getSubNodeNames() : array {
65
+ return ['flags', 'byRef', 'name', 'params', 'returnType', 'stmts'];
66
+ }
67
+
68
+ public function returnsByRef() : bool {
69
+ return $this->byRef;
70
+ }
71
+
72
+ public function getParams() : array {
73
+ return $this->params;
74
+ }
75
+
76
+ public function getReturnType() {
77
+ return $this->returnType;
78
+ }
79
+
80
+ public function getStmts() {
81
+ return $this->stmts;
82
+ }
83
+
84
+ /**
85
+ * Whether the method is explicitly or implicitly public.
86
+ *
87
+ * @return bool
88
+ */
89
+ public function isPublic() : bool {
90
+ return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0
91
+ || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0;
92
+ }
93
+
94
+ /**
95
+ * Whether the method is protected.
96
+ *
97
+ * @return bool
98
+ */
99
+ public function isProtected() : bool {
100
+ return (bool) ($this->flags & Class_::MODIFIER_PROTECTED);
101
+ }
102
+
103
+ /**
104
+ * Whether the method is private.
105
+ *
106
+ * @return bool
107
+ */
108
+ public function isPrivate() : bool {
109
+ return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
110
+ }
111
+
112
+ /**
113
+ * Whether the method is abstract.
114
+ *
115
+ * @return bool
116
+ */
117
+ public function isAbstract() : bool {
118
+ return (bool) ($this->flags & Class_::MODIFIER_ABSTRACT);
119
+ }
120
+
121
+ /**
122
+ * Whether the method is final.
123
+ *
124
+ * @return bool
125
+ */
126
+ public function isFinal() : bool {
127
+ return (bool) ($this->flags & Class_::MODIFIER_FINAL);
128
+ }
129
+
130
+ /**
131
+ * Whether the method is static.
132
+ *
133
+ * @return bool
134
+ */
135
+ public function isStatic() : bool {
136
+ return (bool) ($this->flags & Class_::MODIFIER_STATIC);
137
+ }
138
+
139
+ /**
140
+ * Whether the method is magic.
141
+ *
142
+ * @return bool
143
+ */
144
+ public function isMagic() : bool {
145
+ return isset(self::$magicNames[$this->name->toLowerString()]);
146
+ }
147
+
148
+ public function getType() : string {
149
+ return 'Stmt_ClassMethod';
150
+ }
151
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Error;
6
+ use PhpParser\Node;
7
+
8
+ class Class_ extends ClassLike
9
+ {
10
+ const MODIFIER_PUBLIC = 1;
11
+ const MODIFIER_PROTECTED = 2;
12
+ const MODIFIER_PRIVATE = 4;
13
+ const MODIFIER_STATIC = 8;
14
+ const MODIFIER_ABSTRACT = 16;
15
+ const MODIFIER_FINAL = 32;
16
+
17
+ const VISIBILITY_MODIFIER_MASK = 7; // 1 | 2 | 4
18
+
19
+ /** @var int Type */
20
+ public $flags;
21
+ /** @var null|Node\Name Name of extended class */
22
+ public $extends;
23
+ /** @var Node\Name[] Names of implemented interfaces */
24
+ public $implements;
25
+
26
+ /**
27
+ * Constructs a class node.
28
+ *
29
+ * @param string|Node\Identifier|null $name Name
30
+ * @param array $subNodes Array of the following optional subnodes:
31
+ * 'flags' => 0 : Flags
32
+ * 'extends' => null : Name of extended class
33
+ * 'implements' => array(): Names of implemented interfaces
34
+ * 'stmts' => array(): Statements
35
+ * @param array $attributes Additional attributes
36
+ */
37
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
38
+ $this->attributes = $attributes;
39
+ $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0;
40
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
41
+ $this->extends = $subNodes['extends'] ?? null;
42
+ $this->implements = $subNodes['implements'] ?? [];
43
+ $this->stmts = $subNodes['stmts'] ?? [];
44
+ }
45
+
46
+ public function getSubNodeNames() : array {
47
+ return ['flags', 'name', 'extends', 'implements', 'stmts'];
48
+ }
49
+
50
+ /**
51
+ * Whether the class is explicitly abstract.
52
+ *
53
+ * @return bool
54
+ */
55
+ public function isAbstract() : bool {
56
+ return (bool) ($this->flags & self::MODIFIER_ABSTRACT);
57
+ }
58
+
59
+ /**
60
+ * Whether the class is final.
61
+ *
62
+ * @return bool
63
+ */
64
+ public function isFinal() : bool {
65
+ return (bool) ($this->flags & self::MODIFIER_FINAL);
66
+ }
67
+
68
+ /**
69
+ * Whether the class is anonymous.
70
+ *
71
+ * @return bool
72
+ */
73
+ public function isAnonymous() : bool {
74
+ return null === $this->name;
75
+ }
76
+
77
+ /**
78
+ * @internal
79
+ */
80
+ public static function verifyModifier($a, $b) {
81
+ if ($a & self::VISIBILITY_MODIFIER_MASK && $b & self::VISIBILITY_MODIFIER_MASK) {
82
+ throw new Error('Multiple access type modifiers are not allowed');
83
+ }
84
+
85
+ if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) {
86
+ throw new Error('Multiple abstract modifiers are not allowed');
87
+ }
88
+
89
+ if ($a & self::MODIFIER_STATIC && $b & self::MODIFIER_STATIC) {
90
+ throw new Error('Multiple static modifiers are not allowed');
91
+ }
92
+
93
+ if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) {
94
+ throw new Error('Multiple final modifiers are not allowed');
95
+ }
96
+
97
+ if ($a & 48 && $b & 48) {
98
+ throw new Error('Cannot use the final modifier on an abstract class member');
99
+ }
100
+ }
101
+
102
+ public function getType() : string {
103
+ return 'Stmt_Class';
104
+ }
105
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Const_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Const_[] Constant declarations */
10
+ public $consts;
11
+
12
+ /**
13
+ * Constructs a const list node.
14
+ *
15
+ * @param Node\Const_[] $consts Constant declarations
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $consts, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->consts = $consts;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['consts'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Const';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Continue_ extends Node\Stmt
8
+ {
9
+ /** @var null|Node\Expr Number of loops to continue */
10
+ public $num;
11
+
12
+ /**
13
+ * Constructs a continue node.
14
+ *
15
+ * @param null|Node\Expr $num Number of loops to continue
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Node\Expr $num = null, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->num = $num;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['num'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Continue';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class DeclareDeclare extends Node\Stmt
8
+ {
9
+ /** @var Node\Identifier Key */
10
+ public $key;
11
+ /** @var Node\Expr Value */
12
+ public $value;
13
+
14
+ /**
15
+ * Constructs a declare key=>value pair node.
16
+ *
17
+ * @param string|Node\Identifier $key Key
18
+ * @param Node\Expr $value Value
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct($key, Node\Expr $value, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->key = \is_string($key) ? new Node\Identifier($key) : $key;
24
+ $this->value = $value;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['key', 'value'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_DeclareDeclare';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Declare_ extends Node\Stmt
8
+ {
9
+ /** @var DeclareDeclare[] List of declares */
10
+ public $declares;
11
+ /** @var Node\Stmt[]|null Statements */
12
+ public $stmts;
13
+
14
+ /**
15
+ * Constructs a declare node.
16
+ *
17
+ * @param DeclareDeclare[] $declares List of declares
18
+ * @param Node\Stmt[]|null $stmts Statements
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(array $declares, array $stmts = null, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->declares = $declares;
24
+ $this->stmts = $stmts;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['declares', 'stmts'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_Declare';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Do_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Stmt[] Statements */
10
+ public $stmts;
11
+ /** @var Node\Expr Condition */
12
+ public $cond;
13
+
14
+ /**
15
+ * Constructs a do while node.
16
+ *
17
+ * @param Node\Expr $cond Condition
18
+ * @param Node\Stmt[] $stmts Statements
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->cond = $cond;
24
+ $this->stmts = $stmts;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['stmts', 'cond'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_Do';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Echo_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr[] Expressions */
10
+ public $exprs;
11
+
12
+ /**
13
+ * Constructs an echo node.
14
+ *
15
+ * @param Node\Expr[] $exprs Expressions
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $exprs, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->exprs = $exprs;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['exprs'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Echo';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class ElseIf_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr Condition */
10
+ public $cond;
11
+ /** @var Node\Stmt[] Statements */
12
+ public $stmts;
13
+
14
+ /**
15
+ * Constructs an elseif node.
16
+ *
17
+ * @param Node\Expr $cond Condition
18
+ * @param Node\Stmt[] $stmts Statements
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->cond = $cond;
24
+ $this->stmts = $stmts;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['cond', 'stmts'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_ElseIf';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Else_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Stmt[] Statements */
10
+ public $stmts;
11
+
12
+ /**
13
+ * Constructs an else node.
14
+ *
15
+ * @param Node\Stmt[] $stmts Statements
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $stmts = [], array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->stmts = $stmts;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['stmts'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Else';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ /**
8
+ * Represents statements of type "expr;"
9
+ */
10
+ class Expression extends Node\Stmt
11
+ {
12
+ /** @var Node\Expr Expression */
13
+ public $expr;
14
+
15
+ /**
16
+ * Constructs an expression statement.
17
+ *
18
+ * @param Node\Expr $expr Expression
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Node\Expr $expr, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->expr = $expr;
24
+ }
25
+
26
+ public function getSubNodeNames() : array {
27
+ return ['expr'];
28
+ }
29
+
30
+ public function getType() : string {
31
+ return 'Stmt_Expression';
32
+ }
33
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Finally_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Stmt[] Statements */
10
+ public $stmts;
11
+
12
+ /**
13
+ * Constructs a finally node.
14
+ *
15
+ * @param Node\Stmt[] $stmts Statements
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $stmts = [], array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->stmts = $stmts;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['stmts'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Finally';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class For_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr[] Init expressions */
10
+ public $init;
11
+ /** @var Node\Expr[] Loop conditions */
12
+ public $cond;
13
+ /** @var Node\Expr[] Loop expressions */
14
+ public $loop;
15
+ /** @var Node\Stmt[] Statements */
16
+ public $stmts;
17
+
18
+ /**
19
+ * Constructs a for loop node.
20
+ *
21
+ * @param array $subNodes Array of the following optional subnodes:
22
+ * 'init' => array(): Init expressions
23
+ * 'cond' => array(): Loop conditions
24
+ * 'loop' => array(): Loop expressions
25
+ * 'stmts' => array(): Statements
26
+ * @param array $attributes Additional attributes
27
+ */
28
+ public function __construct(array $subNodes = [], array $attributes = []) {
29
+ $this->attributes = $attributes;
30
+ $this->init = $subNodes['init'] ?? [];
31
+ $this->cond = $subNodes['cond'] ?? [];
32
+ $this->loop = $subNodes['loop'] ?? [];
33
+ $this->stmts = $subNodes['stmts'] ?? [];
34
+ }
35
+
36
+ public function getSubNodeNames() : array {
37
+ return ['init', 'cond', 'loop', 'stmts'];
38
+ }
39
+
40
+ public function getType() : string {
41
+ return 'Stmt_For';
42
+ }
43
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Foreach_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr Expression to iterate */
10
+ public $expr;
11
+ /** @var null|Node\Expr Variable to assign key to */
12
+ public $keyVar;
13
+ /** @var bool Whether to assign value by reference */
14
+ public $byRef;
15
+ /** @var Node\Expr Variable to assign value to */
16
+ public $valueVar;
17
+ /** @var Node\Stmt[] Statements */
18
+ public $stmts;
19
+
20
+ /**
21
+ * Constructs a foreach node.
22
+ *
23
+ * @param Node\Expr $expr Expression to iterate
24
+ * @param Node\Expr $valueVar Variable to assign value to
25
+ * @param array $subNodes Array of the following optional subnodes:
26
+ * 'keyVar' => null : Variable to assign key to
27
+ * 'byRef' => false : Whether to assign value by reference
28
+ * 'stmts' => array(): Statements
29
+ * @param array $attributes Additional attributes
30
+ */
31
+ public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) {
32
+ $this->attributes = $attributes;
33
+ $this->expr = $expr;
34
+ $this->keyVar = $subNodes['keyVar'] ?? null;
35
+ $this->byRef = $subNodes['byRef'] ?? false;
36
+ $this->valueVar = $valueVar;
37
+ $this->stmts = $subNodes['stmts'] ?? [];
38
+ }
39
+
40
+ public function getSubNodeNames() : array {
41
+ return ['expr', 'keyVar', 'byRef', 'valueVar', 'stmts'];
42
+ }
43
+
44
+ public function getType() : string {
45
+ return 'Stmt_Foreach';
46
+ }
47
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\FunctionLike;
7
+
8
+ /**
9
+ * @property Node\Name $namespacedName Namespaced name (if using NameResolver)
10
+ */
11
+ class Function_ extends Node\Stmt implements FunctionLike
12
+ {
13
+ /** @var bool Whether function returns by reference */
14
+ public $byRef;
15
+ /** @var Node\Identifier Name */
16
+ public $name;
17
+ /** @var Node\Param[] Parameters */
18
+ public $params;
19
+ /** @var null|Node\Identifier|Node\Name|Node\NullableType|Node\UnionType Return type */
20
+ public $returnType;
21
+ /** @var Node\Stmt[] Statements */
22
+ public $stmts;
23
+
24
+ /**
25
+ * Constructs a function node.
26
+ *
27
+ * @param string|Node\Identifier $name Name
28
+ * @param array $subNodes Array of the following optional subnodes:
29
+ * 'byRef' => false : Whether to return by reference
30
+ * 'params' => array(): Parameters
31
+ * 'returnType' => null : Return type
32
+ * 'stmts' => array(): Statements
33
+ * @param array $attributes Additional attributes
34
+ */
35
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
36
+ $this->attributes = $attributes;
37
+ $this->byRef = $subNodes['byRef'] ?? false;
38
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
39
+ $this->params = $subNodes['params'] ?? [];
40
+ $returnType = $subNodes['returnType'] ?? null;
41
+ $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType;
42
+ $this->stmts = $subNodes['stmts'] ?? [];
43
+ }
44
+
45
+ public function getSubNodeNames() : array {
46
+ return ['byRef', 'name', 'params', 'returnType', 'stmts'];
47
+ }
48
+
49
+ public function returnsByRef() : bool {
50
+ return $this->byRef;
51
+ }
52
+
53
+ public function getParams() : array {
54
+ return $this->params;
55
+ }
56
+
57
+ public function getReturnType() {
58
+ return $this->returnType;
59
+ }
60
+
61
+ /** @return Node\Stmt[] */
62
+ public function getStmts() : array {
63
+ return $this->stmts;
64
+ }
65
+
66
+ public function getType() : string {
67
+ return 'Stmt_Function';
68
+ }
69
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Global_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr[] Variables */
10
+ public $vars;
11
+
12
+ /**
13
+ * Constructs a global variables list node.
14
+ *
15
+ * @param Node\Expr[] $vars Variables to unset
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $vars, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->vars = $vars;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['vars'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Global';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Identifier;
6
+ use PhpParser\Node\Stmt;
7
+
8
+ class Goto_ extends Stmt
9
+ {
10
+ /** @var Identifier Name of label to jump to */
11
+ public $name;
12
+
13
+ /**
14
+ * Constructs a goto node.
15
+ *
16
+ * @param string|Identifier $name Name of label to jump to
17
+ * @param array $attributes Additional attributes
18
+ */
19
+ public function __construct($name, array $attributes = []) {
20
+ $this->attributes = $attributes;
21
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
22
+ }
23
+
24
+ public function getSubNodeNames() : array {
25
+ return ['name'];
26
+ }
27
+
28
+ public function getType() : string {
29
+ return 'Stmt_Goto';
30
+ }
31
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Name;
6
+ use PhpParser\Node\Stmt;
7
+
8
+ class GroupUse extends Stmt
9
+ {
10
+ /** @var int Type of group use */
11
+ public $type;
12
+ /** @var Name Prefix for uses */
13
+ public $prefix;
14
+ /** @var UseUse[] Uses */
15
+ public $uses;
16
+
17
+ /**
18
+ * Constructs a group use node.
19
+ *
20
+ * @param Name $prefix Prefix for uses
21
+ * @param UseUse[] $uses Uses
22
+ * @param int $type Type of group use
23
+ * @param array $attributes Additional attributes
24
+ */
25
+ public function __construct(Name $prefix, array $uses, int $type = Use_::TYPE_NORMAL, array $attributes = []) {
26
+ $this->attributes = $attributes;
27
+ $this->type = $type;
28
+ $this->prefix = $prefix;
29
+ $this->uses = $uses;
30
+ }
31
+
32
+ public function getSubNodeNames() : array {
33
+ return ['type', 'prefix', 'uses'];
34
+ }
35
+
36
+ public function getType() : string {
37
+ return 'Stmt_GroupUse';
38
+ }
39
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Stmt;
6
+
7
+ class HaltCompiler extends Stmt
8
+ {
9
+ /** @var string Remaining text after halt compiler statement. */
10
+ public $remaining;
11
+
12
+ /**
13
+ * Constructs a __halt_compiler node.
14
+ *
15
+ * @param string $remaining Remaining text after halt compiler statement.
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(string $remaining, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->remaining = $remaining;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['remaining'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_HaltCompiler';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class If_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr Condition expression */
10
+ public $cond;
11
+ /** @var Node\Stmt[] Statements */
12
+ public $stmts;
13
+ /** @var ElseIf_[] Elseif clauses */
14
+ public $elseifs;
15
+ /** @var null|Else_ Else clause */
16
+ public $else;
17
+
18
+ /**
19
+ * Constructs an if node.
20
+ *
21
+ * @param Node\Expr $cond Condition
22
+ * @param array $subNodes Array of the following optional subnodes:
23
+ * 'stmts' => array(): Statements
24
+ * 'elseifs' => array(): Elseif clauses
25
+ * 'else' => null : Else clause
26
+ * @param array $attributes Additional attributes
27
+ */
28
+ public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) {
29
+ $this->attributes = $attributes;
30
+ $this->cond = $cond;
31
+ $this->stmts = $subNodes['stmts'] ?? [];
32
+ $this->elseifs = $subNodes['elseifs'] ?? [];
33
+ $this->else = $subNodes['else'] ?? null;
34
+ }
35
+
36
+ public function getSubNodeNames() : array {
37
+ return ['cond', 'stmts', 'elseifs', 'else'];
38
+ }
39
+
40
+ public function getType() : string {
41
+ return 'Stmt_If';
42
+ }
43
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Stmt;
6
+
7
+ class InlineHTML extends Stmt
8
+ {
9
+ /** @var string String */
10
+ public $value;
11
+
12
+ /**
13
+ * Constructs an inline HTML node.
14
+ *
15
+ * @param string $value String
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(string $value, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->value = $value;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['value'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_InlineHTML';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Interface_ extends ClassLike
8
+ {
9
+ /** @var Node\Name[] Extended interfaces */
10
+ public $extends;
11
+
12
+ /**
13
+ * Constructs a class node.
14
+ *
15
+ * @param string|Node\Identifier $name Name
16
+ * @param array $subNodes Array of the following optional subnodes:
17
+ * 'extends' => array(): Name of extended interfaces
18
+ * 'stmts' => array(): Statements
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
24
+ $this->extends = $subNodes['extends'] ?? [];
25
+ $this->stmts = $subNodes['stmts'] ?? [];
26
+ }
27
+
28
+ public function getSubNodeNames() : array {
29
+ return ['name', 'extends', 'stmts'];
30
+ }
31
+
32
+ public function getType() : string {
33
+ return 'Stmt_Interface';
34
+ }
35
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Identifier;
6
+ use PhpParser\Node\Stmt;
7
+
8
+ class Label extends Stmt
9
+ {
10
+ /** @var Identifier Name */
11
+ public $name;
12
+
13
+ /**
14
+ * Constructs a label node.
15
+ *
16
+ * @param string|Identifier $name Name
17
+ * @param array $attributes Additional attributes
18
+ */
19
+ public function __construct($name, array $attributes = []) {
20
+ $this->attributes = $attributes;
21
+ $this->name = \is_string($name) ? new Identifier($name) : $name;
22
+ }
23
+
24
+ public function getSubNodeNames() : array {
25
+ return ['name'];
26
+ }
27
+
28
+ public function getType() : string {
29
+ return 'Stmt_Label';
30
+ }
31
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Namespace_ extends Node\Stmt
8
+ {
9
+ /* For use in the "kind" attribute */
10
+ const KIND_SEMICOLON = 1;
11
+ const KIND_BRACED = 2;
12
+
13
+ /** @var null|Node\Name Name */
14
+ public $name;
15
+ /** @var Node\Stmt[] Statements */
16
+ public $stmts;
17
+
18
+ /**
19
+ * Constructs a namespace node.
20
+ *
21
+ * @param null|Node\Name $name Name
22
+ * @param null|Node\Stmt[] $stmts Statements
23
+ * @param array $attributes Additional attributes
24
+ */
25
+ public function __construct(Node\Name $name = null, $stmts = [], array $attributes = []) {
26
+ $this->attributes = $attributes;
27
+ $this->name = $name;
28
+ $this->stmts = $stmts;
29
+ }
30
+
31
+ public function getSubNodeNames() : array {
32
+ return ['name', 'stmts'];
33
+ }
34
+
35
+ public function getType() : string {
36
+ return 'Stmt_Namespace';
37
+ }
38
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ /** Nop/empty statement (;). */
8
+ class Nop extends Node\Stmt
9
+ {
10
+ public function getSubNodeNames() : array {
11
+ return [];
12
+ }
13
+
14
+ public function getType() : string {
15
+ return 'Stmt_Nop';
16
+ }
17
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Identifier;
7
+ use PhpParser\Node\Name;
8
+ use PhpParser\Node\NullableType;
9
+ use PhpParser\Node\UnionType;
10
+
11
+ class Property extends Node\Stmt
12
+ {
13
+ /** @var int Modifiers */
14
+ public $flags;
15
+ /** @var PropertyProperty[] Properties */
16
+ public $props;
17
+ /** @var null|Identifier|Name|NullableType|UnionType Type declaration */
18
+ public $type;
19
+
20
+ /**
21
+ * Constructs a class property list node.
22
+ *
23
+ * @param int $flags Modifiers
24
+ * @param PropertyProperty[] $props Properties
25
+ * @param array $attributes Additional attributes
26
+ * @param null|string|Identifier|Name|NullableType|UnionType $type Type declaration
27
+ */
28
+ public function __construct(int $flags, array $props, array $attributes = [], $type = null) {
29
+ $this->attributes = $attributes;
30
+ $this->flags = $flags;
31
+ $this->props = $props;
32
+ $this->type = \is_string($type) ? new Identifier($type) : $type;
33
+ }
34
+
35
+ public function getSubNodeNames() : array {
36
+ return ['flags', 'type', 'props'];
37
+ }
38
+
39
+ /**
40
+ * Whether the property is explicitly or implicitly public.
41
+ *
42
+ * @return bool
43
+ */
44
+ public function isPublic() : bool {
45
+ return ($this->flags & Class_::MODIFIER_PUBLIC) !== 0
46
+ || ($this->flags & Class_::VISIBILITY_MODIFIER_MASK) === 0;
47
+ }
48
+
49
+ /**
50
+ * Whether the property is protected.
51
+ *
52
+ * @return bool
53
+ */
54
+ public function isProtected() : bool {
55
+ return (bool) ($this->flags & Class_::MODIFIER_PROTECTED);
56
+ }
57
+
58
+ /**
59
+ * Whether the property is private.
60
+ *
61
+ * @return bool
62
+ */
63
+ public function isPrivate() : bool {
64
+ return (bool) ($this->flags & Class_::MODIFIER_PRIVATE);
65
+ }
66
+
67
+ /**
68
+ * Whether the property is static.
69
+ *
70
+ * @return bool
71
+ */
72
+ public function isStatic() : bool {
73
+ return (bool) ($this->flags & Class_::MODIFIER_STATIC);
74
+ }
75
+
76
+ public function getType() : string {
77
+ return 'Stmt_Property';
78
+ }
79
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class PropertyProperty extends Node\Stmt
8
+ {
9
+ /** @var Node\VarLikeIdentifier Name */
10
+ public $name;
11
+ /** @var null|Node\Expr Default */
12
+ public $default;
13
+
14
+ /**
15
+ * Constructs a class property node.
16
+ *
17
+ * @param string|Node\VarLikeIdentifier $name Name
18
+ * @param null|Node\Expr $default Default value
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct($name, Node\Expr $default = null, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name;
24
+ $this->default = $default;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['name', 'default'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_PropertyProperty';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Return_ extends Node\Stmt
8
+ {
9
+ /** @var null|Node\Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a return node.
14
+ *
15
+ * @param null|Node\Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Node\Expr $expr = null, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Return';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Expr;
7
+
8
+ class StaticVar extends Node\Stmt
9
+ {
10
+ /** @var Expr\Variable Variable */
11
+ public $var;
12
+ /** @var null|Node\Expr Default value */
13
+ public $default;
14
+
15
+ /**
16
+ * Constructs a static variable node.
17
+ *
18
+ * @param Expr\Variable $var Name
19
+ * @param null|Node\Expr $default Default value
20
+ * @param array $attributes Additional attributes
21
+ */
22
+ public function __construct(
23
+ Expr\Variable $var, Node\Expr $default = null, array $attributes = []
24
+ ) {
25
+ $this->attributes = $attributes;
26
+ $this->var = $var;
27
+ $this->default = $default;
28
+ }
29
+
30
+ public function getSubNodeNames() : array {
31
+ return ['var', 'default'];
32
+ }
33
+
34
+ public function getType() : string {
35
+ return 'Stmt_StaticVar';
36
+ }
37
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Stmt;
6
+
7
+ class Static_ extends Stmt
8
+ {
9
+ /** @var StaticVar[] Variable definitions */
10
+ public $vars;
11
+
12
+ /**
13
+ * Constructs a static variables list node.
14
+ *
15
+ * @param StaticVar[] $vars Variable definitions
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $vars, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->vars = $vars;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['vars'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Static';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Switch_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr Condition */
10
+ public $cond;
11
+ /** @var Case_[] Case list */
12
+ public $cases;
13
+
14
+ /**
15
+ * Constructs a case node.
16
+ *
17
+ * @param Node\Expr $cond Condition
18
+ * @param Case_[] $cases Case list
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Node\Expr $cond, array $cases, array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->cond = $cond;
24
+ $this->cases = $cases;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['cond', 'cases'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_Switch';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Throw_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Throw_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr Expression */
10
+ public $expr;
11
+
12
+ /**
13
+ * Constructs a throw node.
14
+ *
15
+ * @param Node\Expr $expr Expression
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(Node\Expr $expr, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->expr = $expr;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['expr'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Throw';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class TraitUse extends Node\Stmt
8
+ {
9
+ /** @var Node\Name[] Traits */
10
+ public $traits;
11
+ /** @var TraitUseAdaptation[] Adaptations */
12
+ public $adaptations;
13
+
14
+ /**
15
+ * Constructs a trait use node.
16
+ *
17
+ * @param Node\Name[] $traits Traits
18
+ * @param TraitUseAdaptation[] $adaptations Adaptations
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(array $traits, array $adaptations = [], array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->traits = $traits;
24
+ $this->adaptations = $adaptations;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['traits', 'adaptations'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_TraitUse';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ abstract class TraitUseAdaptation extends Node\Stmt
8
+ {
9
+ /** @var Node\Name|null Trait name */
10
+ public $trait;
11
+ /** @var Node\Identifier Method name */
12
+ public $method;
13
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt\TraitUseAdaptation;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Alias extends Node\Stmt\TraitUseAdaptation
8
+ {
9
+ /** @var null|int New modifier */
10
+ public $newModifier;
11
+ /** @var null|Node\Identifier New name */
12
+ public $newName;
13
+
14
+ /**
15
+ * Constructs a trait use precedence adaptation node.
16
+ *
17
+ * @param null|Node\Name $trait Trait name
18
+ * @param string|Node\Identifier $method Method name
19
+ * @param null|int $newModifier New modifier
20
+ * @param null|string|Node\Identifier $newName New name
21
+ * @param array $attributes Additional attributes
22
+ */
23
+ public function __construct($trait, $method, $newModifier, $newName, array $attributes = []) {
24
+ $this->attributes = $attributes;
25
+ $this->trait = $trait;
26
+ $this->method = \is_string($method) ? new Node\Identifier($method) : $method;
27
+ $this->newModifier = $newModifier;
28
+ $this->newName = \is_string($newName) ? new Node\Identifier($newName) : $newName;
29
+ }
30
+
31
+ public function getSubNodeNames() : array {
32
+ return ['trait', 'method', 'newModifier', 'newName'];
33
+ }
34
+
35
+ public function getType() : string {
36
+ return 'Stmt_TraitUseAdaptation_Alias';
37
+ }
38
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt\TraitUseAdaptation;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Precedence extends Node\Stmt\TraitUseAdaptation
8
+ {
9
+ /** @var Node\Name[] Overwritten traits */
10
+ public $insteadof;
11
+
12
+ /**
13
+ * Constructs a trait use precedence adaptation node.
14
+ *
15
+ * @param Node\Name $trait Trait name
16
+ * @param string|Node\Identifier $method Method name
17
+ * @param Node\Name[] $insteadof Overwritten traits
18
+ * @param array $attributes Additional attributes
19
+ */
20
+ public function __construct(Node\Name $trait, $method, array $insteadof, array $attributes = []) {
21
+ $this->attributes = $attributes;
22
+ $this->trait = $trait;
23
+ $this->method = \is_string($method) ? new Node\Identifier($method) : $method;
24
+ $this->insteadof = $insteadof;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['trait', 'method', 'insteadof'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_TraitUseAdaptation_Precedence';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Trait_ extends ClassLike
8
+ {
9
+ /**
10
+ * Constructs a trait node.
11
+ *
12
+ * @param string|Node\Identifier $name Name
13
+ * @param array $subNodes Array of the following optional subnodes:
14
+ * 'stmts' => array(): Statements
15
+ * @param array $attributes Additional attributes
16
+ */
17
+ public function __construct($name, array $subNodes = [], array $attributes = []) {
18
+ $this->attributes = $attributes;
19
+ $this->name = \is_string($name) ? new Node\Identifier($name) : $name;
20
+ $this->stmts = $subNodes['stmts'] ?? [];
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['name', 'stmts'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Trait';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class TryCatch extends Node\Stmt
8
+ {
9
+ /** @var Node\Stmt[] Statements */
10
+ public $stmts;
11
+ /** @var Catch_[] Catches */
12
+ public $catches;
13
+ /** @var null|Finally_ Optional finally node */
14
+ public $finally;
15
+
16
+ /**
17
+ * Constructs a try catch node.
18
+ *
19
+ * @param Node\Stmt[] $stmts Statements
20
+ * @param Catch_[] $catches Catches
21
+ * @param null|Finally_ $finally Optional finally node
22
+ * @param array $attributes Additional attributes
23
+ */
24
+ public function __construct(array $stmts, array $catches, Finally_ $finally = null, array $attributes = []) {
25
+ $this->attributes = $attributes;
26
+ $this->stmts = $stmts;
27
+ $this->catches = $catches;
28
+ $this->finally = $finally;
29
+ }
30
+
31
+ public function getSubNodeNames() : array {
32
+ return ['stmts', 'catches', 'finally'];
33
+ }
34
+
35
+ public function getType() : string {
36
+ return 'Stmt_TryCatch';
37
+ }
38
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class Unset_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr[] Variables to unset */
10
+ public $vars;
11
+
12
+ /**
13
+ * Constructs an unset node.
14
+ *
15
+ * @param Node\Expr[] $vars Variables to unset
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $vars, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->vars = $vars;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['vars'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'Stmt_Unset';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\Node\Identifier;
7
+
8
+ class UseUse extends Node\Stmt
9
+ {
10
+ /** @var int One of the Stmt\Use_::TYPE_* constants. Will only differ from TYPE_UNKNOWN for mixed group uses */
11
+ public $type;
12
+ /** @var Node\Name Namespace, class, function or constant to alias */
13
+ public $name;
14
+ /** @var Identifier|null Alias */
15
+ public $alias;
16
+
17
+ /**
18
+ * Constructs an alias (use) node.
19
+ *
20
+ * @param Node\Name $name Namespace/Class to alias
21
+ * @param null|string|Identifier $alias Alias
22
+ * @param int $type Type of the use element (for mixed group use only)
23
+ * @param array $attributes Additional attributes
24
+ */
25
+ public function __construct(Node\Name $name, $alias = null, int $type = Use_::TYPE_UNKNOWN, array $attributes = []) {
26
+ $this->attributes = $attributes;
27
+ $this->type = $type;
28
+ $this->name = $name;
29
+ $this->alias = \is_string($alias) ? new Identifier($alias) : $alias;
30
+ }
31
+
32
+ public function getSubNodeNames() : array {
33
+ return ['type', 'name', 'alias'];
34
+ }
35
+
36
+ /**
37
+ * Get alias. If not explicitly given this is the last component of the used name.
38
+ *
39
+ * @return Identifier
40
+ */
41
+ public function getAlias() : Identifier {
42
+ if (null !== $this->alias) {
43
+ return $this->alias;
44
+ }
45
+
46
+ return new Identifier($this->name->getLast());
47
+ }
48
+
49
+ public function getType() : string {
50
+ return 'Stmt_UseUse';
51
+ }
52
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node\Stmt;
6
+
7
+ class Use_ extends Stmt
8
+ {
9
+ /**
10
+ * Unknown type. Both Stmt\Use_ / Stmt\GroupUse and Stmt\UseUse have a $type property, one of them will always be
11
+ * TYPE_UNKNOWN while the other has one of the three other possible types. For normal use statements the type on the
12
+ * Stmt\UseUse is unknown. It's only the other way around for mixed group use declarations.
13
+ */
14
+ const TYPE_UNKNOWN = 0;
15
+ /** Class or namespace import */
16
+ const TYPE_NORMAL = 1;
17
+ /** Function import */
18
+ const TYPE_FUNCTION = 2;
19
+ /** Constant import */
20
+ const TYPE_CONSTANT = 3;
21
+
22
+ /** @var int Type of alias */
23
+ public $type;
24
+ /** @var UseUse[] Aliases */
25
+ public $uses;
26
+
27
+ /**
28
+ * Constructs an alias (use) list node.
29
+ *
30
+ * @param UseUse[] $uses Aliases
31
+ * @param int $type Type of alias
32
+ * @param array $attributes Additional attributes
33
+ */
34
+ public function __construct(array $uses, int $type = self::TYPE_NORMAL, array $attributes = []) {
35
+ $this->attributes = $attributes;
36
+ $this->type = $type;
37
+ $this->uses = $uses;
38
+ }
39
+
40
+ public function getSubNodeNames() : array {
41
+ return ['type', 'uses'];
42
+ }
43
+
44
+ public function getType() : string {
45
+ return 'Stmt_Use';
46
+ }
47
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node\Stmt;
4
+
5
+ use PhpParser\Node;
6
+
7
+ class While_ extends Node\Stmt
8
+ {
9
+ /** @var Node\Expr Condition */
10
+ public $cond;
11
+ /** @var Node\Stmt[] Statements */
12
+ public $stmts;
13
+
14
+ /**
15
+ * Constructs a while node.
16
+ *
17
+ * @param Node\Expr $cond Condition
18
+ * @param Node\Stmt[] $stmts Statements
19
+ * @param array $attributes Additional attributes
20
+ */
21
+ public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) {
22
+ $this->attributes = $attributes;
23
+ $this->cond = $cond;
24
+ $this->stmts = $stmts;
25
+ }
26
+
27
+ public function getSubNodeNames() : array {
28
+ return ['cond', 'stmts'];
29
+ }
30
+
31
+ public function getType() : string {
32
+ return 'Stmt_While';
33
+ }
34
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ use PhpParser\NodeAbstract;
6
+
7
+ class UnionType extends NodeAbstract
8
+ {
9
+ /** @var (Identifier|Name)[] Types */
10
+ public $types;
11
+
12
+ /**
13
+ * Constructs a union type.
14
+ *
15
+ * @param (Identifier|Name)[] $types Types
16
+ * @param array $attributes Additional attributes
17
+ */
18
+ public function __construct(array $types, array $attributes = []) {
19
+ $this->attributes = $attributes;
20
+ $this->types = $types;
21
+ }
22
+
23
+ public function getSubNodeNames() : array {
24
+ return ['types'];
25
+ }
26
+
27
+ public function getType() : string {
28
+ return 'UnionType';
29
+ }
30
+ }
vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\Node;
4
+
5
+ /**
6
+ * Represents a name that is written in source code with a leading dollar,
7
+ * but is not a proper variable. The leading dollar is not stored as part of the name.
8
+ *
9
+ * Examples: Names in property declarations are formatted as variables. Names in static property
10
+ * lookups are also formatted as variables.
11
+ */
12
+ class VarLikeIdentifier extends Identifier
13
+ {
14
+ public function getType() : string {
15
+ return 'VarLikeIdentifier';
16
+ }
17
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ abstract class NodeAbstract implements Node, \JsonSerializable
6
+ {
7
+ protected $attributes;
8
+
9
+ /**
10
+ * Creates a Node.
11
+ *
12
+ * @param array $attributes Array of attributes
13
+ */
14
+ public function __construct(array $attributes = []) {
15
+ $this->attributes = $attributes;
16
+ }
17
+
18
+ /**
19
+ * Gets line the node started in (alias of getStartLine).
20
+ *
21
+ * @return int Start line (or -1 if not available)
22
+ */
23
+ public function getLine() : int {
24
+ return $this->attributes['startLine'] ?? -1;
25
+ }
26
+
27
+ /**
28
+ * Gets line the node started in.
29
+ *
30
+ * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default).
31
+ *
32
+ * @return int Start line (or -1 if not available)
33
+ */
34
+ public function getStartLine() : int {
35
+ return $this->attributes['startLine'] ?? -1;
36
+ }
37
+
38
+ /**
39
+ * Gets the line the node ended in.
40
+ *
41
+ * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default).
42
+ *
43
+ * @return int End line (or -1 if not available)
44
+ */
45
+ public function getEndLine() : int {
46
+ return $this->attributes['endLine'] ?? -1;
47
+ }
48
+
49
+ /**
50
+ * Gets the token offset of the first token that is part of this node.
51
+ *
52
+ * The offset is an index into the array returned by Lexer::getTokens().
53
+ *
54
+ * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default).
55
+ *
56
+ * @return int Token start position (or -1 if not available)
57
+ */
58
+ public function getStartTokenPos() : int {
59
+ return $this->attributes['startTokenPos'] ?? -1;
60
+ }
61
+
62
+ /**
63
+ * Gets the token offset of the last token that is part of this node.
64
+ *
65
+ * The offset is an index into the array returned by Lexer::getTokens().
66
+ *
67
+ * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default).
68
+ *
69
+ * @return int Token end position (or -1 if not available)
70
+ */
71
+ public function getEndTokenPos() : int {
72
+ return $this->attributes['endTokenPos'] ?? -1;
73
+ }
74
+
75
+ /**
76
+ * Gets the file offset of the first character that is part of this node.
77
+ *
78
+ * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default).
79
+ *
80
+ * @return int File start position (or -1 if not available)
81
+ */
82
+ public function getStartFilePos() : int {
83
+ return $this->attributes['startFilePos'] ?? -1;
84
+ }
85
+
86
+ /**
87
+ * Gets the file offset of the last character that is part of this node.
88
+ *
89
+ * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default).
90
+ *
91
+ * @return int File end position (or -1 if not available)
92
+ */
93
+ public function getEndFilePos() : int {
94
+ return $this->attributes['endFilePos'] ?? -1;
95
+ }
96
+
97
+ /**
98
+ * Gets all comments directly preceding this node.
99
+ *
100
+ * The comments are also available through the "comments" attribute.
101
+ *
102
+ * @return Comment[]
103
+ */
104
+ public function getComments() : array {
105
+ return $this->attributes['comments'] ?? [];
106
+ }
107
+
108
+ /**
109
+ * Gets the doc comment of the node.
110
+ *
111
+ * The doc comment has to be the last comment associated with the node.
112
+ *
113
+ * @return null|Comment\Doc Doc comment object or null
114
+ */
115
+ public function getDocComment() {
116
+ $comments = $this->getComments();
117
+ if (!$comments) {
118
+ return null;
119
+ }
120
+
121
+ $lastComment = $comments[count($comments) - 1];
122
+ if (!$lastComment instanceof Comment\Doc) {
123
+ return null;
124
+ }
125
+
126
+ return $lastComment;
127
+ }
128
+
129
+ /**
130
+ * Sets the doc comment of the node.
131
+ *
132
+ * This will either replace an existing doc comment or add it to the comments array.
133
+ *
134
+ * @param Comment\Doc $docComment Doc comment to set
135
+ */
136
+ public function setDocComment(Comment\Doc $docComment) {
137
+ $comments = $this->getComments();
138
+
139
+ $numComments = count($comments);
140
+ if ($numComments > 0 && $comments[$numComments - 1] instanceof Comment\Doc) {
141
+ // Replace existing doc comment
142
+ $comments[$numComments - 1] = $docComment;
143
+ } else {
144
+ // Append new comment
145
+ $comments[] = $docComment;
146
+ }
147
+
148
+ $this->setAttribute('comments', $comments);
149
+ }
150
+
151
+ public function setAttribute(string $key, $value) {
152
+ $this->attributes[$key] = $value;
153
+ }
154
+
155
+ public function hasAttribute(string $key) : bool {
156
+ return array_key_exists($key, $this->attributes);
157
+ }
158
+
159
+ public function getAttribute(string $key, $default = null) {
160
+ if (array_key_exists($key, $this->attributes)) {
161
+ return $this->attributes[$key];
162
+ }
163
+
164
+ return $default;
165
+ }
166
+
167
+ public function getAttributes() : array {
168
+ return $this->attributes;
169
+ }
170
+
171
+ public function setAttributes(array $attributes) {
172
+ $this->attributes = $attributes;
173
+ }
174
+
175
+ /**
176
+ * @return array
177
+ */
178
+ public function jsonSerialize() : array {
179
+ return ['nodeType' => $this->getType()] + get_object_vars($this);
180
+ }
181
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\Node\Expr\Include_;
6
+ use PhpParser\Node\Stmt\Class_;
7
+ use PhpParser\Node\Stmt\GroupUse;
8
+ use PhpParser\Node\Stmt\Use_;
9
+ use PhpParser\Node\Stmt\UseUse;
10
+
11
+ class NodeDumper
12
+ {
13
+ private $dumpComments;
14
+ private $dumpPositions;
15
+ private $code;
16
+
17
+ /**
18
+ * Constructs a NodeDumper.
19
+ *
20
+ * Supported options:
21
+ * * bool dumpComments: Whether comments should be dumped.
22
+ * * bool dumpPositions: Whether line/offset information should be dumped. To dump offset
23
+ * information, the code needs to be passed to dump().
24
+ *
25
+ * @param array $options Options (see description)
26
+ */
27
+ public function __construct(array $options = []) {
28
+ $this->dumpComments = !empty($options['dumpComments']);
29
+ $this->dumpPositions = !empty($options['dumpPositions']);
30
+ }
31
+
32
+ /**
33
+ * Dumps a node or array.
34
+ *
35
+ * @param array|Node $node Node or array to dump
36
+ * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if
37
+ * the dumpPositions option is enabled and the dumping of node offsets
38
+ * is desired.
39
+ *
40
+ * @return string Dumped value
41
+ */
42
+ public function dump($node, string $code = null) : string {
43
+ $this->code = $code;
44
+ return $this->dumpRecursive($node);
45
+ }
46
+
47
+ protected function dumpRecursive($node) {
48
+ if ($node instanceof Node) {
49
+ $r = $node->getType();
50
+ if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) {
51
+ $r .= $p;
52
+ }
53
+ $r .= '(';
54
+
55
+ foreach ($node->getSubNodeNames() as $key) {
56
+ $r .= "\n " . $key . ': ';
57
+
58
+ $value = $node->$key;
59
+ if (null === $value) {
60
+ $r .= 'null';
61
+ } elseif (false === $value) {
62
+ $r .= 'false';
63
+ } elseif (true === $value) {
64
+ $r .= 'true';
65
+ } elseif (is_scalar($value)) {
66
+ if ('flags' === $key || 'newModifier' === $key) {
67
+ $r .= $this->dumpFlags($value);
68
+ } elseif ('type' === $key && $node instanceof Include_) {
69
+ $r .= $this->dumpIncludeType($value);
70
+ } elseif ('type' === $key
71
+ && ($node instanceof Use_ || $node instanceof UseUse || $node instanceof GroupUse)) {
72
+ $r .= $this->dumpUseType($value);
73
+ } else {
74
+ $r .= $value;
75
+ }
76
+ } else {
77
+ $r .= str_replace("\n", "\n ", $this->dumpRecursive($value));
78
+ }
79
+ }
80
+
81
+ if ($this->dumpComments && $comments = $node->getComments()) {
82
+ $r .= "\n comments: " . str_replace("\n", "\n ", $this->dumpRecursive($comments));
83
+ }
84
+ } elseif (is_array($node)) {
85
+ $r = 'array(';
86
+
87
+ foreach ($node as $key => $value) {
88
+ $r .= "\n " . $key . ': ';
89
+
90
+ if (null === $value) {
91
+ $r .= 'null';
92
+ } elseif (false === $value) {
93
+ $r .= 'false';
94
+ } elseif (true === $value) {
95
+ $r .= 'true';
96
+ } elseif (is_scalar($value)) {
97
+ $r .= $value;
98
+ } else {
99
+ $r .= str_replace("\n", "\n ", $this->dumpRecursive($value));
100
+ }
101
+ }
102
+ } elseif ($node instanceof Comment) {
103
+ return $node->getReformattedText();
104
+ } else {
105
+ throw new \InvalidArgumentException('Can only dump nodes and arrays.');
106
+ }
107
+
108
+ return $r . "\n)";
109
+ }
110
+
111
+ protected function dumpFlags($flags) {
112
+ $strs = [];
113
+ if ($flags & Class_::MODIFIER_PUBLIC) {
114
+ $strs[] = 'MODIFIER_PUBLIC';
115
+ }
116
+ if ($flags & Class_::MODIFIER_PROTECTED) {
117
+ $strs[] = 'MODIFIER_PROTECTED';
118
+ }
119
+ if ($flags & Class_::MODIFIER_PRIVATE) {
120
+ $strs[] = 'MODIFIER_PRIVATE';
121
+ }
122
+ if ($flags & Class_::MODIFIER_ABSTRACT) {
123
+ $strs[] = 'MODIFIER_ABSTRACT';
124
+ }
125
+ if ($flags & Class_::MODIFIER_STATIC) {
126
+ $strs[] = 'MODIFIER_STATIC';
127
+ }
128
+ if ($flags & Class_::MODIFIER_FINAL) {
129
+ $strs[] = 'MODIFIER_FINAL';
130
+ }
131
+
132
+ if ($strs) {
133
+ return implode(' | ', $strs) . ' (' . $flags . ')';
134
+ } else {
135
+ return $flags;
136
+ }
137
+ }
138
+
139
+ protected function dumpIncludeType($type) {
140
+ $map = [
141
+ Include_::TYPE_INCLUDE => 'TYPE_INCLUDE',
142
+ Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE',
143
+ Include_::TYPE_REQUIRE => 'TYPE_REQUIRE',
144
+ Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE',
145
+ ];
146
+
147
+ if (!isset($map[$type])) {
148
+ return $type;
149
+ }
150
+ return $map[$type] . ' (' . $type . ')';
151
+ }
152
+
153
+ protected function dumpUseType($type) {
154
+ $map = [
155
+ Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN',
156
+ Use_::TYPE_NORMAL => 'TYPE_NORMAL',
157
+ Use_::TYPE_FUNCTION => 'TYPE_FUNCTION',
158
+ Use_::TYPE_CONSTANT => 'TYPE_CONSTANT',
159
+ ];
160
+
161
+ if (!isset($map[$type])) {
162
+ return $type;
163
+ }
164
+ return $map[$type] . ' (' . $type . ')';
165
+ }
166
+
167
+ /**
168
+ * Dump node position, if possible.
169
+ *
170
+ * @param Node $node Node for which to dump position
171
+ *
172
+ * @return string|null Dump of position, or null if position information not available
173
+ */
174
+ protected function dumpPosition(Node $node) {
175
+ if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) {
176
+ return null;
177
+ }
178
+
179
+ $start = $node->getStartLine();
180
+ $end = $node->getEndLine();
181
+ if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos')
182
+ && null !== $this->code
183
+ ) {
184
+ $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos());
185
+ $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos());
186
+ }
187
+ return "[$start - $end]";
188
+ }
189
+
190
+ // Copied from Error class
191
+ private function toColumn($code, $pos) {
192
+ if ($pos > strlen($code)) {
193
+ throw new \RuntimeException('Invalid position information');
194
+ }
195
+
196
+ $lineStartPos = strrpos($code, "\n", $pos - strlen($code));
197
+ if (false === $lineStartPos) {
198
+ $lineStartPos = -1;
199
+ }
200
+
201
+ return $pos - $lineStartPos;
202
+ }
203
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ use PhpParser\NodeVisitor\FindingVisitor;
6
+ use PhpParser\NodeVisitor\FirstFindingVisitor;
7
+
8
+ class NodeFinder
9
+ {
10
+ /**
11
+ * Find all nodes satisfying a filter callback.
12
+ *
13
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
14
+ * @param callable $filter Filter callback: function(Node $node) : bool
15
+ *
16
+ * @return Node[] Found nodes satisfying the filter callback
17
+ */
18
+ public function find($nodes, callable $filter) : array {
19
+ if (!is_array($nodes)) {
20
+ $nodes = [$nodes];
21
+ }
22
+
23
+ $visitor = new FindingVisitor($filter);
24
+
25
+ $traverser = new NodeTraverser;
26
+ $traverser->addVisitor($visitor);
27
+ $traverser->traverse($nodes);
28
+
29
+ return $visitor->getFoundNodes();
30
+ }
31
+
32
+ /**
33
+ * Find all nodes that are instances of a certain class.
34
+ *
35
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
36
+ * @param string $class Class name
37
+ *
38
+ * @return Node[] Found nodes (all instances of $class)
39
+ */
40
+ public function findInstanceOf($nodes, string $class) : array {
41
+ return $this->find($nodes, function ($node) use ($class) {
42
+ return $node instanceof $class;
43
+ });
44
+ }
45
+
46
+ /**
47
+ * Find first node satisfying a filter callback.
48
+ *
49
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
50
+ * @param callable $filter Filter callback: function(Node $node) : bool
51
+ *
52
+ * @return null|Node Found node (or null if none found)
53
+ */
54
+ public function findFirst($nodes, callable $filter) {
55
+ if (!is_array($nodes)) {
56
+ $nodes = [$nodes];
57
+ }
58
+
59
+ $visitor = new FirstFindingVisitor($filter);
60
+
61
+ $traverser = new NodeTraverser;
62
+ $traverser->addVisitor($visitor);
63
+ $traverser->traverse($nodes);
64
+
65
+ return $visitor->getFoundNode();
66
+ }
67
+
68
+ /**
69
+ * Find first node that is an instance of a certain class.
70
+ *
71
+ * @param Node|Node[] $nodes Single node or array of nodes to search in
72
+ * @param string $class Class name
73
+ *
74
+ * @return null|Node Found node, which is an instance of $class (or null if none found)
75
+ */
76
+ public function findFirstInstanceOf($nodes, string $class) {
77
+ return $this->findFirst($nodes, function ($node) use ($class) {
78
+ return $node instanceof $class;
79
+ });
80
+ }
81
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php ADDED
@@ -0,0 +1,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ class NodeTraverser implements NodeTraverserInterface
6
+ {
7
+ /**
8
+ * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CHILDREN, child nodes
9
+ * of the current node will not be traversed for any visitors.
10
+ *
11
+ * For subsequent visitors enterNode() will still be called on the current
12
+ * node and leaveNode() will also be invoked for the current node.
13
+ */
14
+ const DONT_TRAVERSE_CHILDREN = 1;
15
+
16
+ /**
17
+ * If NodeVisitor::enterNode() or NodeVisitor::leaveNode() returns
18
+ * STOP_TRAVERSAL, traversal is aborted.
19
+ *
20
+ * The afterTraverse() method will still be invoked.
21
+ */
22
+ const STOP_TRAVERSAL = 2;
23
+
24
+ /**
25
+ * If NodeVisitor::leaveNode() returns REMOVE_NODE for a node that occurs
26
+ * in an array, it will be removed from the array.
27
+ *
28
+ * For subsequent visitors leaveNode() will still be invoked for the
29
+ * removed node.
30
+ */
31
+ const REMOVE_NODE = 3;
32
+
33
+ /**
34
+ * If NodeVisitor::enterNode() returns DONT_TRAVERSE_CURRENT_AND_CHILDREN, child nodes
35
+ * of the current node will not be traversed for any visitors.
36
+ *
37
+ * For subsequent visitors enterNode() will not be called as well.
38
+ * leaveNode() will be invoked for visitors that has enterNode() method invoked.
39
+ */
40
+ const DONT_TRAVERSE_CURRENT_AND_CHILDREN = 4;
41
+
42
+ /** @var NodeVisitor[] Visitors */
43
+ protected $visitors = [];
44
+
45
+ /** @var bool Whether traversal should be stopped */
46
+ protected $stopTraversal;
47
+
48
+ public function __construct() {
49
+ // for BC
50
+ }
51
+
52
+ /**
53
+ * Adds a visitor.
54
+ *
55
+ * @param NodeVisitor $visitor Visitor to add
56
+ */
57
+ public function addVisitor(NodeVisitor $visitor) {
58
+ $this->visitors[] = $visitor;
59
+ }
60
+
61
+ /**
62
+ * Removes an added visitor.
63
+ *
64
+ * @param NodeVisitor $visitor
65
+ */
66
+ public function removeVisitor(NodeVisitor $visitor) {
67
+ foreach ($this->visitors as $index => $storedVisitor) {
68
+ if ($storedVisitor === $visitor) {
69
+ unset($this->visitors[$index]);
70
+ break;
71
+ }
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Traverses an array of nodes using the registered visitors.
77
+ *
78
+ * @param Node[] $nodes Array of nodes
79
+ *
80
+ * @return Node[] Traversed array of nodes
81
+ */
82
+ public function traverse(array $nodes) : array {
83
+ $this->stopTraversal = false;
84
+
85
+ foreach ($this->visitors as $visitor) {
86
+ if (null !== $return = $visitor->beforeTraverse($nodes)) {
87
+ $nodes = $return;
88
+ }
89
+ }
90
+
91
+ $nodes = $this->traverseArray($nodes);
92
+
93
+ foreach ($this->visitors as $visitor) {
94
+ if (null !== $return = $visitor->afterTraverse($nodes)) {
95
+ $nodes = $return;
96
+ }
97
+ }
98
+
99
+ return $nodes;
100
+ }
101
+
102
+ /**
103
+ * Recursively traverse a node.
104
+ *
105
+ * @param Node $node Node to traverse.
106
+ *
107
+ * @return Node Result of traversal (may be original node or new one)
108
+ */
109
+ protected function traverseNode(Node $node) : Node {
110
+ foreach ($node->getSubNodeNames() as $name) {
111
+ $subNode =& $node->$name;
112
+
113
+ if (\is_array($subNode)) {
114
+ $subNode = $this->traverseArray($subNode);
115
+ if ($this->stopTraversal) {
116
+ break;
117
+ }
118
+ } elseif ($subNode instanceof Node) {
119
+ $traverseChildren = true;
120
+ $breakVisitorIndex = null;
121
+
122
+ foreach ($this->visitors as $visitorIndex => $visitor) {
123
+ $return = $visitor->enterNode($subNode);
124
+ if (null !== $return) {
125
+ if ($return instanceof Node) {
126
+ $this->ensureReplacementReasonable($subNode, $return);
127
+ $subNode = $return;
128
+ } elseif (self::DONT_TRAVERSE_CHILDREN === $return) {
129
+ $traverseChildren = false;
130
+ } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
131
+ $traverseChildren = false;
132
+ $breakVisitorIndex = $visitorIndex;
133
+ break;
134
+ } elseif (self::STOP_TRAVERSAL === $return) {
135
+ $this->stopTraversal = true;
136
+ break 2;
137
+ } else {
138
+ throw new \LogicException(
139
+ 'enterNode() returned invalid value of type ' . gettype($return)
140
+ );
141
+ }
142
+ }
143
+ }
144
+
145
+ if ($traverseChildren) {
146
+ $subNode = $this->traverseNode($subNode);
147
+ if ($this->stopTraversal) {
148
+ break;
149
+ }
150
+ }
151
+
152
+ foreach ($this->visitors as $visitorIndex => $visitor) {
153
+ $return = $visitor->leaveNode($subNode);
154
+
155
+ if (null !== $return) {
156
+ if ($return instanceof Node) {
157
+ $this->ensureReplacementReasonable($subNode, $return);
158
+ $subNode = $return;
159
+ } elseif (self::STOP_TRAVERSAL === $return) {
160
+ $this->stopTraversal = true;
161
+ break 2;
162
+ } elseif (\is_array($return)) {
163
+ throw new \LogicException(
164
+ 'leaveNode() may only return an array ' .
165
+ 'if the parent structure is an array'
166
+ );
167
+ } else {
168
+ throw new \LogicException(
169
+ 'leaveNode() returned invalid value of type ' . gettype($return)
170
+ );
171
+ }
172
+ }
173
+
174
+ if ($breakVisitorIndex === $visitorIndex) {
175
+ break;
176
+ }
177
+ }
178
+ }
179
+ }
180
+
181
+ return $node;
182
+ }
183
+
184
+ /**
185
+ * Recursively traverse array (usually of nodes).
186
+ *
187
+ * @param array $nodes Array to traverse
188
+ *
189
+ * @return array Result of traversal (may be original array or changed one)
190
+ */
191
+ protected function traverseArray(array $nodes) : array {
192
+ $doNodes = [];
193
+
194
+ foreach ($nodes as $i => &$node) {
195
+ if ($node instanceof Node) {
196
+ $traverseChildren = true;
197
+ $breakVisitorIndex = null;
198
+
199
+ foreach ($this->visitors as $visitorIndex => $visitor) {
200
+ $return = $visitor->enterNode($node);
201
+ if (null !== $return) {
202
+ if ($return instanceof Node) {
203
+ $this->ensureReplacementReasonable($node, $return);
204
+ $node = $return;
205
+ } elseif (self::DONT_TRAVERSE_CHILDREN === $return) {
206
+ $traverseChildren = false;
207
+ } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) {
208
+ $traverseChildren = false;
209
+ $breakVisitorIndex = $visitorIndex;
210
+ break;
211
+ } elseif (self::STOP_TRAVERSAL === $return) {
212
+ $this->stopTraversal = true;
213
+ break 2;
214
+ } else {
215
+ throw new \LogicException(
216
+ 'enterNode() returned invalid value of type ' . gettype($return)
217
+ );
218
+ }
219
+ }
220
+ }
221
+
222
+ if ($traverseChildren) {
223
+ $node = $this->traverseNode($node);
224
+ if ($this->stopTraversal) {
225
+ break;
226
+ }
227
+ }
228
+
229
+ foreach ($this->visitors as $visitorIndex => $visitor) {
230
+ $return = $visitor->leaveNode($node);
231
+
232
+ if (null !== $return) {
233
+ if ($return instanceof Node) {
234
+ $this->ensureReplacementReasonable($node, $return);
235
+ $node = $return;
236
+ } elseif (\is_array($return)) {
237
+ $doNodes[] = [$i, $return];
238
+ break;
239
+ } elseif (self::REMOVE_NODE === $return) {
240
+ $doNodes[] = [$i, []];
241
+ break;
242
+ } elseif (self::STOP_TRAVERSAL === $return) {
243
+ $this->stopTraversal = true;
244
+ break 2;
245
+ } elseif (false === $return) {
246
+ throw new \LogicException(
247
+ 'bool(false) return from leaveNode() no longer supported. ' .
248
+ 'Return NodeTraverser::REMOVE_NODE instead'
249
+ );
250
+ } else {
251
+ throw new \LogicException(
252
+ 'leaveNode() returned invalid value of type ' . gettype($return)
253
+ );
254
+ }
255
+ }
256
+
257
+ if ($breakVisitorIndex === $visitorIndex) {
258
+ break;
259
+ }
260
+ }
261
+ } elseif (\is_array($node)) {
262
+ throw new \LogicException('Invalid node structure: Contains nested arrays');
263
+ }
264
+ }
265
+
266
+ if (!empty($doNodes)) {
267
+ while (list($i, $replace) = array_pop($doNodes)) {
268
+ array_splice($nodes, $i, 1, $replace);
269
+ }
270
+ }
271
+
272
+ return $nodes;
273
+ }
274
+
275
+ private function ensureReplacementReasonable($old, $new) {
276
+ if ($old instanceof Node\Stmt && $new instanceof Node\Expr) {
277
+ throw new \LogicException(
278
+ "Trying to replace statement ({$old->getType()}) " .
279
+ "with expression ({$new->getType()}). Are you missing a " .
280
+ "Stmt_Expression wrapper?"
281
+ );
282
+ }
283
+
284
+ if ($old instanceof Node\Expr && $new instanceof Node\Stmt) {
285
+ throw new \LogicException(
286
+ "Trying to replace expression ({$old->getType()}) " .
287
+ "with statement ({$new->getType()})"
288
+ );
289
+ }
290
+ }
291
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface NodeTraverserInterface
6
+ {
7
+ /**
8
+ * Adds a visitor.
9
+ *
10
+ * @param NodeVisitor $visitor Visitor to add
11
+ */
12
+ public function addVisitor(NodeVisitor $visitor);
13
+
14
+ /**
15
+ * Removes an added visitor.
16
+ *
17
+ * @param NodeVisitor $visitor
18
+ */
19
+ public function removeVisitor(NodeVisitor $visitor);
20
+
21
+ /**
22
+ * Traverses an array of nodes using the registered visitors.
23
+ *
24
+ * @param Node[] $nodes Array of nodes
25
+ *
26
+ * @return Node[] Traversed array of nodes
27
+ */
28
+ public function traverse(array $nodes) : array;
29
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser;
4
+
5
+ interface NodeVisitor
6
+ {
7
+ /**
8
+ * Called once before traversal.
9
+ *
10
+ * Return value semantics:
11
+ * * null: $nodes stays as-is
12
+ * * otherwise: $nodes is set to the return value
13
+ *
14
+ * @param Node[] $nodes Array of nodes
15
+ *
16
+ * @return null|Node[] Array of nodes
17
+ */
18
+ public function beforeTraverse(array $nodes);
19
+
20
+ /**
21
+ * Called when entering a node.
22
+ *
23
+ * Return value semantics:
24
+ * * null
25
+ * => $node stays as-is
26
+ * * NodeTraverser::DONT_TRAVERSE_CHILDREN
27
+ * => Children of $node are not traversed. $node stays as-is
28
+ * * NodeTraverser::STOP_TRAVERSAL
29
+ * => Traversal is aborted. $node stays as-is
30
+ * * otherwise
31
+ * => $node is set to the return value
32
+ *
33
+ * @param Node $node Node
34
+ *
35
+ * @return null|int|Node Replacement node (or special return value)
36
+ */
37
+ public function enterNode(Node $node);
38
+
39
+ /**
40
+ * Called when leaving a node.
41
+ *
42
+ * Return value semantics:
43
+ * * null
44
+ * => $node stays as-is
45
+ * * NodeTraverser::REMOVE_NODE
46
+ * => $node is removed from the parent array
47
+ * * NodeTraverser::STOP_TRAVERSAL
48
+ * => Traversal is aborted. $node stays as-is
49
+ * * array (of Nodes)
50
+ * => The return value is merged into the parent array (at the position of the $node)
51
+ * * otherwise
52
+ * => $node is set to the return value
53
+ *
54
+ * @param Node $node Node
55
+ *
56
+ * @return null|int|Node|Node[] Replacement node (or special return value)
57
+ */
58
+ public function leaveNode(Node $node);
59
+
60
+ /**
61
+ * Called once after traversal.
62
+ *
63
+ * Return value semantics:
64
+ * * null: $nodes stays as-is
65
+ * * otherwise: $nodes is set to the return value
66
+ *
67
+ * @param Node[] $nodes Array of nodes
68
+ *
69
+ * @return null|Node[] Array of nodes
70
+ */
71
+ public function afterTraverse(array $nodes);
72
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitorAbstract;
7
+
8
+ /**
9
+ * Visitor cloning all nodes and linking to the original nodes using an attribute.
10
+ *
11
+ * This visitor is required to perform format-preserving pretty prints.
12
+ */
13
+ class CloningVisitor extends NodeVisitorAbstract
14
+ {
15
+ public function enterNode(Node $origNode) {
16
+ $node = clone $origNode;
17
+ $node->setAttribute('origNode', $origNode);
18
+ return $node;
19
+ }
20
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeVisitorAbstract;
7
+
8
+ /**
9
+ * This visitor can be used to find and collect all nodes satisfying some criterion determined by
10
+ * a filter callback.
11
+ */
12
+ class FindingVisitor extends NodeVisitorAbstract
13
+ {
14
+ /** @var callable Filter callback */
15
+ protected $filterCallback;
16
+ /** @var Node[] Found nodes */
17
+ protected $foundNodes;
18
+
19
+ public function __construct(callable $filterCallback) {
20
+ $this->filterCallback = $filterCallback;
21
+ }
22
+
23
+ /**
24
+ * Get found nodes satisfying the filter callback.
25
+ *
26
+ * Nodes are returned in pre-order.
27
+ *
28
+ * @return Node[] Found nodes
29
+ */
30
+ public function getFoundNodes() : array {
31
+ return $this->foundNodes;
32
+ }
33
+
34
+ public function beforeTraverse(array $nodes) {
35
+ $this->foundNodes = [];
36
+
37
+ return null;
38
+ }
39
+
40
+ public function enterNode(Node $node) {
41
+ $filterCallback = $this->filterCallback;
42
+ if ($filterCallback($node)) {
43
+ $this->foundNodes[] = $node;
44
+ }
45
+
46
+ return null;
47
+ }
48
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\Node;
6
+ use PhpParser\NodeTraverser;
7
+ use PhpParser\NodeVisitorAbstract;
8
+
9
+ /**
10
+ * This visitor can be used to find the first node satisfying some criterion determined by
11
+ * a filter callback.
12
+ */
13
+ class FirstFindingVisitor extends NodeVisitorAbstract
14
+ {
15
+ /** @var callable Filter callback */
16
+ protected $filterCallback;
17
+ /** @var null|Node Found node */
18
+ protected $foundNode;
19
+
20
+ public function __construct(callable $filterCallback) {
21
+ $this->filterCallback = $filterCallback;
22
+ }
23
+
24
+ /**
25
+ * Get found node satisfying the filter callback.
26
+ *
27
+ * Returns null if no node satisfies the filter callback.
28
+ *
29
+ * @return null|Node Found node (or null if not found)
30
+ */
31
+ public function getFoundNode() {
32
+ return $this->foundNode;
33
+ }
34
+
35
+ public function beforeTraverse(array $nodes) {
36
+ $this->foundNode = null;
37
+
38
+ return null;
39
+ }
40
+
41
+ public function enterNode(Node $node) {
42
+ $filterCallback = $this->filterCallback;
43
+ if ($filterCallback($node)) {
44
+ $this->foundNode = $node;
45
+ return NodeTraverser::STOP_TRAVERSAL;
46
+ }
47
+
48
+ return null;
49
+ }
50
+ }
vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php declare(strict_types=1);
2
+
3
+ namespace PhpParser\NodeVisitor;
4
+
5
+ use PhpParser\ErrorHandler;
6
+ use PhpParser\NameContext;
7
+ use PhpParser\Node;
8
+ use PhpParser\Node\Expr;
9
+ use PhpParser\Node\Name;
10
+ use PhpParser\Node\Name\FullyQualified;
11
+ use PhpParser\Node\Stmt;
12
+ use PhpParser\NodeVisitorAbstract;
13
+
14
+ class NameResolver extends NodeVisitorAbstract
15
+ {
16
+ /** @var NameContext Naming context */
17
+ protected $nameContext;
18
+
19
+ /** @var bool Whether to preserve original names */
20
+ protected $preserveOriginalNames;
21
+
22
+ /** @var bool Whether to replace resolved nodes in place, or to add resolvedNode attributes */
23
+ protected $replaceNodes;
24
+
25
+ /**
26
+ * Constructs a name resolution visitor.
27
+ *
28
+ * Options:
29
+ * * preserveOriginalNames (default false): An "originalName" attribute will be added to
30
+ * all name nodes that underwent resolution.
31
+ * * replaceNodes (default true): Resolved names are replaced in-place. Otherwise, a
32
+ * resolvedName attribute is added. (Names that cannot be statically resolved receive a
33
+ * namespacedName attribute, as usual.)
34
+ *
35
+ * @param ErrorHandler|null $errorHandler Error handler
36
+ * @param array $options Options
37
+ */
38
+ public function __construct(ErrorHandler $errorHandler = null, array $options = []) {
39
+ $this->nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing);
40
+ $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? false;
41
+ $this->replaceNodes = $options['replaceNodes'] ?? true;
42
+ }
43
+
44
+ /**
45
+ * Get name resolution context.
46
+ *
47
+ * @return NameContext
48
+ */
49
+ public function getNameContext() : NameContext {
50
+ return $this->nameContext;
51
+ }
52
+
53
+ public function beforeTraverse(array $nodes) {
54
+ $this->nameContext->startNamespace();
55
+ return null;
56
+ }
57
+
58
+ public function enterNode(Node $node) {
59
+ if ($node instanceof Stmt\Namespace_) {
60
+ $this->nameContext->startNamespace($node->name);
61
+ } elseif ($node instanceof Stmt\Use_) {
62
+ foreach ($node->uses as $use) {
63
+ $this->addAlias($use, $node->type, null);
64
+ }
65
+ } elseif ($node instanceof Stmt\GroupUse) {
66
+ foreach ($node->uses as $use) {
67
+ $this->addAlias($use, $node->type, $node->prefix);
68
+ }
69
+ } elseif ($node instanceof Stmt\Class_) {
70
+ if (null !== $node->extends) {
71
+ $node->extends = $this->resolveClassName($node->extends);
72
+ }
73
+
74
+ foreach ($node->implements as &$interface) {
75
+ $interface = $this->resolveClassName($interface);
76
+ }
77
+
78
+ if (null !== $node->name) {
79
+ $this->addNamespacedName($node);
80
+ }
81
+ } elseif ($node instanceof Stmt\Interface_) {
82
+ foreach ($node->extends as &$interface) {
83
+ $interface = $this->resolveClassName($interface);
84
+ }
85
+
86
+ $this->addNamespacedName($node);
87
+ } elseif ($node instanceof Stmt\Trait_) {
88
+ $this->addNamespacedName($node);
89
+ } elseif ($node instanceof Stmt\Function_) {
90
+ $this->addNamespacedName($node);
91
+ $this->resolveSignature($node);
92
+ } elseif ($node instanceof Stmt\ClassMethod
93
+ || $node instanceof Expr\Closure
94
+ || $node instanceof Expr\ArrowFunction
95
+ ) {
96
+ $this->resolveSignature($node);
97
+ } elseif ($node instanceof Stmt\Property) {
98
+ if (null !== $node->type) {
99
+ $node->type = $this->resolveType($node->type);
100
+ }
101
+ } elseif ($node instanceof Stmt\Const_) {
102
+ foreach ($node->consts as $const) {
103
+ $this->addNamespacedName($const);
104
+ }
105
+ } elseif ($node instanceof Expr\StaticCall
106
+ || $node instanceof Expr\StaticPropertyFetch
107
+ || $node instanceof Expr\ClassConstFetch
108
+ || $node instanceof Expr\New_
109
+ || $node instanceof Expr\Instanceof_
110
+ ) {
111
+ if ($node->class instanceof Name) {
112
+ $node->class = $this->resolveClassName($node->class);
113
+ }
114
+ } elseif ($node instanceof Stmt\Catch_) {
115
+ foreach ($node->types as &$type) {
116
+ $type = $this->resolveClassName($type);
117
+ }
118
+ } elseif ($node instanceof Expr\FuncCall) {
119
+ if ($node->name instanceof Name) {
120
+ $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION);
121
+ }
122
+ } elseif ($node instanceof Expr\ConstFetch) {
123
+ $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT);
124
+ } elseif ($node instanceof Stmt\TraitUse) {
125
+ foreach ($node->traits as &$trait) {
126
+ $trait = $this->resolveClassName($trait);
127
+ }
128
+
129
+ foreach ($node->adaptations as $adaptation) {
130
+ if (null !== $adaptation->trait) {
131
+ $adaptation->trait = $this->resolveClassName($adaptation->trait);
132
+ }
133
+
134
+ if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) {
135
+ foreach ($adaptation->insteadof as &$insteadof) {
136
+ $insteadof = $this->resolveClassName($insteadof);
137
+ }
138
+ }
139
+ }
140
+ }
141
+
142
+ return null;
143
+ }
144
+
145
+ private function addAlias(Stmt\UseUse $use, $type, Name $prefix = null) {
146
+ // Add prefix for group uses
147
+ $name = $prefix ? Name::concat($prefix, $use->name) : $use->name;
148
+ // Type is determined either by individual element or whole use declaration
149
+ $type |= $use->type;
150
+
151
+ $this->nameContext->addAlias(
152
+ $name, (string) $use->getAlias(), $type, $use->getAttributes()
153
+ );
154
+ }
155
+
156
+ /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure $node */
157
+ private function resolveSignature($node) {
158
+ foreach ($node->params as $param) {
159
+ $param->type = $this->resolveType($param->type);
160
+ }
161
+ $node->returnType = $this->resolveType($node->returnType);
162
+ }
163
+
164
+ private function resolveType($node) {
165
+ if ($node instanceof Name) {
166
+ return $this->resolveClassName($node);
167
+ }
168
+ if ($node instanceof Node\NullableType) {
169
+ $node->type = $this->resolveType($node->type);
170
+ return $node;
171
+ }
172
+ if ($node instanceof Node\UnionType) {
173
+ foreach ($node->types as &$type) {
174
+ $type = $this->resolveType($type);
175
+ }
176
+ return $node;
177
+ }
178
+ return $node;
179
+ }
180
+
181
+ /**
182
+ * Resolve name, according to name resolver options.
183
+ *
184
+ * @param Name $name Function or constant name to resolve
185
+ * @param int $type One of Stmt\Use_::TYPE_*
186
+ *
187
+ * @return Name Resolved name, or original name with